uchar usbFunctionSetup(uchar data[8]) { usbRequest_t *rq = (void *)data; switch (rq->bRequest) { case RQ_SET_CONFIG: rf24_init(g_radio); rf24_enable_dynamic_payloads(g_radio); rf24_set_channel(g_radio, rq->wValue.bytes[0]); rf24_set_data_rate(g_radio, rq->wValue.bytes[1]); rf24_set_pa_level(g_radio, rq->wIndex.bytes[0]); break; case RQ_OPEN_PIPES: break; case RQ_LISTEN: if (rq->wValue.bytes[0]) { rf24_open_reading_pipe(g_radio, 1, local_addr); rf24_start_listening(g_radio); } else { rf24_stop_listening(g_radio); rf24_open_writing_pipe(g_radio, remote_addr); } break; case RQ_READ: { uint8_t pipe; uint8_t retries=50; uint8_t len =0; do { if (rf24_available(g_radio, &pipe)) { PORTC ^= 1<<2; len = rf24_get_dynamic_payload_size(g_radio); have_moar = !rf24_read(g_radio, msg, len); usbMsgPtr = msg; return len; } delay_ms(10); } while (retries--); } return 0; break; case RQ_NOP: /* Shit out dbg buffer */ usbMsgPtr = msg; return strlen(msg)+1; break; } last_rq = rq->bRequest; rq_len = rq->wLength.word; pos = 0; return USB_NO_MSG; }
int main() { uint8_t payload[3]; QM_PRINTF("Simple nRF24L01 receive example\r\n"); #if defined(RF24_SPI_MULTIBYTE) QM_PRINTF("Using multibyte SPI transfers\r\n"); #else QM_PRINTF("Using single byte SPI transfers\r\n"); #endif if (rf24_init()) { QM_PRINTF("Failed to initialize nRF24L01\r\n"); } else { QM_PRINTF("Initialized nRF24L01 radio. "); if (rf24_is_plus()) { QM_PRINTF("Detected nRF24L01+\r\n"); } else { QM_PRINTF("Detected nRF24L01\r\n"); } } rf24_set_retries(15,15); rf24_open_reading_pipe_uint64(0, 0xAA55AA55AA); rf24_start_listening(); clk_sys_udelay(1000); while(1) { if (rf24_available()) { rf24_read(payload, 3); QM_PRINTF("Received data ... %d,%d,%d\r\n",payload[0],payload[1],payload[2]); #if !defined (RF24_MINIMAL) rf24_print_details(); #endif } } return 0; }