Serial over USB changes, work in progress, the USB demo is not buildable.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2717 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
18853dba22
commit
100573d2c3
|
@ -114,10 +114,14 @@ typedef struct {
|
|||
InputQueue iqueue; \
|
||||
/* Output queue.*/ \
|
||||
OutputQueue oqueue; \
|
||||
/* Input circular buffer.*/ \
|
||||
uint8_t ib[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* Output circular buffer.*/ \
|
||||
uint8_t ob[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* Input buffer 1.*/ \
|
||||
uint8_t ib1[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* Input buffer 2.*/ \
|
||||
uint8_t ib2[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* Output buffer 1.*/ \
|
||||
uint8_t ob1[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* Output buffer 2.*/ \
|
||||
uint8_t ob2[SERIAL_USB_BUFFERS_SIZE]; \
|
||||
/* End of the mandatory fields.*/ \
|
||||
/* Current configuration data.*/ \
|
||||
const SerialUSBConfig *config;
|
||||
|
@ -164,9 +168,9 @@ extern "C" {
|
|||
void sduStart(SerialUSBDriver *sdup, const SerialUSBConfig *config);
|
||||
void sduStop(SerialUSBDriver *sdup);
|
||||
bool_t sduRequestsHook(USBDriver *usbp);
|
||||
void sduDataRequest(USBDriver *usbp, usbep_t ep);
|
||||
void sduDataAvailable(USBDriver *usbp, usbep_t ep);
|
||||
void sduInterruptRequest(USBDriver *usbp, usbep_t ep);
|
||||
void sduDataTransmitted(USBDriver *usbp, usbep_t ep);
|
||||
void sduDataReceived(USBDriver *usbp, usbep_t ep);
|
||||
void sduInterruptTransmitted(USBDriver *usbp, usbep_t ep);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -206,7 +206,7 @@ void sduStart(SerialUSBDriver *sdup, const SerialUSBConfig *config) {
|
|||
"invalid state");
|
||||
sdup->config = config;
|
||||
usbStart(config->usbp, &config->usb_config);
|
||||
config->usbp->usb_param = sdup;
|
||||
config->usbp->param = sdup;
|
||||
sdup->state = SDU_READY;
|
||||
chSysUnlock();
|
||||
}
|
||||
|
@ -245,17 +245,17 @@ void sduStop(SerialUSBDriver *sdup) {
|
|||
*/
|
||||
bool_t sduRequestsHook(USBDriver *usbp) {
|
||||
|
||||
if ((usbp->usb_setup[0] & USB_RTYPE_TYPE_MASK) == USB_RTYPE_TYPE_CLASS) {
|
||||
switch (usbp->usb_setup[1]) {
|
||||
if ((usbp->setup[0] & USB_RTYPE_TYPE_MASK) == USB_RTYPE_TYPE_CLASS) {
|
||||
switch (usbp->setup[1]) {
|
||||
case CDC_GET_LINE_CODING:
|
||||
usbSetupTransfer(usbp, (uint8_t *)&linecoding, sizeof(linecoding), NULL);
|
||||
usbSetupTransfer(usbp, (uint8_t *)&linecoding, sizeof(linecoding));
|
||||
return TRUE;
|
||||
case CDC_SET_LINE_CODING:
|
||||
usbSetupTransfer(usbp, (uint8_t *)&linecoding, sizeof(linecoding), NULL);
|
||||
usbSetupTransfer(usbp, (uint8_t *)&linecoding, sizeof(linecoding));
|
||||
return TRUE;
|
||||
case CDC_SET_CONTROL_LINE_STATE:
|
||||
/* Nothing to do, there are no control lines.*/
|
||||
usbSetupTransfer(usbp, NULL, 0, NULL);
|
||||
usbSetupTransfer(usbp, NULL, 0);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
@ -265,12 +265,12 @@ bool_t sduRequestsHook(USBDriver *usbp) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief Default data request callback.
|
||||
* @brief Default data transmitted callback.
|
||||
* @details The application must use this function as callback for the IN
|
||||
* data endpoint.
|
||||
*/
|
||||
void sduDataRequest(USBDriver *usbp, usbep_t ep) {
|
||||
SerialUSBDriver *sdup = usbp->usb_param;
|
||||
void sduDataTransmitted(USBDriver *usbp, usbep_t ep) {
|
||||
SerialUSBDriver *sdup = usbp->param;
|
||||
size_t n;
|
||||
|
||||
chSysLockFromIsr();
|
||||
|
@ -289,12 +289,12 @@ void sduDataRequest(USBDriver *usbp, usbep_t ep) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief Default data available callback.
|
||||
* @brief Default data received callback.
|
||||
* @details The application must use this function as callback for the OUT
|
||||
* data endpoint.
|
||||
*/
|
||||
void sduDataAvailable(USBDriver *usbp, usbep_t ep) {
|
||||
SerialUSBDriver *sdup = usbp->usb_param;
|
||||
void sduDataReceived(USBDriver *usbp, usbep_t ep) {
|
||||
SerialUSBDriver *sdup = usbp->param;
|
||||
|
||||
chSysLockFromIsr();
|
||||
/* Writes to the input queue can only happen when the queue has been
|
||||
|
@ -317,7 +317,7 @@ void sduDataAvailable(USBDriver *usbp, usbep_t ep) {
|
|||
* @details The application must use this function as callback for the IN
|
||||
* interrupt endpoint.
|
||||
*/
|
||||
void sduInterruptRequest(USBDriver *usbp, usbep_t ep) {
|
||||
void sduInterruptTransmitted(USBDriver *usbp, usbep_t ep) {
|
||||
|
||||
(void)usbp;
|
||||
(void)ep;
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
* @brief Enables the SERIAL over USB subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_SERIAL_USB FALSE
|
||||
#define HAL_USE_SERIAL_USB TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
/*
|
||||
* USB driver structure.
|
||||
*/
|
||||
//static SerialUSBDriver SDU1;
|
||||
static SerialUSBDriver SDU1;
|
||||
|
||||
/*
|
||||
* USB Device Descriptor.
|
||||
|
@ -247,29 +247,11 @@ USBEndpointState ep2state;
|
|||
*/
|
||||
USBEndpointState ep3state;
|
||||
|
||||
void sduDataRequest(USBDriver *usbp, usbep_t ep) {
|
||||
|
||||
(void)usbp;
|
||||
(void)ep;
|
||||
}
|
||||
|
||||
void sduInterruptRequest(USBDriver *usbp, usbep_t ep) {
|
||||
|
||||
(void)usbp;
|
||||
(void)ep;
|
||||
}
|
||||
|
||||
void sduDataAvailable(USBDriver *usbp, usbep_t ep) {
|
||||
|
||||
(void)usbp;
|
||||
(void)ep;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief EP1 initialization structure (IN only).
|
||||
*/
|
||||
static const USBEndpointConfig ep1config = {
|
||||
sduDataRequest,
|
||||
sduDataTransmitted,
|
||||
NULL,
|
||||
0x0040,
|
||||
0x0000,
|
||||
|
@ -282,7 +264,7 @@ static const USBEndpointConfig ep1config = {
|
|||
* @brief EP2 initialization structure (IN only).
|
||||
*/
|
||||
static const USBEndpointConfig ep2config = {
|
||||
sduInterruptRequest,
|
||||
sduInterruptTransmitted,
|
||||
NULL,
|
||||
0x0010,
|
||||
0x0000,
|
||||
|
@ -296,7 +278,7 @@ static const USBEndpointConfig ep2config = {
|
|||
*/
|
||||
static const USBEndpointConfig ep3config = {
|
||||
NULL,
|
||||
sduDataAvailable,
|
||||
sduDataReceived,
|
||||
0x0000,
|
||||
0x0040,
|
||||
EPR_EP_TYPE_BULK | EPR_STAT_TX_DIS | EPR_STAT_RX_VALID,
|
||||
|
@ -335,7 +317,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
|||
/*
|
||||
* Serial over USB driver configuration.
|
||||
*/
|
||||
#if 0
|
||||
static const SerialUSBConfig serusbcfg = {
|
||||
&USBD1,
|
||||
{
|
||||
|
@ -348,8 +329,8 @@ static const SerialUSBConfig serusbcfg = {
|
|||
DATA_AVAILABLE_EP,
|
||||
INTERRUPT_REQUEST_EP
|
||||
};
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#include "usb_cdc.h"
|
||||
static cdc_linecoding_t linecoding = {
|
||||
{0x00, 0x96, 0x00, 0x00}, /* 38400. */
|
||||
|
@ -375,6 +356,7 @@ bool_t sduRequestsHook(USBDriver *usbp) {
|
|||
}
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
USBConfig usbconfig = {
|
||||
usb_event,
|
||||
|
@ -405,7 +387,6 @@ static msg_t Thread1(void *arg) {
|
|||
/*
|
||||
* USB CDC loopback thread.
|
||||
*/
|
||||
#if 0
|
||||
static WORKING_AREA(waThread2, 256);
|
||||
static msg_t Thread2(void *arg) {
|
||||
SerialUSBDriver *sdup = arg;
|
||||
|
@ -422,7 +403,6 @@ static msg_t Thread2(void *arg) {
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Application entry point.
|
||||
|
@ -442,10 +422,10 @@ int main(void) {
|
|||
/*
|
||||
* Activates the USB driver and then the USB bus pull-up on D+.
|
||||
*/
|
||||
usbStart(&USBD1, &usbconfig);
|
||||
// usbStart(&USBD1, &usbconfig);
|
||||
sduObjectInit(&SDU1);
|
||||
sduStart(&SDU1, &serusbcfg);
|
||||
palClearPad(GPIOC, GPIOC_USB_DISC);
|
||||
// sduObjectInit(&SDU1);
|
||||
// sduStart(&SDU1, &serusbcfg);
|
||||
|
||||
/*
|
||||
* Activates the serial driver 2 using the driver default configuration.
|
||||
|
@ -460,7 +440,7 @@ int main(void) {
|
|||
/*
|
||||
* Creates the USB CDC loopback thread.
|
||||
*/
|
||||
// chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, &SDU1);
|
||||
chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, &SDU1);
|
||||
|
||||
/*
|
||||
* Normal main() thread activity, in this demo it does nothing except
|
||||
|
|
Loading…
Reference in New Issue