예제 #1
0
def fit_profile_show():
    unit_values = []
    unit_dict = dict()
    for message_type in MESSAGE_TYPES.values():
        for field in message_type.fields.values():
            unit_values.append(field.units)
            unit_dict[str(field.name)] = field.units
            if field.components:
                for component in field.components:
                    unit_values.append(component.units)
                    unit_dict[component.name] = component.units
            if field.subfields:
                for subfield in field.subfields:
                    unit_values.append(subfield.units)
                    unit_dict[subfield.name] = subfield.units
                    if subfield.components:
                        for component in subfield.components:
                            unit_values.append(component.units)
                            unit_dict[component.name] = component.units

    # unit_values = filter(None, unit_values)
    # for unit_value in sorted(set(unit_values)):
    #     print(format(unit_value))

    # unit_dict = unit_dict.pop(filter(None, unit_dict.values()))
    print(unit_dict)
예제 #2
0
def fit_message_all_show(fitfile=None):
    if fitfile is None:
        fit_profile_show()
        return

    unit_dict = dict()
    for message_type in MESSAGE_TYPES.values():
        msg_dict = dict()
        msg_dict = list(fitfile.get_messages(name=message_type.name))
        if len(msg_dict) > 0:
            unit_dict[message_type.name] = msg_dict.copy()
            fit_msg_type_list.append(message_type.name)
예제 #3
0
def fit_msg ( local_msg, msg_name, msg_fields, msg_data = None ):
  msg_type    = [m for m in MESSAGE_TYPES.values() if m.name == msg_name][0]
  field_types = []

  # Convert msg_fields
  for i in range(len(msg_fields)):
    if type(msg_fields[i]) != type(()):
      msg_fields[i] = (msg_fields[i], None)

  # Definition Message
  s =  struct.pack('<B',  0x40 | local_msg)
  s += struct.pack('<xB', 0)
  s += struct.pack('<HB', msg_type.mesg_num, len(msg_fields)) 
  for n, sf in msg_fields:
    fn = [f for f in msg_type.fields if msg_type.fields[f].name == n][0]
    ft = msg_type.fields[fn]
    bt = ft.type
    if hasattr(bt, 'base_type'):
      bt = bt.base_type
    if hasattr(ft, 'subfields') and ft.subfields:
      sf = [f for f in ft.subfields if f.name == sf][0]
    s += struct.pack('<3B', fn, bt.size, bt.identifier)
    if sf: ft = sf
    field_types.append(ft)
  
  # Data
  if msg_data:
    for d in msg_data:
      s += struct.pack('<B', 0x00 | local_msg)
      for fv, ft in zip(d, field_types):
        bt = ft.type
        if hasattr(bt, 'values') and bt.values:
          for v in bt.values:
            if bt.values[v] == fv:
              fv = v
              break
        if hasattr(ft, 'offset') and ft.offset:
          fv += ft.offset
        if hasattr(ft, 'scale')  and ft.scale:
          fv *= ft.scale
        if hasattr(bt, 'base_type'):
          bt = bt.base_type
        s += struct.pack('<'+bt.fmt, fv)

  return s
예제 #4
0
def fit_msg(local_msg, msg_name, msg_fields, msg_data=None):
    msg_type = [m for m in MESSAGE_TYPES.values() if m.name == msg_name][0]
    field_types = []

    # Convert msg_fields
    for i in range(len(msg_fields)):
        if type(msg_fields[i]) != type(()):
            msg_fields[i] = (msg_fields[i], None)

    # Definition Message
    s = struct.pack('<B', 0x40 | local_msg)
    s += struct.pack('<xB', 0)
    s += struct.pack('<HB', msg_type.mesg_num, len(msg_fields))
    for n, sf in msg_fields:
        fn = [f for f in msg_type.fields if msg_type.fields[f].name == n][0]
        ft = msg_type.fields[fn]
        bt = ft.type
        if hasattr(bt, 'base_type'):
            bt = bt.base_type
        if hasattr(ft, 'subfields') and ft.subfields:
            sf = [f for f in ft.subfields if f.name == sf][0]
        s += struct.pack('<3B', fn, bt.size, bt.identifier)
        if sf: ft = sf
        field_types.append(ft)

    # Data
    if msg_data:
        for d in msg_data:
            s += struct.pack('<B', 0x00 | local_msg)
            for fv, ft in zip(d, field_types):
                bt = ft.type
                if hasattr(bt, 'values') and bt.values:
                    for v in bt.values:
                        if bt.values[v] == fv:
                            fv = v
                            break
                if hasattr(ft, 'offset') and ft.offset:
                    fv += ft.offset
                if hasattr(ft, 'scale') and ft.scale:
                    fv *= ft.scale
                if hasattr(bt, 'base_type'):
                    bt = bt.base_type
                s += struct.pack('<' + bt.fmt, fv)

    return s
예제 #5
0
def do_fitparse_profile():
    unit_values = []
    for message_type in MESSAGE_TYPES.values():
        for field in message_type.fields.values():
            unit_values.append(field.units)
            if field.components:
                for component in field.components:
                    unit_values.append(component.units)
            if field.subfields:
                for subfield in field.subfields:
                    unit_values.append(subfield.units)
                    if subfield.components:
                        for component in subfield.components:
                            unit_values.append(component.units)

    unit_values = filter(None, unit_values)

    print 'In fitparse/profile.py:'
    for unit_value in sorted(set(unit_values)):
        print ' * %s [%s]' % (
            unit_value,
            scrub_method_name('process_units_%s' % unit_value, convert_units=True),
        )
예제 #6
0
def do_fitparse_profile():
    unit_values = []
    for message_type in MESSAGE_TYPES.values():
        for field in message_type.fields.values():
            unit_values.append(field.units)
            if field.components:
                for component in field.components:
                    unit_values.append(component.units)
            if field.subfields:
                for subfield in field.subfields:
                    unit_values.append(subfield.units)
                    if subfield.components:
                        for component in subfield.components:
                            unit_values.append(component.units)

    unit_values = filter(None, unit_values)

    print('In fitparse/profile.py:')
    for unit_value in sorted(set(unit_values)):
        print(' * {} [{}]'.format(
            unit_value,
            scrub_method_name('process_units_%s' % unit_value, convert_units=True)
        ))