예제 #1
0
 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')
예제 #2
0
 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)
예제 #3
0
 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')
예제 #4
0
    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()
예제 #5
0
 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')
예제 #6
0
 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')
예제 #7
0
 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')
예제 #8
0
 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()
예제 #9
0
 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()
예제 #10
0
 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()
예제 #11
0
 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]
예제 #12
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)