aboutsummaryrefslogtreecommitdiffstats
path: root/Demos
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-11-13 13:24:04 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-11-13 13:24:04 +0000
commit588886878e0fe948417123b57c108a1bd7992f85 (patch)
treeb2a87de1c9a49c8c10f9978770a089071d03cb2e /Demos
parente625fd6df33ab2112779728622a717589f0b8417 (diff)
downloadlufa-588886878e0fe948417123b57c108a1bd7992f85.tar.gz
lufa-588886878e0fe948417123b57c108a1bd7992f85.tar.bz2
lufa-588886878e0fe948417123b57c108a1bd7992f85.zip
Corrections, improvements and additions to the incomplete RNDISHost demo.
Change device demos which use the joystick to use the natural UP, DOWN, LEFT, RIGHT ordering in all demos when checking the joystick's position.
Diffstat (limited to 'Demos')
-rw-r--r--Demos/Device/ClassDriver/CDCMouse/CDCMouse.c6
-rw-r--r--Demos/Device/ClassDriver/Joystick/Joystick.c6
-rw-r--r--Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c7
-rw-r--r--Demos/Device/ClassDriver/Mouse/Mouse.c6
-rw-r--r--Demos/Device/LowLevel/Joystick/Joystick.c6
-rw-r--r--Demos/Device/LowLevel/Mouse/Mouse.c6
-rw-r--r--Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.c47
-rw-r--r--Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.h15
-rw-r--r--Demos/Host/Incomplete/RNDISEthernetHost/RNDISEthernetHost.c36
9 files changed, 78 insertions, 57 deletions
diff --git a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
index b625327fb..e21e0bcb4 100644
--- a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
+++ b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c
@@ -210,10 +210,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
else if (JoyStatus_LCL & JOY_DOWN)
MouseReport->Y = 1;
- if (JoyStatus_LCL & JOY_RIGHT)
- MouseReport->X = 1;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
MouseReport->X = -1;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ MouseReport->X = 1;
if (JoyStatus_LCL & JOY_PRESS)
MouseReport->Button = (1 << 0);
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c
index 36a74a218..00bcb6fe4 100644
--- a/Demos/Device/ClassDriver/Joystick/Joystick.c
+++ b/Demos/Device/ClassDriver/Joystick/Joystick.c
@@ -148,10 +148,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
else if (JoyStatus_LCL & JOY_DOWN)
JoystickReport->Y = 100;
- if (JoyStatus_LCL & JOY_RIGHT)
- JoystickReport->X = 100;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
JoystickReport->X = -100;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ JoystickReport->X = 100;
if (JoyStatus_LCL & JOY_PRESS)
JoystickReport->Button = (1 << 1);
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
index 77aa2a91a..caa33f907 100644
--- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
+++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
@@ -170,6 +170,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
uint8_t JoyStatus_LCL = Joystick_GetStatus();
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
+ /* Determine which interface must have its report generated */
if (HIDInterfaceInfo == &Keyboard_HID_Interface)
{
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
@@ -207,10 +208,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
else if (JoyStatus_LCL & JOY_DOWN)
MouseReport->Y = 1;
- if (JoyStatus_LCL & JOY_RIGHT)
- MouseReport->X = 1;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
MouseReport->X = -1;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ MouseReport->X = 1;
if (JoyStatus_LCL & JOY_PRESS)
MouseReport->Button = (1 << 0);
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c
index c53d429a4..c29cc15ef 100644
--- a/Demos/Device/ClassDriver/Mouse/Mouse.c
+++ b/Demos/Device/ClassDriver/Mouse/Mouse.c
@@ -148,10 +148,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
else if (JoyStatus_LCL & JOY_DOWN)
MouseReport->Y = 1;
- if (JoyStatus_LCL & JOY_RIGHT)
- MouseReport->X = 1;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
MouseReport->X = -1;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ MouseReport->X = 1;
if (JoyStatus_LCL & JOY_PRESS)
MouseReport->Button = (1 << 0);
diff --git a/Demos/Device/LowLevel/Joystick/Joystick.c b/Demos/Device/LowLevel/Joystick/Joystick.c
index 6d04c8fa6..aa5244c15 100644
--- a/Demos/Device/LowLevel/Joystick/Joystick.c
+++ b/Demos/Device/LowLevel/Joystick/Joystick.c
@@ -156,10 +156,10 @@ bool GetNextReport(USB_JoystickReport_Data_t* ReportData)
else if (JoyStatus_LCL & JOY_DOWN)
ReportData->Y = 100;
- if (JoyStatus_LCL & JOY_RIGHT)
- ReportData->X = 100;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
ReportData->X = -100;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ ReportData->X = 100;
if (JoyStatus_LCL & JOY_PRESS)
ReportData->Button = (1 << 1);
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c
index 2f7a63f7f..4b318e30c 100644
--- a/Demos/Device/LowLevel/Mouse/Mouse.c
+++ b/Demos/Device/LowLevel/Mouse/Mouse.c
@@ -238,10 +238,10 @@ void CreateMouseReport(USB_MouseReport_Data_t* ReportData)
else if (JoyStatus_LCL & JOY_DOWN)
ReportData->Y = 1;
- if (JoyStatus_LCL & JOY_RIGHT)
- ReportData->X = 1;
- else if (JoyStatus_LCL & JOY_LEFT)
+ if (JoyStatus_LCL & JOY_LEFT)
ReportData->X = -1;
+ else if (JoyStatus_LCL & JOY_RIGHT)
+ ReportData->X = 1;
if (JoyStatus_LCL & JOY_PRESS)
ReportData->Button = (1 << 0);
diff --git a/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.c b/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.c
index e248b18da..4802bedb9 100644
--- a/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.c
+++ b/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.c
@@ -98,18 +98,20 @@ uint8_t RNDIS_KeepAlive(void)
return HOST_SENDCONTROL_Successful;
}
-uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete_t* InitMessageResponse)
+uint8_t RNDIS_InitializeDevice(uint16_t HostMaxPacketSize, uint16_t* DeviceMaxPacketSize)
{
uint8_t ErrorCode;
- RNDIS_Initialize_Message_t InitMessage;
+ RNDIS_Initialize_Message_t InitMessage;
+ RNDIS_Initialize_Complete_t InitMessageResponse;
InitMessage.MessageType = REMOTE_NDIS_INITIALIZE_MSG;
InitMessage.MessageLength = sizeof(RNDIS_Initialize_Message_t);
InitMessage.RequestId = RequestID++;
+
InitMessage.MajorVersion = REMOTE_NDIS_VERSION_MAJOR;
InitMessage.MinorVersion = REMOTE_NDIS_VERSION_MINOR;
- InitMessage.MaxTransferSize = sizeof(RNDIS_Packet_Message_t) + MaxPacketSize;
+ InitMessage.MaxTransferSize = HostMaxPacketSize;
if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&InitMessage,
sizeof(RNDIS_Initialize_Message_t))) != HOST_SENDCONTROL_Successful)
@@ -117,11 +119,16 @@ uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete
return ErrorCode;
}
- if ((ErrorCode = RNDIS_GetEncapsulatedResponse(InitMessageResponse,
+ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&InitMessageResponse,
sizeof(RNDIS_Initialize_Complete_t))) != HOST_SENDCONTROL_Successful)
{
return ErrorCode;
}
+
+ if (InitMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS)
+ return RNDIS_COMMAND_FAILED;
+
+ *DeviceMaxPacketSize = InitMessageResponse.MaxTransferSize;
return HOST_SENDCONTROL_Successful;
}
@@ -138,13 +145,13 @@ uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
RNDIS_Set_Complete_t SetMessageResponse;
- SetMessageData.SetMessage.MessageType = REMOTE_NDIS_SET_MSG;
- SetMessageData.SetMessage.MessageLength = sizeof(RNDIS_Set_Message_t) + Length;
- SetMessageData.SetMessage.RequestId = RequestID++;
+ SetMessageData.SetMessage.MessageType = REMOTE_NDIS_SET_MSG;
+ SetMessageData.SetMessage.MessageLength = sizeof(RNDIS_Set_Message_t) + Length;
+ SetMessageData.SetMessage.RequestId = RequestID++;
- SetMessageData.SetMessage.Oid = Oid;
+ SetMessageData.SetMessage.Oid = Oid;
SetMessageData.SetMessage.InformationBufferLength = Length;
- SetMessageData.SetMessage.InformationBufferOffset = 0;
+ SetMessageData.SetMessage.InformationBufferOffset = (sizeof(RNDIS_Set_Message_t) - sizeof(RNDIS_Message_Header_t));
SetMessageData.SetMessage.DeviceVcHandle = 0;
memcpy(&SetMessageData.ContigiousBuffer, Buffer, Length);
@@ -161,19 +168,22 @@ uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
return ErrorCode;
}
+ if (SetMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS)
+ return RNDIS_COMMAND_FAILED;
+
return HOST_SENDCONTROL_Successful;
}
-uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
+uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t MaxLength)
{
uint8_t ErrorCode;
- RNDIS_Query_Message_t QueryMessage;
+ RNDIS_Query_Message_t QueryMessage;
struct
{
RNDIS_Query_Complete_t QueryMessageResponse;
- uint8_t ContigiousBuffer[Length];
+ uint8_t ContigiousBuffer[MaxLength];
} QueryMessageResponseData;
QueryMessage.MessageType = REMOTE_NDIS_QUERY_MSG;
@@ -181,7 +191,7 @@ uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
QueryMessage.RequestId = RequestID++;
QueryMessage.Oid = Oid;
- QueryMessage.InformationBufferLength = Length;
+ QueryMessage.InformationBufferLength = 0;
QueryMessage.InformationBufferOffset = 0;
QueryMessage.DeviceVcHandle = 0;
@@ -197,12 +207,15 @@ uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
return ErrorCode;
}
- memcpy(Buffer, &QueryMessageResponseData.ContigiousBuffer, Length);
+ if (QueryMessageResponseData.QueryMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS)
+ return RNDIS_COMMAND_FAILED;
+
+ memcpy(Buffer, &QueryMessageResponseData.ContigiousBuffer, MaxLength);
return HOST_SENDCONTROL_Successful;
}
-uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize)
+uint8_t RNDIS_GetPacketLength(uint16_t* PacketLength)
{
uint8_t ErrorCode;
@@ -213,7 +226,9 @@ uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize)
return ErrorCode;
}
- *PacketSize = (uint16_t)DeviceMessage.DataLength;
+ *PacketLength = (uint16_t)DeviceMessage.DataLength;
+
+ Pipe_Discard_Stream(DeviceMessage.DataOffset - (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)));
return PIPE_RWSTREAM_NoError;
}
diff --git a/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.h b/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.h
index 55f848bd0..af3e7cc92 100644
--- a/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.h
+++ b/Demos/Host/Incomplete/RNDISEthernetHost/Lib/RNDISCommands.h
@@ -188,22 +188,25 @@
#define REMOTE_NDIS_VERSION_MINOR 0x00
/** Pipe number for the RNDIS data IN pipe */
- #define RNDIS_DATAPIPE_IN 1
+ #define RNDIS_DATAPIPE_IN 1
/** Pipe number for the RNDIS data OUT pipe */
- #define RNDIS_DATAPIPE_OUT 2
+ #define RNDIS_DATAPIPE_OUT 2
/** Pipe number for the RNDIS notification pipe */
- #define RNDIS_NOTIFICATIONPIPE 3
+ #define RNDIS_NOTIFICATIONPIPE 3
+ /** Additional error code for RNDIS functions when a device returns a logical command failure */
+ #define RNDIS_COMMAND_FAILED 0xC0
+
/* Function Prototypes: */
uint8_t RNDIS_SendEncapsulatedCommand(void* Buffer, uint16_t Length);
uint8_t RNDIS_GetEncapsulatedResponse(void* Buffer, uint16_t Length);
uint8_t RNDIS_KeepAlive(void);
- uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete_t* InitMessageResponse);
+ uint8_t RNDIS_InitializeDevice(uint16_t HostMaxPacketSize, uint16_t* DeviceMaxPacketSize);
uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length);
- uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length);
- uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize);
+ uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t MaxLength);
+ uint8_t RNDIS_GetPacketLength(uint16_t* PacketLength);
#endif
diff --git a/Demos/Host/Incomplete/RNDISEthernetHost/RNDISEthernetHost.c b/Demos/Host/Incomplete/RNDISEthernetHost/RNDISEthernetHost.c
index a64dfbdf2..c84f0c00c 100644
--- a/Demos/Host/Incomplete/RNDISEthernetHost/RNDISEthernetHost.c
+++ b/Demos/Host/Incomplete/RNDISEthernetHost/RNDISEthernetHost.c
@@ -138,31 +138,33 @@ void PrintIncommingPackets(void)
puts_P(PSTR("DATA IN\r\n"));
- uint16_t PacketSize;
- if ((ErrorCode = RNDIS_GetPacketSize(&PacketSize)) != HOST_SENDCONTROL_Successful)
+ uint16_t PacketLength;
+ if ((ErrorCode = RNDIS_GetPacketLength(&PacketLength)) != HOST_SENDCONTROL_Successful)
{
printf_P(PSTR(ESC_FG_RED "Packet Reception Error.\r\n"
- " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+ return;
}
- else if (PacketSize > 2048)
+
+ printf_P(PSTR("***PACKET (Size %d)***\r\n"), PacketLength);
+
+ if (PacketLength > 1024)
{
- printf_P(PSTR(ESC_FG_RED "Packet of Size %d Too Large.\r\n" ESC_FG_WHITE), PacketSize);
- Pipe_Discard_Stream(PacketSize);
+ puts_P(PSTR(ESC_FG_RED "Packet too large.\r\n" ESC_FG_WHITE));
+ Pipe_Discard_Stream(PacketLength);
}
else
{
- uint8_t PacketBuffer[PacketSize];
+ uint8_t PacketBuffer[PacketLength];
- Pipe_Read_Stream_LE(&PacketBuffer, PacketSize);
+ Pipe_Read_Stream_LE(&PacketBuffer, PacketLength);
- printf("***PACKET (Size %d)***\r\n", PacketSize);
- for (uint16_t i = 0; i < PacketSize; i++)
- {
- printf("%02x ", PacketBuffer[i]);
- }
- printf("\r\n\r\n");
+ for (uint16_t i = 0; i < PacketLength; i++)
+ printf("%02x ", PacketBuffer[i]);
}
+ printf("\r\n\r\n");
+
LEDs_SetAllLEDs(LEDMASK_USB_READY);
Pipe_ClearIN();
@@ -213,8 +215,8 @@ void RNDIS_Host_Task(void)
break;
}
- RNDIS_Initialize_Complete_t InitMessageResponse;
- if ((ErrorCode = RNDIS_InitializeDevice(1024, &InitMessageResponse)) != HOST_SENDCONTROL_Successful)
+ uint16_t DeviceMaxPacketSize;
+ if ((ErrorCode = RNDIS_InitializeDevice(1024, &DeviceMaxPacketSize)) != HOST_SENDCONTROL_Successful)
{
printf_P(PSTR(ESC_FG_RED "Error Initializing Device.\r\n"
" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
@@ -227,7 +229,7 @@ void RNDIS_Host_Task(void)
break;
}
- printf_P(PSTR("Device Max Transfer Size: %lu bytes.\r\n"), InitMessageResponse.MaxTransferSize);
+ printf_P(PSTR("Device Max Transfer Size: %lu bytes.\r\n"), DeviceMaxPacketSize);
/* We set the default filter to only receive packets we would be interested in */
uint32_t PacketFilter = (RNDIS_PACKET_TYPE_DIRECTED | RNDIS_PACKET_TYPE_BROADCAST | RNDIS_PACKET_TYPE_ALL_MULTICAST);