Mercurial > public > ostc4
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 } |