Browse Source

Move generic USB stuff to a subdir, dedupe .h files.

Adapt examples and the lib code accordingly.
pull/2/head
Uwe Hermann 14 years ago
parent
commit
34fd228bf9
  1. 8
      examples/lisa-m/usb_dfu/usbdfu.c
  2. 12
      examples/lisa-m/usb_hid/usbhid.c
  3. 7
      examples/other/usb_cdcacm/cdcacm.c
  4. 81
      examples/other/usb_dfu/dfu.h
  5. 8
      examples/other/usb_dfu/usbdfu.c
  6. 38
      examples/other/usb_hid/hid.h
  7. 12
      examples/other/usb_hid/usbhid.c
  8. 128
      examples/stm32-h103/usb_cdcacm/cdc.h
  9. 7
      examples/stm32-h103/usb_cdcacm/cdcacm.c
  10. 81
      examples/stm32-h103/usb_dfu/dfu.h
  11. 8
      examples/stm32-h103/usb_dfu/usbdfu.c
  12. 38
      examples/stm32-h103/usb_hid/hid.h
  13. 12
      examples/stm32-h103/usb_hid/usbhid.c
  14. 8
      examples/stm32-h103/usb_iap/usbiap.c
  15. 0
      include/usb/cdc.h
  16. 0
      include/usb/dfu.h
  17. 0
      include/usb/hid.h
  18. 2
      include/usb/usbd.h
  19. 0
      include/usb/usbstd.h
  20. 3
      lib/usb/usb.c
  21. 3
      lib/usb/usb_control.c
  22. 5
      lib/usb/usb_f103.c
  23. 2
      lib/usb/usb_private.h
  24. 4
      lib/usb/usb_standard.c

8
examples/lisa-m/usb_dfu/usbdfu.c

@ -17,15 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/flash.h>
#include <libopenstm32/scb.h>
#include <usbd.h>
#include <string.h>
#include "dfu.h"
#include <usb/usbd.h>
#include <usb/dfu.h>
#define APP_ADDRESS 0x08002000

12
examples/lisa-m/usb_hid/usbhid.c

@ -17,21 +17,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/systick.h>
#include <usbd.h>
#include <stdlib.h>
#include "hid.h"
#include <usb/usbd.h>
#include <usb/hid.h>
/* Define this to include the DFU APP interface. */
#define INCLUDE_DFU_INTERFACE
#ifdef INCLUDE_DFU_INTERFACE
# include <libopenstm32/scb.h>
# include "../usb_dfu/dfu.h"
#include <libopenstm32/scb.h>
#include <usb/dfu.h>
#endif
const struct usb_device_descriptor dev = {

7
examples/other/usb_cdcacm/cdcacm.c

@ -17,12 +17,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <usbd.h>
#include <stdlib.h>
#include "cdc.h"
#include <usb/usbd.h>
#include <usb/cdc.h>
static const struct usb_device_descriptor dev = {
.bLength = USB_DT_DEVICE_SIZE,

81
examples/other/usb_dfu/dfu.h

@ -1,81 +0,0 @@
/*
* This file is part of the libopenstm32 project.
*
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __DFU_H
#define __DFU_H
enum dfu_req {
DFU_DETACH,
DFU_DNLOAD,
DFU_UPLOAD,
DFU_GETSTATUS,
DFU_CLRSTATUS,
DFU_GETSTATE,
DFU_ABORT
};
enum dfu_status {
DFU_STATUS_OK,
DFU_STATUS_ERR_TARGET,
DFU_STATUS_ERR_FILE,
DFU_STATUS_ERR_WRITE,
DFU_STATUS_ERR_ERASE,
DFU_STATUS_ERR_CHECK_ERASED,
DFU_STATUS_ERR_PROG,
DFU_STATUS_ERR_VERIFY,
DFU_STATUS_ERR_ADDRESS,
DFU_STATUS_ERR_NOTDONE,
DFU_STATUS_ERR_FIRMWARE,
DFU_STATUS_ERR_VENDOR,
DFU_STATUS_ERR_USBR,
DFU_STATUS_ERR_POR,
DFU_STATUS_ERR_UNKNOWN,
DFU_STATUS_ERR_STALLEDPKT,
};
enum dfu_state {
STATE_APP_IDLE,
STATE_APP_DETACH,
STATE_DFU_IDLE,
STATE_DFU_DNLOAD_SYNC,
STATE_DFU_DNBUSY,
STATE_DFU_DNLOAD_IDLE,
STATE_DFU_MANIFEST_SYNC,
STATE_DFU_MANIFEST,
STATE_DFU_MANIFEST_WAIT_RESET,
STATE_DFU_UPLOAD_IDLE,
STATE_DFU_ERROR,
};
#define DFU_FUNCTIONAL 0x21
struct usb_dfu_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t bmAttributes;
#define USB_DFU_CAN_DOWNLOAD 0x01
#define USB_DFU_CAN_UPLOAD 0x02
#define USB_DFU_MANIFEST_TOLERANT 0x04
#define USB_DFU_WILL_DETACH 0x08
uint16_t wDetachTimeout;
uint16_t wTransferSize;
uint16_t bcdDFUVersion;
} __attribute__((packed));
#endif

8
examples/other/usb_dfu/usbdfu.c

@ -17,15 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/flash.h>
#include <libopenstm32/scb.h>
#include <usbd.h>
#include <string.h>
#include "dfu.h"
#include <usb/usbd.h>
#include <usb/dfu.h>
#define APP_ADDRESS 0x08002000

38
examples/other/usb_hid/hid.h

@ -1,38 +0,0 @@
/*
* This file is part of the libopenstm32 project.
*
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __HID_H
#define __HID_H
#include <stdint.h>
#define USB_CLASS_HID 3
#define USB_DT_HID 0x21
#define USB_DT_REPORT 0x22
struct usb_hid_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdHID;
uint8_t bCountryCode;
uint8_t bNumDescriptors;
} __attribute__((packed));
#endif

12
examples/other/usb_hid/usbhid.c

@ -17,21 +17,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/systick.h>
#include <usbd.h>
#include <stdlib.h>
#include "hid.h"
#include <usb/usbd.h>
#include <usb/hid.h>
/* Define this to include the DFU APP interface. */
#define INCLUDE_DFU_INTERFACE
#ifdef INCLUDE_DFU_INTERFACE
# include <libopenstm32/scb.h>
# include "../usb_dfu/dfu.h"
#include <libopenstm32/scb.h>
#include <usb/dfu.h>
#endif
const struct usb_device_descriptor dev = {

128
examples/stm32-h103/usb_cdcacm/cdc.h

@ -1,128 +0,0 @@
/*
* This file is part of the libopenstm32 project.
*
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __CDC_H
#define __CDC_H
/* Definitions of Communications Device Class from
* "Universal Serial Bus Class Definitions for Communications Devices
* Revision 1.2"
*/
/* Table 2: Communications Device Class Code */
#define USB_CLASS_CDC 0x02
/* Table 4: Class Subclass Code */
#define USB_CDC_SUBCLASS_DLCM 0x01
#define USB_CDC_SUBCLASS_ACM 0x02
/* ... */
/* Table 5 Communications Interface Class Control Protocol Codes */
#define USB_CDC_PROTOCOL_NONE 0x00
#define USB_CDC_PROTOCOL_AT 0x01
/* ... */
/* Table 6: Data Interface Class Code */
#define USB_CLASS_DATA 0x0A
/* Table 12: Type Values for the bDescriptorType Field */
#define CS_INTERFACE 0x24
#define CS_ENDPOINT 0x25
/* Table 13: bDescriptor SubType in Communications Class Functional
* Descriptors */
#define USB_CDC_TYPE_HEADER 0x00
#define USB_CDC_TYPE_CALL_MANAGEMENT 0x01
#define USB_CDC_TYPE_ACM 0x02
/* ... */
#define USB_CDC_TYPE_UNION 0x06
/* ... */
/* Table 15: Class-Specific Descriptor Header Format */
struct usb_cdc_header_descriptor {
uint8_t bFunctionLength;
uint8_t bDescriptorType;
uint8_t bDescriptorSubtype;
uint16_t bcdCDC;
} __attribute__((packed));
/* Table 16: Union Interface Functional Descriptor */
struct usb_cdc_union_descriptor {
uint8_t bFunctionLength;
uint8_t bDescriptorType;
uint8_t bDescriptorSubtype;
uint8_t bControlInterface;
uint8_t bSubordinateInterface0;
/* ... */
} __attribute__((packed));
/* Definitions for Abstract Control Model devices from:
* "Universal Serial Bus Communications Class Subclass Specification for
* PSTN Devices"
*/
/* Table 3: Call Management Functional Descriptor */
struct usb_cdc_call_management_descriptor {
uint8_t bFunctionLength;
uint8_t bDescriptorType;
uint8_t bDescriptorSubtype;
uint8_t bmCapabilities;
uint8_t bDataInterface;
} __attribute__((packed));
/* Table 4: Abstract Control Management Functional Descriptor */
struct usb_cdc_acm_descriptor {
uint8_t bFunctionLength;
uint8_t bDescriptorType;
uint8_t bDescriptorSubtype;
uint8_t bmCapabilities;
} __attribute__((packed));
/* Table 13: Class-Specific Request Codes for PSTN subclasses */
/* ... */
#define USB_CDC_REQ_SET_LINE_CODING 0x20
/* ... */
#define USB_CDC_REQ_SET_CONTROL_LINE_STATE 0x22
/* ... */
/* Table 17: Line Coding Structure */
struct usb_cdc_line_coding {
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} __attribute__((packed));
/* Table 30: Class-Specific Notification Codes for PSTN subclasses */
/* ... */
#define USB_CDC_NOTIFY_SERIAL_STATE 0x28
/* ... */
/* Notification Structure */
struct usb_cdc_notification {
uint8_t bmRequestType;
uint8_t bNotification;
uint16_t wValue;
uint16_t wIndex;
uint16_t wLength;
} __attribute__((packed));
#endif

7
examples/stm32-h103/usb_cdcacm/cdcacm.c

@ -17,12 +17,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <usbd.h>
#include <stdlib.h>
#include "cdc.h"
#include <usb/usbd.h>
#include <usb/cdc.h>
static const struct usb_device_descriptor dev = {
.bLength = USB_DT_DEVICE_SIZE,

81
examples/stm32-h103/usb_dfu/dfu.h

@ -1,81 +0,0 @@
/*
* This file is part of the libopenstm32 project.
*
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __DFU_H
#define __DFU_H
enum dfu_req {
DFU_DETACH,
DFU_DNLOAD,
DFU_UPLOAD,
DFU_GETSTATUS,
DFU_CLRSTATUS,
DFU_GETSTATE,
DFU_ABORT
};
enum dfu_status {
DFU_STATUS_OK,
DFU_STATUS_ERR_TARGET,
DFU_STATUS_ERR_FILE,
DFU_STATUS_ERR_WRITE,
DFU_STATUS_ERR_ERASE,
DFU_STATUS_ERR_CHECK_ERASED,
DFU_STATUS_ERR_PROG,
DFU_STATUS_ERR_VERIFY,
DFU_STATUS_ERR_ADDRESS,
DFU_STATUS_ERR_NOTDONE,
DFU_STATUS_ERR_FIRMWARE,
DFU_STATUS_ERR_VENDOR,
DFU_STATUS_ERR_USBR,
DFU_STATUS_ERR_POR,
DFU_STATUS_ERR_UNKNOWN,
DFU_STATUS_ERR_STALLEDPKT,
};
enum dfu_state {
STATE_APP_IDLE,
STATE_APP_DETACH,
STATE_DFU_IDLE,
STATE_DFU_DNLOAD_SYNC,
STATE_DFU_DNBUSY,
STATE_DFU_DNLOAD_IDLE,
STATE_DFU_MANIFEST_SYNC,
STATE_DFU_MANIFEST,
STATE_DFU_MANIFEST_WAIT_RESET,
STATE_DFU_UPLOAD_IDLE,
STATE_DFU_ERROR,
};
#define DFU_FUNCTIONAL 0x21
struct usb_dfu_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t bmAttributes;
#define USB_DFU_CAN_DOWNLOAD 0x01
#define USB_DFU_CAN_UPLOAD 0x02
#define USB_DFU_MANIFEST_TOLERANT 0x04
#define USB_DFU_WILL_DETACH 0x08
uint16_t wDetachTimeout;
uint16_t wTransferSize;
uint16_t bcdDFUVersion;
} __attribute__((packed));
#endif

8
examples/stm32-h103/usb_dfu/usbdfu.c

@ -17,15 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/flash.h>
#include <libopenstm32/scb.h>
#include <usbd.h>
#include <string.h>
#include "dfu.h"
#include <usb/usbd.h>
#include <usb/dfu.h>
#define APP_ADDRESS 0x08002000

38
examples/stm32-h103/usb_hid/hid.h

@ -1,38 +0,0 @@
/*
* This file is part of the libopenstm32 project.
*
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __HID_H
#define __HID_H
#include <stdint.h>
#define USB_CLASS_HID 3
#define USB_DT_HID 0x21
#define USB_DT_REPORT 0x22
struct usb_hid_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdHID;
uint8_t bCountryCode;
uint8_t bNumDescriptors;
} __attribute__((packed));
#endif

12
examples/stm32-h103/usb_hid/usbhid.c

@ -17,21 +17,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/systick.h>
#include <usbd.h>
#include <stdlib.h>
#include "hid.h"
#include <usb/usbd.h>
#include <usb/hid.h>
/* Define this to include the DFU APP interface. */
#define INCLUDE_DFU_INTERFACE
#ifdef INCLUDE_DFU_INTERFACE
# include <libopenstm32/scb.h>
# include "../usb_dfu/dfu.h"
#include <libopenstm32/scb.h>
#include <usb/dfu.h>
#endif
const struct usb_device_descriptor dev = {

8
examples/stm32-h103/usb_iap/usbiap.c

@ -17,15 +17,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include <libopenstm32/rcc.h>
#include <libopenstm32/gpio.h>
#include <libopenstm32/flash.h>
#include <libopenstm32/scb.h>
#include <usbd.h>
#include <string.h>
#include "dfu.h"
#include <usb/usbd.h>
#include <usb/dfu.h>
#define APP_ADDRESS 0x08002000

0
examples/other/usb_cdcacm/cdc.h → include/usb/cdc.h

0
examples/lisa-m/usb_dfu/dfu.h → include/usb/dfu.h

0
examples/lisa-m/usb_hid/hid.h → include/usb/hid.h

2
include/usbd.h → include/usb/usbd.h

@ -20,7 +20,7 @@
#ifndef __USBD_H
#define __USBD_H
#include <usbstd.h>
#include <usb/usbstd.h>
/* Static buffer for control transactions:
* This is defined as weak in the library, applicaiton

0
include/usbstd.h → include/usb/usbstd.h

3
lib/usb/usb.c

@ -17,8 +17,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <usbd.h>
#include <string.h>
#include <usb/usbd.h>
#include "usb_private.h"
struct _usbd_device _usbd_device;
@ -92,4 +92,3 @@ void _usbd_reset(void)
if(_usbd_device.user_callback_reset)
_usbd_device.user_callback_reset();
}

3
lib/usb/usb_control.c

@ -17,8 +17,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <usbd.h>
#include <stdlib.h>
#include <usb/usbd.h>
#include "usb_private.h"
static struct usb_control_state {
@ -251,4 +251,3 @@ void _usbd_control_in(uint8_t ea)
usbd_ep_stall_set(0, 1);
}
}

5
lib/usb/usb_f103.c

@ -20,9 +20,7 @@
#include <libopenstm32/common.h>
#include <libopenstm32/tools.h>
#include <libopenstm32/usb.h>
#include <usbd.h>
#include <usb/usbd.h>
#include "usb_private.h"
/** Initialize USB Device Controller.
@ -250,4 +248,3 @@ void usbd_poll(void)
if(istr & USB_ISTR_SOF)
USB_CLR_ISTR_SOF();
}

2
lib/usb/usb_private.h

@ -17,7 +17,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __USB_PRIVATE_H
#define __USB_PRIVATE_H
@ -77,4 +76,3 @@ void _usbd_hw_set_address(uint8_t addr);
void _usbd_hw_endpoints_reset(void);
#endif

4
lib/usb/usb_standard.c

@ -18,8 +18,7 @@
*/
#include <string.h>
#include <usbd.h>
#include <usb/usbd.h>
#include "usb_private.h"
void usbd_register_set_config_callback(void (*callback)(uint16_t wValue))
@ -370,4 +369,3 @@ int _usbd_standard_request(struct usb_setup_data *req, uint8_t **buf,
return 0;
}
}

Loading…
Cancel
Save