diff --git a/pyogp/lib/base/message_template.py b/pyogp/lib/base/message_template.py index 31b7982..2b5868c 100644 --- a/pyogp/lib/base/message_template.py +++ b/pyogp/lib/base/message_template.py @@ -25,8 +25,10 @@ $/LicenseInfo$ #standard libraries import struct +import string +import re import pprint - + #local libraries from makepacketdict import makepacketdict, makereversepacketdict @@ -93,28 +95,44 @@ class MessageTemplate(): self.name = header[0] self.frequency = header[1] - self.msgNum = header[2] - self.msgTrust = header[3] - self.msgEncoding = header[4] + + self.msg_num = string.atoi(header[2],0) + if self.frequency == 'Fixed': + #have to do this because Fixed messages are stored as a long in the template + binTemp = struct.pack('>l', string.atol(header[2],0)) + self.msg_num_hex = repr(binTemp) + self.msg_num = struct.unpack('>h','\x00' + binTemp[3])[0] + elif self.frequency == 'Low': + self.msg_num_hex = repr(struct.pack('>bbh',0xff,0xff, self.msg_num)) + elif self.frequency == 'Medium': + self.msg_num_hex = repr(struct.pack('>bb',0xff, self.msg_num)) + elif self.frequency == 'High': + self.msg_num_hex = repr(struct.pack('>b', self.msg_num)) + + self.msg_trust = header[3] + self.msg_encoding = header[4] if len(header) > 5: - self.msgDeprecation = header[5] + self.msg_deprecation = header[5] else: - self.msgDeprecation = '' + self.msg_deprecation = '' def get_frequency(self): return self.frequency def get_message_number(self): - return self.msgNum + return self.msg_num + + def get_message_hex_num(self): + return self.msg_num_hex def get_message_trust(self): - return self.msgTrust + return self.msg_trust def get_message_encoding(self): - return self.msgEncoding + return self.msg_encoding def get_deprecation(self): - return self.msgDeprecation + return self.msg_deprecation def get_name(self): return self.name diff --git a/pyogp/lib/base/message_template_parser.py b/pyogp/lib/base/message_template_parser.py index 95ab8bb..163b54b 100644 --- a/pyogp/lib/base/message_template_parser.py +++ b/pyogp/lib/base/message_template_parser.py @@ -8,16 +8,21 @@ from pyogp.lib.base.data import msg_tmpl class MessageTemplateParser(): def __init__(self): - self.message_templates = {} - + self.message_templates = [] + self.version = '' + + def get_version(self): + return self.version + def get_template_list(self): - return self.message_templates.values() + return self.message_templates def get_template(self, name): return self.message_templates[name] def add_template(self, new_template): - self.message_templates[new_template.get_name()] = new_template + #self.message_templates[new_template.get_name()] = new_template + self.message_templates.append(new_template) def parse_template_file(self, template_file): count = 0 @@ -40,6 +45,14 @@ class MessageTemplateParser(): #raw_input() except StopIteration: break + + if self.version == '': + version_test = re.match("version.(.+)",line) #gets packet headers + if version_test != None: + parts = version_test.group(1) + parts = parts.split() + self.version = float(parts[0]) + #get packet header, starting a new packet packet_header = re.match("^\t([^\t{}]+.+)",line) #gets packet headers @@ -71,8 +84,9 @@ def print_packet_list(packet_list): for packet in packet_list: print '======================================' print packet.get_name() + ' ' + packet.get_frequency() + ' ' + \ - packet.get_message_number() + ' ' + packet.get_message_trust() + ' ' + \ - packet.get_message_encoding() + '' + packet.get_deprecation() + str(packet.get_message_number()) + ' ' + str(packet.get_message_hex_num()) + \ + ' ' + packet.get_message_trust() + ' ' + \ + packet.get_message_encoding() + ' ' + packet.get_deprecation() for block in packet.get_blocks(): print '\t' + block.get_name() + ' ' + block.get_block_type() + ' ' + \