size_t USBSerial::write(uint8_t byte)
{
  if (HAL_USB_USART_Available_Data_For_Write(_serial) > 0 || _blocking) {
    HAL_USB_USART_Send_Data(_serial, byte);
    return 1;
  }
  return 0;
}
Example #2
0
void HAL_USB_USART_Flush_Data(HAL_USB_USART_Serial serial)
{
    if (!HAL_USB_WillPreempt())
        return;
    while(HAL_USB_USART_Is_Connected(serial) && HAL_USB_USART_Available_Data_For_Write(serial) != (usbUsartMap[serial].data->tx_buffer_size - 1));
    // We should also wait for USB_Tx_State to become 0, as hardware might still be busy transmitting data
    while(usbUsartMap[serial].data->tx_state == 1);
}
Example #3
0
int32_t HAL_USB_USART_Send_Data(HAL_USB_USART_Serial serial, uint8_t data)
{
    int32_t ret = -1;
    int32_t available = 0;
    do {
        available = HAL_USB_USART_Available_Data_For_Write(serial);
    }
    while (available < 1 && available != -1 && HAL_USB_WillPreempt());
    // Confirm once again that the Host is connected
    int32_t state = HAL_disable_irq();
    if (HAL_USB_USART_Is_Connected(serial) && available > 0)
    {
        usbUsartMap[serial].data->tx_buffer[usbUsartMap[serial].data->tx_buffer_head] = data;
        usbUsartMap[serial].data->tx_buffer_head = ring_wrap(usbUsartMap[serial].data->tx_buffer_size,
                                                             usbUsartMap[serial].data->tx_buffer_head + 1);
        ret = 1;
    }
    HAL_enable_irq(state);

    return ret;
}
int USBSerial::availableForWrite()
{
  return HAL_USB_USART_Available_Data_For_Write(_serial);
}