Mercurial > public > ostc4
comparison Small_CPU/Src/scheduler.c @ 662:1b995079c045 Betatest
PSCR Mode
author | heinrichs weikamp |
---|---|
date | Tue, 14 Dec 2021 15:36:10 +0100 |
parents | 5149cd644fbc |
children | 079bb5b22c06 |
comparison
equal
deleted
inserted
replaced
661:87bee7cc77b3 | 662:1b995079c045 |
---|---|
40 #include "calc_crush.h" | 40 #include "calc_crush.h" |
41 #include "stm32f4xx_hal_rtc_ex.h" | 41 #include "stm32f4xx_hal_rtc_ex.h" |
42 #include "decom.h" | 42 #include "decom.h" |
43 #include "tm_stm32f4_otp.h" | 43 #include "tm_stm32f4_otp.h" |
44 #include "externalInterface.h" | 44 #include "externalInterface.h" |
45 #include "uart.h" | |
45 | 46 |
46 /* uncomment to enable restoting of last known date in case of a power loss (RTC looses timing data) */ | 47 /* uncomment to enable restoting of last known date in case of a power loss (RTC looses timing data) */ |
47 /* #define RESTORE_LAST_KNOWN_DATE */ | 48 /* #define RESTORE_LAST_KNOWN_DATE */ |
48 | 49 |
49 #define INVALID_PREASURE_VALUE (0.0f) | 50 #define INVALID_PREASURE_VALUE (0.0f) |
88 void copyTissueData(void); | 89 void copyTissueData(void); |
89 void copyVpmCrushingData(void); | 90 void copyVpmCrushingData(void); |
90 void copyDeviceData(void); | 91 void copyDeviceData(void); |
91 void copyPICdata(void); | 92 void copyPICdata(void); |
92 void copyExtADCdata(); | 93 void copyExtADCdata(); |
94 void copyExtCO2data(); | |
93 static void schedule_update_timer_helper(int8_t thisSeconds); | 95 static void schedule_update_timer_helper(int8_t thisSeconds); |
94 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow); | 96 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow); |
95 | 97 |
96 void scheduleSetDate(SDeviceLine *line); | 98 void scheduleSetDate(SDeviceLine *line); |
97 | 99 |
299 /* for device data updates */ | 301 /* for device data updates */ |
300 deviceDataFlashValid = 0; | 302 deviceDataFlashValid = 0; |
301 memcpy(&DeviceDataFlash, &global.dataSendToSlave.data.DeviceData, sizeof(SDevice)); | 303 memcpy(&DeviceDataFlash, &global.dataSendToSlave.data.DeviceData, sizeof(SDevice)); |
302 deviceDataFlashValid = 1; | 304 deviceDataFlashValid = 1; |
303 | 305 |
306 | |
307 /* handle external interface requests */ | |
308 | |
309 if((global.dataSendToSlave.data.externalInterface_Cmd && EXT_INTERFACE_33V_ON) != externalInterface_isEnabledPower33()) | |
310 { | |
311 externalInterface_SwitchPower33(global.dataSendToSlave.data.externalInterface_Cmd && EXT_INTERFACE_33V_ON); | |
312 } | |
313 | |
314 if(global.dataSendToSlave.data.externalInterface_Cmd > EXT_INTERFACE_33V_ON) | |
315 { | |
316 externalInterface_ExecuteCmd(global.dataSendToSlave.data.externalInterface_Cmd); | |
317 } | |
318 | |
319 | |
304 #if 0 | 320 #if 0 |
305 //TODO: Temporary placed here. Duration ~210 ms. | 321 //TODO: Temporary placed here. Duration ~210 ms. |
306 if (global.I2C_SystemStatus != HAL_OK) { | 322 if (global.I2C_SystemStatus != HAL_OK) { |
307 MX_I2C1_TestAndClear(); | 323 MX_I2C1_TestAndClear(); |
308 MX_I2C1_Init(); | 324 MX_I2C1_Init(); |
499 if(extAdcChannel != EXTERNAL_ADC_NO_DATA) | 515 if(extAdcChannel != EXTERNAL_ADC_NO_DATA) |
500 { | 516 { |
501 externalInterface_CalculateADCValue(extAdcChannel); | 517 externalInterface_CalculateADCValue(extAdcChannel); |
502 copyExtADCdata(); | 518 copyExtADCdata(); |
503 } | 519 } |
520 copyExtCO2data(); | |
504 } | 521 } |
505 | 522 |
506 //Evaluate pressure at 20 ms, 120 ms, 220 ms,.... | 523 //Evaluate pressure at 20 ms, 120 ms, 220 ms,.... |
507 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20) | 524 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20) |
508 { | 525 { |
759 | 776 |
760 | 777 |
761 | 778 |
762 void scheduleSurfaceMode(void) | 779 void scheduleSurfaceMode(void) |
763 { | 780 { |
764 | |
765 uint32_t ticksdiff = 0; | 781 uint32_t ticksdiff = 0; |
766 uint32_t lasttick = 0; | 782 uint32_t lasttick = 0; |
767 uint8_t extAdcChannel = 0; | 783 uint8_t extAdcChannel = 0; |
784 uint8_t batteryToggle = 0; /* ADC is operating in automatic 2 second cycles => consider for battery charge function call */ | |
785 | |
768 Scheduler.tickstart = HAL_GetTick(); | 786 Scheduler.tickstart = HAL_GetTick(); |
769 Scheduler.counterSPIdata100msec = 0; | 787 Scheduler.counterSPIdata100msec = 0; |
770 Scheduler.counterCompass100msec = 0; | 788 Scheduler.counterCompass100msec = 0; |
771 Scheduler.counterPressure100msec = 0; | 789 Scheduler.counterPressure100msec = 0; |
772 Scheduler.counterAmbientLight100msec = 0; | 790 Scheduler.counterAmbientLight100msec = 0; |
785 { | 803 { |
786 if(scheduleSetButtonResponsiveness()) | 804 if(scheduleSetButtonResponsiveness()) |
787 setButtonsNow = 0; | 805 setButtonsNow = 0; |
788 } | 806 } |
789 | 807 |
808 HandleUARTData(); | |
809 | |
790 /* Evaluate received data at 10 ms, 110 ms, 210 ms,... duration ~<1ms */ | 810 /* Evaluate received data at 10 ms, 110 ms, 210 ms,... duration ~<1ms */ |
791 if(ticksdiff >= Scheduler.counterSPIdata100msec * 100 + 10) | 811 if(ticksdiff >= Scheduler.counterSPIdata100msec * 100 + 10) |
792 { | 812 { |
793 if(SPI_Evaluate_RX_Data()!=0) /* did we receive something ? */ | 813 if(SPI_Evaluate_RX_Data()!=0) /* did we receive something ? */ |
794 { | 814 { |
799 if(extAdcChannel != EXTERNAL_ADC_NO_DATA) | 819 if(extAdcChannel != EXTERNAL_ADC_NO_DATA) |
800 { | 820 { |
801 externalInterface_CalculateADCValue(extAdcChannel); | 821 externalInterface_CalculateADCValue(extAdcChannel); |
802 copyExtADCdata(); | 822 copyExtADCdata(); |
803 } | 823 } |
824 copyExtCO2data(); | |
804 } | 825 } |
805 | 826 |
806 /* Evaluate pressure at 20 ms, 120 ms, 220 ms,... duration ~22ms] */ | 827 /* Evaluate pressure at 20 ms, 120 ms, 220 ms,... duration ~22ms] */ |
807 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20) | 828 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20) |
808 { | 829 { |
884 } | 905 } |
885 else | 906 else |
886 { | 907 { |
887 global.lifeData.desaturation_time_minutes = 0; | 908 global.lifeData.desaturation_time_minutes = 0; |
888 } | 909 } |
889 battery_gas_gauge_get_data(); | 910 |
890 battery_charger_get_status_and_contral_battery_gas_gauge(1); | 911 if(!batteryToggle) |
912 { | |
913 battery_gas_gauge_get_data(); | |
914 battery_charger_get_status_and_contral_battery_gas_gauge(2); | |
915 batteryToggle = 1; | |
916 } | |
917 else | |
918 { | |
919 batteryToggle = 0; | |
920 } | |
891 | 921 |
892 copyCnsAndOtuData(); | 922 copyCnsAndOtuData(); |
893 copyTimeData(); | 923 copyTimeData(); |
894 copyBatteryData(); | 924 copyBatteryData(); |
895 copyDeviceData(); | 925 copyDeviceData(); |
1054 | 1084 |
1055 | 1085 |
1056 if(global.mode == MODE_SLEEP) | 1086 if(global.mode == MODE_SLEEP) |
1057 secondsCount += 2; | 1087 secondsCount += 2; |
1058 | 1088 |
1089 externalInterface_InitPower33(); | |
1059 MX_I2C1_Init(); | 1090 MX_I2C1_Init(); |
1060 pressure_sensor_get_pressure_raw(); | 1091 pressure_sensor_get_pressure_raw(); |
1061 | 1092 |
1062 /* check if I2C is not up and running and try to reactivate if necessary. Also do initialization if problem occurred during startup */ | 1093 /* check if I2C is not up and running and try to reactivate if necessary. Also do initialization if problem occurred during startup */ |
1063 if(global.I2C_SystemStatus != HAL_OK) | 1094 if(global.I2C_SystemStatus != HAL_OK) |
1067 I2C_DeInit(); | 1098 I2C_DeInit(); |
1068 HAL_Delay(100); | 1099 HAL_Delay(100); |
1069 MX_I2C1_Init(); | 1100 MX_I2C1_Init(); |
1070 HAL_Delay(100); | 1101 HAL_Delay(100); |
1071 | 1102 |
1072 | |
1073 if((global.I2C_SystemStatus == HAL_OK) && (!is_init_pressure_done())) | 1103 if((global.I2C_SystemStatus == HAL_OK) && (!is_init_pressure_done())) |
1074 { | 1104 { |
1075 init_pressure(); | 1105 init_pressure(); |
1076 } | 1106 } |
1077 } | 1107 } |
1078 | 1108 |
1079 if(secondsCount >= 30) | 1109 if(secondsCount >= 30) |
1080 { | 1110 { |
1081 pressure_sensor_get_temperature_raw(); | 1111 pressure_sensor_get_temperature_raw(); |
1082 battery_gas_gauge_get_data(); | 1112 battery_gas_gauge_get_data(); |
1083 // ReInit_battery_charger_status_pins(); | 1113 ReInit_battery_charger_status_pins(); |
1084 battery_charger_get_status_and_contral_battery_gas_gauge(30); | 1114 battery_charger_get_status_and_contral_battery_gas_gauge(30); |
1085 // DeInit_battery_charger_status_pins(); | 1115 // DeInit_battery_charger_status_pins(); |
1086 secondsCount = 0; | 1116 secondsCount = 0; |
1087 } | 1117 } |
1088 | 1118 |
1361 global.deviceData.hoursOfOperation.value_int32++; | 1391 global.deviceData.hoursOfOperation.value_int32++; |
1362 scheduleSetDate(&global.deviceData.hoursOfOperation); | 1392 scheduleSetDate(&global.deviceData.hoursOfOperation); |
1363 } | 1393 } |
1364 break; | 1394 break; |
1365 | 1395 |
1366 case MODE_SLEEP: | 1396 case MODE_SLEEP: |
1367 case MODE_SHUTDOWN: | 1397 case MODE_SHUTDOWN: |
1368 break; | 1398 break; |
1369 } | 1399 } |
1370 } | 1400 } |
1371 | 1401 |
1634 value = getExternalInterfaceChannel(channel); | 1664 value = getExternalInterfaceChannel(channel); |
1635 global.dataSendToMaster.data[0].extADC_voltage[channel] = value; | 1665 global.dataSendToMaster.data[0].extADC_voltage[channel] = value; |
1636 } | 1666 } |
1637 } | 1667 } |
1638 | 1668 |
1669 void copyExtCO2data() | |
1670 { | |
1671 uint16_t value; | |
1672 | |
1673 if(externalInterface_GetCO2State()) | |
1674 { | |
1675 value = externalInterface_GetCO2Value(); | |
1676 global.dataSendToMaster.data[0].CO2_ppm = value; | |
1677 value = externalInterface_GetCO2SignalStrength(); | |
1678 global.dataSendToMaster.data[0].CO2_signalStrength = value; | |
1679 global.dataSendToMaster.data[0].externalInterface_CmdAnswer = externalInterface_GetCO2State(); | |
1680 externalInterface_SetCO2State(EXT_INTERFACE_33V_ON); /* clear command responses */ | |
1681 } | |
1682 else | |
1683 { | |
1684 global.dataSendToMaster.data[0].CO2_ppm = 0; | |
1685 global.dataSendToMaster.data[0].CO2_signalStrength = 0; | |
1686 global.dataSendToMaster.data[0].externalInterface_CmdAnswer = 0; | |
1687 } | |
1688 } | |
1639 | 1689 |
1640 typedef enum | 1690 typedef enum |
1641 { | 1691 { |
1642 SPI3_OK = 0x00, | 1692 SPI3_OK = 0x00, |
1643 SPI3_DEINIT = 0x01, | 1693 SPI3_DEINIT = 0x01, |