aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/Incomplete/AVRISP/Lib
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-08-20 07:21:43 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-08-20 07:21:43 +0000
commit5acf23b25465b82e5516510ee45aa9ed15178ad5 (patch)
tree09925c16516179e9ceac76a0f28d33d7828c94c9 /Projects/Incomplete/AVRISP/Lib
parent2f95eea14689d30a3172a7e1e30980072bf23fac (diff)
downloadlufa-5acf23b25465b82e5516510ee45aa9ed15178ad5.tar.gz
lufa-5acf23b25465b82e5516510ee45aa9ed15178ad5.tar.bz2
lufa-5acf23b25465b82e5516510ee45aa9ed15178ad5.zip
Renamed Projects/Unfinished to Projects/Incomplete for consistancy.
Diffstat (limited to 'Projects/Incomplete/AVRISP/Lib')
-rw-r--r--Projects/Incomplete/AVRISP/Lib/V2Protocol.c232
-rw-r--r--Projects/Incomplete/AVRISP/Lib/V2Protocol.h70
-rw-r--r--Projects/Incomplete/AVRISP/Lib/V2ProtocolConstants.h86
-rw-r--r--Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.c137
-rw-r--r--Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.h72
5 files changed, 597 insertions, 0 deletions
diff --git a/Projects/Incomplete/AVRISP/Lib/V2Protocol.c b/Projects/Incomplete/AVRISP/Lib/V2Protocol.c
new file mode 100644
index 000000000..e55a7002e
--- /dev/null
+++ b/Projects/Incomplete/AVRISP/Lib/V2Protocol.c
@@ -0,0 +1,232 @@
+/*
+ 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
+ *
+ * V2Protocol handler, to process V2 Protocol commands used in Atmel programmer devices.
+ */
+
+#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[MAX_SPI_SETTINGS] =
+ {
+ #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 void V2Protocol_ReconfigureSPI(void)
+{
+ uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION);
+
+ if (SCKDuration >= MAX_SPI_SETTINGS)
+ SCKDuration = (MAX_SPI_SETTINGS - 1);
+
+ SPI_Init(SPIMaskFromSCKDuration[SCKDuration], true);
+}
+
+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;
+ }
+}
+
+void V2Protocol_ProcessCommand(void)
+{
+ uint8_t V2Command = Endpoint_Read_Byte();
+
+ switch (V2Command)
+ {
+ case CMD_SIGN_ON:
+ V2Protocol_Command_SignOn();
+ break;
+ case CMD_SET_PARAMETER:
+ case CMD_GET_PARAMETER:
+ V2Protocol_Command_GetSetParam(V2Command);
+ break;
+ case CMD_LOAD_ADDRESS:
+ V2Protocol_Command_LoadAddress();
+ break;
+ case CMD_SPI_MULTI:
+ V2Protocol_Command_SPIMulti();
+ break;
+ default:
+ V2Protocol_Command_Unknown(V2Command);
+ break;
+ }
+
+ printf("COMMAND 0x%02x\r\n", V2Command);
+
+ Endpoint_WaitUntilReady();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);
+}
+
+static void V2Protocol_Command_Unknown(uint8_t V2Command)
+{
+ /* Discard all incomming data */
+ while (Endpoint_BytesInEndpoint() == AVRISP_DATA_EPSIZE)
+ {
+ Endpoint_ClearOUT();
+ Endpoint_WaitUntilReady();
+ }
+
+ Endpoint_ClearOUT();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
+ Endpoint_WaitUntilReady();
+
+ Endpoint_Write_Byte(V2Command);
+ Endpoint_Write_Byte(STATUS_CMD_UNKNOWN);
+ Endpoint_ClearIN();
+}
+
+static void V2Protocol_Command_SignOn(void)
+{
+ Endpoint_ClearOUT();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
+ Endpoint_WaitUntilReady();
+
+ V2Protocol_ReconfigureSPI();
+ CurrentAddress = 0;
+
+ Endpoint_Write_Byte(CMD_SIGN_ON);
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+ Endpoint_Write_Byte(PROGRAMMER_ID_LEN);
+ Endpoint_Write_Stream_LE(PROGRAMMER_ID, PROGRAMMER_ID_LEN);
+ Endpoint_ClearIN();
+}
+
+static void V2Protocol_Command_GetSetParam(uint8_t V2Command)
+{
+ uint8_t ParamID = Endpoint_Read_Byte();
+ uint8_t ParamValue = Endpoint_Read_Byte();
+
+ Endpoint_ClearOUT();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
+ Endpoint_WaitUntilReady();
+
+ uint8_t ParamPrivs = V2Params_GetParameterPrivellages(ParamID);
+
+ Endpoint_Write_Byte(V2Command);
+
+ if ((V2Command == CMD_SET_PARAMETER) && (ParamPrivs & PARAM_PRIV_WRITE))
+ {
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+ V2Params_SetParameterValue(ParamID, ParamValue);
+ }
+ else if ((V2Command == CMD_GET_PARAMETER) && (ParamPrivs & PARAM_PRIV_READ))
+ {
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+ Endpoint_Write_Byte(V2Params_GetParameterValue(ParamID));
+ }
+ else
+ {
+ Endpoint_Write_Byte(STATUS_CMD_FAILED);
+ }
+
+ Endpoint_ClearIN();
+}
+
+static void V2Protocol_Command_LoadAddress(void)
+{
+ CurrentAddress = Endpoint_Read_DWord_LE();
+
+ Endpoint_ClearOUT();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
+ Endpoint_WaitUntilReady();
+
+ Endpoint_Write_Byte(CMD_LOAD_ADDRESS);
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+ Endpoint_ClearIN();
+}
+
+static void V2Protocol_Command_SPIMulti(void)
+{
+ uint8_t TxBytes = Endpoint_Read_Byte();
+ uint8_t RxBytes = Endpoint_Read_Byte();
+ uint8_t RxStartAddr = Endpoint_Read_Byte();
+ uint8_t TxData[255];
+
+ Endpoint_Read_Stream_LE(TxData, TxBytes);
+
+ Endpoint_ClearOUT();
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
+ Endpoint_WaitUntilReady();
+
+ Endpoint_Write_Byte(CMD_SPI_MULTI);
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+
+ uint8_t CurrTxPos = 0;
+ uint8_t CurrRxPos = 0;
+
+ /* Write out bytes to transmit until the start of the bytes to receive is met */
+ while (CurrTxPos < RxStartAddr)
+ {
+ if (CurrTxPos < TxBytes)
+ SPI_SendByte(TxData[CurrTxPos]);
+ else
+ SPI_SendByte(0);
+
+ CurrTxPos++;
+ }
+
+ /* Transmit remaining bytes with padding as needed, read in response bytes */
+ while (CurrRxPos < RxBytes)
+ {
+ if (CurrTxPos < TxBytes)
+ Endpoint_Write_Byte(SPI_TransferByte(TxData[CurrTxPos++]));
+ else
+ Endpoint_Write_Byte(SPI_ReceiveByte());
+
+ CurrRxPos++;
+ }
+
+ Endpoint_Write_Byte(STATUS_CMD_OK);
+ Endpoint_ClearIN();
+}
diff --git a/Projects/Incomplete/AVRISP/Lib/V2Protocol.h b/Projects/Incomplete/AVRISP/Lib/V2Protocol.h
new file mode 100644
index 000000000..5283f1986
--- /dev/null
+++ b/Projects/Incomplete/AVRISP/Lib/V2Protocol.h
@@ -0,0 +1,70 @@
+/*
+ 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 V2Protocol.c.
+ */
+
+#ifndef _V2_PROTOCOL_
+#define _V2_PROTOCOL_
+
+ /* Includes: */
+ #include <avr/io.h>
+
+ #include <LUFA/Drivers/USB/USB.h>
+ #include <LUFA/Drivers/Peripheral/SPI.h>
+
+ #include "../Descriptors.h"
+ #include "V2ProtocolConstants.h"
+ #include "V2ProtocolParams.h"
+
+ /* Macros: */
+ #define PROGRAMMER_ID "AVRISP_MK2"
+ #define PROGRAMMER_ID_LEN (sizeof(PROGRAMMER_ID) - 1)
+
+ #define MAX_SPI_SETTINGS 7
+
+ /* Function Prototypes: */
+ void V2Protocol_ProcessCommand(void);
+
+ #if defined(INCLUDE_FROM_V2PROTOCOL_C)
+ static void V2Protocol_ReconfigureSPI(void);
+ static void V2Protocol_ChangeTargetResetLine(bool ResetTarget);
+
+ static void V2Protocol_Command_Unknown(uint8_t V2Command);
+ static void V2Protocol_Command_SignOn(void);
+ static void V2Protocol_Command_GetSetParam(uint8_t V2Command);
+ static void V2Protocol_Command_LoadAddress(void);
+ static void V2Protocol_Command_SPIMulti(void);
+ #endif
+
+#endif
+
diff --git a/Projects/Incomplete/AVRISP/Lib/V2ProtocolConstants.h b/Projects/Incomplete/AVRISP/Lib/V2ProtocolConstants.h
new file mode 100644
index 000000000..dce660a73
--- /dev/null
+++ b/Projects/Incomplete/AVRISP/Lib/V2ProtocolConstants.h
@@ -0,0 +1,86 @@
+/*
+ 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
+ *
+ * Macros for the V2 Protocol Packet Commands and Responses.
+ */
+
+#ifndef _V2_PROTOCOL_CONSTANTS_
+#define _V2_PROTOCOL_CONSTANTS_
+
+ /* Macros: */
+ #define CMD_SIGN_ON 0x01
+ #define CMD_SET_PARAMETER 0x02
+ #define CMD_GET_PARAMETER 0x03
+ #define CMD_OSCCAL 0x05
+ #define CMD_LOAD_ADDRESS 0x06
+ #define CMD_FIRMWARE_UPGRADE 0x07
+ #define CMD_RESET_PROTECTION 0x0A
+ #define CMD_ENTER_PROGMODE_ISP 0x10
+ #define CMD_LEAVE_PROGMODE_ISP 0x11
+ #define CMD_CHIP_ERASE_ISP 0x12
+ #define CMD_PROGRAM_FLASH_ISP 0x13
+ #define CMD_READ_FLASH_ISP 0x14
+ #define CMD_PROGRAM_EEPROM_ISP 0x15
+ #define CMD_READ_EEPROM_ISP 0x16
+ #define CMD_PROGRAM_FUSE_ISP 0x17
+ #define CMD_READ_FUSE_ISP 0x18
+ #define CMD_PROGRAM_LOCK_ISP 0x19
+ #define CMD_READ_LOCK_ISP 0x1A
+ #define CMD_READ_SIGNATURE_ISP 0x1B
+ #define CMD_READ_OSCCAL_ISP 0x1C
+ #define CMD_SPI_MULTI 0x1D
+
+ #define STATUS_CMD_OK 0x00
+ #define STATUS_CMD_TOUT 0x80
+ #define STATUS_RDY_BSY_TOUT 0x81
+ #define STATUS_SET_PARAM_MISSING 0x82
+ #define STATUS_CMD_FAILED 0xC0
+ #define STATUS_CMD_UNKNOWN 0xC9
+ #define STATUS_ISP_READY 0x00
+ #define STATUS_CONN_FAIL_MOSI 0x01
+ #define STATUS_CONN_FAIL_RST 0x02
+ #define STATUS_CONN_FAIL_SCK 0x04
+ #define STATUS_TGT_NOT_DETECTED 0x10
+ #define STATUS_TGT_REVERSE_INSERTED 0x20
+
+ #define PARAM_BUILD_NUMBER_LOW 0x80
+ #define PARAM_BUILD_NUMBER_HIGH 0x81
+ #define PARAM_HW_VER 0x90
+ #define PARAM_SW_MAJOR 0x91
+ #define PARAM_SW_MINOR 0x92
+ #define PARAM_VTARGET 0x94
+ #define PARAM_SCK_DURATION 0x98
+ #define PARAM_RESET_POLARITY 0x9E
+ #define PARAM_STATUS_TGT_CONN 0xA1
+ #define PARAM_DISCHARGEDELAY 0xA4
+
+#endif
diff --git a/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.c b/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.c
new file mode 100644
index 000000000..777770188
--- /dev/null
+++ b/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.c
@@ -0,0 +1,137 @@
+/*
+ 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
+ *
+ * V2Protocol parameter handler, to process V2 Protocol device parameters.
+ */
+
+#define INCLUDE_FROM_V2PROTOCOL_PARAMS_C
+#include "V2ProtocolParams.h"
+
+/* Non-Volatile Parameter Values for EEPROM storage */
+uint8_t EEMEM EEPROM_Rest_Polarity;
+
+/* Volatile Parameter Values for RAM storage */
+static ParameterItem_t ParameterTable[] =
+ {
+ { .ParamID = PARAM_BUILD_NUMBER_LOW,
+ .ParamValue = (LUFA_VERSION_INTEGER >> 8),
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_BUILD_NUMBER_HIGH,
+ .ParamValue = (LUFA_VERSION_INTEGER & 0xFF),
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_HW_VER,
+ .ParamValue = 0x01,
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_SW_MAJOR,
+ .ParamValue = 0x01,
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_SW_MINOR,
+ .ParamValue = 0x00,
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_VTARGET,
+ .ParamValue = 0x00,
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_SCK_DURATION,
+ .ParamValue = MAX_SPI_SETTINGS,
+ .ParamPrivellages = PARAM_PRIV_READ | PARAM_PRIV_WRITE },
+
+ { .ParamID = PARAM_RESET_POLARITY,
+ .ParamValue = 0x01,
+ .ParamPrivellages = PARAM_PRIV_WRITE },
+
+ { .ParamID = PARAM_STATUS_TGT_CONN,
+ .ParamValue = 0x00,
+ .ParamPrivellages = PARAM_PRIV_READ },
+
+ { .ParamID = PARAM_DISCHARGEDELAY,
+ .ParamValue = 0x00,
+ .ParamPrivellages = PARAM_PRIV_WRITE },
+ };
+
+
+void V2Params_LoadEEPROMParamValues(void)
+{
+ /* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM */
+ V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Rest_Polarity);
+}
+
+static ParameterItem_t* V2Params_GetParamFromTable(uint8_t ParamID)
+{
+ /* Find the parameter in the parameter table if present */
+ for (uint8_t TableIndex = 0; TableIndex < (sizeof(ParameterTable) / sizeof(ParameterTable[0])); TableIndex++)
+ {
+ if (ParamID == ParameterTable[TableIndex].ParamID)
+ return &ParameterTable[TableIndex];
+ }
+
+ return NULL;
+}
+
+uint8_t V2Params_GetParameterPrivellages(uint8_t ParamID)
+{
+ ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
+
+ if (ParamInfo == NULL)
+ return 0;
+
+ return ParamInfo->ParamPrivellages;
+}
+
+uint8_t V2Params_GetParameterValue(uint8_t ParamID)
+{
+ ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
+
+ if (ParamInfo == NULL)
+ return 0;
+
+ return ParamInfo->ParamValue;
+}
+
+void V2Params_SetParameterValue(uint8_t ParamID, uint8_t Value)
+{
+ ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
+
+ if (ParamInfo == NULL)
+ return;
+
+ ParamInfo->ParamValue = Value;
+
+ /* The target RESET line polarity is a non-volatile parameter, save to EEPROM when changed */
+ if (ParamID == PARAM_RESET_POLARITY)
+ eeprom_write_byte(&EEPROM_Rest_Polarity, Value);
+}
diff --git a/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.h b/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.h
new file mode 100644
index 000000000..4797c9fa8
--- /dev/null
+++ b/Projects/Incomplete/AVRISP/Lib/V2ProtocolParams.h
@@ -0,0 +1,72 @@
+/*
+ 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 V2ProtocolParams.c.
+ */
+
+#ifndef _V2_PROTOCOL_PARAMS_
+#define _V2_PROTOCOL_PARAMS_
+
+ /* Includes: */
+ #include <avr/io.h>
+ #include <avr/eeprom.h>
+
+ #include <LUFA/Version.h>
+
+ #include "V2Protocol.h"
+ #include "V2ProtocolConstants.h"
+
+ /* Macros: */
+ #define PARAM_PRIV_READ (1 << 0)
+ #define PARAM_PRIV_WRITE (1 << 1)
+
+ /* Type Defines: */
+ typedef struct
+ {
+ const uint8_t ParamID;
+ uint8_t ParamValue;
+ uint8_t ParamPrivellages;
+ } ParameterItem_t;
+
+ /* Function Prototypes: */
+ void V2Params_LoadEEPROMParamValues(void);
+
+ uint8_t V2Params_GetParameterPrivellages(uint8_t ParamID);
+ uint8_t V2Params_GetParameterValue(uint8_t ParamID);
+ void V2Params_SetParameterValue(uint8_t ParamID, uint8_t Value);
+
+ #if defined(INCLUDE_FROM_V2PROTOCOL_PARAMS_C)
+ static ParameterItem_t* V2Params_GetParamFromTable(uint8_t ParamID);
+ #endif
+
+#endif
+