Device Info Packet: Difference between revisions
No edit summary |
No edit summary |
||
| Line 336: | Line 336: | ||
</html> | </html> | ||
<!DOCTYPE html | |||
<html lang="en"> | <html lang="en"> | ||
<head> | <head> | ||
| Line 363: | Line 364: | ||
<textarea id="packetInput" placeholder="Paste your hex packet here..."></textarea><br> | <textarea id="packetInput" placeholder="Paste your hex packet here..."></textarea><br> | ||
<button onclick="parsePacket()">Parse Packet</button> | <button onclick="parsePacket()">Parse Packet</button> | ||
< | <div id="output"></div> | ||
<script> | <script> | ||
function parsePacket() { | function parsePacket() { | ||
const hex = document.getElementById('packetInput').value.trim(); | const hex = document.getElementById('packetInput').value.trim(); | ||
if (!hex) return; | |||
const bits = hex.match(/.{1,2}/g).map(h => parseInt(h, 16).toString(2).padStart(8, '0')).join(''); | const bits = hex.match(/.{1,2}/g).map(h => parseInt(h, 16).toString(2).padStart(8, '0')).join(''); | ||
const getBits = (start, end) => bits.slice(start, end + 1); | const getBits = (start, end) => bits.slice(start, end + 1); | ||
const getAscii = (start, end) => | const getAscii = (start, end) => getBits(start, end).match(/.{8}/g).map(b => String.fromCharCode(parseInt(b, 2))).join('').trim(); | ||
const getInt = (start, end) => parseInt(getBits(start, end), 2); | const getInt = (start, end) => parseInt(getBits(start, end), 2); | ||
const getTimestamp = (start, end, tzBits) => { | const getTimestamp = (start, end, tzBits) => { | ||
const ts = getInt(start, end); | const ts = getInt(start, end); | ||
const tzRaw = parseInt(getBits(tzBits, tzBits + 7), 2); | const tzRaw = parseInt(getBits(tzBits, tzBits + 7), 2); | ||
const timezone = tzRaw > 127 ? tzRaw - 256 : tzRaw; | const timezone = tzRaw > 127 ? tzRaw - 256 : tzRaw; | ||
const date = new Date((ts + timezone * 900) * 1000); | const date = new Date((ts + timezone * 900) * 1000); | ||
return { ts, timezone, local: date.toISOString().replace('T', ' ').slice(0, 19) }; | return { ts, timezone, local: date.toISOString().replace('T', ' ').slice(0, 19) }; | ||
}; | }; | ||
const parsed = { | const parsed = { | ||
"IMEI": parseInt(getBits(24, 74), 2), | |||
"Packet Type": getInt(75, 79), | |||
"No. of Packets": getInt(19, 23), | |||
...(() => { | ...(() => { | ||
const ts = getTimestamp(80, 111, 112); | const ts = getTimestamp(80, 111, 112); | ||
return { | return { | ||
"DateTime (UTC seconds)": ts.ts, | |||
"Timezone": ts.timezone, | |||
"DateTime (Local)": ts.local | |||
}; | }; | ||
})(), | })(), | ||
"ICCID": getAscii(120, 279), | |||
"VID": getAscii(280, 311), | |||
"CELLULAR_MODULE_FV NAME": getAscii(312, 351), | |||
"CELLULAR_MODULE_FV VERSION": getAscii(352, 431), | |||
"CELLULAR_MODULE_FV BUILD NO": getAscii(432, 471), | |||
"MCU_APP_MODULE_FV NAME": getAscii(472, 511), | |||
"MCU_APP_MODULE_FV VERSION": getAscii(512, 591), | |||
"MCU_APP_MODULE_FV BUILD NO": getAscii(592, 631), | |||
"MCU_BTL_MODULE_FV NAME": getAscii(632, 671), | |||
"MCU_BTL_MODULE_FV VERSION": getAscii(672, 751), | |||
"MCU_BTL_MODULE_FV BUILD NO": getAscii(752, 791), | |||
"VN": getAscii(792, 871), | |||
"HWINFO": getAscii(872, 959), | |||
"Error Code": 0, | |||
"Raw Packet": hex | |||
}; | }; | ||
document.getElementById('output'). | const outputDiv = document.getElementById('output'); | ||
outputDiv.innerHTML = ` | |||
<table> | |||
<thead> | |||
<tr><th>Field</th><th>Value</th></tr> | |||
</thead> | |||
<tbody> | |||
${Object.entries(parsed).map(([k, v]) => | |||
`<tr><td>${k}</td><td>${v}</td></tr>`).join('')} | |||
</tbody> | |||
</table> | |||
`; | |||
} | } | ||
</script> | </script> | ||
</body> | </body> | ||
</html> | </html> | ||
Revision as of 05:02, 17 July 2025
| Field | Size (bits) | Bit Range | Description | Breakdown |
|---|---|---|---|---|
| Header (10 Bytes) | ||||
| Start byte | 8 | 0–7 | Starting character $ (ASCII value 36) | |
| Data length | 12 | 08–19 | 2-byte length of the data following the header | |
| Number of data packets | 5 | 20–24 | Number of packets (0–32) | 0–32 |
| IMEI | 50 | 25–74 | Unique device identifier | |
| Packet type | 5 | 75–79 | Type of packet | 00 - Device Info |
| Data | ||||
| Time | 32 | UTC Timestamp | UTC time in seconds | |
| Time Zone | 8 | Timezone in quarter-hours (e.g., 22 = +5:30), quarter-hour increment means each unit represents 15 minutes. The value 22 represents 22 quarter hours. Ranges from -48 to 56, negative timezone to 2's complement representation | eg: 22 (+5:30) → 22×15=330 minutes → 330÷60=5.5 hours → 5 hours and 30 minutes | |
| ICCID | 160 | 20 Bytes, Character string | 8991000903297069053F | |
| VID | 32 | 4 Bytes, Character string | TRAN | |
| CELLULAR_MODULE_FV NAME | 40 | 5 Bytes, Character string | TSPJT | |
| CELLULAR_MODULE_FV VERSION | 80 | 10 Bytes, Character string | XX.YY.ZZZZ | |
| CELLULAR_MODULE_FV BUILD NO | 40 | 5 Bytes, Character string | YYDDD | |
| MCU_APP_MODULE_FV NAME | 40 | 5 Bytes, Character string | TSPJT | |
| MCU_APP_MODULE_FV VERSION | 80 | 10 Bytes, Character string | XX.YY.ZZZZ | |
| MCU_APP_MODULE_FV BUILD NO | 40 | 5 Bytes, Character string | YYDDD | |
| MCU_BTL_MODULE_FV NAME | 40 | 5 Bytes, Character string | TSPJT | |
| MCU_BTL_MODULE_FV VERSION | 80 | 10 Bytes, Character string | XX.YY.ZZZZ | |
| MCU_BTL_MODULE_FV BUILD NO | 40 | 5 Bytes, Character string | YYDDD | |
| VN | 80 | 10 Bytes, Character string | KL07CP8490 | |
| HWINFO | 88 | 11 Bytes, Character string | PCB-0220-AB | |
| Tail(2 Bytes) | ||||
| End Character | 8 | 0–7 | Starting character * (ASCII value 42) | |
| CRC | 8 | 8–15 | 8-bit XOR CRC of data starting from $ to * (excluding $ and *) | |
Sample Packet
HEX : "2406e0e21aeb7abfd58068778b681638393931393530393132393633373932393833355452414e545344344720332e20302e202020342020202030545344345220332e20302e202020332020202030545344524220332e20302e202020312020202030585858585858585858585043422d303236312d41412ab9"
{"imei": 862942074896044,
"packet_type": 0, "no_packets": 1, "dateTime": 1752664936, "timezone": 22, "dateTime_tz": "2025-07-16 16:52:16", "iccid": "89919509129637929835", "vid": "TRAN", "cmfv_name": "TSD4G", "cmfv_version": " 3. 0. 4", "cmfv_build": " 0", "mcua_name": "TSD4R", "mcua_version": " 3. 0. 3", "mcua_build": " 0", "mcub_name": "TSDRB", "mcub_version": " 3. 0. 1", "mcub_build": " 0", "vn": "XXXXXXXXXX", "hwinfo_build": "PCB-0261-AA", "error_code": 0, "raw_data": }
Device Info Packet Parser
Parsed Output:
| Field | Value |
|---|
<!DOCTYPE html
Device Info Packet Parser