bool RFmoveBufferToTransmission(int pipe) { if (nRF24L01P.payloadsinTXFIFO >= NRF24L01P_TX_FIFO_COUNT) { return false; //We have pushed the maximum amount of payload to the Nordic in RX mode } int count = RingBuffer_GetCount(&nordicTxBuffer); if (nRF24L01P.mode & NRF24L01P_MODE_TX) { if (count > NRF24L01P_TX_FIFO_SIZE) { count = NRF24L01P_TX_FIFO_SIZE; } if (nRF24L01P.mode & NRF24L01P_MODE_TX_NO_ACK) { spiBufferTx[0] = NRF24L01P_SPI_CMD_W_TX_PYLD_NO_ACK; } else { spiBufferTx[0] = NRF24L01P_SPI_CMD_WR_TX_PAYLOAD; } } else { if ((pipe < NRF24L01P_PIPE_P0) || (pipe > NRF24L01P_PIPE_P5)) { xprintf("nRF24L01P: Invalid read pipe number %d\r\n", pipe); return false; } if (count > NRF24L01P_TX_ACK_FIFO_SIZE) { count = NRF24L01P_TX_ACK_FIFO_SIZE; } spiBufferTx[0] = NRF24L01P_SPI_CMD_W_ACK_PAYLOAD | (pipe & 0x7); } RingBuffer_PopMult(&nordicTxBuffer, spiBufferTx + 1, count); writeToSPI(count + 1); nRF24L01P.payloadsinTXFIFO++; return true; }
/* Read data from usb */ uint32_t UCOM_Read(uint8_t *pBuf, uint32_t buf_len) { UCOM_DATA_T *pUcom = &g_uCOM; uint16_t cnt = 0; cnt = RingBuffer_PopMult(&usb_rxrb, (uint8_t *) pBuf, buf_len); pUcom->usbRxFlags &= ~UCOM_RX_BUF_FULL; return cnt; }
void skynet_cdc_task(void) { // send VCOM_DATA_T *pVcom = &g_vCOM; if ((pVcom->tx_flags & VCOM_TX_CONNECTED) && ((pVcom->tx_flags & VCOM_TX_BUSY) == 0) && (!RingBuffer_IsEmpty(&usb_tx_ringbuf))) { uint8_t buf[USB_MAX_PACKET0]; uint16_t cnt = RingBuffer_PopMult(&usb_tx_ringbuf, buf, USB_MAX_PACKET0); vcom_write(buf, cnt); } // reschedule register_delayed_event(1, skynet_cdc_task); }
/* Copy data from a receive ring buffer */ int Chip_UART_ReadRB(LPC_USART_T *pUART, RINGBUFF_T *pRB, void *data, int bytes) { (void) pUART; return RingBuffer_PopMult(pRB, (uint8_t *) data, bytes); }