The driver code for RFM12B radio modules is starting to shape up nicely. It’s all interrupt-driven, so it works mostly in the background. Here’s a complete sketch for Arduino, allowing bi-directional sending of test packets with or without acknowledgement:
Most of this logic is the test code itself. The main interface calls are:
- rf12_initialize() – call this one in setup()
- rf12_recvDone() – returns 1 when a complete packet has been received
- rf12_canSend() – call this to start sending when possible
- rf12_sendStart(hdr,buf,len) – this starts actual transmission
All the interrupt stuff happens behind the scenes, the only requirements being that rf12_recvDone() should be called frequently and that rf12_sendStart() may only be called after rf12_recvDone() or rf12_canSend() return true, i.e. inside the above if statements.
The driver itself is under 200 lines of C code, it’ll be released as open source once the code settles a bit.