48 __esos_SetSystemFlag(__ESOS_SYS_ADC_IS_BUSY);
66 esos_sensor_initiate_hw();
81 int compareUint16(
const void *pv_a,
const void *pv_b)
83 return *((uint16_t*)pv_a) - *((uint16_t*)pv_b);
94 uint16_t medianOfBuffer(uint16_t *pu16_buf,
uint8_t u8_nelem)
96 qsort(pu16_buf, u8_nelem,
sizeof(uint16_t), compareUint16);
99 return (pu16_buf[u8_nelem / 2 - 1] + pu16_buf[u8_nelem / 2]) / 2;
110 uint16_t maxOfBuffer(uint16_t *pu16_buf,
uint8_t u8_nelem)
115 for(;i<u8_nelem;i++){
116 if(max < pu16_buf[i]){
139 static uint16_t au16_dataArr[64] = {0};
141 uint16_t u16_oneShot = *pu16_data;
142 static uint32_t u32_algData;
147 FMT_CONSTANT = e_senFMT & 0b11110000;
148 vRef = e_senFMT & 0b00001111;
151 if((e_senProcess & 0b00001111) == 1){
152 while(arrayCount < 2){
153 esos_sensor_initiate_hw();
159 else if((e_senProcess & 0b00001111) == 2){
160 while(arrayCount < 4){
161 esos_sensor_initiate_hw();
167 else if((e_senProcess & 0b00001111) == 3){
168 while(arrayCount < 8){
169 esos_sensor_initiate_hw();
175 else if((e_senProcess & 0b00001111) == 4){
176 while(arrayCount < 16){
177 esos_sensor_initiate_hw();
183 else if((e_senProcess & 0b00001111) == 5){
184 while(arrayCount < 32){
185 esos_sensor_initiate_hw();
191 else if((e_senProcess & 0b00001111) == 6){
192 while(arrayCount < 64){
193 esos_sensor_initiate_hw();
206 if(e_senProcess == ESOS_SENSOR_ONE_SHOT){
207 esos_sensor_initiate_hw();
212 else if(e_senProcess == ESOS_SENSOR_AVG2){
213 while(arrayCount < 2){
214 u32_algData += au16_dataArr[arrayCount];
217 u32_algData = u32_algData/arrayCount;
218 *pu16_data = (uint16_t)u32_algData;
220 else if(e_senProcess == ESOS_SENSOR_AVG4){
221 while(arrayCount < 4){
222 u32_algData += au16_dataArr[arrayCount];
225 u32_algData = u32_algData/arrayCount;
226 *pu16_data = (uint16_t)u32_algData;
228 else if(e_senProcess == ESOS_SENSOR_AVG8){
229 while(arrayCount < 8){
230 u32_algData += au16_dataArr[arrayCount];
233 u32_algData = u32_algData/arrayCount;
234 *pu16_data = (uint16_t)u32_algData;
236 else if(e_senProcess == ESOS_SENSOR_AVG16){
237 while(arrayCount < 16){
238 u32_algData += au16_dataArr[arrayCount];
241 u32_algData = u32_algData/arrayCount;
242 *pu16_data = (uint16_t)u32_algData;
244 else if(e_senProcess == ESOS_SENSOR_AVG32){
245 while(arrayCount < 32){
246 u32_algData += au16_dataArr[arrayCount];
249 u32_algData = u32_algData/arrayCount;
250 *pu16_data = (uint16_t)u32_algData;
252 else if(e_senProcess == ESOS_SENSOR_AVG64){
253 while(arrayCount < 64){
254 u32_algData += au16_dataArr[arrayCount];
257 u32_algData = u32_algData/arrayCount;
258 *pu16_data = (uint16_t)u32_algData;
261 else if(e_senProcess == ESOS_SENSOR_MIN2){
262 *pu16_data = MAX16BIT;
263 while(arrayCount < 2){
264 if (au16_dataArr[arrayCount] < *pu16_data){
265 *pu16_data = au16_dataArr[arrayCount];
270 else if(e_senProcess == ESOS_SENSOR_MIN4){
271 *pu16_data = MAX16BIT;
272 while(arrayCount < 4){
273 if (au16_dataArr[arrayCount] < *pu16_data){
274 *pu16_data = au16_dataArr[arrayCount];
279 else if(e_senProcess == ESOS_SENSOR_MIN8){
280 *pu16_data = MAX16BIT;
281 while(arrayCount < 8){
282 if (au16_dataArr[arrayCount] < *pu16_data){
283 *pu16_data = au16_dataArr[arrayCount];
288 else if(e_senProcess == ESOS_SENSOR_MIN16){
289 *pu16_data = MAX16BIT;
290 while(arrayCount < 16){
291 if (au16_dataArr[arrayCount] < *pu16_data){
292 *pu16_data = au16_dataArr[arrayCount];
297 else if(e_senProcess == ESOS_SENSOR_MIN32){
298 *pu16_data = MAX16BIT;
299 while(arrayCount < 32){
300 if (au16_dataArr[arrayCount] < *pu16_data){
301 *pu16_data = au16_dataArr[arrayCount];
306 else if(e_senProcess == ESOS_SENSOR_MIN64){
307 *pu16_data = MAX16BIT;
308 while(arrayCount < 64){
309 if (au16_dataArr[arrayCount] < *pu16_data){
310 *pu16_data = au16_dataArr[arrayCount];
316 else if(e_senProcess == ESOS_SENSOR_MAX2){
317 *pu16_data = maxOfBuffer(au16_dataArr, 2);
319 else if(e_senProcess == ESOS_SENSOR_MAX4){
320 *pu16_data = maxOfBuffer(au16_dataArr, 4);
322 else if(e_senProcess == ESOS_SENSOR_MAX8){
323 *pu16_data = maxOfBuffer(au16_dataArr, 8);
325 else if(e_senProcess == ESOS_SENSOR_MAX16){
326 *pu16_data = maxOfBuffer(au16_dataArr, 16);
328 else if(e_senProcess == ESOS_SENSOR_MAX32){
329 *pu16_data = maxOfBuffer(au16_dataArr, 32);
331 else if(e_senProcess == ESOS_SENSOR_MAX64){
332 *pu16_data = maxOfBuffer(au16_dataArr, 64);
335 else if(e_senProcess == ESOS_SENSOR_MEDIAN2){
336 *pu16_data = medianOfBuffer(au16_dataArr, 2);
338 else if(e_senProcess == ESOS_SENSOR_MEDIAN4){
339 *pu16_data = medianOfBuffer(au16_dataArr, 4);
341 else if(e_senProcess == ESOS_SENSOR_MEDIAN8){
342 *pu16_data = medianOfBuffer(au16_dataArr, 8);
344 else if(e_senProcess == ESOS_SENSOR_MEDIAN16){
345 *pu16_data = medianOfBuffer(au16_dataArr, 16);
347 else if(e_senProcess == ESOS_SENSOR_MEDIAN32){
348 *pu16_data = medianOfBuffer(au16_dataArr, 32);
350 else if(e_senProcess == ESOS_SENSOR_MEDIAN64){
351 *pu16_data = medianOfBuffer(au16_dataArr, 64);
356 if(FMT_CONSTANT & ESOS_SENSOR_FORMAT_VOLTAGE){
357 const uint32_t u32_maxDeciMilliVolts =
358 vRef == ESOS_SENSOR_VREF_1V0 ? 10000
359 : vRef == ESOS_SENSOR_VREF_1V024 ? 10240
360 : vRef == ESOS_SENSOR_VREF_2V0 ? 20000
361 : vRef == ESOS_SENSOR_VREF_2V048 ? 20480
362 : vRef == ESOS_SENSOR_VREF_3V0 ? 30000
363 : vRef == ESOS_SENSOR_VREF_3V3 ? 33000
364 : vRef == ESOS_SENSOR_VREF_4V0 ? 40000
365 : vRef == ESOS_SENSOR_VREF_4V096 ? 40960
366 : vRef == ESOS_SENSOR_VREF_5V0 ? 50000
368 const uint32_t u32_divDeciMillivolts = (uint32_t)(*u16_data) * u32_maxDeciMilliVolts;
369 const uint32_t u32_DeciMillivolts = u32_divDeciMillivolts / 4096;
370 *pu16_data = (uint16_t)u32_DeciMillivolts;
374 else if(FMT_CONSTANT & ESOS_SENSOR_FORMAT_PERCENT) {
375 *pu16_data = (uint32_t)(*u16_data) * 100 / 4096;
391 __esos_ClearSystemFlag(__ESOS_SYS_ADC_IS_BUSY);
#define ESOS_TASK_WAIT_WHILE(cond)
void esos_sensor_config_hw(esos_sensor_ch_t, esos_sensor_vref_t)
uint16_t esos_sensor_getvalue_u16_hw(void)
#define ESOS_TASK_BEGIN()
BOOL esos_sensor_is_converting_hw(void)
ESOS_CHILD_TASK(_WAIT_ON_AVAILABLE_SENSOR, esos_sensor_ch_t e_senCh, esos_sensor_vref_t e_senVRef)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.
void esos_sensor_release_hw(void)
BOOL ESOS_SENSOR_CLOSE(void)