/** * Function for notifying application about new bytes received. */ static void processReceive(void) { // Set head position to not be changed during read procedure. uint16_t head = sReceiveHead; otEXPECT(isRxBufferEmpty() == false); // In case head roll back to the beginning of the buffer, notify about left // bytes from the end of the buffer. if (head < sReceiveTail) { otPlatUartReceived(&sReceiveBuffer[sReceiveTail], (UART_RX_BUFFER_SIZE - sReceiveTail)); sReceiveTail = 0; } // Notify about received bytes. if (head > sReceiveTail) { otPlatUartReceived(&sReceiveBuffer[sReceiveTail], (head - sReceiveTail)); sReceiveTail = head; } exit: return; }
/** * @brief process the receive side of the buffers */ static void processReceive(void) { while (sReceiveHeadIdx != sReceiveTailIdx) { uint16_t tailIdx; if (sReceiveHeadIdx < sReceiveTailIdx) { tailIdx = sReceiveTailIdx; otPlatUartReceived(&(sReceiveBuffer[sReceiveHeadIdx]), tailIdx - sReceiveHeadIdx); sReceiveHeadIdx = tailIdx; } else { tailIdx = CC2650_RECV_CIRC_BUFF_SIZE; otPlatUartReceived(&(sReceiveBuffer[sReceiveHeadIdx]), tailIdx - sReceiveHeadIdx); sReceiveHeadIdx = 0; } } }
static void processReceive(void) { // Copy tail to prevent multiple reads uint16_t tail = sReceive.mTail; // If the data wraps around, process the first part if (sReceive.mHead > tail) { otPlatUartReceived(sReceive.mBuffer + sReceive.mHead, kReceiveBufferSize - sReceive.mHead); // Reset the buffer mHead back to zero. sReceive.mHead = 0; } // For any data remaining, process it if (sReceive.mHead != tail) { otPlatUartReceived(sReceive.mBuffer + sReceive.mHead, tail - sReceive.mHead); // Set mHead to the local tail we have cached sReceive.mHead = tail; } }
static void processReceive(void) { if (sUsbState.mReceiveDone) { if (sUsbState.mReceivedDataSize != 0) { otPlatUartReceived((const uint8_t *)sRxBuffer, sUsbState.mReceivedDataSize); sUsbState.mReceivedDataSize = 0; } // Setup next transfer. if (app_usbd_cdc_acm_read_any(&sAppCdcAcm, sRxBuffer, sizeof(sRxBuffer)) == NRF_SUCCESS) { sUsbState.mReceiveDone = false; } } }