Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / Projects / Incomplete / StandaloneProgrammer / DiskHost.c
index c554141..a0e2521 100644 (file)
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\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
-  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
-#include "DiskHost.h"\r
-\r
-#if defined(USB_CAN_BE_HOST)\r
-/** LUFA Mass Storage Class driver interface configuration and state information. This structure is\r
- *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_MS_Host_t DiskHost_MS_Interface =\r
-       {\r
-               .Config =\r
-                       {\r
-                               .DataINPipeNumber       = 1,\r
-                               .DataINPipeDoubleBank   = false,\r
-                               \r
-                               .DataOUTPipeNumber      = 2,\r
-                               .DataOUTPipeDoubleBank  = false,\r
-                       },\r
-       };\r
-\r
-void DiskHost_USBTask(void)\r
-{\r
-       if (USB_HostState == HOST_STATE_Addressed)\r
-       {\r
-               LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-       \r
-               uint16_t ConfigDescriptorSize;\r
-               uint8_t  ConfigDescriptorData[512];\r
-\r
-               if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,\r
-                                                                                          sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)\r
-               {\r
-                       printf("ERROR - GetConfig\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-\r
-               if (MS_Host_ConfigurePipes(&DiskHost_MS_Interface,\r
-                                                                       ConfigDescriptorSize, ConfigDescriptorData) != MS_ENUMERROR_NoError)\r
-               {\r
-                       printf("ERROR - Pipes\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-               \r
-               if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)\r
-               {\r
-                       printf("ERROR - SetConfig\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-\r
-               uint8_t MaxLUNIndex;\r
-               if (MS_Host_GetMaxLUN(&DiskHost_MS_Interface, &MaxLUNIndex))\r
-               {\r
-                       printf("ERROR - MaxLUN\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-               \r
-               if (MS_Host_ResetMSInterface(&DiskHost_MS_Interface))\r
-               {\r
-                       printf("ERROR - ResetMS\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-               \r
-               SCSI_Request_Sense_Response_t SenseData;\r
-               if (MS_Host_RequestSense(&DiskHost_MS_Interface, 0, &SenseData) != 0)\r
-               {\r
-                       printf("ERROR - Sense\r\n");\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                       return;\r
-               }\r
-               \r
-               pf_mount(&DiskFATState);\r
-               \r
-               LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-               USB_HostState = HOST_STATE_Configured;\r
-       }\r
-\r
-       MS_Host_USBTask(&DiskHost_MS_Interface);                \r
-}\r
-\r
-void EVENT_USB_Host_DeviceAttached(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-void EVENT_USB_Host_DeviceUnattached(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-#endif\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2011.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [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.
+*/
+
+#include "DiskHost.h"
+
+#if defined(USB_CAN_BE_HOST)
+/** LUFA Mass Storage Class driver interface configuration and state information. This structure is
+ *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class
+ *  within a device can be differentiated from one another.
+ */
+USB_ClassInfo_MS_Host_t DiskHost_MS_Interface =
+       {
+               .Config =
+                       {
+                               .DataINPipeNumber       = 1,
+                               .DataINPipeDoubleBank   = false,
+
+                               .DataOUTPipeNumber      = 2,
+                               .DataOUTPipeDoubleBank  = false,
+                       },
+       };
+
+
+void DiskHost_USBTask(void)
+{
+       if (USB_HostState == HOST_STATE_Addressed)
+       {
+               LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+
+               uint16_t ConfigDescriptorSize;
+               uint8_t  ConfigDescriptorData[512];
+
+               if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,
+                                                                                          sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               if (MS_Host_ConfigurePipes(&DiskHost_MS_Interface,
+                                          ConfigDescriptorSize, ConfigDescriptorData) != MS_ENUMERROR_NoError)
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               uint8_t MaxLUNIndex;
+               if (MS_Host_GetMaxLUN(&DiskHost_MS_Interface, &MaxLUNIndex))
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               if (MS_Host_ResetMSInterface(&DiskHost_MS_Interface))
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               USB_HostState = HOST_STATE_Configured;
+
+               /* Note: For the RequestSense call to work, the host state machine must be in the
+                *       Configured state, or the call will be aborted */
+               SCSI_Request_Sense_Response_t SenseData;
+               if (MS_Host_RequestSense(&DiskHost_MS_Interface, 0, &SenseData) != 0)
+               {
+                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+                       return;
+               }
+
+               pf_mount(&DiskFATState);
+
+               LEDs_SetAllLEDs(LEDMASK_USB_READY);
+       }
+
+       MS_Host_USBTask(&DiskHost_MS_Interface);
+}
+
+void EVENT_USB_Host_DeviceAttached(void)
+{
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+}
+
+void EVENT_USB_Host_DeviceUnattached(void)
+{
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+}
+
+#endif
+