comparison Small_CPU/Src/scheduler.c @ 115:3834b6272ee5 FlipDisplay

Merge with 68181cd61f2069d061621c2cd2a6afddb7486f5e
author Ideenmodellierer
date Thu, 03 Jan 2019 19:59:36 +0100
parents 68181cd61f20
children 6347a86caa18
comparison
equal deleted inserted replaced
114:79b19d56ab08 115:3834b6272ee5
108 global.conservatism = 0; 108 global.conservatism = 0;
109 global.whichGas = 0; 109 global.whichGas = 0;
110 global.aktualGas[0] = Air; 110 global.aktualGas[0] = Air;
111 global.lifeData.actualGas = global.aktualGas[0]; 111 global.lifeData.actualGas = global.aktualGas[0];
112 112
113 const uint8_t button_standard_sensitivity = ((2400-( 90 *24))/10)+15; 113 const uint8_t button_standard_sensitivity = ((2400-( 40 *24))/10)+15;
114 global.ButtonResponsiveness[0] = button_standard_sensitivity; 114 global.ButtonResponsiveness[0] = button_standard_sensitivity;
115 global.ButtonResponsiveness[1] = button_standard_sensitivity; 115 global.ButtonResponsiveness[1] = button_standard_sensitivity;
116 global.ButtonResponsiveness[2] = button_standard_sensitivity; 116 global.ButtonResponsiveness[2] = button_standard_sensitivity;
117 global.ButtonResponsiveness[3] = button_standard_sensitivity; 117 global.ButtonResponsiveness[3] = button_standard_sensitivity;
118 118
179 } 179 }
180 180
181 181
182 void scheduleSpecial_Evaluate_DataSendToSlave(void) 182 void scheduleSpecial_Evaluate_DataSendToSlave(void)
183 { 183 {
184 //TEMPORARY fix for compass calibration.
185 //TODO: Fix I2C timeout for complete solving problem.
186 if(global.mode==MODE_CALIB){
187 return;
188 }
189
184 global.dataSendToSlavePending = 0; 190 global.dataSendToSlavePending = 0;
185 if(!global.dataSendToSlaveIsValid) 191 if(!global.dataSendToSlaveIsValid) return;
186 return;
187 192
188 global.dataSendToMaster.confirmRequest.uw = 0; 193 global.dataSendToMaster.confirmRequest.uw = 0;
189 194
190 if(TM_OTP_Read(0,0) == 0xFF) 195 if(TM_OTP_Read(0,0) == 0xFF)
191 { 196 {
241 setButtonsNow = 1; 246 setButtonsNow = 1;
242 } 247 }
243 248
244 if(global.dataSendToSlave.setBatteryGaugeNow) 249 if(global.dataSendToSlave.setBatteryGaugeNow)
245 { 250 {
251 if(global.mode!=MODE_CALIB){
246 global.dataSendToMaster.confirmRequest.ub.batterygauge = 1; 252 global.dataSendToMaster.confirmRequest.ub.batterygauge = 1;
247 battery_gas_gauge_set(global.dataSendToSlave.data.newBatteryGaugePercentageFloat); 253 battery_gas_gauge_set(global.dataSendToSlave.data.newBatteryGaugePercentageFloat);
254 }
248 } 255 }
249 256
250 if((global.mode == MODE_SURFACE) && (global.dataSendToSlave.mode == MODE_SHUTDOWN)) 257 if((global.mode == MODE_SURFACE) && (global.dataSendToSlave.mode == MODE_SHUTDOWN))
251 { 258 {
252 global.mode = MODE_SHUTDOWN; 259 global.mode = MODE_SHUTDOWN;
268 275
269 /* for device data updates */ 276 /* for device data updates */
270 deviceDataFlashValid = 0; 277 deviceDataFlashValid = 0;
271 memcpy(&DeviceDataFlash, &global.dataSendToSlave.data.DeviceData, sizeof(SDevice)); 278 memcpy(&DeviceDataFlash, &global.dataSendToSlave.data.DeviceData, sizeof(SDevice));
272 deviceDataFlashValid = 1; 279 deviceDataFlashValid = 1;
280
281
282 //TODO: Temporary placed here. Duration ~210 ms.
283 if (global.I2C_SystemStatus != HAL_OK) {
284 MX_I2C1_TestAndClear();
285 MX_I2C1_Init();
286 // init_pressure();
287 // compass_init(0, 7);
288 // accelerator_init();
289 }
290 //Collect and copy sensor data just in one place.
291 //TODO: compass_calib_common needs big refactor.
292 compass_read();
293 acceleration_read();
294 compass_calc();
295 pressure_update();
296 copyPressureData();
297 battery_gas_gauge_get_data();
298 copyCompassData();
299 // copyCnsAndOtuData(); //TODO: move here.
300 copyTimeData();
301 // copyBatteryData(); // TODO: move here.
302 copyDeviceData();
303 copyVpmCrushingData();
304 //
305 scheduleUpdateDeviceData();
306
307
273 } 308 }
274 309
275 310
276 /** 311 /**
277 ****************************************************************************** 312 ******************************************************************************
404 * @date 18-June-2015 439 * @date 18-June-2015
405 ****************************************************************************** 440 ******************************************************************************
406 */ 441 */
407 void schedule_check_resync(void) 442 void schedule_check_resync(void)
408 { 443 {
409 if((global.check_sync_not_running >= 10) || (global.dataSendToSlaveIsNotValidCount >= 2)) 444 //TODO: REMOVE
410 { 445 if((global.check_sync_not_running >= 2))
411 global.dataSendToSlaveIsNotValidCount = 0; 446 {
412 global.check_sync_not_running = 0; 447 // global.dataSendToSlaveIsNotValidCount = 0;
413 global.sync_error_count++; 448 // global.check_sync_not_running = 0;
414 MX_SPI_DeInit(); 449 // global.sync_error_count++;
415 HAL_Delay(30); /* could be closer to length of data transmission 23.Feb.2015 hw */ 450 // MX_SPI_DeInit();
416 MX_DMA_Init(); 451 // HAL_Delay(30); /* could be closer to length of data transmission 23.Feb.2015 hw */
417 MX_SPI1_Init(); 452 // MX_DMA_Init();
418 SPI_Start_single_TxRx_with_Master(); 453 // MX_SPI1_Init();
454 // SPI_Start_single_TxRx_with_Master();
419 } 455 }
420 } 456 }
421 457
422 458
423 /** 459 /**
474 510
475 //Evaluate pressure at 20 ms, 120 ms, 220 ms,.... 511 //Evaluate pressure at 20 ms, 120 ms, 220 ms,....
476 if(ticksdiff >= counterPressure100msec * 100 + 20) 512 if(ticksdiff >= counterPressure100msec * 100 + 20)
477 { 513 {
478 global.check_sync_not_running++; 514 global.check_sync_not_running++;
479 pressure_update(); 515 // pressure_update();
480 scheduleUpdateDeviceData(); 516 // scheduleUpdateDeviceData();
481 if(global.demo_mode) 517 if(global.demo_mode)
482 { 518 {
483 turbo_seconds = demo_modify_temperature_and_pressure(global.lifeData.dive_time_seconds, counterPressure100msec, global.ceiling_from_main_CPU_mbar); 519 turbo_seconds = demo_modify_temperature_and_pressure(global.lifeData.dive_time_seconds, counterPressure100msec, global.ceiling_from_main_CPU_mbar);
484 if(turbo_seconds) 520 if(turbo_seconds)
485 { 521 {
506 counterAscentRate = 0; 542 counterAscentRate = 0;
507 543
508 // if(global.demo_mode) 544 // if(global.demo_mode)
509 // global.lifeData.ascent_rate_meter_per_min /= 4; 545 // global.lifeData.ascent_rate_meter_per_min /= 4;
510 } 546 }
511 copyPressureData(); 547 // copyPressureData();
512 counterPressure100msec++; 548 counterPressure100msec++;
513 } 549 }
514 //evaluate compass data at 50 ms, 150 ms, 250 ms,.... 550 //evaluate compass data at 50 ms, 150 ms, 250 ms,....
515 if(ticksdiff >= counterCompass100msec * 100 + 50) 551 // if(ticksdiff >= counterCompass100msec * 100 + 50)
516 { 552 // {
517 compass_read(); 553 // compass_read();
518 acceleration_read(); 554 // acceleration_read();
519 compass_calc(); 555 // compass_calc();
520 copyCompassData(); 556 // copyCompassData();
521 counterCompass100msec++; 557 // counterCompass100msec++;
522 } 558 // }
523 559
524 if(ticksdiff >= counterAmbientLight100msec * 100 + 70) 560 if(ticksdiff >= counterAmbientLight100msec * 100 + 70)
525 { 561 {
526 adc_ambient_light_sensor_get_data(); 562 adc_ambient_light_sensor_get_data();
527 copyAmbientLightData(); 563 copyAmbientLightData();
684 //Evaluate pressure at 20 ms, 120 ms, 220 ms,... 720 //Evaluate pressure at 20 ms, 120 ms, 220 ms,...
685 if(ticksdiff >= counterPressure100msec * 100 + 20) 721 if(ticksdiff >= counterPressure100msec * 100 + 20)
686 { 722 {
687 global.check_sync_not_running++; 723 global.check_sync_not_running++;
688 724
689 pressure_update(); 725 //pressure_update();
690 scheduleUpdateDeviceData(); 726 //scheduleUpdateDeviceData();
691 global.lifeData.ascent_rate_meter_per_min = 0; 727 global.lifeData.ascent_rate_meter_per_min = 0;
692 copyPressureData(); 728 //copyPressureData();
693 729
694 if(temperature_carousel > 20.0f) 730 if(temperature_carousel > 20.0f)
695 { 731 {
696 temperature_carousel = 20.0f; 732 temperature_carousel = 20.0f;
697 temperature_changer = -0.1f; 733 temperature_changer = -0.1f;
741 global.deviceDataSendToMaster.mode = MODE_SURFACE; 777 global.deviceDataSendToMaster.mode = MODE_SURFACE;
742 778
743 while(global.mode == MODE_SURFACE) 779 while(global.mode == MODE_SURFACE)
744 { 780 {
745 printf("surface...\n"); 781 printf("surface...\n");
746 782 // SPI_Start_single_TxRx_with_Master();
747 schedule_check_resync(); 783 schedule_check_resync();
748 lasttick = HAL_GetTick(); 784 lasttick = HAL_GetTick();
749 ticksdiff = time_elapsed_ms(tickstart,lasttick); 785 ticksdiff = time_elapsed_ms(tickstart,lasttick);
750 786
751 if(ticksdiff > counterWireless1msec) 787 if(ticksdiff > counterWireless1msec)
766 802
767 //Evaluate pressure at 20 ms, 120 ms, 220 ms,... 803 //Evaluate pressure at 20 ms, 120 ms, 220 ms,...
768 if(ticksdiff >= counterPressure100msec * 100 + 20) 804 if(ticksdiff >= counterPressure100msec * 100 + 20)
769 { 805 {
770 global.check_sync_not_running++; 806 global.check_sync_not_running++;
771 pressure_update(); 807 // pressure_update();
772 scheduleUpdateDeviceData(); 808 // scheduleUpdateDeviceData();
773 global.lifeData.ascent_rate_meter_per_min = 0; 809 global.lifeData.ascent_rate_meter_per_min = 0;
774 copyPressureData(); 810 // copyPressureData();
775 counterPressure100msec++; 811 counterPressure100msec++;
776 812
777 if(scheduleCheck_pressure_reached_dive_mode_level()) 813 if(scheduleCheck_pressure_reached_dive_mode_level())
778 global.mode = MODE_DIVE; 814 global.mode = MODE_DIVE;
779 } 815 }
780 816
781 //evaluate compass data at 50 ms, 150 ms, 250 ms,... 817 //evaluate compass data at 50 ms, 150 ms, 250 ms,...
782 818
783 if(ticksdiff >= counterCompass100msec * 100 + 50) 819 // if(ticksdiff >= counterCompass100msec * 100 + 50)
784 { 820 // {
785 compass_read(); 821 //// compass_read();
786 acceleration_read(); 822 //// acceleration_read();
787 compass_calc(); 823 // compass_calc();
788 copyCompassData(); 824 // copyCompassData();
789 counterCompass100msec++; 825 // counterCompass100msec++;
790 } 826 // }
791 827
792 //evaluate compass data at 70 ms, 170 ms, 270 ms,... 828 //evaluate compass data at 70 ms, 170 ms, 270 ms,...
793 if(ticksdiff >= counterAmbientLight100msec * 100 + 70) 829 if(ticksdiff >= counterAmbientLight100msec * 100 + 70)
794 { 830 {
795 adc_ambient_light_sensor_get_data(); 831 adc_ambient_light_sensor_get_data();
796 copyAmbientLightData(); 832 copyAmbientLightData();
797 counterAmbientLight100msec++; 833 counterAmbientLight100msec++;
798 } 834 }
799 //Evaluate tissues, toxic data, etc. once a second 835 //Evaluate tissues, toxic data, etc. once a second
800 if(ticksdiff >= 1000) 836 if(ticksdiff >= 1000)
801 { 837 {
802 if(clearDecoNow) 838 if(clearDecoNow)
803 { 839 {
804 decom_reset_with_1000mbar(&global.lifeData); ///< this should almost reset desaturation time 840 decom_reset_with_1000mbar(&global.lifeData); ///< this should almost reset desaturation time
809 global.accidentFlag = 0; 845 global.accidentFlag = 0;
810 global.accidentRemainingSeconds = 0; 846 global.accidentRemainingSeconds = 0;
811 vpm_init(&global.vpm, global.conservatism, global.repetitive_dive, global.seconds_since_last_dive); 847 vpm_init(&global.vpm, global.conservatism, global.repetitive_dive, global.seconds_since_last_dive);
812 clearDecoNow = 0; 848 clearDecoNow = 0;
813 } 849 }
814 850
815 //Set back tick counter 851 //Set back tick counter
816 tickstart = HAL_GetTick(); 852 tickstart = HAL_GetTick();
817 853
818 854
819 if(global.seconds_since_last_dive) 855 if(global.seconds_since_last_dive)
820 { 856 {
821 schedule_update_timer_helper(-1); 857 schedule_update_timer_helper(-1);
822 // global.seconds_since_last_dive++; 858 // global.seconds_since_last_dive++;
823 // if(global.seconds_since_last_dive > 777900) // a bit more than nine days [seconds] 859 // if(global.seconds_since_last_dive > 777900) // a bit more than nine days [seconds]
824 // global.seconds_since_last_dive = 0; 860 // global.seconds_since_last_dive = 0;
825 } 861 }
826 862
827 if(global.accidentRemainingSeconds) 863 if(global.accidentRemainingSeconds)
828 { 864 {
829 global.accidentRemainingSeconds--; 865 global.accidentRemainingSeconds--;
830 if(!global.accidentRemainingSeconds) 866 if(!global.accidentRemainingSeconds)
831 global.accidentFlag = 0; 867 global.accidentFlag = 0;
832 } 868 }
833 global.dataSendToMaster.accidentFlags = global.accidentFlag; 869 global.dataSendToMaster.accidentFlags = global.accidentFlag;
834 870
835 update_surface_pressure(1); 871 update_surface_pressure(1);
836 scheduleUpdateLifeData(0); 872 scheduleUpdateLifeData(0);
837 decom_oxygen_calculate_otu_degrade(&global.lifeData.otu, global.seconds_since_last_dive); 873 decom_oxygen_calculate_otu_degrade(&global.lifeData.otu, global.seconds_since_last_dive);
838 decom_oxygen_calculate_cns_degrade(&global.lifeData.cns, global.seconds_since_last_dive); 874 decom_oxygen_calculate_cns_degrade(&global.lifeData.cns, global.seconds_since_last_dive);
839 global.lifeData.desaturation_time_minutes = decom_calc_desaturation_time(global.lifeData.tissue_nitrogen_bar,global.lifeData.tissue_helium_bar,global.lifeData.pressure_surface_bar); 875 global.lifeData.desaturation_time_minutes = decom_calc_desaturation_time(global.lifeData.tissue_nitrogen_bar,global.lifeData.tissue_helium_bar,global.lifeData.pressure_surface_bar);
840 battery_charger_get_status_and_contral_battery_gas_gauge(0); 876 battery_charger_get_status_and_contral_battery_gas_gauge(0);
841 battery_gas_gauge_get_data(); 877 battery_gas_gauge_get_data();
842 878
843 copyCnsAndOtuData(); 879 copyCnsAndOtuData();
844 copyTimeData(); 880 copyTimeData();
845 copyBatteryData(); 881 copyBatteryData();
846 copyDeviceData(); 882 copyDeviceData();
847 883
853 if(!is_init_pressure_done()) 889 if(!is_init_pressure_done())
854 { 890 {
855 init_pressure(); 891 init_pressure();
856 } 892 }
857 } 893 }
858 894
859 counterCompass100msec = 0; 895 counterCompass100msec = 0;
860 counterPressure100msec = 0; 896 counterPressure100msec = 0;
861 counterAmbientLight100msec = 0; 897 counterAmbientLight100msec = 0;
862 counterWireless1msec = 0; 898 counterWireless1msec = 0;
863 } 899 }