// empty constructor, should not be called by user cMxRadio::cMxRadio(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName slp, PinName irq) :m_spi(mosi, miso, sclk), m_cs(cs), reset_pin(rst), sleep_pin(slp),irq_pin(irq) { // default event handlers zrEventTxDone=0; zrEventReceiveFrame=0; temprssi=0; setautotx=false; setautorx=false; needack=false; usedBeginTransmission = 0; hasAttachedTxEvent = 0; hasAttachedRxEvent = 0; lastLqi = 0; lastRssi = 0; txTmpBufferLength = 0; rxRingBufferHead = 0; rxRingBufferTail = 0; /* user_radio_tx_done=0; user_radio_receive_frame=0; user_radio_irq=0; user_radio_error=0; */ zr_attach_receive_frame(&cMxRadio::onReceiveFrame); zr_attach_tx_done(&cMxRadio::onTxDone); }
/** * @brief Radio Initialization * * The function initializes all IO ressources, * needed for the usage of the radio and performs * a reset to the radio. * It prepares the frame header. * Then it sets the channel number and defaults to RX state. * * @param chan channel number for the radio to use, 11 to 26 * @param frameHeader 7 byte custom frame header, or null if you want to use a default frame header */ void zr_init(channel_t chan, uint8_t* frameHeader) { user_radio_error = 0; user_radio_irq = 0; zr_attach_receive_frame(zr_onReceiveFrame); zr_attach_tx_done(zr_onTxDone); radio_init(zr_rxFrameBuffer, MAX_FRAME_SIZE); if (frameHeader) { // copy custom frame header int i; for (i = 0; i < 7; i++) zr_txTmpBuffer[i] = frameHeader[i]; } else { // fixed frame header zr_txTmpBuffer[0] = 0x01; zr_txTmpBuffer[1] = 0x80; zr_txTmpBuffer[2] = 0; zr_txTmpBuffer[3] = 0x11; zr_txTmpBuffer[4] = 0x22; zr_txTmpBuffer[5] = 0x33; zr_txTmpBuffer[6] = 0x44; } // set the channel radio_set_param(RP_CHANNEL(chan)); // default to receiver radio_set_state(STATE_RX); #ifdef ENABLE_DIG3_DIG4 trx_bit_write(SR_PA_EXT_EN, 1); #endif ZR_RFRX_LED_OUTPUT(); ZR_RFTX_LED_OUTPUT(); ZR_RFRX_LED_OFF(); ZR_RFTX_LED_OFF(); }