IRUSER Shared Memory: Difference between revisions

Wwylele (talk | contribs)
Wwylele (talk | contribs)
 
(6 intermediate revisions by 2 users not shown)
Line 57: Line 57:
|-
|-
| 0xC
| 0xC
| 0x4
| 0x1
| Unknown. Value 1 is observed after connection
|-
| 0xD
| 0x1
| Network ID? Seems like a randomly distributed number after connection
|-
| 0xE
| 0x1
| Unknown. Value 1 is observed after initialization
|-
| 0xF
| 0x1
| Unknown
| Unknown
|}
|}


=ReceiveBufferInfo/SendBufferInfo=
=ReceiveBufferInfo/SendBufferInfo=
(Information below is poorly verified against real hardware. Please help me verify them -- [[User:Wwylele|Wwylele]] ([[User talk:Wwylele|talk]]))


The BufferInfo sections store data validity information for the two buffers
The BufferInfo sections store data validity information for the two buffers
Line 74: Line 85:
| 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
| 0x4
| 0x4
| Unknown
| Unknown/Unused?
|}
|}


Line 98: Line 109:
|-
|-
| 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
| Destination network ID?
|-
| 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
| [[CRC-8-CCITT]] over data above (header + payload)
|-
|}