def is_op_mode_valid(self, value): """ Returns `True` if the provided value is a valid operating mode for the library. Args: value (Bytearray): The value to check. Returns: Boolean: `True` for a valid value, `False` otherwise. """ op_mode_value = utils.bytes_to_int(value) op_mode = OperatingMode.get(op_mode_value) if op_mode not in (OperatingMode.API_MODE, OperatingMode.ESCAPED_API_MODE): self._log.error( "Operating mode '%d' (%s) not set not to loose XBee connection", op_mode_value, op_mode.description if op_mode else "Unknown") return False return True
def _refresh_serial_params(self, node, parameter, value, apply=True): """ Refreshes the proper cached parameter depending on `parameter` value. If `parameter` is not a cached parameter, this method does nothing. Args: node (:class:`.AbstractXBeeDevice`): The XBee to refresh. parameter (String): the parameter to refresh its value. value (Bytearray): the new value of the parameter. apply (Boolean, optional, default=`True`): `True` to apply immediately, `False` otherwise. Returns: Boolean: `True` if a network event must be sent, `False` otherwise. """ node_fut_apply = self._future_apply.get(str(node.get_64bit_addr()), {}) if parameter == ATStringCommand.AP.command: new_op_mode = OperatingMode.get(utils.bytes_to_int(value)) changed = bool(new_op_mode != node.operating_mode and new_op_mode in (OperatingMode.API_MODE, OperatingMode.ESCAPED_API_MODE)) if changed and apply: node._operating_mode = new_op_mode node_fut_apply.pop(parameter, None) elif changed: node_fut_apply.update({parameter: value}) return changed and apply if not node.serial_port or parameter not in ( ATStringCommand.BD.command, ATStringCommand.NB.command, ATStringCommand.SB.command): return False if parameter == ATStringCommand.BD.command: from digi.xbee.profile import FirmwareBaudrate new_bd = utils.bytes_to_int(value) baudrate = FirmwareBaudrate.get(new_bd) new_bd = baudrate.baudrate if baudrate else new_bd changed = new_bd != node.serial_port.baudrate parameter = "baudrate" if changed and apply else parameter value = new_bd if changed and apply else value elif parameter == ATStringCommand.NB.command: from digi.xbee.profile import FirmwareParity new_parity = FirmwareParity.get(utils.bytes_to_int(value)) new_parity = new_parity.parity if new_parity else None changed = new_parity != node.serial_port.parity parameter = "parity" if changed and apply else parameter value = new_parity if changed and apply else value else: from digi.xbee.profile import FirmwareStopbits new_sbits = FirmwareStopbits.get(utils.bytes_to_int(value)) new_sbits = new_sbits.stop_bits if new_sbits else None changed = new_sbits != node.serial_port.stopbits parameter = "stopbits" if changed and apply else parameter value = new_sbits if changed and apply else value if changed and apply: node.serial_port.apply_settings({parameter: value}) node_fut_apply.pop(parameter, None) elif changed: node_fut_apply.update({parameter: value}) return False