From c8bd16af037df7104e38d0b03e84b8519366b901 Mon Sep 17 00:00:00 2001 From: Paul Kendall Date: Tue, 21 Feb 2023 14:39:31 +1300 Subject: [PATCH 1/2] Add an OSD test script --- python/osd_test.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 python/osd_test.py diff --git a/python/osd_test.py b/python/osd_test.py new file mode 100644 index 0000000..b8f6125 --- /dev/null +++ b/python/osd_test.py @@ -0,0 +1,72 @@ +import time +import serial +import argparse +import serials_find + +def crc8_dvb_s2(crc, a): + crc = crc ^ a + for ii in range(8): + if crc & 0x80: + crc = (crc << 1) ^ 0xD5 + else: + crc = crc << 1 + return crc & 0xFF + +def send_msp(port, baud, body): + s = serial.Serial(port=port, baudrate=baud, + bytesize=8, parity='N', stopbits=1, + timeout=1, xonxoff=0, rtscts=0) + crc = 0 + for x in body: + crc = crc8_dvb_s2(crc, x) + msp = [ord('$'),ord('X'),ord('<')] + msp = msp + body + msp.append(crc) + s.write(msp) + print(msp) + time.sleep(2.0) + print(s.read_all()) + +def send_clear(port, baud): + msp = [0,0xb6,0x00,1,0,0x02] + send_msp(port, baud, msp) + +def send_display(port, baud): + msp = [0,0xb6,0x00,1,0,0x04] + send_msp(port, baud, msp) + +def send_msg(port, baud, row, col, str): + l = 4+len(str) + msp = [0,0xb6,0x00,l%256,int(l/256),0x03,row,col,0] + for x in [*str]: + msp.append(ord(x)) + send_msp(port, baud, msp) + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="Initialize EdgeTX passthrough to internal module") + parser.add_argument("-b", "--baud", type=int, default=460800, + help="Baud rate for passthrough communication") + parser.add_argument("-p", "--port", type=str, + help="Override serial port autodetection and use PORT") + parser.add_argument("-c", "--clear", action='store_true', + help="Clear the OSD") + parser.add_argument("-d", "--display", action='store_true', + help="Draw the currently set OSD") + parser.add_argument("row", type=int, nargs='?', default=0, + help="Row where message is to be displayed") + parser.add_argument("col", type=int, nargs='?', default=0, + help="Column where message is to be displayed") + parser.add_argument("message", type=str, nargs='?', default='', + help="Message to be displayed") + args = parser.parse_args() + + if (args.port == None): + args.port = serials_find.get_serial_port() + + if args.clear: + send_clear(args.port, args.baud) + elif args.display: + send_display(args.port, args.baud) + else: + send_msg(args.port, args.baud, args.row, args.col, args.message) From 74546928e3c8a4a193ff32e74c3e1cf8dc319979 Mon Sep 17 00:00:00 2001 From: Paul Kendall Date: Sat, 25 Feb 2023 16:28:43 +1300 Subject: [PATCH 2/2] Add OSD support to HDZero --- src/hdzero.cpp | 7 +++++++ src/hdzero.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/hdzero.cpp b/src/hdzero.cpp index 686f224..c9eed4b 100644 --- a/src/hdzero.cpp +++ b/src/hdzero.cpp @@ -108,3 +108,10 @@ HDZero::SendHeadTrackingEnableCmd(bool enable) msp.sendPacket(&packet, m_port); } + +void +HDZero::SetOSD(mspPacket_t *packet) +{ + MSP msp; + msp.sendPacket(packet, m_port); +} diff --git a/src/hdzero.h b/src/hdzero.h index 04573c6..0bf6860 100644 --- a/src/hdzero.h +++ b/src/hdzero.h @@ -24,4 +24,5 @@ class HDZero : public MSPModuleBase uint8_t GetRecordingState(); void SetRecordingState(uint8_t recordingState, uint16_t delay); void SendHeadTrackingEnableCmd(bool enable); + void SetOSD(mspPacket_t *packet); };