1717
1818
1919from collections import deque
20- import binascii
2120import datetime
22- import logging
2321import os
2422import serial
2523from serial .tools import list_ports
@@ -289,82 +287,29 @@ def _read_and_append_message_receive_buffer(self, socket_identifier, payload_len
289287 self .close_socket (socket_identifier = socket_identifier )
290288
291289 def create_socket (self ):
292- op = self ._basic_set ('+USOCR' , '6' , strip_val = False )
293- if op is not None :
294- self .socket_identifier = int (op )
290+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
295291
296292 # REQUIRES: The host and port.
297293 # EFFECTS: Issues an AT command to connect to the specified socket identifier.
298294 def connect_socket (self , host , port ):
299- at_command_val = "%d,\" %s\" ,%s" % (self .socket_identifier , host , port )
300- ok , _ = self .set ('+USOCO' , at_command_val , timeout = 20 )
301- if ok != ModemResult .OK :
302- self .logger .error ('Failed to connect socket' )
303- raise NetworkError ('Failed to connect socket' )
304- else :
305- self .logger .info ('Connect socket is successful' )
295+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
306296
307297 def listen_socket (self , port ):
308- at_command_val = "%d,%s" % (self .socket_identifier , port )
309- self .listen_socket_identifier = self .socket_identifier
310- ok , _ = self .set ('+USOLI' , at_command_val , timeout = 5 )
311- if ok != ModemResult .OK :
312- self .logger .error ('Failed to listen socket' )
313- raise NetworkError ('Failed to listen socket' )
298+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
314299
315300 def write_socket (self , data ):
316- self .enable_hex_mode ()
317- hexdata = binascii .hexlify (data )
318- # We have to do it in chunks of 510 since 512 is actually too long (CMEE error)
319- # and we need 2n chars for hexified data
320- for chunk in self ._chunks (hexdata , 510 ):
321- value = b'%d,%d,\" %s\" ' % (self .socket_identifier ,
322- len (binascii .unhexlify (chunk )),
323- chunk )
324- ok , _ = self .set ('+USOWR' , value , timeout = 10 )
325- if ok != ModemResult .OK :
326- self .logger .error ('Failed to write to socket' )
327- raise NetworkError ('Failed to write socket' )
328- self .disable_hex_mode ()
301+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
329302
330303 def _chunks (self , data , n ):
331304 """Yield successive n-sized chunks from lst."""
332305 for i in range (0 , len (data ), n ):
333306 yield data [i :i + n ]
334307
335308 def read_socket (self , socket_identifier = None , payload_length = None ):
336-
337- if socket_identifier is None :
338- socket_identifier = self .socket_identifier
339-
340- if payload_length is None :
341- payload_length = self .last_read_payload_length
342-
343- self .enable_hex_mode ()
344-
345- resp = self ._basic_set ('+USORD' , '%d,%d' % (socket_identifier , payload_length ))
346- if resp is not None :
347- resp = resp .strip ('"' )
348- bytedata = binascii .unhexlify (resp )
349- try :
350- resp = bytedata .decode ()
351- except :
352- # This is some sort of binary data that can't be decoded so just
353- # return the bytes. We might want to make this happen via parameter
354- # in the future so it is more deterministic
355- resp = bytedata
356-
357- self .disable_hex_mode ()
358- return resp
309+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
359310
360311 def close_socket (self , socket_identifier = None ):
361-
362- if socket_identifier is None :
363- socket_identifier = self .socket_identifier
364-
365- ok , r = self .set ('+USOCL' , "%s" % socket_identifier )
366- if ok != ModemResult .OK :
367- self .logger .info ('Failed to close socket' )
312+ raise NotImplementedError ("Modem does not have an AT Socket Mode" )
368313
369314 def debugwrite (self , x , hide = False ):
370315 if not hide :
@@ -672,40 +617,13 @@ def is_registered(self):
672617 pass
673618
674619 def _is_pdp_context_active (self ):
675- if not self .is_registered ():
676- return False
677-
678- ok , r = self .set ('+UPSND' , '0,8' )
679- if ok == ModemResult .OK :
680- try :
681- pdpstatus = int (r .lstrip ('UPSND: ' ).split (',' )[2 ])
682- # 1: PDP active
683- return pdpstatus == 1
684- except (IndexError , ValueError ) as e :
685- self .logger .error (repr (e ))
686620 return False
687621
688622 def _set_up_pdp_context (self ):
689- if self ._is_pdp_context_active (): return True
690- self .logger .info ('Setting up PDP context' )
691- self .set ('+UPSD' , f'0,1,\" { self ._apn } \" ' )
692- self .set ('+UPSD' , '0,7,\" 0.0.0.0\" ' )
693- ok , _ = self .set ('+UPSDA' , '0,3' , timeout = 30 )
694- if ok != ModemResult .OK :
695- self .logger .error ('PDP Context setup failed' )
696- raise NetworkError ('Failed PDP context setup' )
697- else :
698- self .logger .info ('PDP context active' )
623+ raise NotImplementedError ('Modem PDP context setup not implemented' )
699624
700625 def _tear_down_pdp_context (self ):
701- if not self ._is_pdp_context_active (): return True
702- self .logger .info ('Tearing down PDP context' )
703- ok , _ = self .set ('+UPSDA' , '0,4' , timeout = 30 )
704- if ok != ModemResult .OK :
705- self .logger .error ('PDP Context tear down failed' )
706- else :
707- self .logger .info ('PDP context deactivated' )
708-
626+ raise NotImplementedError ('Modem PDP context setup not implemented' )
709627
710628 def __enforce_serial_port_open (self ):
711629 if not (self .serial_port and self .serial_port .isOpen ()):
@@ -807,13 +725,10 @@ def enable_at_sockets_mode(self):
807725 pass
808726
809727 def enable_hex_mode (self ):
810- self . __set_hex_mode ( 1 )
728+ pass
811729
812730 def disable_hex_mode (self ):
813- self .__set_hex_mode (0 )
814-
815- def __set_hex_mode (self , enable_hex_mode ):
816- self .command ('+UDCONF' , '1,%d' % enable_hex_mode )
731+ pass
817732
818733 @property
819734 def serial_port (self ):
@@ -865,27 +780,12 @@ def at_sockets_available(self):
865780 return self ._at_sockets_available
866781
867782 @property
868- def modem_mode (self ):
869- mode_number = None
870- # trim:
871- # +UUSBCONF: 0,"",,"0x1102" -> 0
872- # +UUSBCONF: 2,"ECM",,"0x1104" -> 2
873- try :
874- ok , res = self .read ('+UUSBCONF' )
875- if ok == ModemResult .OK :
876- mode_number = int (res .lstrip ('+UUSBCONF: ' ).split (',' )[0 ])
877- except (IndexError , ValueError ) as e :
878- self .logger .error (repr (e ))
879- return mode_number
783+ def modem_usb_mode (self ):
784+ raise NotImplementedError ('This modem does not support this property' )
880785
881- @modem_mode .setter
882- def modem_mode (self , mode ):
883- self .set ('+UUSBCONF' , str (mode ))
884- self .logger .info ('Restarting modem' )
885- self .reset ()
886- self .logger .info ('Modem restarted' )
887- self .closeSerialPort ()
888- time .sleep (Modem .DEFAULT_MODEM_RESTART_TIME )
786+ @modem_usb_mode .setter
787+ def modem_usb_mode (self , mode ):
788+ raise NotImplementedError ('This modem does not support this property' )
889789
890790 @property
891791 def localIPAddress (self ):
@@ -903,7 +803,7 @@ def remoteIPAddress(self):
903803
904804 @property
905805 def version (self ):
906- raise NotImplementedError ( 'This modem does not support this property ' )
806+ return self . _basic_command ( 'I9 ' )
907807
908808 @property
909809 def imei (self ):
@@ -917,3 +817,5 @@ def apn(self):
917817 def apn (self , apn ):
918818 self ._apn = apn
919819 return self .set ('+CGDCONT' , f'1,"IP","{ self ._apn } "' )
820+
821+
0 commit comments