예제 #1
0
파일: cdc_task.c 프로젝트: engie/bikeadc
void cdc_task(void)
{
    if(Is_device_enumerated()) //Enumeration processs OK ?
    {
        if(cpt_sof>=NB_MS_BEFORE_FLUSH && tx_counter!=0 )  //Flush buffer in Timeout
        {
            cpt_sof=0;
            uart_usb_flush();
        }

        if ( waiting_to_start && uart_usb_test_hit())   // Something received from the USB ?
        {
            waiting_to_start = 0;
            timer_init();
            adc_init();
        }

        if( !waiting_to_start )
        {
            READING r;
            if( cb_pop( &r ) )
            {
                uart_usb_putchar( (r.voltage >> 8) & 0xFF );
                uart_usb_putchar( r.voltage & 0xFF );
                uart_usb_putchar( (r.current >> 8) & 0xFF  );
                uart_usb_putchar( r.current & 0xFF );

                uint16 checksum = r.voltage ^ r.current;
                uart_usb_putchar( (checksum >> 8) & 0xFF  );
                uart_usb_putchar( checksum & 0xFF );
            }
        }
예제 #2
0
/** 
  * @brief This function reads one byte from the USB bus
  *
  * If one byte is present in the USB fifo, this byte is returned. If no data
  * is present in the USB fifo, this function waits for USB data.
  * 
  * @return U8 byte received
  */
char uart_usb_getchar(void)
{
  register Uchar data_rx;

  // Preserve the currently selected endpoint
  uint8_t uenum = Usb_get_selected_endpoint();
  
  Usb_select_endpoint(VCP_RX_EP);
  if (!rx_counter) while (!uart_usb_test_hit());
  data_rx=Usb_read_byte();
  rx_counter--;
  if (!rx_counter) Usb_ack_receive_out();
  
#if USB_CDC_ACM_CONF_LOCAL_ECHO
  //Local echo
  uart_usb_putchar(data_rx);
#endif

  USB_CDC_ACM_HOOK_RX(data_rx);
  
  // Restore previously selected endpoint
  UENUM = uenum;

  return data_rx;
}
예제 #3
0
int usb_stdout_putchar(char c, FILE *stream)
{
    // No need to preserve the currently
    // selected endpoint here because this
    // function doesn't directly touch any
    // USB registers.
	if(c=='\n')
		uart_usb_putchar('\r');

	if(c!='\r')
		uart_usb_putchar(c);

	// Flush on newline.
	if(c=='\n')
		uart_usb_flush();
		
	return 0;
}