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 \