diff --git a/nmea0183.py b/nmea0183.py index 0ca64e9..962940b 100644 --- a/nmea0183.py +++ b/nmea0183.py @@ -1,6 +1,9 @@ """ NMEA0183 verarbeiten +TODO Multi-Sentence verarbeiten + TXT + AIS-Sentences mit Binärdaten """ def DBS(boatdata, msg): @@ -202,6 +205,45 @@ def RTE(boatdata, msg): print("-> RTE") print(msg.fields) +txt_msg = '' +txt_type = None +txt_curr = 0 +txt_max = 0 + +def TXT(boatdata, msg): + # Text Transmission (e.G. Alarms) + global txt_msg, txt_type, txt_curr, txt_max + #print("-> TXT") + nmax = int(msg.num_msg) + n = int(msg.msg_num) + if nmax > 1: + if txt_curr == 0 and n == 1: + # neue Nachricht + txt_msg = msg.text.rstrip('\r\n') + txt_type = msg.msg_type + txt_curr = 1 + txt_max = nmax + else: + # Fortsetzung + if txt_curr == n - 1 and txt_type == msg.msg_type: + txt_msg += msg.text.rstrip('\r\n') + txt_curr = n + if n == nmax: + # Vollständig! + print(f"TXT: {msg.msg_type} - {txt_msg}") + if not boatdata.alarm: + # Momentan wird kein bereits anstehender Alarm überschrieben + boatdata.setValue("TXT", txt_msg) + boatdata.alarm = True + txt_curr = 0 + txt_max = 0 + else: + print(f"TXT: {msg.msg_type} - {msg.text}", end='') + if not boatdata.alarm: + # Momentan wird kein bereits anstehender Alarm überschrieben + boatdata.setValue("TXT", msg.text) + boatdata.alarm = True + def VBW(boatdata, msg): print("-> VBW") @@ -323,6 +365,7 @@ decoder = { "RMC": RMC, "RSA": RSA, "RTE": RTE, + "TXT": TXT, "VBW": VBW, "VHW": VHW, "VPW": VPW, diff --git a/pages/anchor.py b/pages/anchor.py index 14ee7c0..5009f30 100644 --- a/pages/anchor.py +++ b/pages/anchor.py @@ -312,3 +312,5 @@ class Anchor(Page): self.draw_normal(ctx) else: self.draw_config(ctx) + if self._bd.alarm: + self.draw_alarm(ctx) diff --git a/pages/page.py b/pages/page.py index 427aa8f..ac435ab 100644 --- a/pages/page.py +++ b/pages/page.py @@ -208,6 +208,20 @@ class Page(): ctx.show_text(self.buttonlabel[i+1]) ctx.stroke() + def draw_alarm(self, ctx): + x, y, w, h = (50, 100, 300, 150) + ctx.set_line_width(1) + ctx.set_source_rgb(*self.fgcolor) + ctx.rectangle(x + 0.5, y + 0.5, w, h) + ctx.stroke() + ctx.set_source_rgb(*self.bgcolor) + ctx.rectangle(x + 1, y + 1, w - 1, h - 1) + ctx.fill() + ctx.set_source_rgb(*self.fgcolor) + ctx.set_line_width(2) + ctx.rectangle(x + 3, y + 3, w - 5, h - 5) + ctx.stroke() + def clear(self): ctx.set_source_rgb(1, 1, 1) ctx.rectangle(0, 0, 399, 299)