|
73 | 73 |
|
74 | 74 | _DEVICE_BREAK_RESET_TIMEOUT = 10 # seconds |
75 | 75 | _DEVICE_CONNECTION_RETRIES = 3 |
76 | | -_DEVICE_RESET_TIMEOUT = 3 # seconds |
77 | 76 |
|
78 | 77 | _ERROR_BOOTLOADER_MODE = "Could not enter in bootloader mode" |
79 | 78 | _ERROR_COMPATIBILITY_NUMBER = "Device compatibility number (%d) is greater than the firmware one (%d)" |
@@ -998,14 +997,21 @@ def _check_bootloader_update_required(self): |
998 | 997 |
|
999 | 998 | return False |
1000 | 999 |
|
| 1000 | + @abstractmethod |
| 1001 | + def _get_default_reset_timeout(self): |
| 1002 | + """ |
| 1003 | + Returns the default timeout to wait for reset. |
| 1004 | + """ |
| 1005 | + pass |
| 1006 | + |
1001 | 1007 | def _wait_for_target_reset(self): |
1002 | 1008 | """ |
1003 | 1009 | Waits for the device to reset using the xml firmware file specified timeout or the default one. |
1004 | 1010 | """ |
1005 | 1011 | if self._xml_update_timeout_ms is not None: |
1006 | 1012 | time.sleep(self._xml_update_timeout_ms / 1000.0) |
1007 | 1013 | else: |
1008 | | - time.sleep(_DEVICE_RESET_TIMEOUT) |
| 1014 | + time.sleep(self._get_default_reset_timeout()) |
1009 | 1015 |
|
1010 | 1016 | def update_firmware(self): |
1011 | 1017 | """ |
@@ -1163,6 +1169,8 @@ class _LocalFirmwareUpdater(_XBeeFirmwareUpdater): |
1163 | 1169 | Helper class used to handle the local firmware update process. |
1164 | 1170 | """ |
1165 | 1171 |
|
| 1172 | + __DEVICE_RESET_TIMEOUT = 3 # seconds |
| 1173 | + |
1166 | 1174 | def __init__(self, target, xml_firmware_file, xbee_firmware_file=None, bootloader_firmware_file=None, |
1167 | 1175 | timeout=_READ_DATA_TIMEOUT, progress_callback=None): |
1168 | 1176 | """ |
@@ -1691,12 +1699,25 @@ def _transfer_firmware_file_xmodem(self, firmware_file_path): |
1691 | 1699 | except XModemException as e: |
1692 | 1700 | raise FirmwareUpdateException(str(e)) |
1693 | 1701 |
|
| 1702 | + def _get_default_reset_timeout(self): |
| 1703 | + """ |
| 1704 | + Override. |
| 1705 | +
|
| 1706 | + .. seealso:: |
| 1707 | + | :meth:`._XBeeFirmwareUpdater._get_default_reset_timeout` |
| 1708 | + """ |
| 1709 | + return self.__class__.__DEVICE_RESET_TIMEOUT |
| 1710 | + |
1694 | 1711 |
|
1695 | 1712 | class _RemoteFirmwareUpdater(_XBeeFirmwareUpdater): |
1696 | 1713 | """ |
1697 | 1714 | Helper class used to handle the remote firmware update process. |
1698 | 1715 | """ |
1699 | 1716 |
|
| 1717 | + __DEVICE_RESET_TIMEOUT_ZB = 3 # seconds |
| 1718 | + __DEVICE_RESET_TIMEOUT_DM = 20 # seconds |
| 1719 | + __DEVICE_RESET_TIMEOUT_802 = 28 # seconds |
| 1720 | + |
1700 | 1721 | def __init__(self, remote_device, xml_firmware_file, ota_firmware_file=None, otb_firmware_file=None, |
1701 | 1722 | timeout=_READ_DATA_TIMEOUT, progress_callback=None): |
1702 | 1723 | """ |
@@ -2499,6 +2520,25 @@ def _finish_firmware_update(self): |
2499 | 2520 | else: |
2500 | 2521 | self._exit_with_error(_ERROR_SEND_UPGRADE_END_RESPONSE % "Timeout sending frame") |
2501 | 2522 |
|
| 2523 | + def _get_default_reset_timeout(self): |
| 2524 | + """ |
| 2525 | + Override. |
| 2526 | +
|
| 2527 | + .. seealso:: |
| 2528 | + | :meth:`._XBeeFirmwareUpdater._get_default_reset_timeout` |
| 2529 | + """ |
| 2530 | + protocol = self._remote_device.get_protocol() |
| 2531 | + if protocol == XBeeProtocol.ZIGBEE: |
| 2532 | + return self.__class__.__DEVICE_RESET_TIMEOUT_ZB |
| 2533 | + elif protocol == XBeeProtocol.DIGI_MESH: |
| 2534 | + return self.__class__.__DEVICE_RESET_TIMEOUT_DM |
| 2535 | + elif protocol == XBeeProtocol.RAW_802_15_4: |
| 2536 | + return self.__class__.__DEVICE_RESET_TIMEOUT_802 |
| 2537 | + |
| 2538 | + return max([self.__class__.__DEVICE_RESET_TIMEOUT_ZB, |
| 2539 | + self.__class__.__DEVICE_RESET_TIMEOUT_DM, |
| 2540 | + self.__class__.__DEVICE_RESET_TIMEOUT_802]) |
| 2541 | + |
2502 | 2542 |
|
2503 | 2543 | def update_local_firmware(target, xml_firmware_file, xbee_firmware_file=None, bootloader_firmware_file=None, |
2504 | 2544 | timeout=None, progress_callback=None): |
|
0 commit comments