重构移动utils文件夹
This commit is contained in:
117
drivers/baseSerail.py
Normal file
117
drivers/baseSerail.py
Normal file
@@ -0,0 +1,117 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
import serial
|
||||
import time
|
||||
import binascii
|
||||
|
||||
# CRC16矩阵表;
|
||||
CRC_TABLE = [
|
||||
0x0000, 0x1021, 0x2042, 0x3063,
|
||||
0x4084, 0x50A5, 0x60C6, 0x70E7,
|
||||
0x8108, 0x9129, 0xA14A, 0xB16B,
|
||||
0xC18C, 0xD1AD, 0xE1CE, 0xF1EF ]
|
||||
|
||||
|
||||
# 计算CRC16值;
|
||||
def crc16(bys, bysLen):
|
||||
uwCRC, ucTemp = 0xFFFF, 0x00
|
||||
index = 0
|
||||
while index < bysLen:
|
||||
ucTemp = (uwCRC >> 0x0C) & 0xFF
|
||||
uwCRC <<= 4
|
||||
uwCRC ^= CRC_TABLE[ucTemp ^ ((bys[index]) >> 0x04)]
|
||||
uwCRC &= 0xFFFF
|
||||
ucTemp = (uwCRC >> 0x0C) & 0xFF
|
||||
uwCRC <<= 4
|
||||
uwCRC ^= CRC_TABLE[ucTemp ^ (bys[index] & 0x0F)]
|
||||
uwCRC &= 0xFFFF
|
||||
index += 1
|
||||
return uwCRC
|
||||
|
||||
def convert_rgb16(rgb16_values):
|
||||
data = bytearray()
|
||||
for value in rgb16_values:
|
||||
high_byte = (value & 0xFF00) >> 8
|
||||
low_byte = value & 0x00FF
|
||||
|
||||
data.append(high_byte)
|
||||
data.append(low_byte)
|
||||
|
||||
return data
|
||||
|
||||
class BaseSerial():
|
||||
def __init__(self):
|
||||
self.exception = None
|
||||
self.ser = serial.Serial()
|
||||
|
||||
def open(self, port, baudrate=115200, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=3,
|
||||
writeTimeout=3):
|
||||
if type(port) == type(0):
|
||||
self.ser.port = "COM" + str(port)
|
||||
else:
|
||||
self.ser.port = port
|
||||
# 波特率;
|
||||
self.ser.baudrate = baudrate
|
||||
# 数据位;
|
||||
self.ser.bytesize = bytesize
|
||||
# 校验码;
|
||||
self.ser.parity = parity # PARITY_NONE=0
|
||||
# 停止位;
|
||||
self.ser.stopbits = stopbits
|
||||
# 串口读超时值
|
||||
self.ser.timeout = timeout
|
||||
# 串口写超时值
|
||||
self.ser.write_timeout = writeTimeout
|
||||
try:
|
||||
self.ser.open()
|
||||
return self.ser.is_open
|
||||
except Exception as e:
|
||||
self.exception = e
|
||||
print('打开串口异常', str(e))
|
||||
return False
|
||||
|
||||
def reOpen(self):
|
||||
self.exception = None
|
||||
self.ser.close()
|
||||
try:
|
||||
self.ser.open()
|
||||
return self.ser.is_open
|
||||
except Exception as e:
|
||||
self.exception = e
|
||||
return False
|
||||
|
||||
def close(self):
|
||||
self.ser.close()
|
||||
|
||||
def write(self, cmd: bytearray):
|
||||
try:
|
||||
self.exception = None
|
||||
writelen = self.ser.write(cmd)
|
||||
self.ser.flush()
|
||||
# print("writehex:" + str(binascii.b2a_hex(cmd)) + " writelen=" + str(writelen))
|
||||
return True if writelen == len(cmd) else False
|
||||
except Exception as e:
|
||||
self.exception = e
|
||||
print('写串口异常', str(e))
|
||||
return False
|
||||
|
||||
def read(self, size=0):
|
||||
try:
|
||||
self.exception = None
|
||||
bys = self.ser.read(1)
|
||||
for i in range(0, 3):
|
||||
while self.ser.in_waiting > 0:
|
||||
d = self.ser.read(1)
|
||||
bys = bys + d
|
||||
time.sleep(0.01)
|
||||
|
||||
if bys.__len__() < size:
|
||||
time.sleep(0.1)
|
||||
if self.ser.in_waiting > 0:
|
||||
d = self.ser.read(self.ser.in_waiting)
|
||||
bys = bys + d
|
||||
# print("readhex:" + str(binascii.hexlify(bys)) + " readlen=" + str(bys.__len__()))
|
||||
return bys
|
||||
except Exception as e:
|
||||
self.exception = e
|
||||
print('读串口异常', str(e))
|
||||
return None
|
||||
Reference in New Issue
Block a user