clean up virtual com example

This commit is contained in:
hathach 2018-03-08 15:00:38 +07:00
parent 23fa9eeebe
commit b608f8895a
5 changed files with 55 additions and 273 deletions

View File

@ -1,87 +0,0 @@
/**************************************************************************/
/*!
@file cdc_device_app.c
@author hathach (tinyusb.org)
@section LICENSE
Software License Agreement (BSD License)
Copyright (c) 2013, hathach (tinyusb.org)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This file is part of the tinyusb stack.
*/
/**************************************************************************/
#include "cdc_device_app.h"
#include "common/fifo.h" // TODO refractor
//--------------------------------------------------------------------+
// INCLUDE
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
// tinyusb callbacks
//--------------------------------------------------------------------+
void tud_cdc_rx_cb(uint8_t coreid)
{
}
//--------------------------------------------------------------------+
// APPLICATION CODE
//--------------------------------------------------------------------+
void cdc_serial_app_init(void)
{
}
void cdc_serial_app_mount(uint8_t coreid)
{
}
void cdc_serial_app_umount(uint8_t coreid)
{
}
void cdc_serial_app_task(void)
{
if ( tud_mounted(0) && tud_cdc_available(0) )
{
uint8_t buf[64];
uint32_t count = tud_cdc_read(0, buf, sizeof(buf));
tud_cdc_write(0, buf, count);
}
}

View File

@ -1,68 +0,0 @@
/**************************************************************************/
/*!
@file cdc_device_app.h
@author hathach (tinyusb.org)
@section LICENSE
Software License Agreement (BSD License)
Copyright (c) 2013, hathach (tinyusb.org)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This file is part of the tinyusb stack.
*/
/**************************************************************************/
/** \ingroup TBD
* \defgroup TBD
* \brief TBD
*
* @{
*/
#ifndef _TUSB_CDCD_DEVICE_APP_H_
#define _TUSB_CDCD_DEVICE_APP_H_
#include "bsp/board.h"
#include "tusb.h"
#ifdef __cplusplus
extern "C" {
#endif
void cdc_serial_app_init(void);
void cdc_serial_app_task(void);
void cdc_serial_app_mount(uint8_t coreid);
void cdc_serial_app_umount(uint8_t coreid);
#ifdef __cplusplus
}
#endif
#endif /* _TUSB_CDCD_DEVICE_APP_H_ */
/** @} */

View File

@ -46,8 +46,6 @@
#include "bsp/board.h"
#include "tusb.h"
#include "cdc_device_app.h"
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
@ -57,6 +55,7 @@
//--------------------------------------------------------------------+
void print_greeting(void);
void led_blinking_task(void);
void virtual_com_task(void);
/*------------- MAIN -------------*/
int main(void)
@ -66,31 +65,46 @@ int main(void)
tusb_init();
//------------- application task init -------------//
cdc_serial_app_init();
while (1)
{
tusb_task();
led_blinking_task();
cdc_serial_app_task();
virtual_com_task();
}
return 0;
}
void virtual_com_task(void)
{
// connected and there are data available
if ( tud_mounted(0) && tud_cdc_available(0) )
{
uint8_t buf[64];
// read and echo back
uint32_t count = tud_cdc_read(0, buf, sizeof(buf));
tud_cdc_write(0, buf, count);
}
}
//--------------------------------------------------------------------+
// tinyusb callbacks
//--------------------------------------------------------------------+
void tud_mount_cb(uint8_t coreid)
{
cdc_serial_app_mount(coreid);
}
void tud_umount_cb(uint8_t coreid)
{
cdc_serial_app_umount(coreid);
}
void tud_cdc_rx_cb(uint8_t coreid)
{
}
//--------------------------------------------------------------------+

View File

@ -75,38 +75,43 @@ FIFO_DEF(_tx_ff, CFG_TUD_CDC_BUFSIZE, uint8_t, true);
//--------------------------------------------------------------------+
STATIC_VAR cdcd_data_t cdcd_data[CONTROLLER_DEVICE_NUMBER];
static tusb_error_t cdcd_xfer(uint8_t coreid, cdc_pipeid_t pipeid, void * p_buffer, uint32_t length, bool is_notify)
//--------------------------------------------------------------------+
// APPLICATION API
//--------------------------------------------------------------------+
bool tud_cdc_connected(uint8_t coreid)
{
ASSERT(tud_mounted(coreid), TUSB_ERROR_USBD_DEVICE_NOT_CONFIGURED);
cdcd_data_t* p_cdc = &cdcd_data[coreid];
ASSERT_FALSE ( dcd_pipe_is_busy(p_cdc->edpt_hdl[pipeid]), TUSB_ERROR_INTERFACE_IS_BUSY);
ASSERT_STATUS( hal_dcd_pipe_xfer(p_cdc->edpt_hdl[pipeid], p_buffer, length, is_notify) );
return TUSB_ERROR_NONE;
return cdcd_data[coreid].connected;
}
uint32_t tud_cdc_available(uint8_t coreid)
{
return fifo_count(&_rx_ff);
}
int tud_cdc_read_char(uint8_t coreid)
{
uint8_t ch;
return fifo_read(&_rx_ff, &ch) ? ch : (-1);
}
uint32_t tud_cdc_read(uint8_t coreid, void* buffer, uint32_t bufsize)
{
return fifo_read_n(&_rx_ff, buffer, bufsize);
}
uint32_t tud_cdc_write_char(uint8_t coreid, char ch)
{
return fifo_write(&_tx_ff, &ch);
}
uint32_t tud_cdc_write(uint8_t coreid, void const* buffer, uint32_t bufsize)
{
return fifo_write_n(&_tx_ff, buffer, bufsize);
}
//--------------------------------------------------------------------+
// APPLICATION API (Parameters requires validation)
//--------------------------------------------------------------------+
bool tud_cdc_busy(uint8_t coreid, cdc_pipeid_t pipeid)
{
return dcd_pipe_is_busy( cdcd_data[coreid].edpt_hdl[pipeid] );
}
tusb_error_t tud_cdc_receive(uint8_t coreid, void * p_buffer, uint32_t length, bool is_notify)
{
return cdcd_xfer(coreid, CDC_PIPE_DATA_OUT, p_buffer, length, is_notify);
}
tusb_error_t tud_cdc_send(uint8_t coreid, void * p_data, uint32_t length, bool is_notify)
{
return cdcd_xfer(coreid, CDC_PIPE_DATA_IN, p_data, length, is_notify);
}
//--------------------------------------------------------------------+
// USBD-CLASS API
// USBD Driver API
//--------------------------------------------------------------------+
void cdcd_init(void)
{
@ -282,36 +287,4 @@ void cdcd_sof(uint8_t coreid)
}
}
bool tud_cdc_connected(uint8_t coreid)
{
return cdcd_data[coreid].connected;
}
uint32_t tud_cdc_available(uint8_t coreid)
{
return fifo_count(&_rx_ff);
}
int tud_cdc_read_char(uint8_t coreid)
{
uint8_t ch;
return fifo_read(&_rx_ff, &ch) ? ch : (-1);
}
uint32_t tud_cdc_read(uint8_t coreid, void* buffer, uint32_t bufsize)
{
return fifo_read_n(&_rx_ff, buffer, bufsize);
}
uint32_t tud_cdc_write_char(uint8_t coreid, char ch)
{
return fifo_write(&_tx_ff, &ch);
}
uint32_t tud_cdc_write(uint8_t coreid, void const* buffer, uint32_t bufsize)
{
return fifo_write_n(&_tx_ff, buffer, bufsize);
}
#endif

View File

@ -55,46 +55,6 @@
//--------------------------------------------------------------------+
// APPLICATION API
//--------------------------------------------------------------------+
/** \brief Check if the interface is currently busy or not
* \param[in] coreid USB Controller ID
* \retval true if the interface is busy meaning the stack is still transferring/waiting data from/to host
* \retval false if the interface is not busy meaning the stack successfully transferred data from/to host
* \note This function is primarily used for polling/waiting result after \ref tusbd_hid_keyboard_send.
*/
bool tud_cdc_busy(uint8_t coreid, cdc_pipeid_t pipeid) ATTR_PURE ATTR_WARN_UNUSED_RESULT;
/** \brief Submit USB transfer
* \param[in] coreid USB Controller ID
* \param[in] p_data buffer containing data from application. Must be accessible by USB controller (see \ref TUSB_CFG_ATTR_USBRAM)
* \param[in] length number of bytes in \a p_data.
* \param[in] is_notify indicates whether the hardware completion (data transferred through USB bus) will be notified
* to Application (via \ref tusbd_cdc_xfer_cb)
* \returns \ref tusb_error_t type to indicate success or error condition.
* \retval TUSB_ERROR_NONE on success
* \retval TUSB_ERROR_INTERFACE_IS_BUSY if the interface is busy transferring previous data.
* \retval TUSB_ERROR_DEVICE_NOT_READY if device is not yet configured (by SET CONFIGURED request)
* \retval TUSB_ERROR_INVALID_PARA if input parameters are not correct
* \note This function is non-blocking and returns immediately. Data will be transferred when USB Host work with this interface.
* The result of usb transfer will be reported by the interface's callback function if \a is_notify is true
*/
tusb_error_t tud_cdc_send(uint8_t coreid, void * p_data, uint32_t length, bool is_notify);
/** \brief Submit USB transfer
* \param[in] coreid USB Controller ID
* \param[in] p_buffer application's buffer to receive data. Must be accessible by USB controller (see \ref TUSB_CFG_ATTR_USBRAM)
* \param[in] length number of bytes in \a p_buffer.
* \param[in] is_notify indicates whether the hardware completion (data transferred through USB bus) will be notified
* to Application (via \ref tusbd_cdc_xfer_cb)
* \returns \ref tusb_error_t type to indicate success or error condition.
* \retval TUSB_ERROR_NONE on success
* \retval TUSB_ERROR_INTERFACE_IS_BUSY if the interface is busy transferring previous data.
* \retval TUSB_ERROR_DEVICE_NOT_READY if device is not yet configured (by SET CONFIGURED request)
* \retval TUSB_ERROR_INVALID_PARA if input parameters are not correct
* \note This function is non-blocking and returns immediately. Data will be transferred when USB Host work with this interface.
* The result of usb transfer will be reported by the interface's callback function if \a is_notify is true
*/
tusb_error_t tud_cdc_receive(uint8_t coreid, void * p_buffer, uint32_t length, bool is_notify);
bool tud_cdc_connected(uint8_t coreid);
uint32_t tud_cdc_available(uint8_t coreid);
@ -108,17 +68,7 @@ uint32_t tud_cdc_write(uint8_t coreid, void const* buffer, uint32_t bufsize);
//--------------------------------------------------------------------+
// APPLICATION CALLBACK API
//--------------------------------------------------------------------+
/** \brief Callback function that is invoked when an completion (error or success) of an USB transfer previously submitted
* by application (e.g \ref tusbd_cdc_send or \ref tusbd_cdc_send) with \a is_notify set to true.
* \param[in] coreid USB Controller ID
* \param[in] event an value from \ref tusb_event_t
* \param[in] pipe_id indicates which pipe of this interface the event occured.
* \param[in] xferred_bytes is actual number of bytes transferred via USB bus. This value in general can be different to
* the one that previously submitted by application.
*/
void tud_cdc_xfer_cb(uint8_t coreid, tusb_event_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes);
//void tud_cdc_line_coding_changed_cb(uint8_t coreid, cdc_line_coding_t* p_line_coding);
void tud_cdc_rx_cb(uint8_t coreid);
//--------------------------------------------------------------------+