|
| 1 | +# Notes on Class C implementation |
| 2 | + |
| 3 | +These are working notes for Class C implementation, not really permanent documentation. |
| 4 | + |
| 5 | +- [x] Sketch class C changes in `LMIC-FSM.cdd` / `LMIC-FSM.pdf` |
| 6 | +- [x] Add the details on class C reception (channel use & spreading factor) to all the regional files. **_Not required; the class C parameters are the same as RX2._** |
| 7 | +- [x] make this modular (so that we don't make tiny devices carry the extra code footprint) |
| 8 | +- [x] add code for enabling / disabling class C mode (I think maybe there's a required uplink to announce that you're in class C) |
| 9 | + - [x] define in header file |
| 10 | + - [ ] write code - when class C is enabled, need to set a flag and re-evaluate the FSM; in other words, if someone turns on class C while the LMIC is busy, we need to synchronize things. Ditto, I think, for turning things off. |
| 11 | +- [ ] modify the radio driver to look for the class C flag on entry and stop reception without crashing. |
| 12 | +- [ ] add api for stopping an ongoing reception (for switching from RX2 to TX or RX1) |
| 13 | +- [ ] add code for processing class C downlinks |
| 14 | +- [ ] add api for starting a class C reception (rework the RX2 start-reception api from class A?) |
| 15 | +- [ ] add the code to the various states to start class C reception. |
| 16 | + |
| 17 | +## Decisions |
| 18 | + |
| 19 | +- Define "RX2 channel" to mean the channel, bandwidth and spreading factor used for class A RX2 downlinks, and for Class C downlinks. |
| 20 | +- We often will say "RX2 channel is open" to mean that the radio is (supposed to be) receiving on the RX2 channel. |
| 21 | +- Define "RX2 Window" to be the *time window* for a class A RX2 Window. The spec uses this also to mean "the RX2 channel is receiving" but we need to keep this straight. |
| 22 | +- `LMIC_ENABLE_class_c` if non-zero enables the class C code. |
| 23 | + |
| 24 | +## Open Questions |
| 25 | + |
| 26 | +- [ ] how does the device distinguish (if at all) between a class C downlink received during the RX2 window, and a class A downlink? Does it simply assume that the network does the right thing? |
| 27 | +- [ ] do we need to tell the rx frame processor whether a message was received during the RX2 window? Or can we let the network sort this out? For now, we arrange to be able to tell the rx frame processor, but we'll assume the network will sort things out. |
0 commit comments