def fillSequence self throws ConnectionException if self isConnected r

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def fillSequence(self): #throws ConnectionException
if self.isConnected == 0: raise ConnectionException
sthHasBeenRead = 0
finstr = ''
#пока MDM.read() не вернет пустую строку считываем данные с серийного порта, пустая строка - значит данных в буфере нет
while 1:
tstr = MDM.read()
if (tstr == ''): break
sthHasBeenRead = 1
finstr = finstr + tstr
#если что-то прочиталось, ищем в том что прочиталось 'NO CARRIER', это ответ модема о том, что tcp разорвалось
if sthHasBeenRead:
if finstr.find('NO C') != -1:
#если есть 'NO CARRIER', - дисконнектимся и выкидываем исключение
self.disconnect()
raise ConnectionException
#добавляем в список полученную строку. sequence - это и есть список-буфер
for i in finstr: self.sequence.append(ord(i))
#этот блок считывает из буфера целое с кооличеством байт - argNumBytes
def readUnsignedDecimal(argNumBytes):
seqlen = len(self.sequence)
#если в буфере меньше 4х байт - заполняем буфер
if seqlen < 4: self.fillSequence()
#если в буфере байт меньше чем просят - выкидываем eof
if seqlen < argNumBytes: raise EOFError
result = 0
while argNumBytes != -1:
result = result + (self.sequence.pop(0) << ((argNumBytes-1)*8) )
argNumBytes = argNumBytes - 1
return result