1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import crcmod, copy, struct, sys, os, fcntl
- from datetime import datetime
- from serial import *
- import socket
- import debug
- class PortgwSerial(object):
- def __init__(self, _serial_port, _baudrate, _bytesize=8,
- _parity='N', _stopbits=1):
- self.serial_port = _serial_port
- self.baudrate = _baudrate
- self.bytesize = _bytesize
- self.parity = _parity
- self.stopbits = _stopbits
- self.serial_resume()
- self.name = "UART"
- def serial_pause(self):
- if self.serial != None:
- self.serial.close()
- self.serial = None
- def serial_resume(self):
- self.serial = serial_for_url(self.serial_port, self.baudrate, bytesize=self.bytesize,
- parity=self.parity, stopbits=self.stopbits, rtscts=False, xonxoff=False, timeout=0.12)
- return self.serial != None
- def open(self):
- if self.serial == None:
- return self.serial_resume()
- else:
- return True
- def close(self):
- self.serial_pause()
- def read(self, nbytes, timeout = 1):
- data = ''
- self.serial.timeout = timeout
- while len(data) < nbytes:
- ret = self.serial.read(nbytes)
- if len(ret) == 0:
- break
- data += ret
- return data
- def write(self, data):
- self.serial.flushInput()
- self.serial.flushOutput()
- ret = self.serial.write(data)
- # self.serial.flush()
- return ret
- class PortgwTcp(object):
- def __init__(self, _ip, _port):
- self.ip = _ip
- self.port = _port
- self.name = "TCP"
- def open(self):
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- self.sock.connect((self.ip, self.port))
- # fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK)
- except socket.error, e:
- print "\r\nConnection to %s:%s failed. Exit" %(self.ip, self.port)
- return False
- time.sleep(0.1)
- return True
- def close(self):
- self.sock.close()
- def read(self, nbytes, timeout = 1):
- data = ''
- self.sock.settimeout(timeout)
- while len(data) < nbytes:
- try:
- ret = self.sock.recv(nbytes)
- except socket.error, e:
- err = e.args[0]
- if err == 'timed out':
- break
- data += ret
- return data
- def write(self, data):
- sent = self.sock.send(data)
- if sent == 0:
- raise RuntimeError("socket connection broken")
- return sent
|