def listen_socket(self, port): at_command_val = "%d,%s" % (self.socket_identifier, port) self.listen_socket_identifier = self.socket_identifier ok, _ = self.set('+USOLI', at_command_val, timeout=5) if ok != ModemResult.OK: self.logger.error('Failed to listen socket') raise NetworkError('Failed to listen socket')
def handleURC(self, urc): if urc.startswith('+QIOPEN: '): response_list = urc.lstrip('+QIOPEN: ').split(',') socket_identifier = int(response_list[0]) err = int(response_list[-1]) if err == 0: self.urc_state = Modem.SOCKET_WRITE_STATE self.socket_identifier = socket_identifier else: self.logger.error('Failed to open socket') raise NetworkError('Failed to open socket') return if urc.startswith('+QIURC: '): response_list = urc.lstrip('+QIURC: ').split(',') urctype = response_list[0] if urctype == '\"recv\"': self.urc_state = Modem.SOCKET_SEND_READ self.socket_identifier = int(response_list[1]) self.last_read_payload_length = int(response_list[2]) self.urc_response = self._readline_from_serial_port(5) if urctype == '\"closed\"': self.urc_state = Modem.SOCKET_CLOSED self.socket_identifier = int(response_list[-1]) return super().handleURC(urc)
def connect_socket(self, host, port): at_command_val = "%d,\"%s\",%s" % (self.socket_identifier, host, port) ok, _ = self.set('+USOCO', at_command_val, timeout=122) if ok != ModemResult.OK: self.logger.error('Failed to connect socket') raise NetworkError('Failed to connect socket') else: self.logger.info('Connect socket is successful')
def write_socket(self, data): self.enable_hex_mode() value = '%d,%s,\"%s\"' % (self.socket_identifier, len(data), binascii.hexlify(data)) ok, _ = self.set('+USOWR', value, timeout=10) if ok != ModemResult.OK: self.logger.error('Failed to write to socket') raise NetworkError('Failed to write socket') self.disable_hex_mode()
def write_socket(self, data): hexdata = binascii.hexlify(data) # We have to do it in chunks of 510 since 512 is actually too long (CMEE error) # and we need 2n chars for hexified data for chunk in self._chunks(hexdata, 510): value = '%d,\"%s\"' % (self.socket_identifier, chunk.decode()) ok, _ = self.set('+QISENDEX', value, timeout=10) if ok != ModemResult.OK: self.logger.error('Failed to write to socket') raise NetworkError('Failed to write to socket')
def _set_up_pdp_context(self): if self._is_pdp_context_active(): return True self.logger.info('Setting up PDP context') self.set('+QICSGP', f'1,1,\"{self._apn}\",\"\",\"\",1') ok, _ = self.set('+QIACT', '1', timeout=30) if ok != ModemResult.OK: self.logger.error('PDP Context setup failed') raise NetworkError('Failed PDP context setup') else: self.logger.info('PDP context active')
def _set_up_pdp_context(self): if self._is_pdp_context_active(): return True self.logger.info('Setting up PDP context') self.set('+UPSD', '0,1,\"hologram\"') self.set('+UPSD', '0,7,\"0.0.0.0\"') ok, _ = self.set('+UPSDA', '0,3', timeout=30) if ok != ModemResult.OK: self.logger.error('PDP Context setup failed') raise NetworkError('Failed PDP context setup') else: self.logger.info('PDP context active')
def network(self, network, modem=None): if not network: # non-network mode self.networkConnected() self._network = None elif network not in self._networkHandlers: raise NetworkError('Invalid network type: %s' % network) else: self.__enforce_network_privileges() self._network = self._networkHandlers[network](self.event) if network == 'cellular': if modem is not None: self._network.modem = modem else: self._network.autodetect_modem()
def write_socket(self, data): self.enable_hex_mode() hexdata = binascii.hexlify(data) # We have to do it in chunks of 510 since 512 is actually too long (CMEE error) # and we need 2n chars for hexified data for chunk in self._chunks(hexdata, 510): value = b'%d,%d,\"%s\"' % (self.socket_identifier, len(binascii.unhexlify(chunk)), chunk) ok, _ = self.set('+USOWR', value, timeout=10) if ok != ModemResult.OK: self.logger.error('Failed to write to socket') raise NetworkError('Failed to write socket') self.disable_hex_mode()
def network(self, network, modem=None): if not network: # non-network mode self.networkConnected() self._network = None elif network not in self._networkHandlers: raise NetworkError('Invalid network type: %s' % network) else: self.__enforce_network_privileges() self._network = self._networkHandlers[network](self.event) if network == 'cellular': if modem is not None: self._network.modem = modem else: try: self._network.autodetect_modem() except NetworkError as e: self.logger.info("No modem found. Loading drivers and retrying") self._network.load_modem_drivers() self._network.autodetect_modem()
def autodetect_modem(self): # scan for a modem and set it if found dev_devices = self._scan_for_modems() if dev_devices is None: raise NetworkError('Modem not detected') self.modem = dev_devices[0]
def modem(self, modem): if modem not in self._modemHandlers: raise NetworkError('Invalid modem type: %s' % modem) else: self._modem = self._modemHandlers[modem](event=self.event)