#pragma once #include // Stand-in for the TMRh20 RF24 library. Enum values match RF24 1.x so the // static_asserts in Comms.cpp still check HexapodProtocol.h. enum rf24_pa_dbm_e { RF24_PA_MIN = 0, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX, RF24_PA_ERROR }; enum rf24_datarate_e { RF24_1MBPS = 0, RF24_2MBPS, RF24_250KBPS }; // A simulated radio. Packets the simulation puts "on air" (hxsim_radio_send) // are only received if this radio's channel, data rate, address and static // payload size match the sender's, just like the real nRF24L01. The RX FIFO // holds 3 packets; extra packets are dropped. class RF24 { public: RF24(uint16_t ce_pin, uint16_t csn_pin) { (void)ce_pin; (void)csn_pin; } bool begin(); bool isChipConnected(); void setPayloadSize(uint8_t size) { payload_size_ = size > 32 ? 32 : size; } void openReadingPipe(uint8_t pipe, const uint8_t* address); void openWritingPipe(const uint8_t*) {} void setPALevel(rf24_pa_dbm_e, bool = true) {} bool setDataRate(rf24_datarate_e rate) { data_rate_ = rate; return true; } void setChannel(uint8_t ch) { channel_ = ch > 125 ? 125 : ch; } void setRetries(uint8_t, uint8_t) {} void startListening() { listening_ = true; } void stopListening() { listening_ = false; } bool available(); void read(void* buf, uint8_t len); bool write(const void*, uint8_t) { return false; } // the robot never transmits private: uint8_t payload_size_ = 32; uint8_t channel_ = 76; rf24_datarate_e data_rate_ = RF24_1MBPS; uint8_t address_[5] = {}; bool pipe_open_ = false; bool listening_ = false; };