61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import struct
|
|
import serial
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Configuration
|
|
# -----------------------------------------------------------------------------
|
|
|
|
PORT = "/dev/ttyACM1"
|
|
BAUDRATE = 115200
|
|
|
|
COMMAND_PREFIX = 0x69
|
|
COMMAND_ID = 0x00
|
|
|
|
COMMAND_HOME = 3
|
|
|
|
# Length
|
|
length = 0
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Build packet with placeholder CRC
|
|
# -----------------------------------------------------------------------------
|
|
|
|
packet = bytearray([
|
|
COMMAND_PREFIX,
|
|
length,
|
|
COMMAND_ID,
|
|
COMMAND_HOME,
|
|
0x00, # Placeholder CRC
|
|
])
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Calculate CRC (matches command_calculate_crc())
|
|
#
|
|
# Sum every byte except the CRC byte itself.
|
|
# -----------------------------------------------------------------------------
|
|
|
|
crc_sum = 0
|
|
|
|
for i, byte in enumerate(packet):
|
|
if i == 4: # Skip CRC field
|
|
continue
|
|
crc_sum += byte
|
|
|
|
packet[4] = 0x100 - (crc_sum & 0xFF)
|
|
# Equivalent to:
|
|
# packet[4] = (0x100 - (crc_sum & 0xFF)) & 0xFF
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Send
|
|
# -----------------------------------------------------------------------------
|
|
|
|
print(f"Packet ({len(packet)} bytes):")
|
|
print(packet.hex(" "))
|
|
|
|
with serial.Serial(PORT, BAUDRATE, timeout=1) as ser:
|
|
ser.write(packet)
|
|
ser.flush()
|
|
|
|
print("Done.") |