1 | void StoreCalibrationValues(void)
|
2 | {
|
3 | uint8_t nBuffer[52];
|
4 | uint8_t i, j;
|
5 | uint16_t nTmpVal;
|
6 |
|
7 | FncDispEnable(false); // disable periodically function dispatcher
|
8 |
|
9 | //-----------------------------------------------------------------------------------
|
10 | // mark this block as calibrated or not as not calibrated -> store this information within CALIBRATION_STATUS section of EEPROM
|
11 | //-----------------------------------------------------------------------------------
|
12 | if (CalibrationTemp.fNominalLow == 0.0)
|
13 | {
|
14 | // by define a nominal low calibration point of 0.0 degree Celsius will mark this block as not calibrated
|
15 | nBuffer[0] = 0x00;
|
16 | nBuffer[1] = 0xFF;
|
17 | nBuffer[2] = 0x00;
|
18 | }
|
19 | else
|
20 | {
|
21 | // mark this block as calibrated
|
22 | nBuffer[0] = 0xA5;
|
23 | nBuffer[1] = 0x00;
|
24 | nBuffer[2] = 0x5A;
|
25 | }
|
26 | // write unique pattern to EEPROM to detect read / write access problems as well
|
27 | if(Epr_WriteBuffer(nBuffer, CALIB_STATUS_ADDRESS, 3) == ERROR)
|
28 | EH_SetErrorCode(ERR_EEPROM);
|
29 |
|
30 |
|
31 | //-----------------------------------------------------------------------------------
|
32 | // write calibration values for lower calibration point to EEPROM
|
33 | //-----------------------------------------------------------------------------------
|
34 |
|
35 | // clear temporary buffer
|
36 | // was 20 for (1+8+1)*2, for dlx (1+24+1)*2
|
37 | for (i=0; i<52; i++)
|
38 | nBuffer[i] = 0;
|
39 |
|
40 | // fill write buffer -> multiply values by 100 to store values including tenth and hundredth rank as integer and split them into two bytes
|
41 | i = 0;
|
42 | nTmpVal = (uint16_t)(CalibrationTemp.fNominalLow * 100.0);
|
43 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8; // high byte
|
44 | nBuffer[i++] = nTmpVal & 0x00FF; // low byte
|
45 |
|
46 | //AM: TODO: j max is changed from 8 to 24 channels for dlx
|
47 | for(j = 0; j < 24; j++)
|
48 | {
|
49 | nTmpVal =(uint16_t)(CalibrationTemp.fZoneLow[j] * 100.0);
|
50 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8;
|
51 | nBuffer[i++] = nTmpVal & 0x00FF;
|
52 | }
|
53 |
|
54 | nTmpVal =(uint16_t)(CalibrationTemp.fLidLow * 100.0);
|
55 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8;
|
56 | nBuffer[i++] = nTmpVal & 0x00FF;
|
57 |
|
58 | // write buffer to EEPROM
|
59 | if(Epr_WriteBuffer(nBuffer, CALIB_LOW_ADDRESS, 52) == ERROR)
|
60 | EH_SetErrorCode(ERR_EEPROM);
|
61 |
|
62 | //-----------------------------------------------------------------------------------
|
63 | // write calibration values for upper calibration point to EEPROM
|
64 | //-----------------------------------------------------------------------------------
|
65 |
|
66 | // clear temporary buffer
|
67 | for (i=0; i<52; i++)
|
68 | nBuffer[i] = 0;
|
69 |
|
70 | // fill write buffer -> multiply values by 100 to store values including tenth and hundredth rank as integer
|
71 | i = 0;
|
72 | nTmpVal =(uint16_t)(CalibrationTemp.fNominalHigh * 100.0);
|
73 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8; // high byte
|
74 | nBuffer[i++] = nTmpVal & 0x00FF; // low byte
|
75 |
|
76 | for(j = 0; j < 24; j++)
|
77 | {
|
78 | nTmpVal =(uint16_t)(CalibrationTemp.fZoneHigh[j] * 100.0);
|
79 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8;
|
80 | nBuffer[i++] = nTmpVal & 0x00FF;
|
81 | }
|
82 |
|
83 | nTmpVal =(uint16_t)(CalibrationTemp.fLidHigh * 100.0);
|
84 | nBuffer[i++] = (nTmpVal & 0xFF00) >> 8;
|
85 | nBuffer[i++] = nTmpVal & 0x00FF;
|
86 |
|
87 | // write buffer to EEPROM
|
88 | if(Epr_WriteBuffer(nBuffer, CALIB_HIGH_ADDRESS, 52) == ERROR)
|
89 | EH_SetErrorCode(ERR_EEPROM);
|
90 |
|
91 | FncDispEnable(true); // enable periodically function dispatcher
|
92 | }
|