Add FatFS library to the Webserver project, extend the HTTP server so that it now...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / Printer.c
index bc8fba8..d1fb7c9 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  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
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [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
@@ -35,7 +35,7 @@
 #include "Printer.h"\r
 \r
 uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo, uint16_t ConfigDescriptorSize,\r
-                                                            uint8_t* DeviceConfigDescriptor)\r
+                                                            void* DeviceConfigDescriptor)\r
 {\r
        uint8_t FoundEndpoints = 0;\r
        \r
@@ -69,7 +69,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
                {\r
                        Pipe_ConfigurePipe(PRNTInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
                                           EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
-                                          PIPE_BANK_DOUBLE);\r
+                                          PRNTInterfaceInfo->Config.DataINPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
                        PRNTInterfaceInfo->State.DataINPipeSize = EndpointData->EndpointSize;\r
 \r
                        FoundEndpoints |= PRNT_FOUND_DATAPIPE_IN;\r
@@ -78,7 +78,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
                {\r
                        Pipe_ConfigurePipe(PRNTInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
                                           EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
-                                          PIPE_BANK_DOUBLE);\r
+                                          PRNTInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE);\r
                        PRNTInterfaceInfo->State.DataOUTPipeSize = EndpointData->EndpointSize;\r
 \r
                        FoundEndpoints |= PRNT_FOUND_DATAPIPE_OUT;\r
@@ -122,11 +122,6 @@ static uint8_t DComp_NextPRNTInterfaceEndpoint(void* CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;\r
 }\r
 \r
-void PRNT_Host_USBTask(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)\r
-{\r
-       \r
-}\r
-\r
 uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)\r
 {\r
        if (PRNTInterfaceInfo->State.AlternateSetting)\r
@@ -135,11 +130,11 @@ uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInte
        \r
                USB_ControlRequest = (USB_Request_Header_t)\r
                        {\r
-                               bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),\r
-                               bRequest:      REQ_SetInterface,\r
-                               wValue:        PRNTInterfaceInfo->State.AlternateSetting,\r
-                               wIndex:        PRNTInterfaceInfo->State.InterfaceNumber,\r
-                               wLength:       0,\r
+                               .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),\r
+                               .bRequest      = REQ_SetInterface,\r
+                               .wValue        = PRNTInterfaceInfo->State.AlternateSetting,\r
+                               .wIndex        = PRNTInterfaceInfo->State.InterfaceNumber,\r
+                               .wLength       = 0,\r
                        };\r
                \r
                Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
@@ -155,11 +150,11 @@ uint8_t PRNT_Host_GetPortStatus(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceIn
 {\r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
-                       bRequest:      REQ_GetPortStatus,\r
-                       wValue:        0,\r
-                       wIndex:        PRNTInterfaceInfo->State.InterfaceNumber,\r
-                       wLength:       sizeof(uint8_t),\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .bRequest      = REQ_GetPortStatus,\r
+                       .wValue        = 0,\r
+                       .wIndex        = PRNTInterfaceInfo->State.InterfaceNumber,\r
+                       .wLength       = sizeof(uint8_t),\r
                };\r
 \r
        Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
@@ -171,11 +166,11 @@ uint8_t PRNT_Host_SoftReset(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
 {\r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
-                       bRequest:      REQ_SoftReset,\r
-                       wValue:        0,\r
-                       wIndex:        PRNTInterfaceInfo->State.InterfaceNumber,\r
-                       wLength:       0,\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .bRequest     = REQ_SoftReset,\r
+                       .wValue       = 0,\r
+                       .wIndex       = PRNTInterfaceInfo->State.InterfaceNumber,\r
+                       .wLength      = 0,\r
                };\r
 \r
        Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
@@ -187,6 +182,9 @@ uint8_t PRNT_Host_SendData(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo, v
 {\r
        uint8_t ErrorCode;\r
 \r
+       if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))\r
+         return PIPE_RWSTREAM_DeviceDisconnected;\r
+\r
        Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataOUTPipeNumber);\r
        Pipe_Unfreeze();\r
        \r
@@ -212,11 +210,11 @@ uint8_t PRNT_Host_GetDeviceID(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo
 \r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
-                       bRequest:      REQ_GetDeviceID,\r
-                       wValue:        0,\r
-                       wIndex:        PRNTInterfaceInfo->State.InterfaceNumber,\r
-                       wLength:       sizeof(DeviceIDStringLength),\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .bRequest      =  REQ_GetDeviceID,\r
+                       .wValue        = 0,\r
+                       .wIndex        = PRNTInterfaceInfo->State.InterfaceNumber,\r
+                       .wLength       = sizeof(DeviceIDStringLength),\r
                };\r
                \r
        Pipe_SelectPipe(PIPE_CONTROLPIPE);\r