Completed systick handler.

This commit is contained in:
Dual Tachyon 2023-08-14 23:38:59 +01:00
parent 714317c300
commit 37afa8c956
11 changed files with 188 additions and 47 deletions

View File

@ -48,7 +48,9 @@ OBJS += gui.o
OBJS += helper.o OBJS += helper.o
OBJS += misc.o OBJS += misc.o
OBJS += radio.o OBJS += radio.o
OBJS += scheduler.o
OBJS += settings.o OBJS += settings.o
OBJS += main.o OBJS += main.o
TOP := $(shell pwd) TOP := $(shell pwd)

View File

@ -53,8 +53,8 @@ static const uint8_t VoiceClipLengthEnglish[76] = {
uint8_t gVoiceID[8]; uint8_t gVoiceID[8];
uint8_t gVoiceReadIndex; uint8_t gVoiceReadIndex;
uint8_t gVoiceWriteIndex; uint8_t gVoiceWriteIndex;
uint8_t gCountdownToPlayNextVoice; volatile uint16_t gCountdownToPlayNextVoice;
bool gFlagPlayQueuedVoice; volatile bool gFlagPlayQueuedVoice;
void AUDIO_PlayBeep(BEEP_Type_t Beep) void AUDIO_PlayBeep(BEEP_Type_t Beep)
{ {

View File

@ -113,8 +113,8 @@ typedef enum VOICE_ID_t VOICE_ID_t;
extern uint8_t gVoiceID[8]; extern uint8_t gVoiceID[8];
extern uint8_t gVoiceReadIndex; extern uint8_t gVoiceReadIndex;
extern uint8_t gVoiceWriteIndex; extern uint8_t gVoiceWriteIndex;
extern uint8_t gCountdownToPlayNextVoice; extern volatile uint16_t gCountdownToPlayNextVoice;
extern bool gFlagPlayQueuedVoice; extern volatile bool gFlagPlayQueuedVoice;
void AUDIO_PlayBeep(BEEP_Type_t Beep); void AUDIO_PlayBeep(BEEP_Type_t Beep);
void AUDIO_PlayVoice(VOICE_ID_t VoiceID); void AUDIO_PlayVoice(VOICE_ID_t VoiceID);

View File

@ -31,7 +31,7 @@ bool gChargingWithTypeC;
bool gLowBattery; bool gLowBattery;
bool gLowBatteryBlink; bool gLowBatteryBlink;
uint16_t gBatterySave; volatile uint16_t gBatterySave;
void BATTERY_GetReadings(bool bDisplayBatteryLevel) void BATTERY_GetReadings(bool bDisplayBatteryLevel)
{ {

View File

@ -32,7 +32,7 @@ extern bool gChargingWithTypeC;
extern bool gLowBattery; extern bool gLowBattery;
extern bool gLowBatteryBlink; extern bool gLowBatteryBlink;
extern uint16_t gBatterySave; extern volatile uint16_t gBatterySave;
void BATTERY_GetReadings(bool bDisplayBatteryLevel); void BATTERY_GetReadings(bool bDisplayBatteryLevel);

View File

@ -52,8 +52,3 @@ void SYSTICK_DelayUs(uint32_t Delay)
} while (i < Delay * gTickMultiplier); } while (i < Delay * gTickMultiplier);
} }
void SystickHandler(void)
{
gMaybeVsync = 1;
}

4
gui.c
View File

@ -34,8 +34,8 @@
GUI_DisplayType_t gScreenToDisplay; GUI_DisplayType_t gScreenToDisplay;
uint8_t g_200003C6; uint8_t g_200003C6;
uint8_t g_20000380; volatile uint8_t g_20000380;
uint8_t g_20000390; volatile uint8_t g_20000390;
uint8_t g_200003BA; uint8_t g_200003BA;
uint8_t g_200003BB; uint8_t g_200003BB;
uint8_t gWasFKeyPressed; uint8_t gWasFKeyPressed;

4
gui.h
View File

@ -33,8 +33,8 @@ typedef enum GUI_DisplayType_t GUI_DisplayType_t;
extern GUI_DisplayType_t gScreenToDisplay; extern GUI_DisplayType_t gScreenToDisplay;
extern uint8_t g_200003C6; extern uint8_t g_200003C6;
extern uint8_t g_20000380; extern volatile uint8_t g_20000380;
extern uint8_t g_20000390; extern volatile uint8_t g_20000390;
extern uint8_t g_200003BA; extern uint8_t g_200003BA;
extern uint8_t g_200003BB; extern uint8_t g_200003BB;
extern uint8_t gWasFKeyPressed; extern uint8_t gWasFKeyPressed;

40
misc.c
View File

@ -48,11 +48,13 @@ uint8_t gEEPROM_1F8E;
uint8_t gMR_ChannelParameters[207]; uint8_t gMR_ChannelParameters[207];
uint16_t g_2000032E; uint8_t g_2000032D;
uint16_t g_2000033A; volatile uint16_t g_2000032E;
uint16_t g_2000033E = 1000; volatile uint16_t g_2000033A;
uint8_t g_20000342; volatile uint16_t g_2000033E = 1000;
uint8_t g_20000356; volatile uint16_t g_20000342;
volatile uint16_t g_2000034C;
volatile uint16_t g_20000356;
uint8_t g_2000036B; uint8_t g_2000036B;
uint8_t g_2000036D; uint8_t g_2000036D;
uint8_t g_2000036E; uint8_t g_2000036E;
@ -66,7 +68,7 @@ uint8_t g_20000377;
uint8_t g_20000378; uint8_t g_20000378;
uint8_t g_20000379; uint8_t g_20000379;
uint8_t g_2000037E; uint8_t g_2000037E;
uint8_t g_20000381; volatile uint8_t g_20000381;
uint8_t g_20000383; uint8_t g_20000383;
uint16_t g_2000038E; uint16_t g_2000038E;
uint8_t g_200003A9; uint8_t g_200003A9;
@ -98,7 +100,7 @@ uint8_t g_20000D0C[16];
bool gIs_A_Scan; bool gIs_A_Scan;
bool gIsNoaaMode; bool gIsNoaaMode;
bool gMaybeVsync; volatile bool gMaybeVsync;
bool gNoaaChannel; bool gNoaaChannel;
bool gUpdateDisplay; bool gUpdateDisplay;
uint8_t gA_Scan_Channel; uint8_t gA_Scan_Channel;
@ -111,15 +113,21 @@ uint8_t gScanChannel;
uint32_t gScanFrequency; uint32_t gScanFrequency;
uint8_t gScanState; uint8_t gScanState;
uint8_t gShowChPrefix; uint8_t gShowChPrefix;
uint8_t gSystickCountdown2; volatile uint16_t gSystickCountdown2;
uint8_t gSystickCountdown3; volatile uint8_t gSystickCountdown3;
uint8_t gSystickCountdown4; volatile uint8_t gSystickCountdown4;
uint8_t gSystickFlag0; volatile uint16_t gSystickCountdown11;
uint8_t gSystickFlag10; volatile bool gSystickFlag0;
uint8_t gSystickFlag5; volatile bool gSystickFlag1;
uint8_t gSystickFlag6; volatile bool gSystickFlag5;
uint8_t gSystickFlag7; volatile bool gSystickFlag6;
uint8_t gSystickFlag8; volatile bool gSystickFlag7;
volatile bool gSystickFlag8;
volatile bool gSystickFlag9;
volatile bool gSystickFlag10;
volatile bool gSystickFlag11;
volatile uint16_t ScanPauseDelayIn10msec;
// -------- // --------

40
misc.h
View File

@ -51,11 +51,13 @@ extern uint8_t gEEPROM_1F8E;
extern uint8_t gMR_ChannelParameters[207]; extern uint8_t gMR_ChannelParameters[207];
extern uint16_t g_2000032E; extern uint8_t g_2000032D;
extern uint16_t g_2000033A; extern volatile uint16_t g_2000032E;
extern uint16_t g_2000033E; extern volatile uint16_t g_2000033A;
extern uint8_t g_20000342; extern volatile uint16_t g_2000033E;
extern uint8_t g_20000356; extern volatile uint16_t g_20000342;
extern volatile uint16_t g_2000034C;
extern volatile uint16_t g_20000356;
extern uint8_t g_2000036B; extern uint8_t g_2000036B;
extern uint8_t g_2000036D; extern uint8_t g_2000036D;
extern uint8_t g_2000036E; extern uint8_t g_2000036E;
@ -69,7 +71,7 @@ extern uint8_t g_20000377;
extern uint8_t g_20000378; extern uint8_t g_20000378;
extern uint8_t g_20000379; extern uint8_t g_20000379;
extern uint8_t g_2000037E; extern uint8_t g_2000037E;
extern uint8_t g_20000381; extern volatile uint8_t g_20000381;
extern uint8_t g_20000383; extern uint8_t g_20000383;
extern uint16_t g_2000038E; extern uint16_t g_2000038E;
extern uint8_t g_200003A9; extern uint8_t g_200003A9;
@ -101,7 +103,7 @@ extern uint8_t g_20000D0C[16];
extern bool gIs_A_Scan; extern bool gIs_A_Scan;
extern bool gIsNoaaMode; extern bool gIsNoaaMode;
extern bool gMaybeVsync; extern volatile bool gMaybeVsync;
extern bool gNoaaChannel; extern bool gNoaaChannel;
extern bool gUpdateDisplay; extern bool gUpdateDisplay;
extern uint8_t gA_Scan_Channel; extern uint8_t gA_Scan_Channel;
@ -114,15 +116,21 @@ extern uint8_t gScanChannel;
extern uint32_t gScanFrequency; extern uint32_t gScanFrequency;
extern uint8_t gScanState; extern uint8_t gScanState;
extern uint8_t gShowChPrefix; extern uint8_t gShowChPrefix;
extern uint8_t gSystickCountdown2; extern volatile uint16_t gSystickCountdown2;
extern uint8_t gSystickCountdown3; extern volatile uint8_t gSystickCountdown3;
extern uint8_t gSystickCountdown4; extern volatile uint8_t gSystickCountdown4;
extern uint8_t gSystickFlag0; extern volatile uint16_t gSystickCountdown11;
extern uint8_t gSystickFlag10; extern volatile bool gSystickFlag0;
extern uint8_t gSystickFlag5; extern volatile bool gSystickFlag1;
extern uint8_t gSystickFlag6; extern volatile bool gSystickFlag5;
extern uint8_t gSystickFlag7; extern volatile bool gSystickFlag6;
extern uint8_t gSystickFlag8; extern volatile bool gSystickFlag7;
extern volatile bool gSystickFlag8;
extern volatile bool gSystickFlag9;
extern volatile bool gSystickFlag10;
extern volatile bool gSystickFlag11;
extern volatile uint16_t ScanPauseDelayIn10msec;
// -------- // --------

128
scheduler.c Normal file
View File

@ -0,0 +1,128 @@
/* Copyright 2023 Dual Tachyon
* https://github.com/DualTachyon
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "audio.h"
#include "battery.h"
#include "functions.h"
#include "gui.h"
#include "misc.h"
#include "settings.h"
static uint32_t gGlobalSysTickCounter;
void SystickHandler(void)
{
gGlobalSysTickCounter += 1;
gMaybeVsync = 1;
if ((gGlobalSysTickCounter % 50) == 0) {
g_2000032E = 1;
if (g_2000033E != 0) {
g_2000033E--;
if (g_2000033E == 0) {
gSystickFlag0 = 1;
}
}
}
if ((gGlobalSysTickCounter & 3) == 0) {
gSystickFlag1 = 1;
}
if (gSystickCountdown2 != 0) {
gSystickCountdown2--;
}
if (gSystickCountdown3 != 0) {
gSystickCountdown3--;
}
if (gSystickCountdown4 != 0) {
gSystickCountdown4--;
}
if (gCurrentFunction == FUNCTION_0 && g_2000032E != 0) {
g_2000032E--;
if (g_2000032E == 0) {
gSystickFlag5 = 1;
}
}
if (gCurrentFunction == FUNCTION_POWER_SAVE && gBatterySave != 0) {
gBatterySave--;
if (gBatterySave == 0) {
gSystickFlag6 = 1;
}
}
if (g_20000380 == 0 && g_20000381 == 0 && gEeprom.DUAL_WATCH != 0) {
if (gCurrentFunction != FUNCTION_2 && gCurrentFunction != FUNCTION_TRANSMIT) {
if (gCurrentFunction != FUNCTION_4) {
if (g_2000033A != 0) {
g_2000033A--;
if (g_2000033A == 0) {
gSystickFlag7 = 1;
}
}
}
}
}
if (g_20000380 == 0 && g_20000381 == 0 && gEeprom.DUAL_WATCH == 0) {
if (gIsNoaaMode && gCurrentFunction != FUNCTION_2 && gCurrentFunction != FUNCTION_TRANSMIT) {
if (gCurrentFunction != FUNCTION_4) {
if (g_20000356 != 0) {
g_20000356--;
if (g_20000356 == 0) {
gSystickFlag8 = 1;
}
}
}
}
}
if (g_20000380 != 0 || g_20000381 == 1) {
if (gCurrentFunction != FUNCTION_2 && gCurrentFunction != FUNCTION_TRANSMIT) {
if (ScanPauseDelayIn10msec != 0) {
ScanPauseDelayIn10msec--;
if (ScanPauseDelayIn10msec == 0) {
gSystickFlag9 = 1;
}
}
}
}
if (g_20000342 != 0) {
g_20000342--;
if (g_20000342 == 0) {
gSystickFlag10 = 1;
}
}
if (gCountdownToPlayNextVoice != 0) {
gCountdownToPlayNextVoice--;
if (gCountdownToPlayNextVoice == 0) {
gFlagPlayQueuedVoice = true;
}
}
if (g_20000390 != 0 && gCurrentFunction != FUNCTION_2) {
if (gCurrentFunction != FUNCTION_TRANSMIT && gCurrentFunction != FUNCTION_4) {
if (g_2000034C != 0) {
g_2000034C--;
if (g_2000034C == 0) {
gSystickFlag11 = 1;
}
}
}
}
if (gSystickCountdown11 != 0) {
gSystickCountdown11--;
}
}