static void transportRxCallback(void) { // Called for each message received by radio, from interrupt context. // This function _must_ call RF24_readMessage() to de-assert interrupt line! if (!transportRxQueue.full()) { transportQueuedMessage* msg = transportRxQueue.getFront(); msg->m_len = RF24_readMessage(msg->m_data); // Read payload & clear RX_DR (void)transportRxQueue.pushFront(msg); } else { // Queue is full. Discard message. (void)RF24_readMessage(NULL); // Read payload & clear RX_DR // Keep track of messages lost. Max 255, prevent wrapping. if (transportLostMessageCount < 255) { ++transportLostMessageCount; } } }
uint8_t transportReceive(void* data) { uint8_t len = RF24_readMessage(data); #if defined(MY_RF24_ENABLE_ENCRYPTION) // has to be adjusted, WIP! _aes.set_IV(0); // decrypt data _aes.cbc_decrypt((byte*)(data), (byte*)(data), len>16?2:1); #endif return len; }
uint8_t transportReceive(void *data) { uint8_t len = 0; #if defined(MY_RX_MESSAGE_BUFFER_FEATURE) transportQueuedMessage* msg = transportRxQueue.getBack(); if (msg) { len = msg->m_len; (void)memcpy(data, msg->m_data, len); (void)transportRxQueue.popBack(); } #else len = RF24_readMessage(data); #endif #if defined(MY_RF24_ENABLE_ENCRYPTION) // has to be adjusted, WIP! RF24_aes.set_IV(0); // decrypt data if (RF24_aes.cbc_decrypt((uint8_t *)data, (uint8_t *)data, len > 16 ? 2 : 1) != AES_SUCCESS) { len = 0; } #endif return len; }