| 64 | |
| 65 | |
| 66 | class CRX1NewPacketContent(Packet): |
| 67 | name = "CRX1 New Packet Content" |
| 68 | fields_desc = [ |
| 69 | XByteEnumField('protocol_number', 0x12, PROTOCOL_NUMBERS), |
| 70 | # Login |
| 71 | ConditionalField( |
| 72 | BCDStrFixedLenField('terminal_id', '00000000', length=8), lambda |
| 73 | pkt: len(pkt.original) > 5 and pkt.protocol_number == 0x01), |
| 74 | # GPS Location |
| 75 | ConditionalField( |
| 76 | ByteField('year', 0x00), lambda pkt: len(pkt.original) > 5 and pkt. |
| 77 | protocol_number in (0x12, 0x16)), |
| 78 | ConditionalField( |
| 79 | ByteField('month', 0x01), lambda pkt: len(pkt.original) > 5 and pkt |
| 80 | .protocol_number in (0x12, 0x16)), |
| 81 | ConditionalField( |
| 82 | ByteField('day', 0x01), lambda pkt: len(pkt.original) > 5 and pkt. |
| 83 | protocol_number in (0x12, 0x16)), |
| 84 | ConditionalField( |
| 85 | ByteField('hour', 0x00), lambda pkt: len(pkt.original) > 5 and pkt. |
| 86 | protocol_number in (0x12, 0x16)), |
| 87 | ConditionalField( |
| 88 | ByteField('minute', 0x00), lambda pkt: len(pkt.original) > 5 and |
| 89 | pkt.protocol_number in (0x12, 0x16)), |
| 90 | ConditionalField( |
| 91 | ByteField('second', 0x00), lambda pkt: len(pkt.original) > 5 and |
| 92 | pkt.protocol_number in (0x12, 0x16)), |
| 93 | ConditionalField( |
| 94 | BitField('gps_information_length', 0x00, 4), lambda pkt: len( |
| 95 | pkt.original) > 5 and pkt.protocol_number in (0x12, 0x16)), |
| 96 | ConditionalField( |
| 97 | BitField('positioning_satellite_number', 0x00, 4), lambda pkt: len( |
| 98 | pkt.original) > 5 and pkt.protocol_number in (0x12, 0x16)), |
| 99 | ConditionalField( |
| 100 | ScalingField('latitude', 0x00, |
| 101 | scaling=1.0 / 1800000, ndigits=6, fmt="!I"), |
| 102 | lambda pkt: len(pkt.original) > 5 and \ |
| 103 | pkt.protocol_number in (0x12, 0x16)), |
| 104 | ConditionalField( |
| 105 | ScalingField('longitude', 0x00, |
| 106 | scaling=1.0 / 1800000, ndigits=6, fmt="!I"), |
| 107 | lambda pkt: len(pkt.original) > 5 and \ |
| 108 | pkt.protocol_number in (0x12, 0x16)), |
| 109 | ConditionalField( |
| 110 | ByteField('speed', 0x00), lambda pkt: len(pkt.original) > 5 and pkt |
| 111 | .protocol_number in (0x12, 0x16)), |
| 112 | ConditionalField( |
| 113 | BitField('course', 0x00, 10), lambda pkt: len(pkt.original) > 5 and |
| 114 | pkt.protocol_number in (0x12, 0x16)), |
| 115 | ConditionalField( |
| 116 | BitEnumField('latitude_hemisphere', 0x00, 1, { |
| 117 | 0: "South", |
| 118 | 1: "North" |
| 119 | }), lambda pkt: len(pkt.original) > 5 and pkt.protocol_number in ( |
| 120 | 0x12, 0x16)), |
| 121 | ConditionalField( |
| 122 | BitEnumField('longitude_hemisphere', 0x00, 1, { |
| 123 | 0: "East", |
nothing calls this directly
no test coverage detected
searching dependent graphs…