48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import struct
|
|
from datetime import datetime
|
|
from Grifo_E_1553lib.messages.msg_rdr_settings_and_parameters import MsgRdrSettingsAndParameters
|
|
|
|
def dump_message_words(msg):
|
|
b = bytes(msg)
|
|
nwords = len(b)//2
|
|
le = struct.unpack("<%dH" % nwords, b)
|
|
be = struct.unpack(">%dH" % nwords, b)
|
|
print(f"msg len={len(b)} bytes, words={nwords}")
|
|
print("LE words:", [hex(x) for x in le])
|
|
print("BE words:", [hex(x) for x in be])
|
|
return le, be
|
|
|
|
def main():
|
|
m = MsgRdrSettingsAndParameters()
|
|
# date_of_mission may be a ctypes union instance or an int depending on initialization
|
|
# set date/time from system clock similar to sender behavior
|
|
now = datetime.now()
|
|
d = m.date_of_mission
|
|
if hasattr(d, 'raw'):
|
|
print("Before change: date.raw=0x%04X" % d.raw)
|
|
d.set_year_of_mission(now.year - 2000)
|
|
d.set_month_of_mission(now.month)
|
|
d.set_day_of_mission(now.day)
|
|
print("After date set: date.raw=0x%04X" % d.raw)
|
|
else:
|
|
# fallback: write via setting the field to a new DateOfMission object
|
|
from Grifo_E_1553lib.data_types.date_of_mission import DateOfMission
|
|
dm = DateOfMission()
|
|
print("Before change: date.raw=0x%04X" % int(d))
|
|
dm.set_day_of_mission(1)
|
|
# assign the raw uint16 value into the structure field
|
|
setattr(m, 'date_of_mission', dm.raw)
|
|
print("After set_day_of_mission(1): date.raw=0x%04X" % dm.raw)
|
|
# set time_of_mission (lsb = 2 seconds)
|
|
seconds = now.hour * 3600 + now.minute * 60 + now.second
|
|
tval = seconds // 2
|
|
if hasattr(m.time_of_mission, 'set'):
|
|
m.time_of_mission.set(tval)
|
|
else:
|
|
setattr(m, 'time_of_mission', tval)
|
|
|
|
le, be = dump_message_words(m)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|