void RADIO_Init(void) { (void)SMAC1_MLMESetMC13192ClockRate(0); /* Set initial Clk speed from transceiver (CLKO)*/ RADIO_SetChannel(RADIO_Channel); /* Set channel */ RADIO_SetOutputPower(15); /* Set output power */ /*Initialize the packet */ RADIO_TxPacket.u8DataLength = 0; /* Set TX default length to 0 */ RADIO_TxPacket.pu8Data = &RADIO_TxDataBuffer[0]; /* Load the address of our txbuffer into the tx structure */ RADIO_RxPacket.u8DataLength = 0; /* Set RX default to 0*/ RADIO_RxPacket.pu8Data = &RADIO_RxDataBuffer[0]; /* Load the address of our rxbuffer into rx structure */ RADIO_RxPacket.u8MaxDataLength = 24; /* Define the max buffer we are interested in */ RADIO_RxPacket.u8Status = TRSVR1_INITIAL_VALUE; /* initialize the status packet to 0 */ RADIO_AppStatus = RADIO_INITIAL_STATE; /* Set the initial status of the application state variable */ /* create data queue */ #if 0 RADIO_MsgQueue = FRTOS1_xQueueCreate(RADIO_QUEUE_NOF_ITEMS, RADIO_QUEUE_ITEM_SIZE); if (RADIO_MsgQueue==NULL) { /* queue creation failed! */ for(;;) {} /* not enough memory? */ } #else for(;;) { RADIO_Handle(); } #endif }
uint8_t RADIO_ParseCommand(const unsigned char *cmd, bool *handled, const CLS1_StdIOType *io) { uint8_t res = ERR_OK; const unsigned char *p; uint8_t val; if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_HELP)==0 || UTIL1_strcmp((char*)cmd, (char*)"radio help")==0) { RADIO_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)CLS1_CMD_STATUS)==0 || UTIL1_strcmp((char*)cmd, (char*)"radio status")==0) { RADIO_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio sniff on")==0) { RADIO_isSniffing = TRUE; *handled = TRUE; } else if (UTIL1_strcmp((char*)cmd, (char*)"radio sniff off")==0) { RADIO_isSniffing = FALSE; *handled = TRUE; } else if (UTIL1_strncmp((char*)cmd, (char*)"radio channel", sizeof("radio channel")-1)==0) { p = cmd+sizeof("radio channel"); if (UTIL1_ScanDecimal8uNumber(&p, &val)==ERR_OK && val>=0 && val<=0x7F) { RADIO_SetChannel(val); *handled = TRUE; } else { CLS1_SendStr((unsigned char*)"Wrong argument, must be in the range 0..128\r\n", io->stdErr); res = ERR_FAILED; } } return res; }
uint8_t RADIO_ParseCommand(const unsigned char *cmd, bool *handled, const FSSH1_StdIOType *io) { uint8_t res = ERR_OK; long val; const char *p; if (UTIL1_strcmp(cmd, FSSH1_CMD_HELP)==0 || UTIL1_strcmp(cmd, "radio help")==0) { RADIO_PrintHelp(io); *handled = TRUE; } else if (UTIL1_strcmp(cmd, FSSH1_CMD_STATUS)==0 || UTIL1_strcmp(cmd, "radio status")==0) { RADIO_PrintStatus(io); *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio on")==0) { RADIO_isOn = TRUE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio off")==0) { RADIO_isOn = FALSE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio sniff on")==0) { RADIO_isSniffing = TRUE; *handled = TRUE; } else if (UTIL1_strcmp(cmd, "radio sniff off")==0) { RADIO_isSniffing = FALSE; *handled = TRUE; } else if (UTIL1_strncmp(cmd, "radio channel", sizeof("radio channel")-1)==0) { p = cmd+sizeof("radio channel"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val>=0 && val<=15) { RADIO_SetChannel((uint8_t)val); *handled = TRUE; } else { FSSH1_SendStr("Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp(cmd, "radio power", sizeof("radio power")-1)==0) { p = cmd+sizeof("radio power"); if (UTIL1_xatoi(&p, &val)==ERR_OK && val>=0 && val<=15) { RADIO_SetOutputPower((uint8_t)val); *handled = TRUE; } else { FSSH1_SendStr("Wrong argument, must be in the range 0..15\r\n", io->stdErr); res = ERR_FAILED; } } else if (UTIL1_strncmp(cmd, "radio send", sizeof("radio send")-1)==0) { p = cmd+sizeof("radio send"); RADIO_SendString(p); *handled = TRUE; } return res; }
/*! * \brief Radio power-on initialization. * \return Error code, ERR_OK if everything is ok. */ uint8_t RADIO_PowerUp(void) { WAIT1_WaitOSms(100); /* the transceiver needs 100 ms power up time */ RF1_Init(); /* set CE and CSN to initialization value */ RF1_WriteRegister(RF1_RF_SETUP, RF1_RF_SETUP_RF_PWR_0|RF1_RF_SETUP_RF_DR_250); #if NRF24_DYNAMIC_PAYLOAD /* enable dynamic payload */ RF1_WriteFeature(RF1_FEATURE_EN_DPL|RF1_FEATURE_EN_ACK_PAY|RF1_FEATURE_EN_DYN_PAY); /* set EN_DPL for dynamic payload */ RF1_EnableDynanicPayloadLength(RF1_DYNPD_DPL_P0); /* set DYNPD register for dynamic payload for pipe0 */ #else RF1_SetStaticPipePayload(0, RPHY_PAYLOAD_SIZE); /* static number of payload bytes we want to send and receive */ #endif (void)RADIO_SetChannel(RADIO_CHANNEL_DEFAULT); /* Set RADDR and TADDR as the transmit address since we also enable auto acknowledgment */ RF1_WriteRegisterData(RF1_RX_ADDR_P0, (uint8_t*)TADDR, sizeof(TADDR)); RF1_WriteRegisterData(RF1_TX_ADDR, (uint8_t*)TADDR, sizeof(TADDR)); /* Enable RX_ADDR_P0 address matching */ RF1_WriteRegister(RF1_EN_RXADDR, RF1_EN_RXADDR_ERX_P0); /* enable data pipe 0 */ /* clear interrupt flags */ RF1_ResetStatusIRQ(RF1_STATUS_RX_DR|RF1_STATUS_TX_DS|RF1_STATUS_MAX_RT); /* rx/tx mode */ RF1_EnableAutoAck(RF1_EN_AA_ENAA_P0); /* enable auto acknowledge on pipe 0. RX_ADDR_P0 needs to be equal to TX_ADDR! */ RF1_WriteRegister(RF1_SETUP_RETR, RF1_SETUP_RETR_ARD_750|RF1_SETUP_RETR_ARC_15); /* Important: need 750 us delay between every retry */ RX_POWERUP(); /* Power up in receiving mode */ RF1_StartRxTx(); /* Listening for packets */ RADIO_AppStatus = RADIO_INITIAL_STATE; /* init Rx descriptor */ radioRx.phyData = &radioRxBuf[0]; radioRx.phySize = sizeof(radioRxBuf); radioRx.rxtx = &RPHY_BUF_SIZE(radioRx.phyData); /* we transmit the size too */ return ERR_OK; }
static void Process(void) { for(;;) { switch(appState) { case RNETA_NONE: appState = RNETA_POWERUP; continue; case RNETA_POWERUP: RadioPowerUp(); (void)RADIO_SetChannel(RADIO_CHANNEL_DATA); appState = RNETA_TX_RX; break; case RNETA_TX_RX: (void)RADIO_Process(); break; default: break; } /* switch */ break; /* break for loop */ } /* for */ }
/* ** =================================================================== ** Method : RNET1_SetChannel (component RNet) ** Description : ** Sets the radio channel ** Parameters : ** NAME - DESCRIPTION ** channel - Channel number ** Returns : ** --- - Error code ** =================================================================== */ uint8_t RNET1_SetChannel(uint8_t channel) { return RADIO_SetChannel(channel); }