Commit 752b62a91c77eefced7c5d89ab5bbfc45d17c0f0

Authored by rguillom
1 parent 4dcf8810

Descriptors + PAD en cours

lufa-master/PolytechLille/PAD/Descriptors.c
@@ -104,6 +104,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor @@ -104,6 +104,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
104 .InterfaceStrIndex = NO_DESCRIPTOR 104 .InterfaceStrIndex = NO_DESCRIPTOR
105 }, 105 },
106 106
  107 + /*
107 .HID_KeyboardHID = 108 .HID_KeyboardHID =
108 { 109 {
109 .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, 110 .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
@@ -114,6 +115,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor @@ -114,6 +115,7 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
114 .HIDReportType = HID_DTYPE_Report, 115 .HIDReportType = HID_DTYPE_Report,
115 .HIDReportLength = sizeof(KeyboardReport) 116 .HIDReportLength = sizeof(KeyboardReport)
116 }, 117 },
  118 + */
117 119
118 .ReportOUTEndpoint = 120 .ReportOUTEndpoint =
119 { 121 {
@@ -147,17 +149,17 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor @@ -147,17 +149,17 @@ const USB_Descriptor_Configuration_t PROGMEM RelayBoard_ConfigurationDescriptor
147 { 149 {
148 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, 150 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
149 151
150 - .EndpointAddress = KEYBOARD_IN_EPADDR, 152 + .EndpointAddress = KEYBOARD_IN_Bout_EPADDR,
151 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), 153 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
152 .EndpointSize = KEYBOARD_EPSIZE, 154 .EndpointSize = KEYBOARD_EPSIZE,
153 .PollingIntervalMS = 0x05 155 .PollingIntervalMS = 0x05
154 }, 156 },
155 157
156 - .ReportINEndpointJoysticks = 158 + .ReportINEndpointJoystick =
157 { 159 {
158 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, 160 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
159 161
160 - .EndpointAddress = KEYBOARD_IN_EPADDR, 162 + .EndpointAddress = KEYBOARD_IN_Joy_EPADDR,
161 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), 163 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
162 .EndpointSize = KEYBOARD_EPSIZE, 164 .EndpointSize = KEYBOARD_EPSIZE,
163 .PollingIntervalMS = 0x05 165 .PollingIntervalMS = 0x05
lufa-master/PolytechLille/PAD/Descriptors.h
@@ -52,12 +52,12 @@ @@ -52,12 +52,12 @@
52 52
53 // Relay Board Interface 53 // Relay Board Interface
54 USB_Descriptor_Interface_t InterfaceOUT; 54 USB_Descriptor_Interface_t InterfaceOUT;
55 - USB_HID_Descriptor_HID_t HID_KeyboardHID; //UTILE ? 55 + //USB_HID_Descriptor_HID_t HID_KeyboardHID; //UTILE ?
56 USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint; 56 USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint;
57 57
58 USB_Descriptor_Interface_t InterfaceIN; 58 USB_Descriptor_Interface_t InterfaceIN;
59 USB_Descriptor_Endpoint_t HID_ReportINEndpointBoutons; 59 USB_Descriptor_Endpoint_t HID_ReportINEndpointBoutons;
60 - USB_Descriptor_Endpoint_t HID_ReportOUTEndpointJoysticks; 60 + USB_Descriptor_Endpoint_t HID_ReportOUTEndpointJoystick;
61 } USB_Descriptor_Configuration_t; 61 } USB_Descriptor_Configuration_t;
62 62
63 /** Enum for the device interface descriptor IDs within the device. Each interface descriptor 63 /** Enum for the device interface descriptor IDs within the device. Each interface descriptor
@@ -66,7 +66,8 @@ @@ -66,7 +66,8 @@
66 */ 66 */
67 enum InterfaceDescriptors_t 67 enum InterfaceDescriptors_t
68 { 68 {
69 - INTERFACE_ID_RelayBoard = 0, /**< Relay board interface descriptor ID */ 69 + INTERFACE_ID_InterfaceOUT = 0, /**< Relay board interface descriptor ID */
  70 + INTERFACE_ID_InterfaceIN = 1,
70 }; 71 };
71 72
72 /** Enum for the device string descriptor IDs within the device. Each string descriptor should 73 /** Enum for the device string descriptor IDs within the device. Each string descriptor should
@@ -81,6 +82,20 @@ @@ -81,6 +82,20 @@
81 STRING_ID_Serial = 3, /**< Serial number string ID */ 82 STRING_ID_Serial = 3, /**< Serial number string ID */
82 }; 83 };
83 84
  85 + /* Macros: */
  86 +
  87 +
  88 + /** Endpoint address of the Keyboard HID reporting IN endpoint. */
  89 + #define KEYBOARD_IN_Bout_EPADDR (ENDPOINT_DIR_IN | 1) //Adr. EP Boutons
  90 + #define KEYBOARD_IN_Joy_EPADDR (ENDPOINT_DIR_IN | 1) //Adr. EP Joystick
  91 +
  92 + /** Endpoint address of the Keyboard HID reporting OUT endpoint. */
  93 + #define KEYBOARD_OUT_EPADDR (ENDPOINT_DIR_OUT | 2)
  94 +
  95 + /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */
  96 + #define KEYBOARD_EPSIZE 8
  97 +
  98 +
84 /* Function Prototypes: */ 99 /* Function Prototypes: */
85 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, 100 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
86 const uint16_t wIndex, 101 const uint16_t wIndex,
lufa-master/PolytechLille/PAD/PAD.c
@@ -53,7 +53,7 @@ int main(void) @@ -53,7 +53,7 @@ int main(void)
53 USB_USBTask(); 53 USB_USBTask();
54 //HID_Task(); 54 //HID_Task();
55 } 55 }
56 - } 56 +}
57 57
58 /** Configures the board hardware and chip peripherals for the project's functionality. */ 58 /** Configures the board hardware and chip peripherals for the project's functionality. */
59 void SetupHardware(void) 59 void SetupHardware(void)
@@ -65,87 +65,121 @@ void SetupHardware(void) @@ -65,87 +65,121 @@ void SetupHardware(void)
65 65
66 /* Disable clock division */ 66 /* Disable clock division */
67 clock_prescale_set(clock_div_1); 67 clock_prescale_set(clock_div_1);
68 -#endif  
69 68
70 69
71 -//TODO INITIALISATIONS 70 +/**INITIALISATIONS*/
72 /* Hardware Initialization */ 71 /* Hardware Initialization */
73 USB_Init(); 72 USB_Init();
  73 + Serial_init(9600,0); //9600 Bauds, configuration
74 74
75 /* Initialize Relays */ 75 /* Initialize Relays */
76 - DDRC |= ALL_RELAYS;  
77 - PORTC &= ~ALL_RELAYS; 76 + DDRD |= ALL_RELAYS; // Port pour la liaison série
  77 + PORTD &= ~ALL_RELAYS;
78 } 78 }
79 79
80 -/** Event handler for the library USB Control Request reception event. */  
81 -void EVENT_USB_Device_ControlRequest(void) 80 +
  81 +/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration
  82 + * of the USB device after enumeration, and configures the keyboard device endpoints.
  83 + */
  84 +void EVENT_USB_Device_ConfigurationChanged(void)
82 { 85 {
83 - const uint8_t SerialNumber[5] = { 0, 0, 0, 0, 1 };  
84 - uint8_t ControlData[2] = { 0, 0 }; 86 + bool ConfigSuccess = true;
  87 +
  88 + /* Setup HID Report Endpoints */ //MODIFS ICI
  89 + ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_IN_Bout_EPADDR, EP_TYPE_INTERRUPT, KEYBOARD_EPSIZE, 1);
  90 + ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_IN_Joy_EPADDR, EP_TYPE_INTERRUPT, KEYBOARD_EPSIZE, 1);
  91 + ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPADDR, EP_TYPE_INTERRUPT, KEYBOARD_EPSIZE, 1);
  92 +
  93 + /* Turn on Start-of-Frame events for tracking HID report period expiry */
  94 + USB_Device_EnableSOFEvents();
  95 +
  96 + /* Indicate endpoint configuration success or failure */
  97 + //LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
  98 +}
  99 +
  100 +
  101 +/** Sends the next HID report to the host, via the keyboard data endpoint. */
  102 +void SendNextReport(void) //Envoi liaison Série
  103 +{
  104 + static USB_KeyboardReport_Data_t PrevKeyboardReportData;
  105 + USB_KeyboardReport_Data_t KeyboardReportData;
  106 + bool SendReport = false;
  107 +
  108 + /* Create the next keyboard report for transmission to the host */
  109 + CreateKeyboardReport(&KeyboardReportData);
  110 +
  111 + /* Check if the idle period is set and has elapsed */
  112 + if (IdleCount && (!(IdleMSRemaining)))
  113 + {
  114 + /* Reset the idle time remaining counter */
  115 + IdleMSRemaining = IdleCount;
  116 +
  117 + /* Idle period is set and has elapsed, must send a report to the host */
  118 + SendReport = true;
  119 + }
  120 + else
  121 + {
  122 + /* Check to see if the report data has changed - if so a report MUST be sent */
  123 + SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);
  124 + }
  125 +
  126 +
  127 + /** Envoi sur INTERFACE BOUTONS**/
  128 + /* Select the Keyboard Report Endpoint */
  129 + Endpoint_SelectEndpoint(KEYBOARD_IN_Bout_EPADDR);
  130 +
  131 + /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */
  132 + if (Endpoint_IsReadWriteAllowed() && SendReport)
  133 + {
  134 + /* Save the current report data for later comparison to check for changes */
  135 + PrevKeyboardReportData = KeyboardReportData;
85 136
86 - switch (USB_ControlRequest.bRequest) 137 + /* Write Keyboard Report Data */
  138 + Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData), NULL);
  139 +
  140 + /* Finalize the stream transfer to send the last packet */
  141 + Endpoint_ClearIN();
  142 + }
  143 +
  144 + /** Envoi sur INTERFACE Joystick**/
  145 + /* Select the Keyboard Report Endpoint */
  146 + Endpoint_SelectEndpoint(KEYBOARD_IN_Joy_EPADDR);
  147 +
  148 + /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */
  149 + if (Endpoint_IsReadWriteAllowed() && SendReport)
87 { 150 {
88 - case 0x09:  
89 - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))  
90 - {  
91 - LEDs_ToggleLEDs(LEDS_LED1);  
92 -  
93 - Endpoint_ClearSETUP();  
94 -  
95 - Endpoint_Read_Control_Stream_LE(ControlData, sizeof(ControlData));  
96 - Endpoint_ClearIN();  
97 -  
98 - switch (USB_ControlRequest.wValue)  
99 - {  
100 - case 0x303:  
101 - if (ControlData[1]) PORTC &= ~RELAY1; else PORTC |= RELAY1;  
102 - break;  
103 - case 0x306:  
104 - if (ControlData[1]) PORTC &= ~RELAY2; else PORTC |= RELAY2;  
105 - break;  
106 - case 0x309:  
107 - if (ControlData[1]) PORTC &= ~RELAY3; else PORTC |= RELAY3;  
108 - break;  
109 - case 0x30c:  
110 - if (ControlData[1]) PORTC &= ~RELAY4; else PORTC |= RELAY4;  
111 - break;  
112 - }  
113 - }  
114 -  
115 - break;  
116 - case 0x01:  
117 - if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))  
118 - {  
119 - LEDs_ToggleLEDs(LEDS_LED1);  
120 -  
121 - Endpoint_ClearSETUP();  
122 -  
123 - switch (USB_ControlRequest.wValue)  
124 - {  
125 - case 0x301:  
126 - Endpoint_Write_Control_Stream_LE(SerialNumber, sizeof(SerialNumber));  
127 - break;  
128 - case 0x303:  
129 - ControlData[1] = (PORTC & RELAY1) ? 2 : 3;  
130 - break;  
131 - case 0x306:  
132 - ControlData[1] = (PORTC & RELAY2) ? 2 : 3;  
133 - break;  
134 - case 0x309:  
135 - ControlData[1] = (PORTC & RELAY3) ? 2 : 3;  
136 - break;  
137 - case 0x30c:  
138 - ControlData[1] = (PORTC & RELAY4) ? 2 : 3;  
139 - break;  
140 - }  
141 -  
142 - if (ControlData[1])  
143 - Endpoint_Write_Control_Stream_LE(ControlData, sizeof(ControlData));  
144 -  
145 - Endpoint_ClearOUT();  
146 - }  
147 -  
148 - break; 151 + /* Save the current report data for later comparison to check for changes */
  152 + PrevKeyboardReportData = KeyboardReportData;
  153 +
  154 + /* Write Keyboard Report Data */
  155 + Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData), NULL);
  156 +
  157 + /* Finalize the stream transfer to send the last packet */
  158 + Endpoint_ClearIN();
149 } 159 }
150 } 160 }
151 161
  162 +
  163 +/** Reads the next LED status report from the host from the LED data endpoint, if one has been sent. */
  164 +void ReceiveNextReport(void) //Réception Liaison Série
  165 +{
  166 + /* Select the Keyboard LED Report Endpoint */
  167 + Endpoint_SelectEndpoint(KEYBOARD_OUT_EPADDR);
  168 +
  169 + /* Check if Keyboard LED Endpoint contains a packet */
  170 + if (Endpoint_IsOUTReceived())
  171 + {
  172 + /* Check to see if the packet contains data */
  173 + if (Endpoint_IsReadWriteAllowed())
  174 + {
  175 + /* Read in the LED report from the host */
  176 + uint8_t LEDReport = Endpoint_Read_8();
  177 +
  178 + /* Process the read LED report from the host */
  179 + ProcessLEDReport(LEDReport);
  180 + }
  181 +
  182 + /* Handshake the OUT Endpoint - clear endpoint and ready for next report */
  183 + Endpoint_ClearOUT();
  184 + }
  185 +}
lufa-master/PolytechLille/PAD/PAD.h
@@ -45,20 +45,19 @@ @@ -45,20 +45,19 @@
45 45
46 #include "Descriptors.h" 46 #include "Descriptors.h"
47 47
48 - #include <LUFA/Drivers/Board/LEDs.h> 48 + //#include <LUFA/Drivers/Board/LEDs.h>
  49 + #include "LUFA/Drivers/PeripheralSerial.h"
49 #include <LUFA/Drivers/USB/USB.h> 50 #include <LUFA/Drivers/USB/USB.h>
50 #include <LUFA/Platform/Platform.h> 51 #include <LUFA/Platform/Platform.h>
51 52
52 /* Macros: */ 53 /* Macros: */
53 - #define RELAY1 (1 << 7)  
54 - #define RELAY2 (1 << 6)  
55 - #define RELAY3 (1 << 5)  
56 - #define RELAY4 (1 << 4)  
57 - #define ALL_RELAYS (RELAY1 | RELAY2 | RELAY3 | RELAY4) 54 +
58 55
59 /* Function Prototypes: */ 56 /* Function Prototypes: */
60 void SetupHardware(void); 57 void SetupHardware(void);
61 - 58 + void EVENT_USB_Device_ConfigurationChanged(void);
  59 + void SendNextReport(void);
  60 + void ReceiveNextReport(void);
62 void EVENT_USB_Device_ControlRequest(void); 61 void EVENT_USB_Device_ControlRequest(void);
63 62
64 #endif 63 #endif