class AndroidCtl(IutCtl): def __init__(self, serial_num, host=None, port=None): log("%s.%s serial_num=%s host=%s port=%s", self.__class__, self.__init__.__name__, serial_num, host, port) self.serial_num = serial_num if host: self.host = host else: self.host = _adb_get_ip(self.serial_num) if port: self.port = port else: self.port = self.PORT_DEFAULT self._btp_socket = None self._btp_worker = None # self.log_filename = "iut-mynewt-{}.log".format(id) # self.log_file = open(self.log_filename, "w") self._stack = Stack() self._stack.set_pairing_consent_cb( lambda addr: _adb_tap_ok(self.serial_num)) self._stack.set_passkey_confirm_cb( lambda addr, match: _adb_tap_ok(self.serial_num)) self._event_handler = BTPEventHandler(self) @property def PORT_DEFAULT(self): return 8765 @property def btp_worker(self): return self._btp_worker @property def event_handler(self): return self._event_handler @property def stack(self): return self._stack def start(self): log("%s.%s", self.__class__, self.start.__name__) self._btp_socket = BTPWebSocket(self.host, self.port) self._btp_worker = BTPWorker(self._btp_socket, 'RxWorkerAndroid-' + self.serial_num) self._btp_worker.open() self._btp_worker.register_event_handler(self._event_handler) self._btp_worker.accept() def reset(self): # When pairing with newer Android versions the pairing is confirmed # using a notification instead of a popup window. We are not able to # parse this notification. To work around it we open Bluetooth # settings activity. When in this activity Android displays # the popup window instead of the notification. _adb_open_bluetooth_settings(self.serial_num) pass def wait_iut_ready_event(self): self.reset() tuple_hdr, tuple_data = self._btp_worker.read() try: if (tuple_hdr.svc_id != defs.BTP_SERVICE_ID_CORE or tuple_hdr.op != defs.CORE_EV_IUT_READY): raise BTPError("Failed to get ready event") except BTPError as err: log("Unexpected event received (%s), expected IUT ready!", err) self.stop() else: log("IUT ready event received OK") def stop(self): log("%s.%s", self.__class__, self.stop.__name__) if self._btp_worker: self._btp_worker.close() self._btp_worker = None self._btp_socket = None
class AndroidCtl(IutCtl): def __init__(self, host, port): log("%s.%s host=%s port=%s", self.__class__, self.__init__.__name__, host, port) self.host = host self.port = port self._btp_socket = None self._btp_worker = None # self.log_filename = "iut-mynewt-{}.log".format(id) # self.log_file = open(self.log_filename, "w") self._stack = Stack() self._stack.set_pairing_consent_cb(_pairing_consent) self._stack.set_passkey_confirm_cb(_passkey_confirm) self._event_handler = BTPEventHandler(self) @property def btp_worker(self): return self._btp_worker @property def event_handler(self): return self._event_handler @property def stack(self): return self._stack def start(self): log("%s.%s", self.__class__, self.start.__name__) self._btp_socket = BTPWebSocket(self.host, self.port) self._btp_worker = BTPWorker(self._btp_socket, 'RxWorkerAndroid-' + self.host) self._btp_worker.open() self._btp_worker.register_event_handler(self._event_handler) self._btp_worker.accept() def reset(self): pass def wait_iut_ready_event(self): self.reset() tuple_hdr, tuple_data = self._btp_worker.read() try: if (tuple_hdr.svc_id != defs.BTP_SERVICE_ID_CORE or tuple_hdr.op != defs.CORE_EV_IUT_READY): raise BTPError("Failed to get ready event") except BTPError as err: log("Unexpected event received (%s), expected IUT ready!", err) self.stop() else: log("IUT ready event received OK") def stop(self): log("%s.%s", self.__class__, self.stop.__name__) if self._btp_worker: self._btp_worker.close() self._btp_worker = None self._btp_socket = None