Improvements to the Serial over USB driver.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2810 35acf78f-673a-0410-8e92-d51de3d6d3f4
master
gdisirio 2011-03-08 21:09:14 +00:00
parent 6b1c74271c
commit ebaac50aa4
5 changed files with 61 additions and 32 deletions

View File

@ -90,18 +90,6 @@ typedef struct {
* @brief USB driver configuration structure. * @brief USB driver configuration structure.
*/ */
USBConfig usb_config; USBConfig usb_config;
/*
* @brief Endpoint used for data transmission.
*/
usbep_t data_request_ep;
/*
* @brief Endpoint used for data reception.
*/
usbep_t data_available_ep;
/*
* @brief Endpoint used for interrupt request.
*/
usbep_t interrupt_request_ep;
} SerialUSBConfig; } SerialUSBConfig;
/** /**

View File

@ -119,7 +119,7 @@ static void inotify(GenericQueue *qp) {
emptied, then a whole packet is loaded in the queue.*/ emptied, then a whole packet is loaded in the queue.*/
if (chIQIsEmptyI(&sdup->iqueue)) { if (chIQIsEmptyI(&sdup->iqueue)) {
n = usbReadPacketI(sdup->config->usbp, sdup->config->data_available_ep, n = usbReadPacketI(sdup->config->usbp, DATA_AVAILABLE_EP,
sdup->iqueue.q_buffer, SERIAL_USB_BUFFERS_SIZE); sdup->iqueue.q_buffer, SERIAL_USB_BUFFERS_SIZE);
if (n != USB_ENDPOINT_BUSY) { if (n != USB_ENDPOINT_BUSY) {
sdup->iqueue.q_rdptr = sdup->iqueue.q_buffer; sdup->iqueue.q_rdptr = sdup->iqueue.q_buffer;
@ -138,7 +138,7 @@ static void onotify(GenericQueue *qp) {
/* If there is any data in the output queue then it is sent within a /* If there is any data in the output queue then it is sent within a
single packet and the queue is emptied.*/ single packet and the queue is emptied.*/
n = usbWritePacketI(sdup->config->usbp, sdup->config->data_request_ep, n = usbWritePacketI(sdup->config->usbp, DATA_REQUEST_EP,
sdup->oqueue.q_buffer, chOQGetFullI(&sdup->oqueue)); sdup->oqueue.q_buffer, chOQGetFullI(&sdup->oqueue));
if (n != USB_ENDPOINT_BUSY) { if (n != USB_ENDPOINT_BUSY) {
sdup->oqueue.q_wrptr = sdup->oqueue.q_buffer; sdup->oqueue.q_wrptr = sdup->oqueue.q_buffer;

View File

@ -28,6 +28,10 @@
#ifndef _USB_CDC_H_ #ifndef _USB_CDC_H_
#define _USB_CDC_H_ #define _USB_CDC_H_
/*===========================================================================*/
/* Driver constants. */
/*===========================================================================*/
#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 #define CDC_SEND_ENCAPSULATED_COMMAND 0x00
#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 #define CDC_GET_ENCAPSULATED_RESPONSE 0x01
#define CDC_SET_COMM_FEATURE 0x02 #define CDC_SET_COMM_FEATURE 0x02
@ -48,16 +52,6 @@
#define CDC_SET_OPERATION_PARMS 0x32 #define CDC_SET_OPERATION_PARMS 0x32
#define CDC_GET_OPERATION_PARMS 0x33 #define CDC_GET_OPERATION_PARMS 0x33
/**
* @brief Type of Line Coding structure.
*/
typedef struct {
uint8_t dwDTERate[4];
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} cdc_linecoding_t;
#define LC_STOP_1 0 #define LC_STOP_1 0
#define LC_STOP_1P5 1 #define LC_STOP_1P5 1
#define LC_STOP_2 2 #define LC_STOP_2 2
@ -68,6 +62,57 @@ typedef struct {
#define LC_PARITY_MARK 3 #define LC_PARITY_MARK 3
#define LC_PARITY_SPACE 4 #define LC_PARITY_SPACE 4
/*===========================================================================*/
/* Driver pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Endpoint number for bulk IN.
*/
#if !defined(DATA_REQUEST_EP) || defined(__DOXYGEN__)
#define DATA_REQUEST_EP 1
#endif
/**
* @brief Endpoint number for interrupt IN.
*/
#if !defined(INTERRUPT_REQUEST_EP) || defined(__DOXYGEN__)
#define INTERRUPT_REQUEST_EP 2
#endif
/**
* @brief Endpoint number for bulk OUT.
*/
#if !defined(DATA_AVAILABLE_EP) || defined(__DOXYGEN__)
#define DATA_AVAILABLE_EP 3
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver data structures and types. */
/*===========================================================================*/
/**
* @brief Type of Line Coding structure.
*/
typedef struct {
uint8_t dwDTERate[4];
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} cdc_linecoding_t;
/*===========================================================================*/
/* Driver macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#endif /* _USB_CDC_H_ */ #endif /* _USB_CDC_H_ */
/** @} */ /** @} */

View File

@ -71,6 +71,7 @@
***************************************************************************** *****************************************************************************
*** 2.3.1 *** *** 2.3.1 ***
- OPT: Simplified Serial over USB driver configuration.
- CHANGE: Removed all the prefixes from the structure/union field names - CHANGE: Removed all the prefixes from the structure/union field names
in the HAL subsystem. in the HAL subsystem.

View File

@ -21,14 +21,12 @@
#include "hal.h" #include "hal.h"
#include "test.h" #include "test.h"
#include "usb_cdc.h"
/*===========================================================================*/ /*===========================================================================*/
/* USB related stuff. */ /* USB related stuff. */
/*===========================================================================*/ /*===========================================================================*/
#define DATA_REQUEST_EP 1
#define INTERRUPT_REQUEST_EP 2
#define DATA_AVAILABLE_EP 3
/* /*
* USB Driver structure. * USB Driver structure.
*/ */
@ -300,10 +298,7 @@ static const SerialUSBConfig serusbcfg = {
get_descriptor, get_descriptor,
sduRequestsHook, sduRequestsHook,
NULL NULL
}, }
DATA_REQUEST_EP,
DATA_AVAILABLE_EP,
INTERRUPT_REQUEST_EP
}; };
/*===========================================================================*/ /*===========================================================================*/