diff --git a/ChangeLog b/ChangeLog index 3583e85..a3ab6b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2015-03-31 Niibe Yutaka + + * src/usb_conf.h (ICC_NUM_INTERFACES, HID_NUM_INTERFACES) + (HID_NUM_INTERFACES, VCOM_NUM_INTERFACES, MSC_NUM_INTERFACES) + (NUM_INTERFACES): Define here (moved from usb_desc.c). + (ICC_INTERFACE, HID_INTERFACE, VCOM_INTERFACE_0, VCOM_INTERFACE_1) + (MSC_INTERFACE): New. + * src/usb_ctrl.c (gnuk_setup_endpoints_for_interface) + (usb_cb_setup, usb_cb_ctrl_write_finish): Use *_INTERFACE. + * src/usb_desc.c (gnukConfigDescriptor): Likewise. + 2015-03-06 Niibe Yutaka * src/ecc-edwards.c (eddsa_sign_25519): Return 0. diff --git a/README b/README index 70c5d76..83e8595 100644 --- a/README +++ b/README @@ -544,7 +544,7 @@ See doc/note/firmware-update. Git Repositories ================ -Please use: https://anonscm.debian.org/cgit/gnuk/ +Please use: https://anonscm.debian.org/cgit/gnuk/gnuk/ You can get it by: @@ -570,6 +570,14 @@ Information on the Web Please visit: http://www.fsij.org/gnuk/ +Please see the FST-01 support pages: + + http://www.gniibe.org/category/fst-01.html + +Please consider to join Gnuk-users mailing list: + + https://lists.alioth.debian.org/mailman/listinfo/gnuk-users + Your Contributions ================== @@ -580,5 +588,6 @@ to FSIJ (if possible). Foot note ========== + * NUK(R) is a registered trademark owend by MAPA GmbH, Germany. -- diff --git a/src/usb_conf.h b/src/usb_conf.h index 2fb0424..c9c67d6 100644 --- a/src/usb_conf.h +++ b/src/usb_conf.h @@ -4,6 +4,29 @@ #define __USB_CONF_H #define NUM_STRING_DESC 7 +#define ICC_NUM_INTERFACES 1 +#define ICC_INTERFACE 0 +#ifdef HID_CARD_CHANGE_SUPPORT +#define HID_NUM_INTERFACES 1 +#define HID_INTERFACE 1 +#else +#define HID_NUM_INTERFACES 0 +#endif +#ifdef ENABLE_VIRTUAL_COM_PORT +#define VCOM_NUM_INTERFACES 2 +#define VCOM_INTERFACE_0 (ICC_NUM_INTERFACES + HID_NUM_INTERFACES) +#define VCOM_INTERFACE_1 (ICC_NUM_INTERFACES + HID_NUM_INTERFACES + 1) +#else +#define VCOM_NUM_INTERFACES 0 +#endif +#ifdef PINPAD_DND_SUPPORT +#define MSC_NUM_INTERFACES 1 +#define MSC_INTERFACE (ICC_NUM_INTERFACES + HID_NUM_INTERFACES + VCOM_NUM_INTERFACES) +#else +#define MSC_NUM_INTERFACES 0 +#endif +#define NUM_INTERFACES (ICC_NUM_INTERFACES + HID_NUM_INTERFACES \ + + VCOM_NUM_INTERFACES + MSC_NUM_INTERFACES) #if defined(USB_SELF_POWERED) #define USB_INITIAL_FEATURE 0xC0 /* bmAttributes: self powered */ diff --git a/src/usb_ctrl.c b/src/usb_ctrl.c index 67b102e..00979dc 100644 --- a/src/usb_ctrl.c +++ b/src/usb_ctrl.c @@ -103,22 +103,12 @@ vcom_port_data_setup (uint8_t req, uint8_t req_no, uint16_t value) return USB_UNSUPPORT; } - -#define VCOM_NUM_INTERFACES 2 -#else -#define VCOM_NUM_INTERFACES 0 #endif #ifdef PINPAD_DND_SUPPORT #include "usb-msc.h" -#define MSC_NUM_INTERFACES 1 -#else -#define MSC_NUM_INTERFACES 0 #endif -#define NUM_INTERFACES (2+VCOM_NUM_INTERFACES+MSC_NUM_INTERFACES) -#define MSC_INTERFACE_NO (2+VCOM_NUM_INTERFACES) - uint32_t bDeviceState = UNCONNECTED; /* USB device status */ #define USB_HID_REQ_GET_REPORT 1 @@ -142,7 +132,7 @@ static uint16_t hid_report; static void gnuk_setup_endpoints_for_interface (uint16_t interface, int stop) { - if (interface == 0) + if (interface == ICC_INTERFACE) { if (!stop) { @@ -158,7 +148,7 @@ gnuk_setup_endpoints_for_interface (uint16_t interface, int stop) } } #ifdef HID_CARD_CHANGE_SUPPORT - else if (interface == 1) + else if (interface == HID_INTERFACE) { if (!stop) usb_lld_setup_endpoint (ENDP7, EP_INTERRUPT, 0, 0, ENDP7_TXADDR, 0); @@ -167,14 +157,14 @@ gnuk_setup_endpoints_for_interface (uint16_t interface, int stop) } #endif #ifdef ENABLE_VIRTUAL_COM_PORT - else if (interface == 2) + else if (interface == VCOM_INTERFACE_0) { if (!stop) usb_lld_setup_endpoint (ENDP4, EP_INTERRUPT, 0, 0, ENDP4_TXADDR, 0); else usb_lld_stall_tx (ENDP4); } - else if (interface == 3) + else if (interface == VCOM_INTERFACE_1) { if (!stop) { @@ -190,7 +180,7 @@ gnuk_setup_endpoints_for_interface (uint16_t interface, int stop) } #endif #ifdef PINPAD_DND_SUPPORT - else if (interface == MSC_INTERFACE_NO) + else if (interface == MSC_INTERFACE) { if (!stop) usb_lld_setup_endpoint (ENDP6, EP_BULK, 0, @@ -328,7 +318,7 @@ usb_cb_setup (uint8_t req, uint8_t req_no, } else if (type_rcp == (CLASS_REQUEST | INTERFACE_RECIPIENT)) { - if (index == 0) + if (index == ICC_INTERFACE) { if (USB_SETUP_GET (req)) { @@ -353,7 +343,7 @@ usb_cb_setup (uint8_t req, uint8_t req_no, } } #ifdef HID_CARD_CHANGE_SUPPORT - else if (index == 1) + else if (index == HID_INTERFACE) { switch (req_no) { @@ -386,11 +376,11 @@ usb_cb_setup (uint8_t req, uint8_t req_no, } #endif #ifdef ENABLE_VIRTUAL_COM_PORT - else if (index == 2) + else if (index == VCOM_INTERFACE_0) return vcom_port_data_setup (req, req_no, value); #endif #ifdef PINPAD_DND_SUPPORT - else if (index == MSC_INTERFACE_NO) + else if (index == MSC_INTERFACE) { if (USB_SETUP_GET (req)) { @@ -433,7 +423,7 @@ usb_cb_ctrl_write_finish (uint8_t req, uint8_t req_no, uint16_t value, #ifdef HID_CARD_CHANGE_SUPPORT else if (type_rcp == (CLASS_REQUEST | INTERFACE_RECIPIENT)) { - if (index == 1 && req_no == USB_HID_REQ_SET_REPORT) + if (index == HID_INTERFACE && req_no == USB_HID_REQ_SET_REPORT) { if ((hid_report ^ hid_report_saved) & HID_LED_STATUS_CARDCHANGE) ccid_card_change_signal (CARD_CHANGE_TOGGLE); diff --git a/src/usb_desc.c b/src/usb_desc.c index 5b3eac8..96d0007 100644 --- a/src/usb_desc.c +++ b/src/usb_desc.c @@ -75,37 +75,27 @@ static const uint8_t gnukDeviceDescriptor[] = { }; #define ICC_TOTAL_LENGTH (9+9+54+7+7+7) -#define ICC_NUM_INTERFACES 1 #ifdef HID_CARD_CHANGE_SUPPORT #define HID_TOTAL_LENGTH (9+9+7) -#define HID_NUM_INTERFACES 1 #else #define HID_TOTAL_LENGTH 0 -#define HID_NUM_INTERFACES 0 #endif #ifdef ENABLE_VIRTUAL_COM_PORT #define VCOM_TOTAL_LENGTH (9+5+5+4+5+7+9+7+7) -#define VCOM_NUM_INTERFACES 2 #else #define VCOM_TOTAL_LENGTH 0 -#define VCOM_NUM_INTERFACES 0 #endif #ifdef PINPAD_DND_SUPPORT #define MSC_TOTAL_LENGTH (9+7+7) -#define MSC_NUM_INTERFACES 1 #else #define MSC_TOTAL_LENGTH 0 -#define MSC_NUM_INTERFACES 0 #endif #define W_TOTAL_LENGTH (ICC_TOTAL_LENGTH + HID_TOTAL_LENGTH \ + VCOM_TOTAL_LENGTH + MSC_TOTAL_LENGTH) -#define NUM_INTERFACES (ICC_NUM_INTERFACES + HID_NUM_INTERFACES \ - + VCOM_NUM_INTERFACES + MSC_NUM_INTERFACES) - /* Configuation Descriptor */ @@ -122,7 +112,7 @@ static const uint8_t gnukConfigDescriptor[] = { /* Interface Descriptor */ 9, /* bLength: Interface Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ - 0, /* bInterfaceNumber: Index of this interface */ + ICC_INTERFACE, /* bInterfaceNumber: Index of this interface */ 0, /* Alternate setting for this interface */ 3, /* bNumEndpoints: Bulk-IN, Bulk-OUT, Intr-IN */ USB_ICC_INTERFACE_CLASS, @@ -207,7 +197,7 @@ static const uint8_t gnukConfigDescriptor[] = { /* Interface Descriptor */ 9, /* bLength: Interface Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ - 0x01, /* bInterfaceNumber: Number of Interface */ + HID_INTERFACE, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x01, /* bNumEndpoints: One endpoint used */ 0x03, /* bInterfaceClass: HID */ @@ -236,7 +226,7 @@ static const uint8_t gnukConfigDescriptor[] = { /* Interface Descriptor */ 9, /* bLength: Interface Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ - 0x02, /* bInterfaceNumber: Number of Interface */ + VCOM_INTERFACE_0, /* bInterfaceNumber: Index of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x01, /* bNumEndpoints: One endpoints used */ 0x02, /* bInterfaceClass: Communication Interface Class */ @@ -247,14 +237,13 @@ static const uint8_t gnukConfigDescriptor[] = { 5, /* bLength: Endpoint Descriptor size */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x00, /* bDescriptorSubtype: Header Func Desc */ - 0x10, /* bcdCDC: spec release number */ - 0x01, + 0x10, 0x01, /* bcdCDC: spec release number */ /*Call Managment Functional Descriptor*/ 5, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x01, /* bDescriptorSubtype: Call Management Func Desc */ 0x03, /* bmCapabilities: D0+D1 */ - 0x02, /* bDataInterface: 2 */ + VCOM_INTERFACE_1, /* bDataInterface */ /*ACM Functional Descriptor*/ 4, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ @@ -264,8 +253,8 @@ static const uint8_t gnukConfigDescriptor[] = { 5, /* bFunctionLength */ 0x24, /* bDescriptorType: CS_INTERFACE */ 0x06, /* bDescriptorSubtype: Union func desc */ - 0x01, /* bMasterInterface: Communication class interface */ - 0x02, /* bSlaveInterface0: Data Class Interface */ + VCOM_INTERFACE_0, /* bMasterInterface: Communication class interface */ + VCOM_INTERFACE_1, /* bSlaveInterface0: Data Class Interface */ /*Endpoint 4 Descriptor*/ 7, /* bLength: Endpoint Descriptor size */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ @@ -277,7 +266,7 @@ static const uint8_t gnukConfigDescriptor[] = { /*Data class interface descriptor*/ 9, /* bLength: Endpoint Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */ - 0x03, /* bInterfaceNumber: Number of Interface */ + VCOM_INTERFACE_1, /* bInterfaceNumber: Index of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x02, /* bNumEndpoints: Two endpoints used */ 0x0A, /* bInterfaceClass: CDC */ @@ -303,11 +292,7 @@ static const uint8_t gnukConfigDescriptor[] = { /* Interface Descriptor.*/ 9, /* bLength: Interface Descriptor size */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ -#ifdef ENABLE_VIRTUAL_COM_PORT - 0x04, /* bInterfaceNumber. */ -#else - 0x02, /* bInterfaceNumber. */ -#endif + MSC_INTERFACE, /* bInterfaceNumber. */ 0x00, /* bAlternateSetting. */ 0x02, /* bNumEndpoints. */ 0x08, /* bInterfaceClass (Mass Stprage). */