Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions opendps/opendps.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,31 +332,47 @@ set_param_status_t opendps_set_parameter(char *name, char *value)
set_param_status_t opendps_set_calibration(char *name, float *value)
{
past_id_t param;
float min_val, max_val;

if (strcmp(name,"A_ADC_K")==0){
param = past_A_ADC_K;
min_val = 0.1f; max_val = 100.0f;
} else if(strcmp(name,"A_ADC_C")==0){
param = past_A_ADC_C;
min_val = -1000.0f; max_val = 1000.0f;
} else if(strcmp(name,"A_DAC_K")==0){
param = past_A_DAC_K;
min_val = 0.01f; max_val = 10.0f;
} else if(strcmp(name,"A_DAC_C")==0){
param = past_A_DAC_C;
min_val = 0.0f; max_val = 1000.0f;
} else if(strcmp(name,"V_ADC_K")==0){
param = past_V_ADC_K;
min_val = 1.0f; max_val = 100.0f;
} else if(strcmp(name,"V_ADC_C")==0){
param = past_V_ADC_C;
min_val = -1000.0f; max_val = 1000.0f;
} else if(strcmp(name,"V_DAC_K")==0){
param = past_V_DAC_K;
min_val = 0.01f; max_val = 1.0f;
} else if(strcmp(name,"V_DAC_C")==0){
param = past_V_DAC_C;
min_val = 0.0f; max_val = 100.0f;
} else if(strcmp(name,"VIN_ADC_K")==0){
param = past_VIN_ADC_K;
min_val = 1.0f; max_val = 100.0f;
} else if(strcmp(name,"VIN_ADC_C")==0){
param = past_VIN_ADC_C;
min_val = -1000.0f; max_val = 1000.0f;
} else {
return ps_not_supported;
}

if (*value < min_val || *value > max_val) {
dbg_printf("Error: calibration value %f out of range [%f, %f]\n", *value, min_val, max_val);
return ps_range_error;
}

if (!past_write_unit(&g_past, param, (void*) value, sizeof(*value))) {
dbg_printf("Error: past write opendps set calibration failed!\n");
return ps_flash_error;
Expand Down
6 changes: 6 additions & 0 deletions opendps/pwrctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,8 @@ uint32_t pwrctl_calc_vin(uint16_t raw)
float value = vin_adc_k_coef * raw + vin_adc_c_coef;
if (value <= 0)
return 0;
else if (value > 65000)
return 65000;
else
return value + 0.5f; /** Add 0.5f to value so it is correctly rounded when it is truncated */
}
Expand All @@ -257,6 +259,8 @@ uint32_t pwrctl_calc_vout(uint16_t raw)
float value = v_adc_k_coef * raw + v_adc_c_coef;
if (value <= 0)
return 0;
else if (value > 60000)
return 60000;
else
return value + 0.5f; /** Add 0.5f to value so it is correctly rounded when it is truncated */
}
Expand Down Expand Up @@ -287,6 +291,8 @@ uint32_t pwrctl_calc_iout(uint16_t raw)
float value = a_adc_k_coef * raw + a_adc_c_coef;
if (value <= 0)
return 0;
else if (value > 20000)
return 20000;
else
return value + 0.5f; /** Add 0.5f to value so correct rounding is done when truncated */
}
Expand Down