Example #1
0
/**
  * @brief  USB_SendBuffer
  *         User exposed function to send data over USB CDC interface 
  *         
  *         @note
  *         this data falls through and returns 0 if a length less than 1 is provided
  *                 
  * @param  Buf: Buffer of data to be send
  * @param  Len: Number of data to be send (in bytes)
  * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
  */
uint8_t USB_SendBuffer(uint8_t * buf, uint16_t len){

    if(len > 0){
        CDC_Transmit_FS(buf,len);
    }
    return USBD_OK;
}
Example #2
0
/**
  * @brief  CDC_Transmit_FS
  *         Data send over USB IN endpoint are sent over CDC interface 
  *         through this function.           
  *         @note
  *         
  *                 
  * @param  Buf: Buffer of data to be send
  * @param  Len: Number of data to be send (in bytes)
  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
  */
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;

  if ( hUsbDevice_0 == NULL ) return USBD_FAIL;
  if ( hUsbDevice_0->dev_state != USBD_STATE_CONFIGURED ) return USBD_FAIL;
  USBD_CDC_HandleTypeDef *pCDC =
          (USBD_CDC_HandleTypeDef *)hUsbDevice_0->pClassData;

  /* Determine if transfer is already in progress.   */
  /* If transfer in progress is stuck in that state, */
  /* then reset the interface and try again.         */

  if ( pCDC->TxState != 0 ) {
      return USBD_BUSY;
  }

  usb_last_tx_not_busy_timestamp = HAL_GetTick();

   /* USER CODE BEGIN 8 */
	if (Len > APP_TX_DATA_SIZE)
	{
		int offset;
		for (offset = 0; offset < Len; offset++)
		{
			int todo = MIN(APP_TX_DATA_SIZE,
						   Len - offset);
			result = CDC_Transmit_FS(Buf + offset, todo);
			if ( ( result != USBD_OK ) && ( result != USBD_BUSY ) ) {
				/* Error:  Break out now */
				return result;
			}
		}

		return USBD_OK;
	}

	pCDC = (USBD_CDC_HandleTypeDef *)hUsbDevice_0->pClassData;

	uint32_t tx_completion_wait_timestamp = HAL_GetTick();
	while(pCDC->TxState)
	{
	    if ( HAL_GetTick() - tx_completion_wait_timestamp > (uint32_t)100 ) {
	        /* Timeout */
	        return USBD_BUSY;
	    }
	} //Wait for previous transfer to complete

	int i;
	for ( i = 0; i < Len; i++ ) {
		UserLowLevelTxBufferFS[i] =  Buf[i];
	}
	USBD_CDC_SetTxBuffer(hUsbDevice_0, &UserLowLevelTxBufferFS[0], Len);
	result = USBD_CDC_TransmitPacket(hUsbDevice_0);

	/* USER CODE END 8 */
	return result;
}
Example #3
0
int main(void)
{

  /* USER CODE BEGIN 1 */
	USBD_StatusTypeDef result = USBD_OK;
	uint32_t userSw_old = 0;
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();

  /* USER CODE BEGIN 2 */
  BSP_LED_Init(LED3);
  BSP_LED_Init(LED4);
  BSP_PB_Init(BUTTON_USER, BUTTON_MODE_GPIO);

  userSw_old = BSP_PB_GetState(BUTTON_USER);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
	  HAL_Delay(40);
	  BSP_LED_Toggle(LED4);

	  if ((BSP_PB_GetState(BUTTON_USER) == GPIO_PIN_SET) && (userSw_old == GPIO_PIN_RESET))
	  {
		  result = CDC_Transmit_FS(USB_TxBufferFS, sizeof(USB_TxBufferFS));
	  }
	  userSw_old = BSP_PB_GetState(BUTTON_USER);


	  /* USB Error */
	  if (result != USBD_OK)
	  {
		  while (1)
		  {
			  BSP_LED_On(LED3);
			  HAL_Delay(100);
		  }
	  }
  }
  /* USER CODE END 3 */

}
Example #4
0
int main(void)
{
init(); 
HAL_Delay(500);
uint8_t message[]="started";
CDC_Transmit_FS(message,sizeof(message));	
firstclock();
  while (1)
  {
//	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1){	
			getsensordata();
																							}
//	}
}
Example #5
0
size_t USBSerial::write(const uint8_t *buffer, size_t size)
{
	unsigned long timeout=millis()+5;
  if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED)
  { 
    while(millis()<timeout)
	{
      if(CDC_Transmit_FS((uint8_t*)buffer, size) == USBD_OK)
	  {
         return size;
      }
    }
  }
  return 0;
}
Example #6
0
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  usart2cdc_rx++;
  if(usart2cdc_rx == usart2cdc_buf + usart2cdc_SIZE) {
    usart2cdc_rx = usart2cdc_buf;
  }
  if(RBUF_FREE(usart2cdc) < 8) {
    /* usart2cdc buffer nearly full, try to TX CDC immediately
    */
    if(CDC_Transmit_FS() != USBD_OK && RBUF_FREE(usart2cdc) <= 1) {
      /* worst case: can't TX, and buffer already full. dropping a byte. */
      usart2cdc_tx++;
      if(usart2cdc_tx == usart2cdc_buf + usart2cdc_SIZE) {
	usart2cdc_tx = usart2cdc_buf;
      }
    }
  }

  /* Queue next byte from USART */
  HAL_UART_Receive_IT(&huart2, usart2cdc_rx, 1);

  /* Ensure the USB TX timer is running (should be idempotent) */
  HAL_TIM_Base_Start_IT(&husbtimer);
}
Example #7
0
uint8_t UartUsbPutBuffer( Uart_t *obj, uint8_t *buffer, uint16_t size )
{
    return CDC_Transmit_FS( buffer, size );
}
Example #8
0
File: main.c Project: thiemar/mucan
int __start(void) {
    const volatile uint32_t *src;
    volatile uint32_t *dest;

    /* Set up BSS and copy data from flash */
    for (src = &_eronly, dest = &_sdata; dest < &_edata;) {
        *dest++ = *src++;
    }

    for (dest = &_sbss; dest < &_ebss;) {
        *dest++ = 0;
    }

    SystemInit();
    HAL_Init();

    /* Configure the system clock */
    SystemClock_Config();

    /*
    Make sure the flash option bytes are set such that we don't re-enter
    bootloader mode
    */
    set_dfu_option_bytes(0u);

    MX_USB_DEVICE_Init();

    /* Configure GPIO for the CAN_SILENT signal */
    GPIO_InitTypeDef GPIO_InitStruct;

    /* GPIO Ports Clock Enable */
    __GPIOA_CLK_ENABLE();
    __GPIOB_CLK_ENABLE();
    __CRS_CLK_ENABLE();

    /*Configure GPIO pin : PB7 */
    GPIO_InitStruct.Pin = GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /**CAN GPIO Configuration
    PB8     ------> CAN_RX
    PB9     ------> CAN_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF4_CAN;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /* Configure the bxCAN transceiver */
    CAN_HandleTypeDef hcan;

    __CAN_CLK_ENABLE();

    hcan.Instance = CAN;
    hcan.Init.Mode = CAN_MODE_SILENT;
    hcan.Init.TTCM = DISABLE;
    hcan.Init.ABOM = ENABLE;
    hcan.Init.AWUM = ENABLE;
    hcan.Init.NART = DISABLE;
    hcan.Init.RFLM = DISABLE;
    hcan.Init.TXFP = DISABLE;

    /* Set the bitrate and init */
    set_can_bitrate(&hcan, 1000000u);

    CanRxMsgTypeDef rx_msg;
    hcan.pRxMsg = &rx_msg;

    CanTxMsgTypeDef tx_msg;
    hcan.pTxMsg = &tx_msg;

    CAN_FilterConfTypeDef filter;
    filter.FilterNumber = 0;
    filter.FilterMode = CAN_FILTERMODE_IDMASK;
    filter.FilterScale = CAN_FILTERSCALE_32BIT;
    filter.FilterFIFOAssignment = CAN_FILTER_FIFO0;
    filter.FilterActivation = ENABLE;
    filter.BankNumber = 0;
    filter.FilterMaskIdLow = filter.FilterIdLow = filter.FilterMaskIdHigh =
        filter.FilterIdHigh = 0;
    HAL_CAN_ConfigFilter(&hcan, &filter);

    __HAL_UNLOCK(&hcan);

    /*
    Now that USB is active, we need to sync with the 1 kHz SOF packets to
    tune the HSI48 so it's accurate enough not to disrupt the CAN bus.
    */
    RCC_CRSInitTypeDef crs_config;
    crs_config.Prescaler = RCC_CRS_SYNC_DIV1;
    crs_config.Source = RCC_CRS_SYNC_SOURCE_USB;
    crs_config.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
    crs_config.ReloadValue = RCC_CRS_RELOADVALUE_DEFAULT;
    crs_config.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
    crs_config.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;

    HAL_RCCEx_CRSConfig(&crs_config);

    /* Don't continue unless we're synced */
    while (!(HAL_RCCEx_CRSWaitSynchronization(1000000u) & RCC_CRS_SYNCOK));

    while (1) {
        /* Set up the command record */
        size_t i;
        uint8_t current_cmd;
        uint8_t current_cmd_data[32];
        uint8_t current_cmd_data_length;
        uint8_t channel_open;

        current_cmd = current_cmd_data_length = i = 0;
        channel_open = 0;
        rx_buffer_length = 0;

        while (hUsbDevice_0 && hUsbDevice_0->pClassData) {
            /*
            If the RX buffer is non-empty, process any commands/messages in it
            and then acknowledge the transfer to the USB stack
            */
            if (rx_buffer_length) {
                /*
                Exit if we've read the entire buffer, or if transmit mailboxes
                are full and the current command is a transmit.
                */
                for (; i < rx_buffer_length &&
                        ((current_cmd != 't' && current_cmd != 'T') ||
                         __HAL_CAN_GET_FLAG(&hcan, CAN_FLAG_TME0)); i++) {
                    if (rx_buffer[i] == '\r') {
                        uint8_t *buf = active_buffer ? tx_buffer_1 :
                                                       tx_buffer_0;

                        /* End of command -- process and reset state */
                        switch (current_cmd) {
                            case 'S':
                                /*
                                Setup bitrate -- data should be a number from
                                0 to 8.
                                */
                                if (current_cmd_data[0] < '0' ||
                                        current_cmd_data[0] > '8') {
                                    buf[active_buffer_length++] = '\a';
                                } else if (set_can_bitrate(
                                        &hcan,
                                        bitrate_lookup[current_cmd_data[0] - '0'])) {
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'O':
                                /*
                                Open channel -- take CAN out of silent mode
                                and start receiving.
                                */
                                if (!channel_open) {
                                    channel_open = 1;
                                    set_can_silent(&hcan, 0);
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'L':
                                /*
                                Open in listen-only -- CAN should already be
                                in silent mode but just make sure.
                                */
                                if (!channel_open) {
                                    channel_open = 1;
                                    set_can_silent(&hcan, 1);
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'C':
                                /*
                                Close channel -- put CAN back in silent mode.
                                */
                                if (channel_open) {
                                    channel_open = 0;
                                    set_can_silent(&hcan, 1);
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'V':
                                /* Hardware version */
                                buf[active_buffer_length++] = 'V';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '1';
                                buf[active_buffer_length++] = '\r';
                                break;
                            case 'v':
                                /* Major/minor version */
                                buf[active_buffer_length++] = 'v';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '0';
                                buf[active_buffer_length++] = '1';
                                buf[active_buffer_length++] = '\r';
                                break;
                            case 'N':
                                /* Serial number */
                                buf[active_buffer_length++] = 'N';
                                buf[active_buffer_length++] = 'F';
                                buf[active_buffer_length++] = 'F';
                                buf[active_buffer_length++] = 'F';
                                buf[active_buffer_length++] = 'F';
                                buf[active_buffer_length++] = '\r';
                                break;
                            case 'T':
                                /* Extended message */
                                if (read_ext_message(&tx_msg, current_cmd_data,
                                                     current_cmd_data_length) &&
                                        HAL_CAN_Transmit(&hcan, 0) == HAL_OK) {
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 't':
                                /* Standard message */
                                if (read_std_message(&tx_msg, current_cmd_data,
                                                     current_cmd_data_length) &&
                                        HAL_CAN_Transmit(&hcan, 0) == HAL_OK) {
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'R':
                                /* Extended RTR */
                                if (read_ext_rtr(&tx_msg, current_cmd_data,
                                                 current_cmd_data_length) &&
                                        HAL_CAN_Transmit(&hcan, 0) == HAL_OK) {
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'r':
                                /* Standard RTR */
                                if (read_std_rtr(&tx_msg, current_cmd_data,
                                                 current_cmd_data_length) &&
                                        HAL_CAN_Transmit(&hcan, 0) == HAL_OK) {
                                    buf[active_buffer_length++] = '\r';
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case '_':
                                /* Bootloader request */
                                if (current_cmd_data[0] == '_' &&
                                        current_cmd_data[1] == 'd' &&
                                        current_cmd_data[2] == 'f' &&
                                        current_cmd_data[3] == 'u') {
                                    /*
                                    Set option bytes to force bootloader entry
                                    */
                                    set_dfu_option_bytes(1u);

                                    NVIC_SystemReset();
                                } else {
                                    buf[active_buffer_length++] = '\a';
                                }
                                break;
                            case 'F':
                                /* Read status flags -- return 4 hex digits */
                            case 'Z':
                                /* Timestamp on/off -- 0=off, 1=on */
                            case 'M':
                                /* Acceptance mask -- 8 hex digits */
                            case 'm':
                                /* Acceptance value -- 8 hex digits */
                            case 's':
                                /* Set bitrate register -- 6 hex digits */
                            default:
                                /* NACK */
                                buf[active_buffer_length++] = '\a';
                                break;
                        }

                        current_cmd = current_cmd_data_length = 0;
                    } else if (current_cmd) {
                        /* Command data -- save it */
                        current_cmd_data[current_cmd_data_length++] =
                            rx_buffer[i];

                        /* Reset command state if the data is too long */
                        if (current_cmd_data_length == 32u) {
                            current_cmd = current_cmd_data_length = 0;
                        }
                    } else {
                        /*
                        The first letter of a line is the command type --
                        don't bother validating as we can't NACK until the
                        data has been received.
                        */
                        current_cmd = rx_buffer[i];
                    }
                }

                if (i == rx_buffer_length) {
                    /* Mark last packet as received */
                    rx_buffer_length = i = 0;
                    USBD_CDC_ReceivePacket(hUsbDevice_0);
                }
            }

            /*
            Check the CAN controller for messages and process them if the
            channel is open
            */
            if (HAL_CAN_Receive(&hcan, CAN_FIFO0, 0) == HAL_OK && hUsbDevice_0 &&
                    channel_open) {
                /*
                Format the message and send it to the host.

                The data format for a standard ID message is:
                tiiildddddddddddddddd\r

                The data format for a standard ID RTR is:
                riii\r

                The data format for an extended ID message is:
                Tiiiiiiiildddddddddddddddd\r

                The data format for an extended ID RTR is:
                Riiiiiiii\r
                */
                uint8_t *write_location;

                if (active_buffer_length + EXT_MESSAGE_LEN > TX_BUFFER_SIZE) {
                    /*
                    Reset buffer if we're too far behind -- use worst-case
                    message length for calculation
                    */
                    active_buffer_length = 0;
                }

                write_location = &((active_buffer ? tx_buffer_1 : tx_buffer_0)[active_buffer_length]);

                if (rx_msg.IDE == CAN_ID_EXT && rx_msg.RTR) {
                    active_buffer_length += write_ext_rtr(
                        write_location, &rx_msg);
                } else if (rx_msg.IDE == CAN_ID_EXT && !rx_msg.RTR) {
                    active_buffer_length += write_ext_message(
                        write_location, &rx_msg);
                } else if (rx_msg.IDE == CAN_ID_STD && rx_msg.RTR) {
                    active_buffer_length += write_std_rtr(
                        write_location, &rx_msg);
                } else if (rx_msg.IDE == CAN_ID_STD && !rx_msg.RTR) {
                    active_buffer_length += write_std_message(
                        write_location, &rx_msg);
                }
            }

            if (!hUsbDevice_0 || !hUsbDevice_0->pClassData) {
                /* Reset TX buffer if USB is not connected */
                active_buffer_length = 0;
            } else if (active_buffer_length &&
                        ((USBD_CDC_HandleTypeDef*)hUsbDevice_0->pClassData)->TxState == 0) {
                /* Transmit the next buffer if one is available */
                CDC_Transmit_FS(active_buffer ? tx_buffer_1 : tx_buffer_0,
                                active_buffer_length);
                active_buffer_length = 0;
                active_buffer = active_buffer ? 0 : 1;
            }
        }
    }
}
Example #9
0
void getsensordata(void){
// PB6 --> CLOCK
// PB7 --> SI
// uint8_t uyari[]=" ilkdata: ";uint8_t uyari2[]=" ikincidata: ";
	cyclecounter=0;
while(cyclecounter<L_ARRAY){	
	GPIOB->BSRR=(1<<6);
			nop();
			nop();
	GPIOB->BSRR=(1<<22);
			nop();
			nop();
	cyclecounter++;
	if(c==0){
			value=getadc1();
			data12[(cyclecounter)]=(value);
					}	
		else if(c==1){
			value=getadc2();
			data21[(cyclecounter)]=value;
						}	
													} // end of while loop

	// one more clock is required												
	GPIOB->BSRR=(1<<6);
			nop();					
			nop();
	GPIOB->BSRR=(1<<22);
			nop();
			nop();
	// new conversion
	GPIOB->BSRR=(1<<7);
			nop();
			nop();
	GPIOB->BSRR=(1<<6);
		  nop();
			nop();
	GPIOB->BSRR=(1<<23);
			nop();	
			nop();
	GPIOB->BSRR=(1<<22);
			nop();
			nop();
	i=0;
	if(c==1){
			c=0;
			while(i<128){
					i++;
					sprintf(buf2,"\n\r%d",data21[i]);
					p=buf2;
					CDC_Transmit_FS(p,sizeof(buf2));
									} //end of while
					 } //end of if
	else if(c==0){
			c=1;
			while(i<128){
					i++;
					sprintf(buf2,"\n\r%d",data12[i]);
					p=buf2;
					CDC_Transmit_FS(p,sizeof(buf2));
		//		HAL_Delay(1);
										}//end of while
								} // end of else-if							
}
Example #10
0
/**
  * @brief  CDC_Transmit_FS
  *         Data send over USB IN endpoint are sent over CDC interface 
  *         through this function.           
  *         @note
  *         
  *                 
  * @param  Buf: Buffer of data to be send
  * @param  Len: Number of data to be send (in bytes)
  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
  */
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;

  if ( hUsbDevice_0 == NULL ) return USBD_FAIL;
  if ( hUsbDevice_0->dev_state != USBD_STATE_CONFIGURED ) return USBD_FAIL;
  USBD_CDC_HandleTypeDef *pCDC =
          (USBD_CDC_HandleTypeDef *)hUsbDevice_0->pClassData;

  /* Determine if transfer is already in progress.   */
  /* If transfer in progress is stuck in that state, */
  /* then reset the interface and try again.         */

  if ( pCDC->TxState != 0 ) {
      if ( ( last_tx_not_busy_timestamp != 0 ) &&
           ( HAL_GetTick() - last_tx_not_busy_timestamp > (uint32_t)1000) ) {

          last_tx_not_busy_timestamp = 0;
          /* Empirical evidence shows that in this state, the transmit     */
          /* is stuck, and an endless "setup" interrupt is being received. */
          /* As a result, we need to completely reinitialize the USB       */
          /* circuitry/driver to get this working again.                   */
          //MX_USB_DEVICE_DeInit();
          //MX_USB_DEVICE_Init();
          //pCDC->TxState = 0;
          return USBD_BUSY;
      } else {
          return USBD_BUSY;
      }
  }

  last_tx_not_busy_timestamp = HAL_GetTick();

   /* USER CODE BEGIN 8 */
	if (Len > APP_TX_DATA_SIZE)
	{
		int offset;
		for (offset = 0; offset < Len; offset++)
		{
			int todo = MIN(APP_TX_DATA_SIZE,
						   Len - offset);
			result = CDC_Transmit_FS(Buf + offset, todo);
			if ( ( result != USBD_OK ) && ( result != USBD_BUSY ) ) {
				/* Error:  Break out now */
				return result;
			}
		}

		return USBD_OK;
	}

	pCDC = (USBD_CDC_HandleTypeDef *)hUsbDevice_0->pClassData;

	uint32_t tx_completion_wait_timestamp = HAL_GetTick();
	while(pCDC->TxState)
	{
	    if ( HAL_GetTick() - tx_completion_wait_timestamp > (uint32_t)100 ) {
	        /* Timeout */
	        return USBD_BUSY;
	    }
	} //Wait for previous transfer to complete

	int i;
	for ( i = 0; i < Len; i++ ) {
		UserLowLevelTxBufferFS[i] =  Buf[i];
	}
	USBD_CDC_SetTxBuffer(hUsbDevice_0, &UserLowLevelTxBufferFS[0], Len);
	result = USBD_CDC_TransmitPacket(hUsbDevice_0);

	/* USER CODE END 8 */
	return result;
}
Example #11
0
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
uint8_t CDC_TransmitData(uint8_t* pbuf, uint16_t len)
{
    return CDC_Transmit_FS(pbuf, len);
}
Example #12
0
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* try to USB transmit, if we succeed & buffer empty then we can stop TX timer until next time */
  if(CDC_Transmit_FS() == USBD_OK && usart2cdc_rx == usart2cdc_tx)
    HAL_TIM_Base_Stop_IT(&husbtimer);
}
Example #13
0
void processRequestFromHost(uint8_t* buf, uint32_t* size)
{
	char response[64] = {0};
	char* request = strstr((char*)buf, "REQ_");
	if (request)
	{	
		if (strstr(request, "REQ_INFO"))
		{
			sprintf(response, "CO2 SENSOR V.0.1\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else if (strstr(request, "REQ_GET"))
		{
			uint16_t co2level = co2sensor.GetCurrentCO2Level();
			sprintf(response, "CO2: %d\r\n", co2level);
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else if (strstr(request, "REQ_MODE"))
		{
			if (graphMode == SECONDS)
			{
				graphMode = MINUTES;
			}
			else if (graphMode == MINUTES)
			{
				graphMode = HOURS;
			}
			else if (graphMode == HOURS)
			{
				graphMode = STATISTICS;
			}
			else if (graphMode == STATISTICS)
			{
				graphMode = SECONDS;
			}
			sprintf(response, "MODE CHANGED\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else if (strstr(request, "REQ_SLP"))
		{
			switchSystemMode(SLEEP);
			sprintf(response, "DISPLAY OFF\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else if (strstr(request, "REQ_WAKE"))
		{
			switchSystemMode(ACTIVE);
			sprintf(response, "DISPLAY ON\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else if (strstr(request, "REQ_RST"))
		{
			co2sensor.resetSensor();
			sprintf(response, "SENSOR RESETED\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
		else
		{
			sprintf(response, "NOT SUPPORTED\r\n");
			CDC_Transmit_FS((uint8_t*)response, strlen(response));
		}
	}
}