|
@@ -1039,12 +1039,16 @@ unsigned char sdr_convert_sensor_value_to_raw(FullSensorRec_T *sdr_record, doubl
|
|
|
{
|
|
|
int m, b, k1, k2;
|
|
|
double result;
|
|
|
+ int tmp = 0;
|
|
|
+ unsigned char retVal;
|
|
|
|
|
|
#define tos(val, bits) ((val & ((1<<((bits)-1)))) ? (-((val) & (1<<((bits)-1))) | (val)) : (val))
|
|
|
m = tos((((unsigned short int) sdr_record->M_Tolerance << 2 & 0x300) | sdr_record->M), 10);
|
|
|
b = tos((((unsigned short int) sdr_record->B_Accuracy << 2 & 0x300) | sdr_record->B), 10);
|
|
|
k1 = tos(sdr_record->R_B_Exp & 0x0f, 4);
|
|
|
k2 = tos((sdr_record->R_B_Exp & 0xf0) >> 4, 4);
|
|
|
+
|
|
|
+ printf("---> m: %d, b: %d, k1: %d, k2: %d\n", m, b, k1, k2);
|
|
|
|
|
|
/* only works for analog sensors */
|
|
|
if (sdr_record->Units1 >> 6 > 2)
|
|
@@ -1056,9 +1060,19 @@ unsigned char sdr_convert_sensor_value_to_raw(FullSensorRec_T *sdr_record, doubl
|
|
|
|
|
|
result = (((val / pow(10, k2)) - (b * pow(10, k1))) / m);
|
|
|
|
|
|
- if ((result - (int) result) >= .5)
|
|
|
- return (unsigned char) ceil(result);
|
|
|
+
|
|
|
+ // if ((result - (int) result) >= .5)
|
|
|
+ // return (unsigned char) ceil(result);
|
|
|
+ // else
|
|
|
+ // return (unsigned char) result;
|
|
|
+
|
|
|
+ if(result > 0)
|
|
|
+ result += 0.5;
|
|
|
else
|
|
|
- return (unsigned char) result;
|
|
|
+ result += -0.5;
|
|
|
+ tmp = (int)result;
|
|
|
+ retVal = (unsigned char)tmp;
|
|
|
+ printf("---> result: %f, tmp = %d, retVal = %#x\n", result, tmp, retVal);
|
|
|
+ return retVal;
|
|
|
}
|
|
|
|