37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
|
|
import serial
|
|
import struct
|
|
from usb_pb2 import PackageType
|
|
from serial.tools import list_ports
|
|
|
|
|
|
def make_header(typeid: PackageType, length: int) -> bytearray:
|
|
struct_format = '<HHB' # '<' for little-endian, 'H' for uint16_t, 'B' for uint8_t
|
|
# Calculate the check byte as the sum of length and type
|
|
typeidint = int(typeid)
|
|
check = (length & 0xFF) + ((length >> 8) & 0xFF) + (typeidint & 0xFF) + ((typeidint >> 8) & 0xFF)
|
|
packed_data = struct.pack(struct_format, length, typeid, check)
|
|
return packed_data
|
|
|
|
def send_package(typeid : PackageType, data: bytearray, serial: serial.Serial):
|
|
head = make_header(typeid, len(data))
|
|
package = head + data
|
|
serial.write(package)
|
|
|
|
|
|
def setup_connection() -> serial.Serial:
|
|
stm_port = None
|
|
for port in list_ports.comports():
|
|
print(port)
|
|
if "STM32 Virtual ComPort" in port.description:
|
|
stm_port = port.device
|
|
break
|
|
|
|
if stm_port is None:
|
|
print("STM32 Virtual ComPort not found")
|
|
exit(-1)
|
|
else:
|
|
# Open the serial port
|
|
ser = serial.Serial(stm_port,baudrate=5000000)
|
|
return ser
|
|
|