X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/071e02c6b6b4837fa9cf0b6d4c749994e02638d7..16f09ab50a6a931f0d8ec22a191288641e937eb1:/Projects/MissileLauncher/MissileLauncher.c diff --git a/Projects/MissileLauncher/MissileLauncher.c b/Projects/MissileLauncher/MissileLauncher.c index dcc6e732f..6a98b5459 100644 --- a/Projects/MissileLauncher/MissileLauncher.c +++ b/Projects/MissileLauncher/MissileLauncher.c @@ -2,22 +2,22 @@ USB Missile Launcher Demo Copyright (C) Dave Fletcher, 2010. fletch at fletchtronics dot net - + Based on research by Scott Weston at http://code.google.com/p/pymissile */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Dave Fletcher (fletch [at] fletchtronics [dot] net) - Permission to use, copy, modify, distribute, and sell this + 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 + 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 + 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 @@ -42,50 +42,50 @@ * the application and is responsible for the initial application hardware configuration as well * as the sending of commands to the attached launcher toy. */ - + #include "MissileLauncher.h" /** Launcher first init command report data sequence */ -uint8_t CMD_INITA[8] = { 85, 83, 66, 67, 0, 0, 4, 0 }; +static const uint8_t CMD_INITA[8] = { 85, 83, 66, 67, 0, 0, 4, 0 }; /** Launcher second init command report data sequence */ -uint8_t CMD_INITB[8] = { 85, 83, 66, 67, 0, 64, 2, 0 }; +static const uint8_t CMD_INITB[8] = { 85, 83, 66, 67, 0, 64, 2, 0 }; /** Launcher command report data sequence to stop all movement */ -uint8_t CMD_STOP[8] = { 0, 0, 0, 0, 0, 0, 8, 8 }; +static const uint8_t CMD_STOP[8] = { 0, 0, 0, 0, 0, 0, 8, 8 }; /** Launcher command report data sequence to move left */ -uint8_t CMD_LEFT[8] = { 0, 1, 0, 0, 0, 0, 8, 8 }; +static const uint8_t CMD_LEFT[8] = { 0, 1, 0, 0, 0, 0, 8, 8 }; /** Launcher command report data sequence to move right */ -uint8_t CMD_RIGHT[8] = { 0, 0, 1, 0, 0, 0, 8, 8 }; +static const uint8_t CMD_RIGHT[8] = { 0, 0, 1, 0, 0, 0, 8, 8 }; /** Launcher command report data sequence to move up */ -uint8_t CMD_UP[8] = { 0, 0, 0, 1, 0, 0, 8, 8 }; +static const uint8_t CMD_UP[8] = { 0, 0, 0, 1, 0, 0, 8, 8 }; /** Launcher command report data sequence to move down */ -uint8_t CMD_DOWN[8] = { 0, 0, 0, 0, 1, 0, 8, 8 }; +static const uint8_t CMD_DOWN[8] = { 0, 0, 0, 0, 1, 0, 8, 8 }; /** Launcher command report data sequence to move left and up */ -uint8_t CMD_LEFTUP[8] = { 0, 1, 0, 1, 0, 0, 8, 8 }; +static const uint8_t CMD_LEFTUP[8] = { 0, 1, 0, 1, 0, 0, 8, 8 }; /** Launcher command report data sequence to move right and up */ -uint8_t CMD_RIGHTUP[8] = { 0, 0, 1, 1, 0, 0, 8, 8 }; +static const uint8_t CMD_RIGHTUP[8] = { 0, 0, 1, 1, 0, 0, 8, 8 }; /** Launcher command report data sequence to move left and down */ -uint8_t CMD_LEFTDOWN[8] = { 0, 1, 0, 0, 1, 0, 8, 8 }; +static const uint8_t CMD_LEFTDOWN[8] = { 0, 1, 0, 0, 1, 0, 8, 8 }; /** Launcher command report data sequence to move right and down */ -uint8_t CMD_RIGHTDOWN[8] = { 0, 0, 1, 0, 1, 0, 8, 8 }; +static const uint8_t CMD_RIGHTDOWN[8] = { 0, 0, 1, 0, 1, 0, 8, 8 }; /** Launcher command report data sequence to fire a missile */ -uint8_t CMD_FIRE[8] = { 0, 0, 0, 0, 0, 1, 8, 8 }; +static const uint8_t CMD_FIRE[8] = { 0, 0, 0, 0, 0, 1, 8, 8 }; /** Last command sent to the launcher, to determine what new command (if any) must be sent */ -uint8_t* CmdState; +static const uint8_t* CmdState; /** Buffer to hold a command to send to the launcher */ -uint8_t CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE]; +static uint8_t CmdBuffer[LAUNCHER_CMD_BUFFER_SIZE]; /** Main program entry point. This routine configures the hardware required by the application, then @@ -103,7 +103,7 @@ int main(void) for (;;) { Read_Joystick_Status(); - + HID_Host_Task(); USB_USBTask(); } @@ -151,7 +151,8 @@ void Read_Joystick_Status(void) * \param[in] Report Report data to send. * \param[in] ReportSize Report length in bytes. */ -void Send_Command_Report(uint8_t* const Report, const uint16_t ReportSize) +void Send_Command_Report(const uint8_t* const Report, + const uint16_t ReportSize) { memcpy(CmdBuffer, Report, 8); WriteNextReport(CmdBuffer, ReportSize); @@ -161,7 +162,7 @@ void Send_Command_Report(uint8_t* const Report, const uint16_t ReportSize) * * \param[in] Command One of the command constants. */ -void Send_Command(uint8_t* const Command) +void Send_Command(const uint8_t* const Command) { if ((CmdState == CMD_STOP && Command != CMD_STOP) || (CmdState != CMD_STOP && Command == CMD_STOP)) @@ -172,7 +173,7 @@ void Send_Command(uint8_t* const Command) Send_Command_Report(CMD_INITB, 8); Send_Command_Report(Command, LAUNCHER_CMD_BUFFER_SIZE); } - + CmdState = Command; } @@ -203,7 +204,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) /** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ void EVENT_USB_Host_HostError(const uint8_t ErrorCode) { - USB_ShutDown(); + USB_Disable(); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); for(;;); @@ -212,7 +213,8 @@ void EVENT_USB_Host_HostError(const uint8_t ErrorCode) /** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while * enumerating an attached USB device. */ -void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode) +void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, + const uint8_t SubErrorCode) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } @@ -229,13 +231,13 @@ void DiscardNextReport(void) { /* Refreeze HID data IN pipe */ Pipe_Freeze(); - + return; } - + /* Clear the IN endpoint, ready for next data packet */ Pipe_ClearIN(); - + /* Refreeze HID data IN pipe */ Pipe_Freeze(); } @@ -245,11 +247,12 @@ void DiscardNextReport(void) * \param[in] ReportOUTData Buffer containing the report to send to the device * \param[in] ReportLength Length of the report to send */ -void WriteNextReport(uint8_t* const ReportOUTData, const uint16_t ReportLength) +void WriteNextReport(uint8_t* const ReportOUTData, + const uint16_t ReportLength) { /* Select and unfreeze HID data OUT pipe */ Pipe_SelectPipe(HID_DATA_OUT_PIPE); - + /* Not all HID devices have an OUT endpoint (some require OUT reports to be sent over the * control endpoint instead) - check to see if the OUT endpoint has been initialized */ if (Pipe_IsConfigured()) @@ -261,13 +264,13 @@ void WriteNextReport(uint8_t* const ReportOUTData, const uint16_t ReportLength) { /* Refreeze the data OUT pipe */ Pipe_Freeze(); - + return; } - + /* Write out HID report data */ - Pipe_Write_Stream_LE(ReportOUTData, ReportLength); - + Pipe_Write_Stream_LE(ReportOUTData, ReportLength, NULL); + /* Clear the OUT endpoint, send last data packet */ Pipe_ClearOUT(); @@ -280,7 +283,7 @@ void WriteNextReport(uint8_t* const ReportOUTData, const uint16_t ReportLength) USB_ControlRequest = (USB_Request_Header_t) { .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), - .bRequest = REQ_SetReport, + .bRequest = HID_REQ_SetReport, .wValue = 0x02, .wIndex = 0x01, .wLength = ReportLength, @@ -321,12 +324,12 @@ void HID_Host_Task(void) { /* Indicate error status */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - + /* Wait until USB device disconnected */ USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + USB_HostState = HOST_STATE_Configured; break; case HOST_STATE_Configured: @@ -335,3 +338,4 @@ void HID_Host_Task(void) break; } } +