Mercurial > public > hwos_code
comparison src/sleepmode.asm @ 656:8af5aefbcdaf default tip
Update to 3.31 beta
| author | heinrichsweikamp |
|---|---|
| date | Thu, 27 Nov 2025 18:32:58 +0100 |
| parents | 75e90cd0c2c3 |
| children |
comparison
equal
deleted
inserted
replaced
| 655:c7b7b8a358cd | 656:8af5aefbcdaf |
|---|---|
| 199 | 199 |
| 200 one_sec_sleep_buttons_done: | 200 one_sec_sleep_buttons_done: |
| 201 bcf switch_right ; clear right button event | 201 bcf switch_right ; clear right button event |
| 202 bcf switch_left ; clear left button event | 202 bcf switch_left ; clear left button event |
| 203 | 203 |
| 204 incf sm_timer_10sec,F ; increment 10 seconds timer | |
| 205 movlw .10 ; load a 10 into WREG | |
| 206 cpfslt sm_timer_10sec ; timer < 10 yet? | |
| 207 rcall ten_sec_sleep ; NO - do the every 10 second tasks | |
| 208 | |
| 209 btfsc trigger_full_minute ; one minute in sleep? | |
| 210 rcall one_min_sleep ; YES - do the every minute tasks | |
| 211 | |
| 212 btfsc trigger_full_hour ; one hour in sleep? | |
| 213 rcall one_hour_sleep ; YES - do the every hour tasks | |
| 214 | |
| 215 return ; done. | |
| 216 | |
| 217 | |
| 218 | |
| 219 ;----------------------------------------------------------------------------- | |
| 220 ; Helper Function - Tasks every 10 Seconds in Sleep Mode | |
| 221 ; | |
| 222 ten_sec_sleep: | |
| 223 ; tasks every 10 seconds in sleep mode | |
| 224 clrf sm_timer_10sec ; clear timer | |
| 225 | |
| 204 btfsc battery_gauge_available ; is a battery gauge IC available? | 226 btfsc battery_gauge_available ; is a battery gauge IC available? |
| 205 bra one_sec_sleep_1 ; YES - check for charger | 227 bra ten_sec_sleep_1 ; YES - check for charger |
| 206 btfsc ble_available ; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport) | 228 btfsc ble_available ; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport) |
| 207 bra one_sec_sleep_2 ; - continue | 229 bra ten_sec_sleep_2 ; - continue |
| 208 btfsc vusb_in ; NO - USB plugged in? | 230 btfsc vusb_in ; NO - USB plugged in? |
| 209 bcf sleepmode ; YES - terminate sleep mode | 231 bcf sleepmode ; YES - terminate sleep mode |
| 210 bra one_sec_sleep_2 ; - continue | 232 bra ten_sec_sleep_2 ; - continue |
| 211 | 233 |
| 212 one_sec_sleep_1: | 234 ten_sec_sleep_1: |
| 213 call get_battery_voltage ; check for charger | 235 call get_battery_voltage ; check for charger |
| 214 | 236 |
| 215 ; Test if charging | 237 ; Test if charging |
| 216 btfss cc_active ; charging? | 238 btfss cc_active ; charging? |
| 217 bra one_sec_sleep_1a ; NO | 239 bra ten_sec_sleep_1a ; NO |
| 218 btfsc charge_in_sleep ; YES - already showing charge screen? | 240 btfsc charge_in_sleep ; YES - already showing charge screen? |
| 219 bra one_sec_sleep_1b ; YES - only update data | 241 bra ten_sec_sleep_1b ; YES - only update data |
| 220 | 242 |
| 221 bsf charge_in_sleep | 243 bsf charge_in_sleep |
| 222 bcf deep_sleep ; wake-up from deepsleep | 244 bcf deep_sleep ; wake-up from deepsleep |
| 223 call TFT_boot ; initialize TFT (includes clear screen) | 245 call TFT_boot ; initialize TFT (includes clear screen) |
| 224 movlw .32 | 246 movlw .32 |
| 225 movff WREG,max_CCPR1L ; bank safe | 247 movff WREG,max_CCPR1L ; bank safe |
| 226 call TFT_Display_FadeIn ; dim up the display | 248 call TFT_Display_FadeIn ; dim up the display |
| 227 one_sec_sleep_1b: | 249 ten_sec_sleep_1b: |
| 228 call TFT_surfmode_batt ; show battery type, voltage and color-coded percentage | 250 call TFT_surfmode_batt ; show battery type, voltage and color-coded percentage |
| 229 bra one_sec_sleep_2 ; continue | 251 bra ten_sec_sleep_2 ; continue |
| 230 | 252 |
| 231 one_sec_sleep_1a: | 253 ten_sec_sleep_1a: |
| 232 btfss charge_in_sleep ; was showing charge screen? | 254 btfss charge_in_sleep ; was showing charge screen? |
| 233 bra one_sec_sleep_2 ; NO | 255 bra ten_sec_sleep_2 ; NO |
| 234 | 256 |
| 235 ; yes, power-down screen | 257 ; yes, power-down screen |
| 236 call TFT_Display_FadeOut ; power-down backlight | 258 call TFT_Display_FadeOut ; power-down backlight |
| 237 call TFT_DisplayOff ; power-down display | 259 call TFT_DisplayOff ; power-down display |
| 238 bcf charge_in_sleep | 260 bcf charge_in_sleep |
| 239 | 261 |
| 240 | 262 |
| 241 one_sec_sleep_2: | 263 ten_sec_sleep_2: |
| 242 incf sm_timer_10sec,F ; increment 10 seconds timer | 264 |
| 243 movlw .10 ; load a 10 into WREG | |
| 244 cpfslt sm_timer_10sec ; timer < 10 yet? | |
| 245 rcall ten_sec_sleep ; NO - do the every 10 second tasks | |
| 246 | |
| 247 btfsc trigger_full_minute ; one minute in sleep? | |
| 248 rcall one_min_sleep ; YES - do the every minute tasks | |
| 249 | |
| 250 btfsc trigger_full_hour ; one hour in sleep? | |
| 251 rcall one_hour_sleep ; YES - do the every hour tasks | |
| 252 | |
| 253 ; sleepmode pressure sampling for new sensor is done here | |
| 254 btfss press_sensor_type ; New sensor found? | |
| 255 return ; No, done. | |
| 256 | |
| 257 btfsc ms5837_state ; =0: result of temperature is in the ADC | |
| 258 goto I2C_get_press_val_MS5837 ; (Will clear ms5837_state) (And return!) | |
| 259 goto I2C_get_temp_val_MS5837 ; (Will set ms5837_state) (And return!) | |
| 260 ; done. | |
| 261 | |
| 262 | |
| 263 | |
| 264 ;----------------------------------------------------------------------------- | |
| 265 ; Helper Function - Tasks every 10 Seconds in Sleep Mode | |
| 266 ; | |
| 267 ten_sec_sleep: | |
| 268 ; tasks every 10 seconds in sleep mode | |
| 269 clrf sm_timer_10sec ; clear timer | |
| 270 rcall pressuretest_sleep_fast ; get pressure without averaging (faster) | 265 rcall pressuretest_sleep_fast ; get pressure without averaging (faster) |
| 271 MOVLI wake_up_from_sleep,sub_a ; load wake-up pressure (1160 mbar) into sub_a | 266 MOVLI wake_up_from_sleep,sub_a ; load wake-up pressure (1160 mbar) into sub_a |
| 272 MOVII pressure_abs, sub_b ; load current absolute pressure into sub_b | 267 MOVII pressure_abs, sub_b ; load current absolute pressure into sub_b |
| 273 call cmpU16 ; sub_a - sub_b = wake-up pressure - current absolute pressure | 268 call cmpU16 ; sub_a - sub_b = wake-up pressure - current absolute pressure |
| 274 btfsc neg_flag ; is the current absolute pressure > 1160 mbar ? | 269 btfsc neg_flag ; is the current absolute pressure > 1160 mbar ? |
| 401 ;----------------------------------------------------------------------------- | 396 ;----------------------------------------------------------------------------- |
| 402 ; Helper Function - read Accelerometer Z-Axis | 397 ; Helper Function - read Accelerometer Z-Axis |
| 403 ; | 398 ; |
| 404 deepsleep_get_accel: | 399 deepsleep_get_accel: |
| 405 call I2C_init_compass ; start compass | 400 call I2C_init_compass ; start compass |
| 401 btfss compass_present | |
| 402 bcf deep_sleep ; No Compass - terminate deep sleep mode | |
| 406 rcall sleepmode_sleep ; sleep for 62.5...125 ms | 403 rcall sleepmode_sleep ; sleep for 62.5...125 ms |
| 407 call I2C_RX_accelerometer ; read accelerometer | 404 call I2C_RX_accelerometer ; read accelerometer |
| 408 call I2C_RX_accelerometer ; read accelerometer | 405 call I2C_RX_accelerometer ; read accelerometer |
| 409 call I2C_sleep_compass ; shut down compass | 406 call I2C_sleep_compass ; shut down compass |
| 410 movff accel_DZ+0,WREG ; transfer result to WREG | 407 movff accel_DZ+0,WREG ; transfer result to WREG |
| 415 ; Helper Function - read Pressure without Averaging | 412 ; Helper Function - read Pressure without Averaging |
| 416 ; | 413 ; |
| 417 ; faster method to save some power in sleep mode | 414 ; faster method to save some power in sleep mode |
| 418 ; | 415 ; |
| 419 pressuretest_sleep_fast: | 416 pressuretest_sleep_fast: |
| 417 ; sleepmode pressure sampling for new sensor is done here | |
| 418 btfss press_sensor_type ; New sensor found? | |
| 419 bra pressuretest_sleep_fast2 ; No | |
| 420 | |
| 421 btfsc ms5837_state ; =0: result of temperature is in the ADC | |
| 422 bra pressuretest_sleep_fast1 ; was =1 -> Read pressure from MS5837. ms5837_state will always be zero here from now on | |
| 423 call I2C_get_temp_val_MS5837 ; (Will set ms5837_state) | |
| 424 rcall sleepmode_sleep ; sleep for 62.5...125 ms | |
| 425 rcall sleepmode_sleep ; sleep for 62.5...125 ms | |
| 426 pressuretest_sleep_fast1: | |
| 427 call I2C_get_press_val_MS5837 ; (Will clear ms5837_state) | |
| 428 rcall sleepmode_sleep ; sleep for 62.5...125 ms | |
| 429 rcall sleepmode_sleep ; sleep for 62.5...125 ms | |
| 430 | |
| 431 pressuretest_sleep_fast2: | |
| 420 banksel isr_backup ; select bank ISR data | 432 banksel isr_backup ; select bank ISR data |
| 421 | 433 |
| 422 clrf pressure_abs_avg+0 ; clear pressure average register | 434 clrf pressure_abs_avg+0 ; clear pressure average register |
| 423 clrf pressure_abs_avg+1 | 435 clrf pressure_abs_avg+1 |
| 424 clrf pressure_abs_avg+2 | 436 clrf pressure_abs_avg+2 |
