4 releases
0.1.1 | Dec 31, 2020 |
---|---|
0.1.0 | Dec 6, 2020 |
0.0.2 | Dec 2, 2020 |
0.0.1 | Dec 2, 2020 |
#920 in Embedded development
866 downloads per month
Used in wio_terminal
36KB
913 lines
seeed-erpc-rs
An embedded / no-std implementation of Seeed Studio's eRPC protocol, which is used to communicate with their RTL8720 firmware.
Most notably, this is the main firmware for the wifi chip in their Wio Terminal product.
WIP - most RPCs are not yet implemented.
Usage
Have a look at the Wio terminal BSP implementation for an example of how to use this.
To summarize:
- Generate the request bytes by combining the bytes generated by
RPC::header(sequence_number)
with the bytes extended fromRPC::args(&mut buff)
. - Transmit
FrameHeader::new_from_msg(request_bytes)
followed byrequest_bytes
itself. - Receive 4 bytes from the remote end (the frame header), and parse them using
FrameHeader::parse()
. - Receive the response payload by reading the next
frame_header.msg_length
bytes. - Verify the CRC by calling
frame_header.check_crc(&payload_bytes)
. - Finally, get the result of the RPC by calling
RPC::parse(&payload_bytes)
.
Handling 'callback' messages
Sometimes the remote end will send you data even if you didn't ask for it. These are the 'callback' service 'oneway' RPCs.
Handling these is a little annoying. The trick is to repeat steps 3-6 above if you get the error Err::NotOurs
back from RPC::parse()
.
Dependencies
~2.5MB
~44K SLoC