FreeTRX/MDUV380_firmware/application/source/user_interface/uiGlobals.c
2026-07-06 08:45:33 +02:00

215 lines
7.2 KiB
C

/*
* Copyright (C) 2019-2025 Roger Clark, VK3KYY / G4KYF
* Daniel Caujolle-Bert, F1RMB
*
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* 4. Use of this source code or binary releases for commercial purposes is strictly forbidden. This includes, without limitation,
* incorporation in a commercial product or incorporation into a product or project which allows commercial use.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "user_interface/uiGlobals.h"
const int DBM_LEVELS[16] = {
SMETER_S0, SMETER_S1, SMETER_S2, SMETER_S3, SMETER_S4, SMETER_S5, SMETER_S6, SMETER_S7, SMETER_S8,
SMETER_S9, SMETER_S9_10, SMETER_S9_20, SMETER_S9_30, SMETER_S9_40, SMETER_S9_50, SMETER_S9_60
};
#if defined(PLATFORM_MD9600)
const char *POWER_LEVELS[] = { "100", "250", "500", "750", "1", "5", "10", "25", "40", "+W-" };
#elif defined(PLATFORM_VARIANT_UV380_PLUS_10W)
const char *POWER_LEVELS[] = { "50", "250", "500", "750", "1", "2", "3", "5", "10", "+W-" };
#elif defined(PLATFORM_MDUV380) && !defined(PLATFORM_VARIANT_UV380_PLUS_10W)
const char *POWER_LEVELS[2U][10U] =
{
{ "50", "250", "500", "750", "1", "2", "3", "4", "5", "+W-" },
{ "50", "250", "500", "750", "1", "2", "3", "5", "10", "+W-" }
};
#else
const char *POWER_LEVELS[] = { "50", "250", "500", "750", "1", "2", "3", "4", "5", "+W-" };
#endif
const char *POWER_LEVEL_UNITS[] = { "mW", "mW", "mW", "mW", "W", "W", "W", "W", "W", "" };
const char *DMR_DESTINATION_FILTER_LEVELS[] = { "TG", "Ct", "TGL" };
const char *ANALOG_FILTER_LEVELS[] = { "CTCSS|DCS" };
uiDataGlobal_t uiDataGlobal =
{
.userDMRId = 0x00,
.receivedPcId = 0x00, // No current Private call awaiting acceptance
.tgBeforePcMode = 0, // No TG saved, prior to a Private call being accepted.
.displayQSOState = QSO_DISPLAY_DEFAULT_SCREEN,
.displayQSOStatePrev = QSO_DISPLAY_DEFAULT_SCREEN,
.isDisplayingQSOData = false,
.displayChannelSettings = false,
.reverseRepeaterChannel = false,
.reverseRepeaterVFO = false,
.currentSelectedChannelNumber = 0,
.currentSelectedContactIndex = 0,
.lastHeardCount = 0,
.dmrDisabled = true,
.manualOverrideDMRId = 0x00,
.dateTimeSecs = 0,
#if defined(PLATFORM_MD9600)
.sk2latched = false,
#endif
.rxBeepState = RX_BEEP_UNSET,
.talkaround = false,
.daytime = DAY,
.daytimeOverridden = UNDEFINED,
.lastDistanceMillis = 0U,
.lastDistanceDisplayed = 0U,
.lastDistanceSortLocationLat = SETTINGS_UNITIALISED_LOCATION_LAT,
.lastDistanceSortLocationLon = 0,
.Scan =
{
.timer = { 0U, 0U },
.dwellTime = 30,
.direction = 1,
.availableChannelsCount = 0,
.nuisanceDeleteIndex = 0,
.nuisanceDelete = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
.state = SCAN_STATE_SCANNING,
.active = false,
.toneActive = false,
.refreshOnEveryStep = false,
.lastIteration = false,
.scanType = SCAN_TYPE_NORMAL_STEP,
.stepTimeMilliseconds = 0,
.scanSweepCurrentFreq = 0,
.sweepSampleIndex = 0,
.sweepSampleIndexIncrement = 1,
#if defined(PLATFORM_MD9600)
.clickDiscriminator = 0
#endif
},
.QuickMenu =
{
.tmpDmrDestinationFilterLevel = 0,
.tmpDmrCcTsFilterLevel = 0,
.tmpAnalogFilterLevel = 0,
.tmpTxRxLockMode = 0,
.tmpToneScanCSS = CSS_TYPE_NONE,
.tmpVFONumber = 0,
.tmpTalkaround = false,
.tmpRoaming = ROAMING_OFF,
.tmpAudioMute = false
},
.FreqEnter =
{
.index = 0,
.digits = { '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-' }
},
.PrivateCall =
{
.lastID = 0,
.state = PRIVATE_CALL_NOT_IN_CALL
},
.VoicePrompts =
{
.inhibitInitial =
#if defined(PLATFORM_GD77S)
true
#else
false // Used to indicate whether the voice prompts should be reloaded with the channel name or VFO freq
#endif
},
.MessageBox =
{
.type = MESSAGEBOX_TYPE_UNDEF,
.decoration = MESSAGEBOX_DECORATION_NONE,
.buttons = MESSAGEBOX_BUTTONS_NONE,
.pinLength = 4,
.message = { 0 },
.keyPressed = 0,
.validatorCallback = NULL
},
.DTMFContactList =
{
.nextPeriodTimer = { 0U, 0U },
.isKeying = false,
.buffer = { 0xff },
.poLen = 0U,
.poPtr = 0U,
.durations = { 0, 0, 0, 0, 0 },
.inTone = false
},
.SatelliteAndAlarmData =
{
.alarmTime = 0U,
.alarmType = ALARM_TYPE_NONE,
.currentSatellite = 0U
},
.DMRLastTalkerOnScreen =
{
.visible = false,
.timer = { 0U, 0U }
}
};
settingsStruct_t originalNonVolatileSettings =
{
.magicNumber = 0xDEADBEEF
};
#if !defined(PLATFORM_GD77S)
aprsBeaconingSettings_t aprsSettingsCopy =
{
.smart =
{
.slowRate = 0xEF,
.fastRate = 0xBE,
.lowSpeed = 0xAD,
.highSpeed = 0xDE
}
};
#endif
CodeplugZone_t currentZone =
{
.NOT_IN_CODEPLUGDATA_indexNumber = 0xDEADBEEF
};
#if defined(PLATFORM_MDUV380) || defined(PLATFORM_MD380) || defined(PLATFORM_RT84_DM1701) || defined(PLATFORM_MD2017)
__attribute__((section(".ccmram")))
#else // MD9600 and MK22 platforms
__attribute__((section(".data.$RAM2")))
#endif
CodeplugRxGroup_t currentRxGroupData;
int lastLoadedRxGroup = -1;// to show data for which RxGroupIndex has been loaded into currentRxGroupData
CodeplugContact_t currentContactData;
bool PTTToggledDown = false; // PTT toggle feature