Improvements to the Serial over USB driver.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2810 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
6b1c74271c
commit
ebaac50aa4
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
Loading…
Reference in New Issue