Exemple #1
0
void usbdev_write_endpoint(uint8_t ep, uint8_t* data, int len) {
	txon();
	
	USB_CTRL   = DEV_WRITE(ep);
	
	TX_PLENGTH = len;

	while (USB_CTRL & WR_EN) {
		TX_DATA = (data[3]<<24) | (data[2]<<16) | (data[1]<<8) | (data[0]);
		data += 4;
	}

	USB_CTRL = 0;

	SIE_cmd(EP2IDX(ep));
	SIE_cmd(SIE_VALIDATE_BUFFER);

}
/*---------------------------------------------------------------------------------------------------------*/
inline uint8_t SW_UART_WRAPPER_TX_Done(SW_UART_WRAPPER_Instance_t *pInstance,tx_int_size_t transmitedSize)
{
	tx_int_size_t data_length = (tx_int_size_t)pInstance->data_length;
	pdev_descriptor_const   server_dev = pInstance->server_dev;
	pInstance->sendData += transmitedSize;
	if(data_length > transmitedSize)
    {
		data_length -= transmitedSize;
	    DEV_WRITE(server_dev, pInstance->sendData, data_length );
	    pInstance->data_length = data_length;
    }
    else
    {
    	DEV_IOCTL_0_PARAMS(server_dev,IOCTL_UART_DISABLE_TX);

    	pInstance->sendDoneFlag=1;

    }
	return 0;
}
/*---------------------------------------------------------------------------------------------------------*/
static void sw_uart_send_and_wait_for_end(SW_UART_WRAPPER_Instance_t *pInstance ,
		delay_func_t delay_func,const uint8_t *apData , tx_int_size_t aLength)
{
	tx_int_size_t prev_data_len_left;
	tx_int_size_t curr_data_len_left;
	pdev_descriptor_const   server_dev = pInstance->server_dev;

	pInstance->sendDoneFlag=0;
	pInstance->data_length=aLength;
	pInstance->sendData=apData;

	DEV_IOCTL_0_PARAMS(server_dev ,IOCTL_UART_ENABLE_TX);
	DEV_WRITE(server_dev , apData, aLength);

	prev_data_len_left = aLength + 1;
	while(0 == pInstance->sendDoneFlag)
	{
		delay_func(20);
		curr_data_len_left = pInstance->data_length;
		if(curr_data_len_left < prev_data_len_left) // transmit in progress
		{
			prev_data_len_left = curr_data_len_left;
		}
		else// transmit is stuck
		{
			DEV_IOCTL_0_PARAMS(server_dev ,IOCTL_UART_DISABLE_TX);
			pInstance->data_length=0;
			/*
			* flushing queue . assuming that during 1 msec usb host will access endpoint
			* if there is interrupt from endpoint on the way to CPU, then flush queue
			*/
			delay_func(20);
			break;
		}

	}
}
Exemple #4
0
/*---------------------------------------------------------------------------------------------------------*/
static void   send_to_chip	(const uint8_t *data, const size_t length)
{
	 DEV_WRITE(server_device , data , length) ;
	//fUartSendData( pUartHandle,data , length);
	//vTaskDelay( 1 );
}