transport.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import crcmod, copy, struct, sys, os, fcntl
  2. from datetime import datetime
  3. from serial import *
  4. import socket
  5. import debug
  6. class PortgwSerial(object):
  7. def __init__(self, _serial_port, _baudrate, _bytesize=8,
  8. _parity='N', _stopbits=1):
  9. self.serial_port = _serial_port
  10. self.baudrate = _baudrate
  11. self.bytesize = _bytesize
  12. self.parity = _parity
  13. self.stopbits = _stopbits
  14. self.serial_resume()
  15. self.name = "UART"
  16. def serial_pause(self):
  17. if self.serial != None:
  18. self.serial.close()
  19. self.serial = None
  20. def serial_resume(self):
  21. self.serial = serial_for_url(self.serial_port, self.baudrate, bytesize=self.bytesize,
  22. parity=self.parity, stopbits=self.stopbits, rtscts=False, xonxoff=False, timeout=0.12)
  23. return self.serial != None
  24. def open(self):
  25. if self.serial == None:
  26. return self.serial_resume()
  27. else:
  28. return True
  29. def close(self):
  30. self.serial_pause()
  31. def read(self, nbytes, timeout = 1):
  32. data = ''
  33. self.serial.timeout = timeout
  34. while len(data) < nbytes:
  35. ret = self.serial.read(nbytes)
  36. if len(ret) == 0:
  37. break
  38. data += ret
  39. return data
  40. def write(self, data):
  41. self.serial.flushInput()
  42. self.serial.flushOutput()
  43. ret = self.serial.write(data)
  44. # self.serial.flush()
  45. return ret
  46. class PortgwTcp(object):
  47. def __init__(self, _ip, _port):
  48. self.ip = _ip
  49. self.port = _port
  50. self.name = "TCP"
  51. def open(self):
  52. self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  53. try:
  54. self.sock.connect((self.ip, self.port))
  55. # fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK)
  56. except socket.error, e:
  57. print "\r\nConnection to %s:%s failed. Exit" %(self.ip, self.port)
  58. return False
  59. time.sleep(0.1)
  60. return True
  61. def close(self):
  62. self.sock.close()
  63. def read(self, nbytes, timeout = 1):
  64. data = ''
  65. self.sock.settimeout(timeout)
  66. while len(data) < nbytes:
  67. try:
  68. ret = self.sock.recv(nbytes)
  69. except socket.error, e:
  70. err = e.args[0]
  71. if err == 'timed out':
  72. break
  73. data += ret
  74. return data
  75. def write(self, data):
  76. sent = self.sock.send(data)
  77. if sent == 0:
  78. raise RuntimeError("socket connection broken")
  79. return sent