- switch (USB_HostState)
- {
- case 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)
- {
- puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n"));
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- if (SI_Host_ConfigurePipes(&DigitalCamera_SI_Interface,
- ConfigDescriptorSize, ConfigDescriptorData) != SI_ENUMERROR_NoError)
- {
- puts_P(PSTR("Attached Device Not a Valid Still Image Class Device.\r\n"));
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
- {
- puts_P(PSTR("Error Setting Device Configuration.\r\n"));
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- puts_P(PSTR("Still Image Device Enumerated.\r\n"));
- LEDs_SetAllLEDs(LEDMASK_USB_READY);
- USB_HostState = HOST_STATE_Configured;
- break;
- case HOST_STATE_Configured:
- puts_P(PSTR("Opening Session...\r\n"));
-
- if (SI_Host_OpenSession(&DigitalCamera_SI_Interface) != PIPE_RWSTREAM_NoError)
- {
- puts_P(PSTR("Could not open PIMA session.\r\n"));
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- puts_P(PSTR("Turning off Device...\r\n"));
-
- SI_Host_SendCommand(&DigitalCamera_SI_Interface, 0x1013, 0, NULL);
- if (SI_Host_ReceiveResponse(&DigitalCamera_SI_Interface))
- {
- puts_P(PSTR("Could not turn off device.\r\n"));
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- puts_P(PSTR("Device Off.\r\n"));
-
- puts_P(PSTR("Closing Session...\r\n"));
-
- if (SI_Host_CloseSession(&DigitalCamera_SI_Interface) != PIPE_RWSTREAM_NoError)
- {
- puts_P(PSTR("Could not close PIMA session.\r\n"));
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-
- LEDs_SetAllLEDs(LEDMASK_USB_READY);
- USB_HostState = HOST_STATE_WaitForDeviceRemoval;
- break;
- }
-