]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
clean descriptor setting. Remove keyboard OUT Endpoint.
authortmk <nobody@nowhere>
Thu, 28 Jun 2012 03:59:17 +0000 (12:59 +0900)
committertmk <nobody@nowhere>
Thu, 28 Jun 2012 03:59:17 +0000 (12:59 +0900)
- to make descriptor get VID/PID/Version from config.h.
- remove keyboard out endpoint. Instead host can use control request.

keyboard/lufa/Makefile
keyboard/lufa/config.h
keyboard/lufa/descriptor.c [moved from keyboard/lufa/Descriptors.c with 89% similarity]
keyboard/lufa/descriptor.h [moved from keyboard/lufa/Descriptors.h with 68% similarity]
keyboard/lufa/lufa.c
keyboard/lufa/lufa.h

index 115c7e6ec689aeb90bf407518b92006f77a506b7..12af013f89d7189cca8e7a3ffbe33e859b6c1a59 100644 (file)
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging,\r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-# Directory common source filess exist\r
-TOP_DIR = ../..\r
-\r
-# Directory keyboard dependent files exist\r
-TARGET_DIR = .\r
-\r
-# MCU name\r
-#MCU = at90usb1287\r
-MCU = atmega32u4\r
-\r
-\r
-# Target architecture (see library "Board Types" documentation).\r
-ARCH = AVR8\r
-\r
-\r
-# Target board (see library "Board Types" documentation, NONE for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called\r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the\r
-#     processor frequency in Hz. You can then use this symbol in your source code to\r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#\r
-#     This will be an integer division of F_USB below, as it is sourced by\r
-#     F_USB after it has run through any CPU prescalers. Note that this value\r
-#     does not *change* the processor frequency - it should merely be updated to\r
-#     reflect the processor speed set externally so that the code can use accurate\r
-#     software delays.\r
-F_CPU = 16000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_USB, in all source code files equal to the\r
-#     input clock frequency (before any prescaling is performed) in Hz. This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_USB = $(F_CPU)\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = lufa\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../protocol\r
-\r
-# Create the LUFA source path variables by including the LUFA root makefile\r
-include $(LUFA_PATH)/LUFA/makefile\r
-\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-LSRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_SRC_USB)                                             \\r
-         $(LUFA_SRC_USBCLASS)\r
-\r
-SRC = $(subst $(LUFA_PATH)/LUFA/,,$(LSRC))\r
-SRC += keymap.c \\r
-       matrix.c \\r
-       led.c\r
-CONFIG_H = config.h\r
-\r
-\r
-\r
-# LUFA library compile-time options and predefined tokens\r
-LUFA_OPTS  = -D USB_DEVICE_ONLY\r
-LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8\r
-LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1\r
-LUFA_OPTS += -D USE_FLASH_DESCRIPTORS\r
-LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-OPT_DEFS  = -DF_CPU=$(F_CPU)UL\r
-OPT_DEFS += -DF_USB=$(F_USB)UL\r
-OPT_DEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH)\r
-OPT_DEFS += $(LUFA_OPTS)\r
-\r
-\r
-\r
-# Search Path\r
-VPATH += $(TARGET_DIR)\r
-VPATH += $(LUFA_PATH)/LUFA\r
-\r
-\r
-include $(TOP_DIR)/protocol.mk\r
-include $(TOP_DIR)/common.mk\r
-include $(TOP_DIR)/rules.mk\r
-\r
-test:\r
-       echo $(SRC)\r
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#  >> Modified for use with the LUFA project. <<
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+# Carlos Lamas
+# Dean Camera
+# Opendous Inc.
+# Denver Gingerich
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+#            have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+#             have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+#               (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+#                (must have Atmel FLIP installed).
+#
+# make doxygen = Generate DoxyGen documentation for the project (must have
+#                DoxyGen installed)
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# Directory common source filess exist
+TOP_DIR = ../..
+
+# Directory keyboard dependent files exist
+TARGET_DIR = .
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+
+# Target board (see library "Board Types" documentation, NONE for projects not requiring
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
+# "Board" inside the application directory.
+BOARD = USBKEY
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+
+# Target file name (without extension).
+TARGET = lufa
+
+
+# Path to the LUFA library
+LUFA_PATH = ../../protocol
+
+# Create the LUFA source path variables by including the LUFA root makefile
+include $(LUFA_PATH)/LUFA/makefile
+
+
+
+# List C source files here. (C dependencies are automatically generated.)
+LUFA_SRC = $(TARGET).c \
+         descriptor.c \
+         $(LUFA_SRC_USB) \
+         $(LUFA_SRC_USBCLASS)
+
+SRC = $(subst $(LUFA_PATH)/LUFA/,,$(LUFA_SRC))
+SRC += keymap.c \
+       matrix.c \
+       led.c
+CONFIG_H = config.h
+
+
+
+# LUFA library compile-time options and predefined tokens
+LUFA_OPTS  = -D USB_DEVICE_ONLY
+LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
+LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
+LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
+LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+
+OPT_DEFS  = -DF_CPU=$(F_CPU)UL
+OPT_DEFS += -DF_USB=$(F_USB)UL
+OPT_DEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH)
+OPT_DEFS += $(LUFA_OPTS)
+
+
+
+# Search Path
+VPATH += $(TARGET_DIR)
+VPATH += $(LUFA_PATH)/LUFA
+
+
+include $(TOP_DIR)/protocol.mk
+include $(TOP_DIR)/common.mk
+include $(TOP_DIR)/rules.mk
+
+test:
+       echo $(SRC)
index 4662e3dd3903f42a0ab6deeb82e522b7a7a1ba37..c375a576f5e63b5a84fecf6b435d19f99dbaf6d0 100644 (file)
@@ -21,10 +21,16 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* controller configuration */
 #include "controller_teensy.h"
 
+
+/* USB Device descriptor */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0xBEE1
+#define DEVICE_VER      0x0101
 #define MANUFACTURER    t.m.k.
 #define PRODUCT         Macway mod(LUFA)
+
+
+/* message strings */
 #define DESCRIPTION     t.m.k. keyboard firmware for Macway mod(LUFA)
 
 
similarity index 89%
rename from keyboard/lufa/Descriptors.c
rename to keyboard/lufa/descriptor.c
index a4e9defab448b62228bbf23eb9ad64c4a17ec8d3..6059fd4a8234a4f16929d6cbb4351a27956b44fd 100644 (file)
   this software.
 */
 
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "Descriptors.h"
+#include "util.h"
+#include "descriptor.h"
 
 
 /*******************************************************************************
@@ -152,9 +146,9 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 
     .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 
-    .VendorID               = 0xFEED,
-    .ProductID              = 0x204D,
-    .ReleaseNumber          = VERSION_BCD(00.02),
+    .VendorID               = VENDOR_ID,
+    .ProductID              = PRODUCT_ID,
+    .ReleaseNumber          = DEVICE_VER,
 
     .ManufacturerStrIndex   = 0x01,
     .ProductStrIndex        = 0x02,
@@ -178,7 +172,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .ConfigurationNumber    = 1,
             .ConfigurationStrIndex  = NO_DESCRIPTOR,
 
-            .ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), //TODO: bus powered?
+            .ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP),
 
             .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
         },
@@ -186,14 +180,14 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
         /*
          * Keyboard
          */
-    .HID1_KeyboardInterface =
+    .HID0_KeyboardInterface =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-            .InterfaceNumber        = 0x00,
+            .InterfaceNumber        = KEYBOARD_INTERFACE,
             .AlternateSetting       = 0x00,
 
-            .TotalEndpoints         = 2,
+            .TotalEndpoints         = 1,
 
             .Class                  = HID_CSCP_HIDClass,
             .SubClass               = HID_CSCP_BootSubclass,
@@ -202,7 +196,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .InterfaceStrIndex      = NO_DESCRIPTOR
         },
 
-    .HID1_KeyboardHID =
+    .HID0_KeyboardHID =
         {
             .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 
@@ -213,7 +207,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .HIDReportLength        = sizeof(KeyboardReport)
         },
 
-    .HID1_ReportINEndpoint =
+    .HID0_ReportINEndpoint =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 
@@ -223,24 +217,14 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .PollingIntervalMS      = 0x01
         },
 
-    .HID1_ReportOUTEndpoint =
-        {
-            .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-            .EndpointAddress        = (ENDPOINT_DIR_OUT | KEYBOARD_OUT_EPNUM),
-            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-            .EndpointSize           = HID_EPSIZE,
-            .PollingIntervalMS      = 0x01
-        },
-
     /*
      * Mouse
      */
-    .HID2_MouseInterface =
+    .HID1_MouseInterface =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-            .InterfaceNumber        = 0x01,
+            .InterfaceNumber        = MOUSE_INTERFACE,
             .AlternateSetting       = 0x00,
 
             .TotalEndpoints         = 1,
@@ -252,7 +236,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .InterfaceStrIndex      = NO_DESCRIPTOR
         },
 
-    .HID2_MouseHID =
+    .HID1_MouseHID =
         {
             .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 
@@ -263,7 +247,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .HIDReportLength        = sizeof(MouseReport)
         },
 
-    .HID2_ReportINEndpoint =
+    .HID1_ReportINEndpoint =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 
@@ -276,11 +260,11 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
     /*
      * Generic
      */
-    .HID3_GenericInterface =
+    .HID2_GenericInterface =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 
-            .InterfaceNumber        = 0x02,
+            .InterfaceNumber        = GENERIC_INTERFACE,
             .AlternateSetting       = 0x00,
 
             .TotalEndpoints         = 2,
@@ -292,7 +276,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .InterfaceStrIndex      = NO_DESCRIPTOR
         },
 
-    .HID3_GenericHID =
+    .HID2_GenericHID =
         {
             .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 
@@ -303,7 +287,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .HIDReportLength        = sizeof(GenericReport)
         },
 
-    .HID3_ReportINEndpoint =
+    .HID2_ReportINEndpoint =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 
@@ -313,7 +297,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
             .PollingIntervalMS      = 0x01
         },
 
-    .HID3_ReportOUTEndpoint =
+    .HID2_ReportOUTEndpoint =
         {
             .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 
@@ -339,14 +323,14 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString =
 {
     .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 
-    .UnicodeString          = L"Dean Camera"    // TODO:
+    .UnicodeString          = LSTR(MANUFACTURER)
 };
 
 const USB_Descriptor_String_t PROGMEM ProductString =
 {
     .Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},
 
-    .UnicodeString          = L"LUFA Mouse and Keyboard Demo"   // TODO:
+    .UnicodeString          = LSTR(PRODUCT)
 };
 
 
@@ -395,31 +379,31 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
             break;
         case HID_DTYPE_HID:
             switch (wIndex) {
-            case 0:
-                Address = &ConfigurationDescriptor.HID1_KeyboardHID;
+            case KEYBOARD_INTERFACE:
+                Address = &ConfigurationDescriptor.HID0_KeyboardHID;
                 Size    = sizeof(USB_HID_Descriptor_HID_t);
                 break;
-            case 1:
-                Address = &ConfigurationDescriptor.HID2_MouseHID;
+            case MOUSE_INTERFACE:
+                Address = &ConfigurationDescriptor.HID1_MouseHID;
                 Size    = sizeof(USB_HID_Descriptor_HID_t);
                 break;
-            case 2:
-                Address = &ConfigurationDescriptor.HID3_GenericHID;
+            case GENERIC_INTERFACE:
+                Address = &ConfigurationDescriptor.HID2_GenericHID;
                 Size    = sizeof(USB_HID_Descriptor_HID_t);
                 break;
             }
             break;
         case HID_DTYPE_Report:
             switch (wIndex) {
-            case 0:
+            case KEYBOARD_INTERFACE:
                 Address = &KeyboardReport;
                 Size    = sizeof(KeyboardReport);
                 break;
-            case 1:
+            case MOUSE_INTERFACE:
                 Address = &MouseReport;
                 Size    = sizeof(MouseReport);
                 break;
-            case 2:
+            case GENERIC_INTERFACE:
                 Address = &GenericReport;
                 Size    = sizeof(GenericReport);
                 break;
similarity index 68%
rename from keyboard/lufa/Descriptors.h
rename to keyboard/lufa/descriptor.h
index 03e2426a379893982a494b8c92dc0ba44a639b5a..19e24c2013ddc91c44792a3de120b236c8120de4 100644 (file)
@@ -1,84 +1,86 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2012.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-/*\r
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com)\r
-\r
-  Permission to use, copy, modify, distribute, and sell this\r
-  software and its documentation for any purpose is hereby granted\r
-  without fee, provided that the above copyright notice appear in\r
-  all copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
-\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-#include <LUFA/Drivers/USB/USB.h>\r
-#include <avr/pgmspace.h>\r
-\r
-\r
-typedef struct\r
-{\r
-    USB_Descriptor_Configuration_Header_t Config;\r
-\r
-    // Keyboard HID Interface\r
-    USB_Descriptor_Interface_t            HID1_KeyboardInterface;\r
-    USB_HID_Descriptor_HID_t              HID1_KeyboardHID;\r
-    USB_Descriptor_Endpoint_t             HID1_ReportINEndpoint;\r
-    USB_Descriptor_Endpoint_t             HID1_ReportOUTEndpoint;\r
-\r
-    // Mouse HID Interface\r
-    USB_Descriptor_Interface_t            HID2_MouseInterface;\r
-    USB_HID_Descriptor_HID_t              HID2_MouseHID;\r
-    USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;\r
-\r
-    // Generic HID Interface\r
-    USB_Descriptor_Interface_t            HID3_GenericInterface;\r
-    USB_HID_Descriptor_HID_t              HID3_GenericHID;\r
-    USB_Descriptor_Endpoint_t             HID3_ReportINEndpoint;\r
-    USB_Descriptor_Endpoint_t             HID3_ReportOUTEndpoint;\r
-} USB_Descriptor_Configuration_t;\r
-\r
-\r
-// Endopoint number/size\r
-#define KEYBOARD_IN_EPNUM         1\r
-#define KEYBOARD_OUT_EPNUM        2\r
-#define MOUSE_IN_EPNUM            3\r
-#define GENERIC_IN_EPNUM          4\r
-#define GENERIC_OUT_EPNUM         5\r
-\r
-#define HID_EPSIZE                8\r
-#define GENERIC_EPSIZE            8\r
-#define GENERIC_REPORT_SIZE       8\r
-\r
-\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,\r
-                                    const uint8_t wIndex,\r
-                                    const void** const DescriptorAddress)\r
-                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Header file for Descriptors.c.
+ */
+
+#ifndef _DESCRIPTORS_H_
+#define _DESCRIPTORS_H_
+
+#include <LUFA/Drivers/USB/USB.h>
+#include <avr/pgmspace.h>
+
+
+typedef struct
+{
+    USB_Descriptor_Configuration_Header_t Config;
+
+    // Keyboard HID Interface
+    USB_Descriptor_Interface_t            HID0_KeyboardInterface;
+    USB_HID_Descriptor_HID_t              HID0_KeyboardHID;
+    USB_Descriptor_Endpoint_t             HID0_ReportINEndpoint;
+
+    // Mouse HID Interface
+    USB_Descriptor_Interface_t            HID1_MouseInterface;
+    USB_HID_Descriptor_HID_t              HID1_MouseHID;
+    USB_Descriptor_Endpoint_t             HID1_ReportINEndpoint;
+
+    // Generic HID Interface
+    USB_Descriptor_Interface_t            HID2_GenericInterface;
+    USB_HID_Descriptor_HID_t              HID2_GenericHID;
+    USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
+    USB_Descriptor_Endpoint_t             HID2_ReportOUTEndpoint;
+} USB_Descriptor_Configuration_t;
+
+
+#define KEYBOARD_INTERFACE          0
+#define MOUSE_INTERFACE             1
+#define GENERIC_INTERFACE           2
+
+// Endopoint number/size
+#define KEYBOARD_IN_EPNUM           1
+#define MOUSE_IN_EPNUM              2
+#define GENERIC_IN_EPNUM            3
+#define GENERIC_OUT_EPNUM           4
+
+#define HID_EPSIZE                  8
+#define GENERIC_EPSIZE              8
+#define GENERIC_REPORT_SIZE         8
+
+
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
+                                    const uint8_t wIndex,
+                                    const void** const DescriptorAddress)
+                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
+
+#endif
index d841f45c6aaa8cea7b30411b22a01cf6154d6014..569960e2a9aa91251b585dfe11659459928bd74e 100644 (file)
 #include "keyboard.h"
 #include "sendchar.h"
 #include "debug.h"
+
+#include "descriptor.h"
 #include "lufa.h"
 
 static uint8_t keyboard_led_stats = 0;
-report_keyboard_t keyboard_report_sent;
-report_mouse_t mouse_report_sent;
+
+// TODO: impl Control Request GET_REPORT
+static report_keyboard_t keyboard_report_sent;
+static report_mouse_t mouse_report_sent;
 
 /* Host driver */
 static uint8_t keyboard_leds(void);
@@ -63,6 +67,9 @@ static host_driver_t lufa_driver = {
 };
 
 
+static void SetupHardware(void);
+static void Generic_HID_Task(void);
+
 int main(void)
 {
     SetupHardware();
@@ -74,20 +81,23 @@ int main(void)
     debug_keyboard = true;
     debug_mouse = true;
 
-    _delay_ms(3000);
+/* TODO: can't print here
+    _delay_ms(5000);
+    USB_USBTask();
     print("abcdefg\n");
+    USB_USBTask();
+*/
 
     keyboard_init();
     host_set_driver(&lufa_driver);
     while (1) {
         keyboard_proc();
-        Keyboard_HID_Task();
+
         Generic_HID_Task();
         USB_USBTask();
     }
 }
 
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
 void SetupHardware(void)
 {
     /* Disable watchdog if enabled by bootloader/fuses */
@@ -100,6 +110,46 @@ void SetupHardware(void)
     USB_Init();
 }
 
+static void Generic_HID_Task(void)
+{
+       /* Device must be connected and configured for the task to run */
+       if (USB_DeviceState != DEVICE_STATE_Configured)
+         return;
+
+        // TODO: impl receivechar()/recvchar()
+       Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);
+
+       /* Check to see if a packet has been sent from the host */
+       if (Endpoint_IsOUTReceived())
+       {
+               /* Check to see if the packet contains data */
+               if (Endpoint_IsReadWriteAllowed())
+               {
+                       /* Create a temporary buffer to hold the read in report from the host */
+                       uint8_t GenericData[GENERIC_REPORT_SIZE];
+
+                       /* Read Generic Report Data */
+                       Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData), NULL);
+
+                       /* Process Generic Report Data */
+                       //ProcessGenericHIDReport(GenericData);
+               }
+
+               /* Finalize the stream transfer to send the last packet */
+               Endpoint_ClearOUT();
+       }
+
+        /* IN packet */
+       Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);
+        // send IN packet
+       if (Endpoint_IsINReady())
+            Endpoint_ClearIN();
+}
+
+
+/*******************************************************************************
+ * USB Events
+ ******************************************************************************/
 /** Event handler for the USB_Connect event. */
 void EVENT_USB_Device_Connect(void)
 {
@@ -120,18 +170,16 @@ void EVENT_USB_Device_ConfigurationChanged(void)
     /* Setup Keyboard HID Report Endpoints */
     ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
                                                 HID_EPSIZE, ENDPOINT_BANK_SINGLE);
-    ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
-                                                HID_EPSIZE, ENDPOINT_BANK_SINGLE);
 
     /* Setup Mouse HID Report Endpoint */
     ConfigSuccess &= Endpoint_ConfigureEndpoint(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
                                                 HID_EPSIZE, ENDPOINT_BANK_SINGLE);
 
-       /* Setup Generic HID Report Endpoints */
-       ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
-                                                   GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
-       ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
-                                                   GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
+    /* Setup Generic HID Report Endpoints */
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
+                                                GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
+                                                GENERIC_EPSIZE, ENDPOINT_BANK_SINGLE);
 }
 
 /** Event handler for the USB_ControlRequest event.
@@ -152,15 +200,17 @@ void EVENT_USB_Device_ControlRequest(void)
 
                 // Interface
                 switch (USB_ControlRequest.wIndex) {
-                case 1: // Keyboard
+                case KEYBOARD_INTERFACE:
+                    // TODO: test/check
                     ReportData = (uint8_t*)&keyboard_report_sent;
                     ReportSize = sizeof(keyboard_report_sent);
                     break;
-                case 2: // Mouse
+                case MOUSE_INTERFACE:
+                    // TODO: test/check
                     ReportData = (uint8_t*)&mouse_report_sent;
                     ReportSize = sizeof(mouse_report_sent);
                     break;
-                case 3: // Generic
+                case GENERIC_INTERFACE:
                     break;
                 }
 
@@ -184,13 +234,14 @@ void EVENT_USB_Device_ControlRequest(void)
 
                 // Interface
                 switch (USB_ControlRequest.wIndex) {
-                case 1: // Keyboard
+                case KEYBOARD_INTERFACE:
+                    // TODO: test/check
                     /* Read in the LED report from the host */
                     keyboard_led_stats = Endpoint_Read_8();
                     break;
-                case 2: // Mouse
+                case MOUSE_INTERFACE:
                     break;
-                case 3: // Generic
+                case GENERIC_INTERFACE:
                     break;
                 }
 
@@ -202,64 +253,6 @@ void EVENT_USB_Device_ControlRequest(void)
     }
 }
 
-/** Keyboard task.
- *  This processes host LED status reports sent to the device via the keyboard OUT reporting endpoint.
- */
-void Keyboard_HID_Task(void)
-{
-       /* Device must be connected and configured for the task to run */
-       if (USB_DeviceState != DEVICE_STATE_Configured)
-         return;
-
-    /* Select the Keyboard LED Report Endpoint */
-    Endpoint_SelectEndpoint(KEYBOARD_OUT_EPNUM);
-
-    /* Check if Keyboard LED Endpoint Ready for Read/Write */
-    if (Endpoint_IsReadWriteAllowed())
-    {
-        /* Read in the LED report from the host */
-        keyboard_led_stats = Endpoint_Read_8();
-
-        /* Handshake the OUT Endpoint - clear endpoint and ready for next report */
-        Endpoint_ClearOUT();
-    }
-}
-
-void Generic_HID_Task(void)
-{
-       /* Device must be connected and configured for the task to run */
-       if (USB_DeviceState != DEVICE_STATE_Configured)
-         return;
-
-       Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);
-
-       /* Check to see if a packet has been sent from the host */
-       if (Endpoint_IsOUTReceived())
-       {
-               /* Check to see if the packet contains data */
-               if (Endpoint_IsReadWriteAllowed())
-               {
-                       /* Create a temporary buffer to hold the read in report from the host */
-                       uint8_t GenericData[GENERIC_REPORT_SIZE];
-
-                       /* Read Generic Report Data */
-                       Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData), NULL);
-
-                       /* Process Generic Report Data */
-                       //TODO: ProcessGenericHIDReport(GenericData);
-               }
-
-               /* Finalize the stream transfer to send the last packet */
-               Endpoint_ClearOUT();
-       }
-
-        /* IN packet */
-       Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);
-        // send IN packet
-       if (Endpoint_IsINReady())
-            Endpoint_ClearIN();
-}
-
 /*******************************************************************************
  * Host driver 
  ******************************************************************************/
@@ -332,7 +325,6 @@ int8_t sendchar(uint8_t c)
         }
         if (Endpoint_IsStalled())
             return -1;
-        uint16_t currFN = USB_Device_GetFrameNumber();
         if (prevFN != USB_Device_GetFrameNumber()) {
             if (!(timeout--))
                 return -1;
index 3ba14b360b05490cc0c0f17ee61a6f9f6edd0f30..efb8c383781845a56afbd3d6056347a0f71fa0a1 100644 (file)
@@ -1,78 +1,45 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2012.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-/*\r
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com)\r
-\r
-  Permission to use, copy, modify, distribute, and sell this\r
-  software and its documentation for any purpose is hereby granted\r
-  without fee, provided that the above copyright notice appear in\r
-  all copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-#ifndef _LUFA_H_\r
-#define _LUFA_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <avr/interrupt.h>\r
-               #include <stdbool.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY        LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING     (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY           (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR           (LEDS_LED1 | LEDS_LED3)\r
-\r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void Keyboard_ProcessLEDReport(const uint8_t LEDStatus);\r
-               void Keyboard_HID_Task(void);\r
-               void Generic_HID_Task(void);\r
-\r
-               void EVENT_USB_Device_Connect(void);\r
-               void EVENT_USB_Device_Disconnect(void);\r
-               void EVENT_USB_Device_ConfigurationChanged(void);\r
-               void EVENT_USB_Device_ControlRequest(void);\r
-               void EVENT_USB_Device_StartOfFrame(void);\r
-\r
-               void Keyboard_send(USB_KeyboardReport_Data_t report);\r
-#endif\r
-\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#ifndef _LUFA_H_
+#define _LUFA_H_
+
+       /* Includes: */
+#include <avr/io.h>
+#include <avr/wdt.h>
+#include <avr/power.h>
+#include <avr/interrupt.h>
+#include <stdbool.h>
+#include <string.h>
+#include <LUFA/Version.h>
+#include <LUFA/Drivers/USB/USB.h>
+
+#endif