Line 74: |
Line 74: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Start index of valid packages | + | | Start index of valid packets |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | End index of valid packages | + | | End index of valid packets |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Number of valid packages | + | | Number of valid packets |
| |- | | |- |
| | 0xC | | | 0xC |
Line 98: |
Line 98: |
| |- | | |- |
| | 0x0 | | | 0x0 |
− | | 0x8 * package_count (specified in Init parameter) | + | | 0x8 * packet_count (specified in Init parameter) |
− | | PackageInfo{u32 offset_to_data_buffer, u32 data_length} | + | | PacketInfo{u32 offset_to_data_buffer, u32 data_length} |
| |- | | |- |
− | | 0x8 * package_count | + | | 0x8 * packet_count |
− | | buffer_size - 0x8 * package_count | + | | buffer_size - 0x8 * packet_count |
| | Data buffer | | | Data buffer |
| |} | | |} |
| | | |
− | The buffers are two circular buffers. A new package is added to the end of previous package in the data buffer, with package info added to PackageInfo[end_index++]. Note that if an added package exceeds the end of the buffer, the exceeding data will be wrapped around to the beginning of the data buffer. | + | The buffers are two circular buffers. A new packet is added to the end of previous packet in the data buffer, with packet info added to PacketInfo[end_index++]. Note that if an added packet exceeds the end of the buffer, the exceeding data will be wrapped around to the beginning of the data buffer. |
| + | |
| + | |
| + | ==Packet structure== |
| + | A packet in the data buffer consists of a header, payload and a crc8 checksum |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Relative offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x1 |
| + | | Fixed value 0xA5? |
| + | |- |
| + | | 0x1 |
| + | | 0x1 |
| + | | Unknown |
| + | |- |
| + | | 0x2 |
| + | | 0x1 |
| + | | The highest bit is unknown. |
| + | When second highest bit is clear, the rest bit[0:5] of this byte is the payload length; otherwise bit[0:5] is the higher byte of the payload length |
| + | |- |
| + | | 0x3 |
| + | | 0x1 |
| + | | When bit[6] of previous byte is set, this byte is the lower byte of the payload length; other wise this byte doesn't present |
| + | |- |
| + | | 0x3 or 0x4 |
| + | | payload length |
| + | | payload |
| + | |- |
| + | | 0x3 or 0x4 +payload_length |
| + | | 0x1 |
| + | | crc8 (x^8 + x^2 + x + 1) over data above (header + payload) |
| + | |- |
| + | |} |