X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/271be037b736d66a7b7e0c4d5d30c5a24025277f..21cc9c9e19ce6bd757410cc6da29b5dc2ee8041c:/Projects/AVRISP/Lib/V2ProtocolParams.c diff --git a/Projects/AVRISP/Lib/V2ProtocolParams.c b/Projects/AVRISP/Lib/V2ProtocolParams.c index 9914c085e..62149b4c3 100644 --- a/Projects/AVRISP/Lib/V2ProtocolParams.c +++ b/Projects/AVRISP/Lib/V2ProtocolParams.c @@ -44,74 +44,87 @@ static ParameterItem_t ParameterTable[] = { { .ParamID = PARAM_BUILD_NUMBER_LOW, .ParamValue = (LUFA_VERSION_INTEGER >> 8), - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_BUILD_NUMBER_HIGH, .ParamValue = (LUFA_VERSION_INTEGER & 0xFF), - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_HW_VER, .ParamValue = 0x00, - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_SW_MAJOR, .ParamValue = 0x01, - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_SW_MINOR, .ParamValue = 0x0C, - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_VTARGET, .ParamValue = 0x32, - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_SCK_DURATION, .ParamValue = (TOTAL_PROGRAMMING_SPEEDS - 1), - .ParamPrivellages = PARAM_PRIV_READ | PARAM_PRIV_WRITE }, + .ParamPrivileges = PARAM_PRIV_READ | PARAM_PRIV_WRITE }, { .ParamID = PARAM_RESET_POLARITY, .ParamValue = 0x00, - .ParamPrivellages = PARAM_PRIV_WRITE }, + .ParamPrivileges = PARAM_PRIV_WRITE }, { .ParamID = PARAM_STATUS_TGT_CONN, .ParamValue = 0x00, - .ParamPrivellages = PARAM_PRIV_READ }, + .ParamPrivileges = PARAM_PRIV_READ }, { .ParamID = PARAM_DISCHARGEDELAY, .ParamValue = 0x00, - .ParamPrivellages = PARAM_PRIV_WRITE }, + .ParamPrivileges = PARAM_PRIV_WRITE }, }; /** Loads saved non-volatile parameter values from the EEPROM into the parameter table, as needed. */ -void V2Params_LoadEEPROMParamValues(void) +void V2Params_LoadNonVolatileParamValues(void) { - /* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM */ + /* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM - + * NB: Cannot call V2Protocol_SetParameterValue() here, as that will cause another EEPROM write! + */ V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Rest_Polarity); } -/** Retrieves the host PC read/write privellages for a given parameter in the parameter table. This should +/** Updates any parameter values that are sourced from hardware rather than explicitly set by the host, such as + * VTARGET levels from the ADC on supported AVR models. + */ +void V2Params_UpdateParamValues(void) +{ + #if defined(ADC) + /* Update VTARGET parameter with the latest ADC conversion of VTARGET on supported AVR models */ + V2Params_GetParamFromTable(PARAM_VTARGET)->ParamValue = ((5 * 10 * ADC_GetResult()) / 1024); + #endif +} + +/** Retrieves the host PC read/write privileges for a given parameter in the parameter table. This should * be called before calls to \ref V2Params_GetParameterValue() or \ref V2Params_SetParameterValue() when * getting or setting parameter values in response to requests from the host. * - * \param ParamID Parameter ID whose privellages are to be retrieved from the table + * \param[in] ParamID Parameter ID whose privileges are to be retrieved from the table * - * \return Privellages for the requested parameter, as a mask of PARAM_PRIV_* masks + * \return Privileges for the requested parameter, as a mask of PARAM_PRIV_* masks */ -uint8_t V2Params_GetParameterPrivellages(uint8_t ParamID) +uint8_t V2Params_GetParameterPrivileges(uint8_t ParamID) { ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); if (ParamInfo == NULL) return 0; - return ParamInfo->ParamPrivellages; + return ParamInfo->ParamPrivileges; } /** Retrieves the current value for a given parameter in the parameter table. * - * \param ParamID Parameter ID whose value is to be retrieved from the table + * \param[in] ParamID Parameter ID whose value is to be retrieved from the table * * \return Current value of the parameter in the table, or 0 if not found */ @@ -119,7 +132,7 @@ uint8_t V2Params_GetParameterValue(uint8_t ParamID) { ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); - if (ParamInfo == NULL) + if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivileges & PARAM_PRIV_READ)) return 0; return ParamInfo->ParamValue; @@ -127,8 +140,8 @@ uint8_t V2Params_GetParameterValue(uint8_t ParamID) /** Sets the value for a given parameter in the parameter table. * - * \param ParamID Parameter ID whose value is to be set in the table - * \param Value New value to set the parameter to + * \param[in] ParamID Parameter ID whose value is to be set in the table + * \param[in] Value New value to set the parameter to * * \return Pointer to the associated parameter information from the parameter table if found, NULL otherwise */ @@ -136,7 +149,7 @@ void V2Params_SetParameterValue(uint8_t ParamID, uint8_t Value) { ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); - if (ParamInfo == NULL) + if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivileges & PARAM_PRIV_WRITE)) return; ParamInfo->ParamValue = Value; @@ -146,10 +159,10 @@ void V2Params_SetParameterValue(uint8_t ParamID, uint8_t Value) eeprom_write_byte(&EEPROM_Rest_Polarity, Value); } -/** Retrieves a parameter entry (including ID, value and privellages) from the parameter table that matches the given +/** Retrieves a parameter entry (including ID, value and privileges) from the parameter table that matches the given * parameter ID. * - * \param ParamID Parameter ID to find in the table + * \param[in] ParamID Parameter ID to find in the table * * \return Pointer to the associated parameter information from the parameter table if found, NULL otherwise */