+class DND_PERIOD(GPS303Pkt):
+ PROTO = 0x47
+ DIR = Dir.OUT
+
+ @classmethod
+ def response(
+ cls, onoff=0, week=3, fm1="0000", to1="2359", fm2="0000", to2="2359"
+ ):
+ return cls.make_packet(
+ pack("B", onoff)
+ + pack("B", week)
+ + bytes.fromhex(fm1)
+ + bytes.fromhex(to1)
+ + bytes.fromhex(fm2)
+ + bytes.fromhex(to2)
+ )
+
+
+class RESTART_SHUTDOWN(GPS303Pkt):
+ PROTO = 0x48
+ DIR = Dir.OUT
+
+ @classmethod
+ def response(cls, flag=2):
+ # 1 - restart
+ # 2 - shutdown
+ return cls.make_packet(pack("B", flag))
+
+
+class DEVICE(GPS303Pkt):
+ PROTO = 0x49
+ DIR = Dir.OUT
+
+ @classmethod
+ def response(cls, flag=0):
+ # 0 - Stop looking for equipment
+ # 1 - Start looking for equipment
+ return cls.make_packet(pack("B", flag))
+
+
+class ALARM_CLOCK(GPS303Pkt):
+ PROTO = 0x50
+ DIR = Dir.OUT
+
+ @classmethod
+ def response(cls, alarms=((0, "0000"), (0, "0000"), (0, "0000"))):
+ return b"".join(
+ cls("B", day) + bytes.fromhex(tm) for day, tm in alarms
+ )