/* UCOM bulk EP_IN and EP_OUT endpoints handler */
static ErrorCode_t UCOM_bulk_hdlr(USBD_HANDLE_T hUsb, void *data, uint32_t event)
{
	UCOM_DATA_T *pUcom = (UCOM_DATA_T *) data;

	switch (event) {
	/* A transfer from us to the USB host that we queued has completed. */
	case USB_EVT_IN:
		pUcom->usbTxFlags &= ~UCOM_TX_BUSY;
		break;

	/* We received a transfer from the USB host . */
	case USB_EVT_OUT:
		pUcom->usbRx_count = USBD_API->hw->ReadEP(hUsb, USB_CDC_OUT_EP, pUcom->usbRx_buff);
		if(pUcom->usbRx_count){
			if(1 == pUcom->usbRx_count){
				RingBuffer_Insert(&usb_rxrb, pUcom->usbRx_buff);
			}else
			{
				RingBuffer_InsertMult(&usb_rxrb, pUcom->usbRx_buff, pUcom->usbRx_count);
			}
		}
		if (pUcom->usbRxFlags & UCOM_RX_BUF_QUEUED) {
			pUcom->usbRxFlags &= ~UCOM_RX_BUF_QUEUED;
			if (pUcom->usbRx_count != 0) {
				pUcom->usbRxFlags |= UCOM_RX_BUF_FULL;
			}
		}
		break;

	case USB_EVT_OUT_NAK:
		/* queue free buffer for RX */
		if ((pUcom->usbRxFlags & (UCOM_RX_BUF_FULL | UCOM_RX_BUF_QUEUED)) == 0) {
			pUcom->usbRx_count = USBD_API->hw->ReadReqEP(hUsb, USB_CDC_OUT_EP, pUcom->usbRx_buff, UCOM_RX_BUF_SZ);
			if(pUcom->usbRx_count){
				if(1 == pUcom->usbRx_count){
					RingBuffer_Insert(&usb_rxrb, pUcom->usbRx_buff);
				}else
				{
					RingBuffer_InsertMult(&usb_rxrb, pUcom->usbRx_buff, pUcom->usbRx_count);
				}
			}
			pUcom->usbRxFlags |= UCOM_RX_BUF_QUEUED;
		}
		break;

	default:
		break;
	}

	return LPC_OK;
}
Beispiel #2
0
int RFpushDataToBuffer(unsigned char *data, int count) {
	int ret = 0;
	/* Add additional data to transmit ring buffer if possible */
	while (ret < count) {
		int inserted = RingBuffer_InsertMult(&nordicTxBuffer, (data + ret), (count - ret));
		if (inserted == 0) {
			break;
		}
		ret += inserted;
		//If the buffer has enough data to be sent, try to send it right away
		while (RingBuffer_GetCount(&nordicTxBuffer) >= NRF24L01P_TX_FIFO_SIZE) {
			if (!RFmoveBufferToTransmission(NRF24L01P_PIPE_P0)) {
				break;
			}
		}
	}
	if (RingBuffer_GetCount(&nordicTxBuffer) > 0) {
		//If there is data to be sent, start a timeout for transmission
		//If there was a previous transmission no need to do this
		if (nRF24L01P.mode & NRF24L01P_MODE_TX) {
			nRF24L01P.transmissionTimeout = NRF24L01P_TX_TIMEOUT;
		} else if (nRF24L01P.mode & NRF24L01P_MODE_RX) {
			nRF24L01P.transmissionTimeout = NRF24L01P_TX_TIMEOUT_ACK;
		}
	}
	return count - ret;
}
Beispiel #3
0
/* Populate a transmit ring buffer and start UART transmit */
uint32_t Chip_UART_SendRB(LPC_USART_T *pUART, RINGBUFF_T *pRB, const void *data, int bytes)
{
	uint32_t ret;
	uint8_t *p8 = (uint8_t *) data;

	/* Don't let UART transmit ring buffer change in the UART IRQ handler */
	Chip_UART_IntDisable(pUART, UART_IER_THREINT);

	/* Move as much data as possible into transmit ring buffer */
	ret = RingBuffer_InsertMult(pRB, p8, bytes);
	Chip_UART_TXIntHandlerRB(pUART, pRB);

	/* Add additional data to transmit ring buffer if possible */
	ret += RingBuffer_InsertMult(pRB, (p8 + ret), (bytes - ret));

	/* Enable UART transmit interrupt */
	Chip_UART_IntEnable(pUART, UART_IER_THREINT);

	return ret;
}
Beispiel #4
0
inline uint32_t skynet_cdc_write_buffered(uint8_t *pBuf, uint32_t len) {
	return RingBuffer_InsertMult(&usb_tx_ringbuf, pBuf, len);
}
Beispiel #5
0
void main(int argc, int* argv) {
	int i;
	int rv;

	start_gui("hellO",args,arg,0,DEF_CB,"draw_hello",draw_hello,DONE);
	create_window("Hello",0,0,200,100,0,SET_PROP,"ON_REDRAW",1,"draw_hello",DONE);
	run_event_loop(&rv);

	printf("Opening %s... ",BTSERIAL);
	//can_board = fopen(BTSERIAL,"r+");
	can_board = open(BTSERIAL,O_RDWR|O_NONBLOCK);
	hdlc_frame = malloc(sizeof(HDLC_OBJ_T));
	ringbuffer = malloc(sizeof(RINGBUFF_T));
	RingBuffer_Init(ringbuffer, rb_data, rb_itemSize, RB_LEN);
	printf("Ringbuffer initialized\r\n");
	hdlc_init();

	if (can_board != 0) {
		printf("Success\r\n");
			printf("1 - Send command\r\n" 
					"2 - Listen only\r\n");
		while(1) {
			if(inputAvailable()) {
				printf("Input available\r\n");
				scanf("%d",&input);
				if(input == 1) {
					sendCommand();
				} else if (input == 2) {
					while(1) {
						//fscanf(can_board, "%s",(char *)buffer);
						numread = read(can_board,buffer,64);
						if(numread > 0) {
							printf("%s\r\n",(char *)buffer);
						}
					}
				}
			printf("1 - Send command\r\n" 
					"2 - Listen only\r\n");
			}
	//		else {
	//			printf("no input available");
	//		}
			//numread = fread(buffer,1,64,can_board);
			numread = read(can_board,buffer,64);
			if(numread > 0) {
				printf("Read something:");
				RingBuffer_InsertMult(ringbuffer, buffer,numread);
				for(i = 0; i< numread; i++){
					printf(" %x",buffer[i]);
				}
				printf("\r\n");
				hdlc_frame_parser(ringbuffer);
			} else {
				printf("Nothing read\r\n");
			}
			sleep(1);
		}
	//	fclose(can_board);
		close(can_board);
	}
	return;
}