38 static uint8_t
AFE_compare(AFE_reg_type first, AFE_reg_type second);
39 static uint8_t
CCP_compare(CCP_reg_type first, CCP_reg_type second);
40 static uint8_t
WUP_compare(WUP_reg_type first, WUP_reg_type second);
41 static uint8_t
check_results(uint8_t * test_results, uint8_t number_of_tests);
42 static uint8_t
FIFO_reset(IRPyro_sensor_device_type* this_device);
67 uint8_t op_result = 0;
68 uint8_t test_results[10]= {0};
69 IRPyro_cmd_type IOCTL_cmd = {0};
70 IRPyro_arg_type IOCTL_arg = {0};
72 UART_PutString(USART2, (uint8_t*)
"UT_01_IRPyro 9.6.1 Single Sensor initialization \n");
74 IOCTL_cmd.cmd = register_get;
76 test_results[0] = IRPyro_open(IRPyro_test_Sensor);
77 UART_PutString(USART2, (uint8_t*)
"OPEN SENSOR \n");
78 test_results[1] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
79 UART_PutString(USART2, (uint8_t*)
"AFE compare \n");
80 test_results[2] =
AFE_compare(IRPyro_test_Sensor->AFE_register, IOCTL_cmd.AFE_register);
81 UART_PutString(USART2, (uint8_t*)
"CCP compare \n");
84 test_results[3+idx]=
CCP_compare(IRPyro_test_Sensor->CCP_register[idx], IOCTL_cmd.CCP_register[idx]);
86 UART_PutString(USART2, (uint8_t*)
"WUP compare \n");
87 test_results[8]=
WUP_compare(IRPyro_test_Sensor->WUP_register, IOCTL_cmd.WUP_register);
88 test_results[9]=IRPyro_close(IRPyro_test_Sensor);
90 UART_PutString(USART2, (uint8_t*)
"============\n");
94 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
98 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
99 UART_PutNumber(USART2, (uint32_t) op_result);
100 UART_PutString(USART2, (uint8_t*)
" \n.");
102 UART_PutString(USART2, (uint8_t*)
"============\n");
103 UART_PutString(USART2, (uint8_t*)
"--------------END OF SINGLE SENSOR INIT-------------------------\n");
123 uint8_t op_result = 0;
124 uint8_t test_results[2] = {0};
125 UART_PutString(USART2, (uint8_t*)
"UT_02_IRPyro 9.6.2 Multiple Sensor initialization \n");
128 UART_PutString(USART2, (uint8_t*)
"OPEN devices \n");
129 test_results[0] = IRPyro_open_devices(this_list, list_size);
131 UART_PutString(USART2, (uint8_t*)
"CLOSE devices \n");
132 test_results[1] = IRPyro_close_devices(this_list, list_size);
134 UART_PutString(USART2, (uint8_t*)
"============\n");
138 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
142 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
143 UART_PutNumber(USART2, (uint32_t) op_result);
144 UART_PutString(USART2, (uint8_t*)
" \n.");
146 UART_PutString(USART2, (uint8_t*)
"============\n");
147 UART_PutString(USART2, (uint8_t*)
"--------------END OF MULTIPLE SENSOR INIT-------------------------\n");
167 uint8_t op_result = 0;
169 uint8_t test_results[3] = {0};
170 UART_PutString(USART2, (uint8_t*)
"UT_03_IRPyro 9.6.3 Single Sensor Data Read \n");
172 UART_PutString(USART2, (uint8_t*)
"OPEN device \n");
173 test_results[0] = IRPyro_open(IRPyro_test_Sensor);
174 UART_PutString(USART2, (uint8_t*)
"READING SAMPLE \n");
176 UART_PutString(USART2, (uint8_t*)
"CLOSE device \n");
177 test_results[2] = IRPyro_close(IRPyro_test_Sensor);
180 UART_PutString(USART2, (uint8_t*)
"============\n");
184 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
188 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
189 UART_PutNumber(USART2, (uint32_t) op_result);
190 UART_PutString(USART2, (uint8_t*)
" \n.");
192 UART_PutString(USART2, (uint8_t*)
"============\n");
193 UART_PutString(USART2, (uint8_t*)
"--------------END OF SINGLE SENSOR READ-------------------------\n");
214 uint8_t test_results[3] = {0};
215 UART_PutString(USART2, (uint8_t*)
"UT_04_IRPyro 9.6.4 Multiple Sensor Data Reading \n");
218 UART_PutString(USART2, (uint8_t*)
"OPEN devices \n");
219 test_results[0] = IRPyro_open_devices(this_list, list_size);
221 UART_PutString(USART2, (uint8_t*)
"READING devices \n");
224 UART_PutString(USART2, (uint8_t*)
"CLOSE devices \n");
225 test_results[2] = IRPyro_close_devices(this_list, list_size);
227 UART_PutString(USART2, (uint8_t*)
"============\n");
231 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
235 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
236 UART_PutNumber(USART2, (uint32_t) op_result);
237 UART_PutString(USART2, (uint8_t*)
" \n.");
239 UART_PutString(USART2, (uint8_t*)
"============\n");
240 UART_PutString(USART2, (uint8_t*)
"--------------END OF MULTIPLE SENSOR READ-------------------------\n");
271 #define IOCTL01_TEST_NUMBER 5
273 uint8_t op_result = 0;
274 IRPyro_cmd_type IOCTL_cmd = {0};
275 IRPyro_arg_type IOCTL_arg = {0};
278 IRPyro_open(IRPyro_test_Sensor);
279 UART_PutString(USART2, (uint8_t*)
"UT_06_IRPyro 9.6.6 Power options testing \n");
282 UART_PutString(USART2, (uint8_t*)
"POWER NORMAL \n");
283 IOCTL_cmd.cmd = power_normal;
284 IOCTL_result[0] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
287 UART_PutString(USART2, (uint8_t*)
"POWER LOW \n");
288 IOCTL_cmd.cmd = power_low;
289 IOCTL_result[1] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
292 UART_PutString(USART2, (uint8_t*)
"POWER SLEEP \n");
293 IOCTL_cmd.cmd = power_sleep;
294 IOCTL_result[2] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
296 IOCTL_cmd.cmd = power_wakeup;
297 UART_PutString(USART2, (uint8_t*)
"POWER WAKE UP \n");
298 IOCTL_result[3] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
300 IOCTL_cmd.cmd = power_off;
301 UART_PutString(USART2, (uint8_t*)
"POWER OFF \n");
302 IOCTL_result[4] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
304 IRPyro_close(IRPyro_test_Sensor);
306 UART_PutString(USART2, (uint8_t*)
"============\n");
310 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
314 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
315 UART_PutNumber(USART2, (uint32_t) op_result);
316 UART_PutString(USART2, (uint8_t*)
" \n.");
318 UART_PutString(USART2, (uint8_t*)
"============\n");
319 UART_PutString(USART2, (uint8_t*)
"--------------END OF MULTIPLE SENSOR READ-------------------------\n");
338 #define WAKE_UP_EVENT_TEST_NUMBER 3
340 uint8_t op_result = 0;
343 uint8_t wake_up_detected = 0;
344 IRPyro_cmd_type IOCTL_cmd = {0};
345 IRPyro_arg_type IOCTL_arg = {0};
348 IRPyro_open(IRPyro_test_Sensor);
349 UART_PutString(USART2, (uint8_t*)
"WAKE UP EVENT DETECTION BY HARDWARE INTERRUPT \n");
351 UART_PutString(USART2, (uint8_t*)
"POWER NORMAL \n");
352 IOCTL_cmd.cmd = power_normal;
353 wake_up_event_result[0] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
356 UART_PutString(USART2, (uint8_t*)
"POWER SLEEP \n");
357 IOCTL_cmd.cmd = power_sleep;
358 wake_up_event_result[1] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
361 PWR_EnterSleepMode(PWR_SLEEPEntry_WFI);
366 wake_up_detected = EXTI_detected(0);
369 while ((time_to_wait != 0) && (wake_up_detected == 0));
371 if (time_to_wait == 0 && wake_up_detected == 0)
373 IOCTL_cmd.cmd = power_wakeup;
374 UART_PutString(USART2, (uint8_t*)
"FORCED POWER WAKE UP \n");
375 IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
376 UART_PutString(USART2, (uint8_t*)
"READ TEST AFTER FORCED POWER WAKE UP \n");
381 UART_PutString(USART2, (uint8_t*)
"WAKE UP EVENT DETECTED!! \n");
382 wake_up_event_result[2] = wake_up_detected;
383 UART_PutString(USART2, (uint8_t*)
"READ TEST AFTER WAKE UP EVENT \n");
387 IRPyro_close(IRPyro_test_Sensor);
389 UART_PutString(USART2, (uint8_t*)
"============\n");
393 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
397 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
398 UART_PutNumber(USART2, (uint32_t) op_result);
399 UART_PutString(USART2, (uint8_t*)
" \n.");
401 UART_PutString(USART2, (uint8_t*)
"============\n");
402 UART_PutString(USART2, (uint8_t*)
"--------------WAKE UP EVENT DETECTION BY HARDWARE INTERRUPT-------------------------\n");
419 #define IOCTL_TEST_NUMBER 12
421 uint8_t op_result = 0;
422 IRPyro_cmd_type IOCTL_cmd = {0};
423 IRPyro_arg_type IOCTL_arg = {0};
426 IRPyro_open(IRPyro_test_Sensor);
427 UART_PutString(USART2, (uint8_t*)
"UT_06_IRPyro 9.6.8 On the fly configuration \n");
430 UART_PutString(USART2, (uint8_t*)
"SAMPLING RATE 1MS \n");
431 IOCTL_cmd.cmd = sampling_rate_get;
432 IOCTL_result[0] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
435 UART_PutString(USART2, (uint8_t*)
"SAMPLING RATE 10MS \n");
436 IOCTL_cmd.cmd = sampling_rate_set;
437 IOCTL_arg.arg = 0x0A;
438 IOCTL_result[1] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
441 UART_PutString(USART2, (uint8_t*)
"SAMPLING RATE 1MS \n");
442 IOCTL_cmd.cmd = sampling_rate_set;
443 IOCTL_arg.arg = 0x00;
444 IOCTL_result[2] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
448 UART_PutString(USART2, (uint8_t*)
"SET HIGH PASS FILTER 2HZ \n");
449 IOCTL_cmd.cmd = high_pass_set;
450 IOCTL_arg.arg = HIGH_PASS_2HZ;
451 IOCTL_arg.channel = 1;
452 IOCTL_result[3] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
455 UART_PutString(USART2, (uint8_t*)
"GET HIGH PASS FILTER 2HZ \n");
456 IOCTL_cmd.cmd = high_pass_get;
457 IOCTL_result[4] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
460 UART_PutString(USART2, (uint8_t*)
"SET HIGH PASS FILTER 8HZ \n");
461 IOCTL_cmd.cmd = high_pass_set;
462 IOCTL_arg.arg = HIGH_PASS_8HZ;
463 IOCTL_arg.channel = 2;
464 IOCTL_result[5] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
467 UART_PutString(USART2, (uint8_t*)
"GET HIGH PASS FILTER 8HZ \n");
468 IOCTL_cmd.cmd = high_pass_get;
469 IOCTL_result[6] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
473 UART_PutString(USART2, (uint8_t*)
"SET LOW PASS FILTER 45HZ \n");
474 IOCTL_cmd.cmd = low_pass_set;
475 IOCTL_arg.arg = LOW_PASS_45;
476 IOCTL_result[7] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
479 UART_PutString(USART2, (uint8_t*)
"GET LOW PASS FILTER 45HZ \n");
480 IOCTL_cmd.cmd = low_pass_get;
481 IOCTL_result[8] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
485 UART_PutString(USART2, (uint8_t*)
"SET GAIN TO 8X \n");
486 IOCTL_cmd.cmd = gain_set;
487 IOCTL_arg.arg = GAIN_08;
488 IOCTL_arg.channel = 3;
489 IOCTL_result[9] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
492 UART_PutString(USART2, (uint8_t*)
"GET GAIN TO 8X \n");
493 IOCTL_cmd.cmd = gain_get;
494 IOCTL_result[10] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
497 UART_PutString(USART2, (uint8_t*)
"SET GAIN TO 16X \n");
498 IOCTL_cmd.cmd = gain_set;
499 IOCTL_arg.arg = GAIN_16;
500 IOCTL_arg.channel = 4;
501 IOCTL_result[11] = IRPyro_ioctl(IRPyro_test_Sensor, &IOCTL_cmd, IOCTL_arg);
504 UART_PutString(USART2, (uint8_t*)
"============\n");
508 UART_PutString(USART2, (uint8_t*)
"PASSED \n");
512 UART_PutString(USART2, (uint8_t*)
"FAILED WITH CODE ");
513 UART_PutNumber(USART2, (uint32_t) op_result);
514 UART_PutString(USART2, (uint8_t*)
" \n.");
516 UART_PutString(USART2, (uint8_t*)
"============\n");
517 UART_PutString(USART2, (uint8_t*)
"--------------END OF MULTIPLE SENSOR READ-------------------------\n");
540 IRPyro_sensor_device_type IRPyro_TO_can = {0};
541 IRPyro_TO_can.read_mode = 1;
542 IRPyro_TO_can.address = 0x08;
543 IRPyro_TO_can.number_of_active_channels = 1;
546 UART_PutString(USART2, (uint8_t*)
"Single TO-CAN read \n");
556 IRPyro_devices IRPyro_device = {0};
558 AFE_reg_type IRPyro_AFE_Master =
561 .LP = LOW_POWER_DISABLE,
563 .C_LP = LOW_PASS_180,
564 .CLK_OUT = CLK_ENABLE,
569 AFE_reg_type IRPyro_AFE_Slave =
572 .LP = LOW_POWER_DISABLE,
574 .C_LP = LOW_PASS_180,
575 .CLK_OUT = CLK_DISABLE,
582 IRPyro_device[0].INT_Port = 1;
583 IRPyro_device[0].CS_Port = 2;
584 IRPyro_device[0].CS_Pin = 1;
585 IRPyro_device[0].INT_Pin = 4;
586 IRPyro_device[0].address = 0x0A;
588 IRPyro_device[1].CS_Port = 2;
589 IRPyro_device[1].INT_Port = 1;
590 IRPyro_device[1].CS_Pin = 5;
591 IRPyro_device[1].INT_Pin = 5;
592 IRPyro_device[1].address = 0x0B;
595 IRPyro_device[0].AFE_register = IRPyro_AFE_Master;
596 IRPyro_device[0].read_mode = 1;
597 IRPyro_device[0].number_of_active_channels = 1;
599 IRPyro_device[1].AFE_register = IRPyro_AFE_Slave;
600 IRPyro_device[1].read_mode = 1;
601 IRPyro_device[1].number_of_active_channels = 1;
604 UART_PutString(USART2, (uint8_t*)
"IRPyro TO: READ DATA FROM MULTIPLE SENSORS and detect frames missing with the sensors CONFIGURED FOR INTERRUPT\n");
621 CS_pin_set(2,1,value);
622 CS_pin_set(2,3,value);
623 CS_pin_set(2,4,value);
624 CS_pin_set(2,5,value);
632 static uint8_t
check_results(uint8_t * test_results, uint8_t number_of_tests)
634 uint8_t op_result = 0;
635 for (uint8_t idx=0; idx< number_of_tests; ++idx)
637 if (test_results[idx] == 1)
643 op_result = test_results[idx];
647 if (op_result == number_of_tests)
661 uint16_t number_of_frames_lost[4] = {0};
662 uint16_t previous_frame_count[4] = {0};
663 uint16_t present_frame_count[4] = {0};
664 uint8_t reading_attempt = 0;
665 uint8_t op_result = 0;
667 for(uint8_t device=0; device<list_size; ++device)
672 UART_PutString(USART2, (uint8_t*)
"DEVICE NUMBER: ");
673 UART_PutNumber(USART2, (uint32_t) device);
674 UART_PutString(USART2, (uint8_t*)
" FAILED TO RESET WITH CODE ");
675 UART_PutNumber(USART2, (uint32_t) op_result);
676 UART_PutString(USART2, (uint8_t*)
" \n.");
679 op_result = IRPyro_read_devices(this_list, list_size);
682 UART_PutString(USART2, (uint8_t*)
"FAILED TO READ WITH CODE ");
683 UART_PutNumber(USART2, (uint32_t) op_result);
684 UART_PutString(USART2, (uint8_t*)
" \n.");
686 for(uint8_t device=0; device< IRPyro_LIST_SIZE; ++device)
691 UART_PutString(USART2, (uint8_t*)
"READING ");
693 UART_PutString(USART2, (uint8_t*)
" FRAMES \n");
694 int sample_counter=0;
697 op_result = IRPyro_read_devices(this_list, list_size);
701 for(uint8_t device=0; device< IRPyro_LIST_SIZE; ++device)
705 dif = present_frame_count[device] - previous_frame_count[device];
708 ++number_of_frames_lost[device];
710 previous_frame_count[device] = present_frame_count[device];
715 if (reading_attempt < 3)
722 for(uint8_t device=0; device< IRPyro_LIST_SIZE; ++device)
724 ++number_of_frames_lost[device];
730 UART_PutString(USART2, (uint8_t*)
"TEST COMPLETE \n");
731 UART_PutString(USART2, (uint8_t*)
"Frames lost \n");
733 for(uint8_t device=0; device< IRPyro_LIST_SIZE; ++device)
735 total =+number_of_frames_lost[device];
736 UART_PutString(USART2, (uint8_t*)
"Device: ");
737 UART_PutNumber(USART2, device);
738 UART_PutString(USART2, (uint8_t*)
" ");
739 UART_PutString(USART2, (uint8_t*)
" frames lost: ");
740 UART_PutNumber(USART2, number_of_frames_lost[device]);
741 UART_PutString(USART2, (uint8_t*)
"\n");
743 return (total == 0) ? 1 : 0;
752 uint16_t number_of_frames_lost = 0;
753 uint16_t previous_frame_count = 0;
754 uint16_t present_frame_count = 0;
755 uint8_t reading_attempt = 0;
756 uint8_t op_result = 0;
761 UART_PutString(USART2, (uint8_t*)
"FAILED TO RESET WITH CODE ");
762 UART_PutNumber(USART2, (uint32_t) op_result);
763 UART_PutString(USART2, (uint8_t*)
" \n.");
765 op_result = IRPyro_read(this_device);
768 UART_PutString(USART2, (uint8_t*)
"FAILED TO READ WITH CODE ");
769 UART_PutNumber(USART2, (uint32_t) op_result);
770 UART_PutString(USART2, (uint8_t*)
" \n.");
775 UART_PutString(USART2, (uint8_t*)
"READING ");
777 UART_PutString(USART2, (uint8_t*)
" FRAMES \n");
778 uint32_t sample_counter=0;
781 op_result = IRPyro_read(this_device);
787 dif = present_frame_count - previous_frame_count;
790 ++number_of_frames_lost;
792 previous_frame_count = present_frame_count;
796 if (reading_attempt < 3)
803 ++number_of_frames_lost;
808 UART_PutString(USART2, (uint8_t*)
"TEST COMPLETE \n");
809 UART_PutString(USART2, (uint8_t*)
"Frames lost ");
810 UART_PutNumber(USART2, number_of_frames_lost);
811 UART_PutString(USART2, (uint8_t*)
"\n");
812 return (number_of_frames_lost == 0) ? 1 : 0;
820 static uint8_t
AFE_compare(AFE_reg_type first, AFE_reg_type second)
822 uint8_t i = 0, result_comparison = 1;
823 uint8_t *AFE_pointer_one = &(first.S7_S0);
824 uint8_t *AFE_pointer_two = &(second.S7_S0);
825 uint8_t AFE_size =
sizeof(first);
827 while (result_comparison && i<AFE_size)
829 if (AFE_pointer_one[i] != AFE_pointer_two[i] )
830 result_comparison = 0;
834 return result_comparison;
842 static uint8_t
CCP_compare(CCP_reg_type first, CCP_reg_type second)
844 uint8_t i = 0, result_comparison = 1;
845 uint8_t *CCP_pointer_one = &(first.Feedback_cap);
846 uint8_t *CCP_pointer_two = &(second.Feedback_cap);
847 uint8_t CCP_size =
sizeof(first);
849 while (result_comparison && i<CCP_size)
851 if (CCP_pointer_one[i] != CCP_pointer_two[i] )
852 result_comparison = 0;
856 return result_comparison;
864 static uint8_t
WUP_compare(WUP_reg_type first, WUP_reg_type second)
866 uint8_t i = 0, result_comparison = 1;
867 uint8_t *WUP_pointer_one = &(first.UHT);
868 uint8_t *WUP_pointer_two = &(second.UHT);
869 uint8_t WUP_size =
sizeof(first);
871 while (result_comparison && i<WUP_size)
873 if (WUP_pointer_one[i] != WUP_pointer_two[i] )
874 result_comparison = 0;
878 return result_comparison;
885 static uint8_t
FIFO_reset(IRPyro_sensor_device_type* this_device)
887 uint8_t op_result = 0;
888 uint8_t i2c_result = 0;
896 op_result = i2c_result;