aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Class
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-08-11 02:09:11 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-08-11 02:09:11 +0000
commitf4814771d2544cc53098fc8c13657eb41e9e9401 (patch)
tree3c7dd057be76ed411efba2112918a0fce0d36a24 /LUFA/Drivers/USB/Class
parent8711dc7ced0ed02a33a96222d86bd27f65c239ed (diff)
downloadlufa-f4814771d2544cc53098fc8c13657eb41e9e9401.tar.gz
lufa-f4814771d2544cc53098fc8c13657eb41e9e9401.tar.bz2
lufa-f4814771d2544cc53098fc8c13657eb41e9e9401.zip
Completion of initial CDC host mode class driver.
Adjustments to the CDC and MIDI device class drivers to use sizeof() on the actual variable being transmitted or received rather than its datatype to reduce possible mistakes.
Diffstat (limited to 'LUFA/Drivers/USB/Class')
-rw-r--r--LUFA/Drivers/USB/Class/Device/CDC.c6
-rw-r--r--LUFA/Drivers/USB/Class/Device/MIDI.c4
-rw-r--r--LUFA/Drivers/USB/Class/Host/CDC.c33
3 files changed, 34 insertions, 9 deletions
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index 47290ceb6..a6e5e2689 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -195,11 +195,13 @@ void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDC
.bRequest = NOTIF_SerialState,
.wValue = 0,
.wIndex = 0,
- .wLength = sizeof(uint16_t),
+ .wLength = sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost),
};
Endpoint_Write_Stream_LE(&Notification, sizeof(Notification), NO_STREAM_CALLBACK);
- Endpoint_Write_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost, sizeof(uint8_t), NO_STREAM_CALLBACK);
+ Endpoint_Write_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost,
+ sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost),
+ NO_STREAM_CALLBACK);
Endpoint_ClearIN();
}
diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.c b/LUFA/Drivers/USB/Class/Device/MIDI.c
index a74e7a619..76583b173 100644
--- a/LUFA/Drivers/USB/Class/Device/MIDI.c
+++ b/LUFA/Drivers/USB/Class/Device/MIDI.c
@@ -79,7 +79,7 @@ void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfac
if (Endpoint_IsReadWriteAllowed());
{
- Endpoint_Write_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NO_STREAM_CALLBACK);
+ Endpoint_Write_Stream_LE(Event, sizeof(Event), NO_STREAM_CALLBACK);
Endpoint_ClearIN();
}
}
@@ -94,7 +94,7 @@ bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInter
if (!(Endpoint_IsReadWriteAllowed()))
return false;
- Endpoint_Read_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NO_STREAM_CALLBACK);
+ Endpoint_Read_Stream_LE(Event, sizeof(Event), NO_STREAM_CALLBACK);
Endpoint_ClearOUT();
return true;
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index e0e15e145..2985b248e 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -34,12 +34,10 @@
#define INCLUDE_FROM_CDC_CLASS_HOST_C
#include "CDC.h"
-#warning The CDC Host mode Class driver is currently incomplete and is for preview purposes only.
-
uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, uint16_t ConfigDescriptorSize,
uint8_t* ConfigDescriptorData)
{
- uint8_t FoundEndpoints = 0;
+ uint8_t FoundEndpoints = 0;
memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State));
@@ -198,7 +196,32 @@ static uint8_t DComp_CDC_Host_NextInterfaceCDCDataEndpoint(void* CurrentDescript
void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
{
- EVENT_CDC_Host_ControLineStateChanged(CDCInterfaceInfo);
+ if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.Active))
+ return;
+
+ Pipe_SelectPipe(CDCInterfaceInfo->Config.NotificationPipeNumber);
+ Pipe_Unfreeze();
+
+ if (Pipe_IsINReceived())
+ {
+ USB_Request_Header_t Notification;
+ Pipe_Read_Stream_LE(&Notification, sizeof(Notification), NO_STREAM_CALLBACK);
+
+ if ((Notification.bRequest == NOTIF_SerialState) &&
+ (Notification.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)))
+ {
+ Pipe_Read_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost,
+ sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost),
+ NO_STREAM_CALLBACK);
+
+ }
+
+ Pipe_ClearIN();
+
+ EVENT_CDC_Host_ControLineStateChanged(CDCInterfaceInfo);
+ }
+
+ Pipe_Freeze();
}
uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
@@ -206,7 +229,7 @@ uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
- .bRequest = REQ_SetControlLineState,
+ .bRequest = REQ_SetLineEncoding,
.wValue = 0,
.wIndex = CDCInterfaceInfo->State.ControlInterfaceNumber,
.wLength = sizeof(CDCInterfaceInfo->State.LineEncoding),