Skip to content

Commit

Permalink
Calibration persistence: added EEPROM write
Browse files Browse the repository at this point in the history
  • Loading branch information
dashpi committed Jun 7, 2014
1 parent 5678812 commit 52611d5
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 3 deletions.
58 changes: 58 additions & 0 deletions Applications/calscope/src/calib.c
Expand Up @@ -80,6 +80,64 @@ int rp_read_calib_params(rp_calib_params_t *calib_params)
}


/*----------------------------------------------------------------------------*/
/**
* @brief Write calibration parameters to EEPROM device.
*
* Function writes calibration parameters to EEPROM device.
* Communication to the EEPROM device is taken place through
* appropriate system driver accessed through the file system device
* /sys/bus/i2c/devices/0-0050/eeprom.
*
* @param[out] calib_params Pointer to source buffer.
* @retval 0 Success
* @retval -1 Failure, error message is put on stderr device
*
*/
int rp_write_calib_params(rp_calib_params_t *calib_params)
{
FILE *fp;
size_t size;

/* sanity check */
if(calib_params == NULL) {
fprintf(stderr, "rp_write_calib_params(): input structure "
"not initialized\n");
return -1;
}

/* open eeprom device */
fp=fopen(eeprom_device, "rw+");
if(fp == NULL) {
fprintf(stderr, "rp_write_calib_params(): Can not open EEPROM device: "
" %s\n", strerror(errno));
fclose(fp);
return -1;
}

/* ...and seek to the appropriate storage offset */
if(fseek(fp, eeprom_calib_off, SEEK_SET) < 0) {
fclose(fp);
fprintf(stderr, "rp_write_calib_params(): fseek() failed: %s\n",
strerror(errno));
return -1;
}

/* write data to eeprom component from specified buffer */
size=fwrite(calib_params, sizeof(char), sizeof(rp_calib_params_t), fp);
if(size != sizeof(rp_calib_params_t)) {
fclose(fp);
fprintf(stderr, "rp_write_calib_params(): fwrite() failed, "
"returned bytes: %d (should be :%d)\n", size,
sizeof(rp_calib_params_t));
return -1;
}
fclose(fp);

return 0;
}


/*----------------------------------------------------------------------------*/
/**
* Initialize calibration parameters to default values.
Expand Down
2 changes: 1 addition & 1 deletion Applications/calscope/src/calib.h
Expand Up @@ -39,7 +39,7 @@ typedef struct rp_osc_calib_params_s {
/** @} */

int rp_read_calib_params(rp_calib_params_t *calib_params);

int rp_write_calib_params(rp_calib_params_t *calib_params);
int rp_default_calib_params(rp_calib_params_t *calib_params);

#endif //__CALIB_H
12 changes: 12 additions & 0 deletions Applications/calscope/src/main.c
Expand Up @@ -1054,6 +1054,15 @@ void dir_gen_set(int ch, int param, int value)
}


void write_cal_eeprom( void)
{
if(rp_write_calib_params(&rp_main_calib_params) < 0) {
fprintf(stderr, "rp_write_calib_params() failed. \n");
}
}



float rp_gen_limit_freq(float freq, float gen_type)
{
int type = (int)gen_type;
Expand Down Expand Up @@ -1082,3 +1091,6 @@ float rp_gen_limit_freq(float freq, float gen_type)

return freq;
}



2 changes: 2 additions & 0 deletions Applications/calscope/src/main.h
Expand Up @@ -157,4 +157,6 @@ float rp_gen_limit_freq(float freq, float gen_type);

void dir_gen_set(int ch, int param, int value);

void write_cal_eeprom( void);

#endif /* __MAIN_H */
6 changes: 4 additions & 2 deletions Applications/calscope/src/worker.c
Expand Up @@ -586,7 +586,8 @@ void *rp_osc_worker_thread(void *args)
// DC offset calibration (inputs)
if (round(curr_params[DC_CAL].value) != cal_old) { // When associated client button is clicked...
rp_calib_params->fe_ch1_dc_offs=-rp_osc_mean_dc_offset(&ch1_meas);
rp_calib_params->fe_ch2_dc_offs=-rp_osc_mean_dc_offset(&ch2_meas);
rp_calib_params->fe_ch2_dc_offs=-rp_osc_mean_dc_offset(&ch2_meas);
write_cal_eeprom();
}

cal_old=round(curr_params[DC_CAL].value);
Expand Down Expand Up @@ -618,7 +619,7 @@ void *rp_osc_worker_thread(void *args)

// New calibration constant
rp_calib_params->be_ch1_dc_offs=-dc_offs_in_DAC_counts;

write_cal_eeprom();

dir_gen_set(0, 0, 0x11); // Enable signal on ch1

Expand Down Expand Up @@ -668,6 +669,7 @@ void *rp_osc_worker_thread(void *args)
// New calibration constant
rp_calib_params->be_ch2_dc_offs=-dc_offs_in_DAC_counts;

write_cal_eeprom();

dir_gen_set(1, 0, 0x11); // Enable signal on ch1

Expand Down

0 comments on commit 52611d5

Please sign in to comment.