void usb_configuration_changed(usb_device_t* const device) { if( device->configuration->number ) { /* RECEIVER ON */ set_receiver_mode(get_receiver_mode()); } else { /* RECEIVER OFF */ /* Configuration number equal 0 means usb bus reset. */ set_receiver_mode(RECEIVER_MODE_OFF); } }
int NRF24L01P::recv(uint8_t& src, uint8_t& port, void* buf, size_t size, uint32_t ms) { // Run in receiver mode set_receiver_mode(); // Check if there is data available on any pipe uint32_t start = RTC::millis(); while (!available()) { if ((ms != 0) && (RTC::since(start) > ms)) return (-2); Power::sleep(m_mode); } m_dest = (m_status.rx_p_no == 1 ? m_addr.device : 0); write(STATUS, _BV(RX_DR)); // Check for payload error from device (Tab. 20, pp. 51, R_RX_PL_WID) uint8_t count = read(R_RX_PL_WID) - 2; if ((count > PAYLOAD_MAX) || (count > size)) { write(FLUSH_RX); return (-1); } // Read the source address, port and payload spi.begin(this); m_status = spi.transfer(R_RX_PAYLOAD); src = spi.transfer(0); port = spi.transfer(0); spi.read(buf, count); spi.end(); return (count); }