diff --git a/LUFA.pnproj b/LUFA.pnproj index 8420cc984d..33a77a16ff 100644 --- a/LUFA.pnproj +++ b/LUFA.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt index 5511d64055..2f77e39d32 100644 --- a/LUFA/ManPages/FutureChanges.txt +++ b/LUFA/ManPages/FutureChanges.txt @@ -24,6 +24,7 @@ * - Master LUFA include file rather than per-module includes * - Add multiple-report HID demo to the library * - Add dual role Mouse Host/Keyboard Device demo to the library + * - Add Mouse/CDC dual class demo to the library * - Change makefiles to allow for absolute LUFA location to be used * - Port LUFA to other architectures * -# AVR32 UC3B series microcontrollers diff --git a/Projects/Incomplete/AVRISP/Lib/V2Protocol.c b/Projects/Incomplete/AVRISP/Lib/V2Protocol.c index dc6d3c6683..2feefc8db5 100644 --- a/Projects/Incomplete/AVRISP/Lib/V2Protocol.c +++ b/Projects/Incomplete/AVRISP/Lib/V2Protocol.c @@ -36,77 +36,6 @@ #define INCLUDE_FROM_V2PROTOCOL_C #include "V2Protocol.h" -uint32_t CurrentAddress; - - -/* Table of masks for SPI_Init() from a given PARAM_SCK_DURATION value */ -static const uint8_t SPIMaskFromSCKDuration[] = - { - #if (F_CPU == 8000000) - SPI_SPEED_FCPU_DIV_2, - #endif - SPI_SPEED_FCPU_DIV_2, SPI_SPEED_FCPU_DIV_4, SPI_SPEED_FCPU_DIV_8, - SPI_SPEED_FCPU_DIV_16, SPI_SPEED_FCPU_DIV_32, SPI_SPEED_FCPU_DIV_64 - #if (F_CPU == 16000000) - , SPI_SPEED_FCPU_DIV_128 - #endif - }; - -static uint8_t V2Protocol_GetSPIPrescalerMask(void) -{ - uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION); - - if (SCKDuration >= sizeof(SPIMaskFromSCKDuration)) - SCKDuration = (sizeof(SPIMaskFromSCKDuration) - 1); - - return SPIMaskFromSCKDuration[SCKDuration]; -} - -static void V2Protocol_ChangeTargetResetLine(bool ResetTarget) -{ - if (ResetTarget) - { - RESET_LINE_DDR |= RESET_LINE_MASK; - - if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY))) - RESET_LINE_PORT |= RESET_LINE_MASK; - } - else - { - RESET_LINE_PORT &= ~RESET_LINE_MASK; - RESET_LINE_DDR &= ~RESET_LINE_MASK; - } -} - -static void V2Protocol_DelayMS(uint8_t MS) -{ - while (MS--) - _delay_ms(1); -} - -static uint8_t V2Protocol_WaitWhileTargetBusy(void) -{ - uint8_t TimeoutMS = TARGET_BUST_TIMEOUT_MS; - uint8_t ResponseByte; - - do - { - V2Protocol_DelayMS(1); - - SPI_SendByte(0xF0); - SPI_SendByte(0x00); - - SPI_SendByte(0x00); - ResponseByte = SPI_ReceiveByte(); - } - while ((ResponseByte & 0x01) && (TimeoutMS--)); - - if (!(TimeoutMS)) - return STATUS_CMD_TOUT; - else - return STATUS_CMD_OK; -} - void V2Protocol_ProcessCommand(void) { uint8_t V2Command = Endpoint_Read_Byte(); @@ -223,7 +152,8 @@ static void V2Protocol_Command_LoadAddress(void) Endpoint_ClearOUT(); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - // TODO: Check for extended address + if (CurrentAddress & (1UL << 31)) + V2Protocol_LoadExtendedAddress(); Endpoint_Write_Byte(CMD_LOAD_ADDRESS); Endpoint_Write_Byte(STATUS_CMD_OK); diff --git a/Projects/Incomplete/AVRISP/Lib/V2Protocol.h b/Projects/Incomplete/AVRISP/Lib/V2Protocol.h index 116df8d890..4b60b5610f 100644 --- a/Projects/Incomplete/AVRISP/Lib/V2Protocol.h +++ b/Projects/Incomplete/AVRISP/Lib/V2Protocol.h @@ -37,29 +37,20 @@ #define _V2_PROTOCOL_ /* Includes: */ - #include - #include - #include - #include #include "../Descriptors.h" #include "V2ProtocolConstants.h" #include "V2ProtocolParams.h" + #include "V2ProtocolTarget.h" /* Macros: */ #define PROGRAMMER_ID "AVRISP_MK2" - #define TARGET_BUST_TIMEOUT_MS 100 /* Function Prototypes: */ void V2Protocol_ProcessCommand(void); #if defined(INCLUDE_FROM_V2PROTOCOL_C) - static uint8_t V2Protocol_GetSPIPrescalerMask(void); - static void V2Protocol_ChangeTargetResetLine(bool ResetTarget); - static void V2Protocol_DelayMS(uint8_t MS); - static uint8_t V2Protocol_WaitWhileTargetBusy(void); - static void V2Protocol_Command_Unknown(uint8_t V2Command); static void V2Protocol_Command_SignOn(void); static void V2Protocol_Command_GetSetParam(uint8_t V2Command); diff --git a/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.c b/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.c new file mode 100644 index 0000000000..7bcf0bea42 --- /dev/null +++ b/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.c @@ -0,0 +1,116 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, 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. +*/ + +/** \file + * + * Target-related functions for the V2 Protocol decoder. + */ + +#include "V2ProtocolTarget.h" + +/** Current memory address for FLASH/EEPROM memory read/write commands */ +uint32_t CurrentAddress; + +/** Table of masks for SPI_Init() from a given PARAM_SCK_DURATION value */ +static const uint8_t SPIMaskFromSCKDuration[] = + { + #if (F_CPU == 8000000) + SPI_SPEED_FCPU_DIV_2, + #endif + SPI_SPEED_FCPU_DIV_2, SPI_SPEED_FCPU_DIV_4, SPI_SPEED_FCPU_DIV_8, + SPI_SPEED_FCPU_DIV_16, SPI_SPEED_FCPU_DIV_32, SPI_SPEED_FCPU_DIV_64 + #if (F_CPU == 16000000) + , SPI_SPEED_FCPU_DIV_128 + #endif + }; + + +uint8_t V2Protocol_GetSPIPrescalerMask(void) +{ + uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION); + + if (SCKDuration >= sizeof(SPIMaskFromSCKDuration)) + SCKDuration = (sizeof(SPIMaskFromSCKDuration) - 1); + + return SPIMaskFromSCKDuration[SCKDuration]; +} + +void V2Protocol_ChangeTargetResetLine(bool ResetTarget) +{ + if (ResetTarget) + { + RESET_LINE_DDR |= RESET_LINE_MASK; + + if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY))) + RESET_LINE_PORT |= RESET_LINE_MASK; + } + else + { + RESET_LINE_PORT &= ~RESET_LINE_MASK; + RESET_LINE_DDR &= ~RESET_LINE_MASK; + } +} + +void V2Protocol_DelayMS(uint8_t MS) +{ + while (MS--) + _delay_ms(1); +} + +uint8_t V2Protocol_WaitWhileTargetBusy(void) +{ + uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS; + uint8_t ResponseByte; + + do + { + V2Protocol_DelayMS(1); + + SPI_SendByte(0xF0); + SPI_SendByte(0x00); + + SPI_SendByte(0x00); + ResponseByte = SPI_ReceiveByte(); + } + while ((ResponseByte & 0x01) && (TimeoutMS--)); + + if (!(TimeoutMS)) + return STATUS_CMD_TOUT; + else + return STATUS_CMD_OK; +} + +void V2Protocol_LoadExtendedAddress(void) +{ + SPI_SendByte(0x4D); + SPI_SendByte(0x00); + SPI_SendByte((CurrentAddress & 0x00FF0000) >> 16); + SPI_SendByte(0x00); +} diff --git a/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.h b/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.h new file mode 100644 index 0000000000..b7b593cdb9 --- /dev/null +++ b/Projects/Incomplete/AVRISP/Lib/V2ProtocolTarget.h @@ -0,0 +1,63 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, 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. +*/ + +/** \file + * + * Header file for V2ProtocolTarget.c. + */ + +#ifndef _V2_PROTOCOL_TARGET_ +#define _V2_PROTOCOL_TARGET_ + + /* Includes: */ + #include + #include + + #include + #include + + #include "../Descriptors.h" + #include "V2ProtocolConstants.h" + #include "V2ProtocolParams.h" + + /* Macros: */ + #define TARGET_BUSY_TIMEOUT_MS 100 + + /* External Variables: */ + extern uint32_t CurrentAddress; + + /* Function Prototypes: */ + uint8_t V2Protocol_GetSPIPrescalerMask(void); + void V2Protocol_ChangeTargetResetLine(bool ResetTarget); + void V2Protocol_DelayMS(uint8_t MS); + uint8_t V2Protocol_WaitWhileTargetBusy(void); + void V2Protocol_LoadExtendedAddress(void); + +#endif diff --git a/Projects/Incomplete/AVRISP/makefile b/Projects/Incomplete/AVRISP/makefile index b9aee4848c..c4e13ac8ae 100644 --- a/Projects/Incomplete/AVRISP/makefile +++ b/Projects/Incomplete/AVRISP/makefile @@ -137,6 +137,7 @@ SRC = $(TARGET).c \ Descriptors.c \ Lib/V2Protocol.c \ Lib/V2ProtocolParams.c \ + Lib/V2ProtocolTarget.c \ $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \