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;
}
Exemple #3
0
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);
}
Exemple #4
0
/* 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);
}