first commit
This commit is contained in:
+6102
File diff suppressed because it is too large
Load Diff
+101
@@ -0,0 +1,101 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
/************************************************************************************
|
||||
** **
|
||||
** mcHF QRP Transceiver **
|
||||
** K Atanassov - M0NKA 2014 **
|
||||
** **
|
||||
**---------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: **
|
||||
** Description: **
|
||||
** Last Modified: **
|
||||
** Licence: GNU GPLv3 **
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef __UI_MENU_H
|
||||
#define __UI_MENU_H
|
||||
|
||||
#include "uhsdr_board.h"
|
||||
//
|
||||
// Exports
|
||||
//
|
||||
void UiMenu_MapColors(uint32_t color ,char* options,volatile uint32_t* clr_ptr);
|
||||
|
||||
|
||||
// The supported mode values
|
||||
typedef enum
|
||||
{
|
||||
MENU_RENDER_ONLY = 0, // no value change
|
||||
MENU_PROCESS_VALUE_CHANGE, // user value change permitted
|
||||
MENU_PROCESS_VALUE_SETDEFAULT, // set value to default, no user change
|
||||
} MenuProcessingMode_t;
|
||||
|
||||
void UiMenu_RenderMenu(MenuProcessingMode_t mode);
|
||||
|
||||
void UiMenu_RenderChangeItemValue(int16_t pot_diff);
|
||||
void UiMenu_RenderChangeItem(int16_t pot_diff);
|
||||
void UiMenu_RenderLastScreen(void);
|
||||
void UiMenu_RenderFirstScreen(void);
|
||||
bool UiMenu_RenderNextScreen(void); // returns true if screen was changed, i.e. not last screen
|
||||
bool UiMenu_RenderPrevScreen(void); // returns true if screen was changed, i.e. not first screen
|
||||
|
||||
|
||||
enum MENU_INFO_ITEM
|
||||
{
|
||||
INFO_EEPROM,
|
||||
INFO_DISPLAY,
|
||||
INFO_DISPLAY_CTRL,
|
||||
#ifdef USE_OSC_SI570
|
||||
INFO_SI570,
|
||||
#endif
|
||||
INFO_OSC_NAME,
|
||||
INFO_TP,
|
||||
INFO_RFBOARD,
|
||||
INFO_CPU,
|
||||
INFO_FLASH,
|
||||
INFO_RAM,
|
||||
INFO_FW_VERSION,
|
||||
INFO_BL_VERSION,
|
||||
INFO_BUILD,
|
||||
INFO_RTC,
|
||||
INFO_VBAT,
|
||||
INFO_LICENCE,
|
||||
INFO_HWLICENCE,
|
||||
INFO_CODEC,
|
||||
INFO_CODEC_TWINPEAKS,
|
||||
INFO_AMBER_IO8,
|
||||
INFO_AMBER_IO4,
|
||||
INFO_AMBER_DAC_PWR_TX,
|
||||
};
|
||||
|
||||
const char* UiMenu_GetSystemInfo(uint32_t* m_clr_ptr, int info_item);
|
||||
#define MAX_MENUSIZE 14 //memory allocation of displayed menuitems at once, must be higher or equal to highest ts.Layout->MENUSIZE
|
||||
/*
|
||||
#ifdef USE_DISP_480_320
|
||||
//
|
||||
#define MENUSIZE 14 // number of menu items per page/screen
|
||||
|
||||
//
|
||||
// Starting position of configuration menu
|
||||
//
|
||||
#define POS_MENU_IND_X 80 // X position of description of menu item being changed
|
||||
#define POS_MENU_IND_Y 110 // Y position of first (top) item being changed
|
||||
#define POS_MENU_CHANGE_X 280 // Position of variable being changed
|
||||
#define POS_MENU_CURSOR_X 360 // Position of cursor used to indicate selected item
|
||||
|
||||
#else
|
||||
//
|
||||
#define MENUSIZE 6 // number of menu items per page/screen
|
||||
|
||||
//
|
||||
// Starting position of configuration menu
|
||||
//
|
||||
#define POS_MENU_IND_X 60 // X position of description of menu item being changed
|
||||
#define POS_MENU_IND_Y 128 // Y position of first (top) item being changed
|
||||
#define POS_MENU_CHANGE_X 244 // Position of variable being changed
|
||||
#define POS_MENU_CURSOR_X 311 // Position of cursor used to indicate selected item
|
||||
#endif
|
||||
*/
|
||||
|
||||
#endif //__UI_MENU_H
|
||||
|
||||
@@ -0,0 +1,777 @@
|
||||
/*
|
||||
* ui_menu_internal.c
|
||||
*
|
||||
* Created on: 24.12.2016
|
||||
* Author: danilo
|
||||
*/
|
||||
|
||||
#include "ui_menu.h"
|
||||
#include "ui_menu_internal.h"
|
||||
#include "ui_lcd_hy28.h" // for colors!
|
||||
#include <stdio.h>
|
||||
|
||||
// we show MENUSIZE items at the same time to the user.
|
||||
// right now the render code uses this global variable since
|
||||
// only a single active menu is supported right now.
|
||||
|
||||
//Because of dynamic resolution change we have to declare the maximum amount of items displayed at once for the highest option
|
||||
MenuDisplaySlot menu[MAX_MENUSIZE];
|
||||
|
||||
bool init_done = false;
|
||||
|
||||
|
||||
// actions [this is an internal, not necessarily complete or accurate sketch of the used algorithms /API
|
||||
// read the source to find out how it is done. Left for the purpose of explaining the basic idea
|
||||
// show menu -> was previously displayed -> yes -> simply display all slots
|
||||
// -> no -> get first menu group, get first entry, fill first slot, run get next entry until all slots are filled
|
||||
|
||||
// find next MenuEntry -> is menu group -> yes -> is unfolded -> yes -> get first item from menu group
|
||||
// -> no -> treat as normal menu entry
|
||||
// -> is there one more entry in my menu group ? -> yes -> takes this one
|
||||
// -> no -> go one level up -> get next entry in this group
|
||||
// -> there is no such entry -> fill with dummy entry
|
||||
|
||||
// find prev MenuEntry -> there is prev entry in menu group -> yes -> is this unfolded menu group -> yes -> get last entry of this menu group
|
||||
// -> no -> fill slot with entry
|
||||
// -> no -> go one level up -> get prev entry of this level
|
||||
|
||||
// unfold menu group -> mark as unfold, run get next entry until all menu display slots are filled
|
||||
// fold menu group -> mark as fold, run get next entry until all menu display slots are filled
|
||||
|
||||
// move to next/previous page -> (this is n times prev/next)
|
||||
|
||||
// ===================== BEGIN MENU LOW LEVEL MANAGEMENT =====================
|
||||
const MenuGroupDescriptor* UiMenu_GetParentGroupForEntry(const MenuDescriptor* me)
|
||||
{
|
||||
return me==NULL?NULL:&groups[me->menuId];
|
||||
}
|
||||
|
||||
const MenuGroupDescriptor* UiMenu_GetGroupForGroupEntry(const MenuDescriptor* me)
|
||||
{
|
||||
return me==NULL?NULL:&groups[me->number];
|
||||
}
|
||||
|
||||
//inline bool UiMenu_IsEnabled(const MenuDescriptor *entry)
|
||||
bool UiMenu_IsEnabled(const MenuDescriptor *entry)
|
||||
{
|
||||
return entry==NULL?false:(entry->enabled != NULL?*entry->enabled:true);
|
||||
}
|
||||
|
||||
|
||||
inline bool UiMenu_IsGroup(const MenuDescriptor *entry)
|
||||
{
|
||||
return entry==NULL?false:entry->kind == MENU_GROUP;
|
||||
}
|
||||
inline bool UiMenu_IsItem(const MenuDescriptor *entry)
|
||||
{
|
||||
return entry==NULL?false:entry->kind == MENU_ITEM;
|
||||
}
|
||||
inline bool UiMenu_IsInfo(const MenuDescriptor *entry)
|
||||
{
|
||||
return entry==NULL?false:entry->kind == MENU_INFO;
|
||||
}
|
||||
|
||||
|
||||
inline bool UiMenu_SlotIsEmpty(MenuDisplaySlot* slot)
|
||||
{
|
||||
return slot==NULL?false:slot->entryItem == NULL;
|
||||
}
|
||||
inline bool UiMenu_GroupIsUnfolded(const MenuDescriptor *group)
|
||||
{
|
||||
return group==NULL?false:groups[group->number].state->unfolded;
|
||||
}
|
||||
inline uint16_t UiMenu_MenuGroupMemberCount(const MenuGroupDescriptor* gd)
|
||||
{
|
||||
uint16_t retval = 0;
|
||||
if (gd != NULL)
|
||||
{
|
||||
if (gd->state->count == 0)
|
||||
{
|
||||
const MenuDescriptor* entry;
|
||||
for (entry = gd->entries; entry->kind != MENU_STOP; entry++)
|
||||
{
|
||||
gd->state->count++;
|
||||
}
|
||||
}
|
||||
retval = gd->state->count;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
inline void UiMenu_GroupFold(const MenuDescriptor* entry, bool fold)
|
||||
{
|
||||
if (UiMenu_IsGroup(entry))
|
||||
{
|
||||
groups[entry->number].state->unfolded = fold == false;
|
||||
}
|
||||
}
|
||||
|
||||
inline const MenuDescriptor* UiMenu_GroupGetLast(const MenuGroupDescriptor *group)
|
||||
{
|
||||
const MenuDescriptor* retval = NULL;
|
||||
uint16_t count = UiMenu_MenuGroupMemberCount(group);
|
||||
if (count>0)
|
||||
{
|
||||
retval = &(group->entries[count-1]);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
inline const MenuDescriptor* UiMenu_GroupGetFirst(const MenuGroupDescriptor *group)
|
||||
{
|
||||
const MenuDescriptor* retval = NULL;
|
||||
uint16_t count = UiMenu_MenuGroupMemberCount(group);
|
||||
if (count>0)
|
||||
{
|
||||
retval = group->entries;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
const MenuDescriptor* UiMenu_GetNextEntryInGroup(const MenuDescriptor* me)
|
||||
{
|
||||
const MenuDescriptor* retval = NULL;
|
||||
|
||||
if (me != NULL)
|
||||
{
|
||||
const MenuGroupDescriptor* group_ptr = UiMenu_GetParentGroupForEntry(me);
|
||||
for (const MenuDescriptor* nxt = me + 1; UiMenu_GroupGetLast(group_ptr)>= nxt; nxt++)
|
||||
{
|
||||
if (UiMenu_IsEnabled(nxt))
|
||||
{
|
||||
retval = nxt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const MenuDescriptor* UiMenu_GetPrevEntryInGroup(const MenuDescriptor* me)
|
||||
{
|
||||
const MenuGroupDescriptor* group_ptr = UiMenu_GetParentGroupForEntry(me);
|
||||
const MenuDescriptor* retval = NULL;
|
||||
if (me != NULL && me != &group_ptr->entries[0])
|
||||
{
|
||||
for (const MenuDescriptor* prv = me - 1; prv >= &group_ptr->entries[0]; prv--)
|
||||
{
|
||||
if (UiMenu_IsEnabled(prv))
|
||||
{
|
||||
retval = prv;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const MenuDescriptor* UiMenu_GetParentForEntry(const MenuDescriptor* me)
|
||||
{
|
||||
const MenuDescriptor* retval = NULL;
|
||||
if (me != NULL)
|
||||
{
|
||||
const MenuGroupDescriptor* gd = UiMenu_GetParentGroupForEntry(me);
|
||||
if (gd->parent != NULL)
|
||||
{
|
||||
if (gd->state->me == NULL )
|
||||
{
|
||||
const MenuGroupDescriptor* gdp = &groups[gd->parent->menuId];
|
||||
uint16_t count = UiMenu_MenuGroupMemberCount(gdp);
|
||||
uint16_t idx;
|
||||
for(idx = 0; idx < count; idx++)
|
||||
{
|
||||
if ((gdp->entries[idx].kind == MENU_GROUP) && (gdp->entries[idx].number == me->menuId))
|
||||
{
|
||||
gd->state->me = &gdp->entries[idx];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
retval = gd->state->me;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* @returns true if this is the last ACTIVE entry in the menu group
|
||||
*/
|
||||
inline bool UiMenu_IsLastActiveItemInMenuGroup(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuGroupDescriptor* gd = UiMenu_GetParentGroupForEntry(here);
|
||||
const MenuDescriptor* lastActive = UiMenu_GroupGetLast(gd);
|
||||
|
||||
for (; lastActive != NULL && UiMenu_IsEnabled(lastActive) == false && lastActive != here; lastActive = UiMenu_GetPrevEntryInGroup(lastActive) )
|
||||
{
|
||||
// we need to do nothing here
|
||||
}
|
||||
return lastActive == here;
|
||||
}
|
||||
inline bool UiMenu_IsFirstInMenuGroup(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuGroupDescriptor* gd = UiMenu_GetParentGroupForEntry(here);
|
||||
return UiMenu_GroupGetFirst(gd) == here;
|
||||
}
|
||||
|
||||
|
||||
// ===================== END MENU LOW LEVEL MANAGEMENT =====================
|
||||
|
||||
|
||||
// ===================== BEGIN MENU ITERATION STRATEGY =====================
|
||||
// this code implements a specific strategy to walk through a menu structure
|
||||
|
||||
// Helper Functions
|
||||
const MenuDescriptor* UiMenu_FindNextEntryInUpperLevel(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuDescriptor* next = NULL, *focus = here;
|
||||
if (here != NULL)
|
||||
{
|
||||
while(focus != NULL && next == NULL)
|
||||
{
|
||||
// we have a parent group, we are member of a sub menu group,
|
||||
// we need next entry in containing menu group, no matter if our menu group is folded or not
|
||||
next = UiMenu_GetNextEntryInGroup(UiMenu_GetParentForEntry(focus));
|
||||
if (next == NULL)
|
||||
{
|
||||
focus = UiMenu_GetParentForEntry(focus);
|
||||
}
|
||||
}
|
||||
}
|
||||
return next;
|
||||
}
|
||||
|
||||
const MenuDescriptor* UiMenu_FindLastEntryInLowerLevel(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuDescriptor *last = here;
|
||||
while (UiMenu_IsGroup(here) && UiMenu_GroupIsUnfolded(here) && here == last)
|
||||
{
|
||||
const MenuDescriptor* last = UiMenu_GroupGetLast(UiMenu_GetGroupForGroupEntry(here));
|
||||
if (last)
|
||||
{
|
||||
here = last;
|
||||
}
|
||||
}
|
||||
return here;
|
||||
}
|
||||
|
||||
|
||||
// Main Strategy Functions
|
||||
/*
|
||||
* Strategy: Provide a 'virtual' flat list of menu entries, list members are dynamically inserted/removed if menu groups are (un)folded.
|
||||
* External code navigates through only with next/prev operations.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* @brief Get next menu entry. If a menu group is unfolded, next entry after menu group item is first item from menu group
|
||||
*
|
||||
*/
|
||||
const MenuDescriptor* UiMenu_NextMenuEntry(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuDescriptor* next = NULL;
|
||||
|
||||
if (here != NULL)
|
||||
{
|
||||
if (UiMenu_IsGroup(here))
|
||||
{
|
||||
// is group entry
|
||||
|
||||
if (UiMenu_GroupIsUnfolded(here))
|
||||
{
|
||||
const MenuGroupDescriptor* group = &groups[here->number];
|
||||
next = UiMenu_GroupGetFirst(group);
|
||||
if (next == NULL)
|
||||
{
|
||||
// this is an empty menu group, should not happen, does make sense
|
||||
// but we handle this anyway
|
||||
next = UiMenu_FindNextEntryInUpperLevel(here);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// folded group, so we behave like a normal entry
|
||||
next = UiMenu_GetNextEntryInGroup(here);
|
||||
}
|
||||
}
|
||||
if (next == NULL)
|
||||
{
|
||||
// we are currently at a normal entry or a folded group or empty group (in this case these are treated as simple entries)
|
||||
// only 3 cases possible:
|
||||
// - final entry of menu, fill next slot with blank entry, return false
|
||||
// - next entry is normal entry (group or entry, no difference), just use this one
|
||||
// - last entry in menu group, go up, and search for next entry in this parent menu (recursively).
|
||||
|
||||
if (UiMenu_IsLastActiveItemInMenuGroup(here))
|
||||
{
|
||||
// we need the parent menu in order to ask for the entry after our
|
||||
// menu group entry
|
||||
// if we cannot find the parent group, we are top level and the last menu entry
|
||||
// so there is no further entry
|
||||
next = UiMenu_FindNextEntryInUpperLevel(here);
|
||||
}
|
||||
else
|
||||
{
|
||||
next = UiMenu_GetNextEntryInGroup(here);
|
||||
}
|
||||
}
|
||||
}
|
||||
return next;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief Get previous menu entry. If on first item of a menu group, show the last entry of the previous menu group/menu item
|
||||
*
|
||||
*/
|
||||
const MenuDescriptor* UiMenu_PrevMenuEntry(const MenuDescriptor* here)
|
||||
{
|
||||
const MenuDescriptor* prev = NULL;
|
||||
|
||||
|
||||
if (here != NULL)
|
||||
{
|
||||
if (UiMenu_IsFirstInMenuGroup(here))
|
||||
{
|
||||
// we go up, get previous entry
|
||||
// if first entry, go one further level up, ...
|
||||
// if not first entry -> get prev entry
|
||||
// if normal entry or folded menu -> we are done
|
||||
// if unfolded menu_entry -> go to last entry
|
||||
// -> if normal entry or folded menu -> we are done
|
||||
// -> if unfolded menu entry -> go to last entry
|
||||
prev = UiMenu_GetParentForEntry(here);
|
||||
}
|
||||
else
|
||||
{
|
||||
prev = UiMenu_GetPrevEntryInGroup(here);
|
||||
if (UiMenu_IsGroup(prev) && UiMenu_GroupIsUnfolded(prev))
|
||||
{
|
||||
prev = UiMenu_FindLastEntryInLowerLevel(prev);
|
||||
}
|
||||
}
|
||||
}
|
||||
return prev;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool UiMenu_FillSlotWithEntry(MenuDisplaySlot* here, const MenuDescriptor* entry)
|
||||
{
|
||||
bool retval = false;
|
||||
if (entry != NULL)
|
||||
{
|
||||
here->entryItem = entry;
|
||||
retval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
here->entryItem = NULL;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
// DISPLAY SPECIFIC CODE BEGIN
|
||||
void UiMenu_DisplayValue(const char* value,uint32_t clr,uint16_t pos)
|
||||
{
|
||||
UiLcdHy28_PrintTextRight(ts.Layout->MENU_CURSOR_X - 4, ts.Layout->MENU_IND.y + (pos * 12), value, clr, Black, 0); // yes, normal position
|
||||
}
|
||||
static void UiMenu_DisplayLabel(const char* label,uint32_t clr,uint16_t pos)
|
||||
{
|
||||
UiLcdHy28_PrintText(ts.Layout->MENU_IND.x, ts.Layout->MENU_IND.y + (12*(pos)),label,clr,Black,0);
|
||||
}
|
||||
static void UiMenu_DisplayCursor(const char* label,uint32_t clr,uint16_t pos)
|
||||
{
|
||||
UiLcdHy28_PrintText(ts.Layout->MENU_CURSOR_X, ts.Layout->MENU_IND.y + (12*(pos)),label,clr,Black,0);
|
||||
}
|
||||
// DISPLAY SPECIFIC CODE END
|
||||
|
||||
|
||||
void UiMenu_MoveCursor(uint32_t newpos)
|
||||
{
|
||||
static uint32_t oldpos = 999; // y position of option cursor, previous
|
||||
if(oldpos != 999) // was the position of a previous cursor stored?
|
||||
{
|
||||
UiMenu_DisplayCursor(" ", Green, oldpos);
|
||||
}
|
||||
oldpos = newpos; // save position of new "old" cursor position
|
||||
if (newpos != 999)
|
||||
{
|
||||
UiMenu_DisplayCursor("<", Green, newpos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void UiMenu_UpdateHWInfoLines(uchar index, MenuProcessingMode_t mode, int pos)
|
||||
{
|
||||
uint32_t m_clr;
|
||||
const char* outs = UiMenu_GetSystemInfo(&m_clr, index);
|
||||
UiMenu_DisplayValue(outs,m_clr,pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Display and and change line items
|
||||
* @param select item to display/change
|
||||
* @param mode 0=display/update 1=change item 3=set default
|
||||
* @param pos (0-5) use this line as position
|
||||
*/
|
||||
static void UiMenu_UpdateLines(uint16_t select, MenuProcessingMode_t mode, int pos)
|
||||
{
|
||||
char options[32];
|
||||
const char* txt_ptr = NULL; // if filled, we use this string for display, otherwise options
|
||||
uint32_t clr = White; // color used it display of adjusted options
|
||||
|
||||
int var; // holder for the menu item value change
|
||||
|
||||
|
||||
if(mode == MENU_RENDER_ONLY) // are we in update/display mode?
|
||||
{
|
||||
var = 0; // prevent any change of variable
|
||||
}
|
||||
else // this is "change" mode
|
||||
{
|
||||
var = ts.menu_var; // change from encoder
|
||||
ts.menu_var = 0; // clear encoder change detect
|
||||
}
|
||||
|
||||
strcpy(options, "ERROR"); // pre-load to catch error condition
|
||||
|
||||
UiMenu_UpdateItem(select, mode, pos, var, options,&txt_ptr , &clr);
|
||||
|
||||
if (txt_ptr == NULL)
|
||||
{
|
||||
txt_ptr = options;
|
||||
}
|
||||
UiMenu_DisplayValue(txt_ptr,clr,pos);
|
||||
if(mode == MENU_PROCESS_VALUE_CHANGE) // Shifted over
|
||||
{
|
||||
UiMenu_MoveCursor(pos);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Render a menu entry on a given menu position
|
||||
*/
|
||||
void UiMenu_UpdateMenuEntry(const MenuDescriptor* entry, MenuProcessingMode_t mode, uint8_t pos)
|
||||
{
|
||||
uint32_t m_clr;
|
||||
m_clr = Yellow;
|
||||
char out[40];
|
||||
|
||||
char blank[40] = " ";
|
||||
blank[ts.Layout->MENU_TEXT_SIZE_MAX-1]=0;
|
||||
//#else
|
||||
// const char blank[34] = " ";
|
||||
//#endif
|
||||
|
||||
if (entry != NULL && (entry->kind == MENU_ITEM || entry->kind == MENU_GROUP || entry->kind == MENU_INFO || entry->kind == MENU_TEXT) )
|
||||
{
|
||||
if (mode == MENU_RENDER_ONLY)
|
||||
{
|
||||
uint16_t level = 0;
|
||||
const MenuDescriptor* parent = entry;
|
||||
do
|
||||
{
|
||||
parent = UiMenu_GetParentForEntry(parent);
|
||||
level++;
|
||||
}
|
||||
while (parent != NULL);
|
||||
level--;
|
||||
|
||||
// level = 3;
|
||||
// uint16_t labellen = strlen(entry->id)+strlen(entry->label) + 1;
|
||||
uint16_t labellen = level+strlen(entry->label);
|
||||
// snprintf(out,34,"%s-%s%s",entry->id,entry->label,(&blank[labellen>33?33:labellen]));
|
||||
//#ifdef USE_DISP_480_320
|
||||
//snprintf(out,ts.40,"%s%s%s",(&blank[level>5?37-5:37-level]),entry->label,(&blank[labellen>39?39:labellen]));
|
||||
snprintf(out,ts.Layout->MENU_TEXT_SIZE_MAX,"%s%s%s",
|
||||
(&blank[level>5?ts.Layout->MENU_TEXT_SIZE_MAX-8:ts.Layout->MENU_TEXT_SIZE_MAX-3-level]),
|
||||
entry->label,(&blank[labellen>ts.Layout->MENU_TEXT_SIZE_MAX-1?ts.Layout->MENU_TEXT_SIZE_MAX-1:labellen]));
|
||||
|
||||
// snprintf(out,34,"%s%s%s",(&blank[level>5?31-5:31-level]),entry->label,(&blank[labellen>33?33:labellen]));
|
||||
|
||||
UiMenu_DisplayLabel(out,m_clr,pos);
|
||||
}
|
||||
switch(entry->kind)
|
||||
{
|
||||
case MENU_ITEM:
|
||||
// TODO: Better Handler Selection with need for change in this location to add new handlers
|
||||
UiMenu_UpdateLines(entry->number,mode,pos);
|
||||
break;
|
||||
case MENU_INFO:
|
||||
UiMenu_UpdateHWInfoLines(entry->number,mode,pos);
|
||||
break;
|
||||
case MENU_TEXT:
|
||||
break;
|
||||
case MENU_GROUP:
|
||||
if (mode == MENU_PROCESS_VALUE_CHANGE)
|
||||
{
|
||||
bool old_state = UiMenu_GroupIsUnfolded(entry);
|
||||
if (ts.menu_var < 0 )
|
||||
{
|
||||
UiMenu_GroupFold(entry, !(ts.flags2 & FLAGS2_UI_INVERSE_SCROLLING));
|
||||
}
|
||||
if (ts.menu_var > 0 )
|
||||
{
|
||||
UiMenu_GroupFold(entry, ts.flags2 & FLAGS2_UI_INVERSE_SCROLLING);
|
||||
}
|
||||
if (old_state != UiMenu_GroupIsUnfolded(entry))
|
||||
{
|
||||
int idx;
|
||||
for (idx = pos+1; idx < ts.Layout->MENUSIZE; idx++)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx],UiMenu_NextMenuEntry(menu[idx-1].entryItem));
|
||||
UiMenu_UpdateMenuEntry(menu[idx].entryItem, MENU_RENDER_ONLY, idx);
|
||||
}
|
||||
}
|
||||
ts.menu_var = 0;
|
||||
}
|
||||
|
||||
UiMenu_DisplayValue(
|
||||
UiMenu_GroupIsUnfolded(entry)?"HIDE":"SHOW",
|
||||
m_clr,pos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UiMenu_DisplayLabel(blank,m_clr,pos);
|
||||
}
|
||||
if (mode == MENU_PROCESS_VALUE_CHANGE)
|
||||
{
|
||||
UiMenu_MoveCursor(pos);
|
||||
}
|
||||
}
|
||||
|
||||
void UiMenu_DisplayInitSlots(const MenuDescriptor* entry)
|
||||
{
|
||||
int idx;
|
||||
for (idx=0; idx < ts.Layout->MENUSIZE; idx++)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx],entry);
|
||||
entry = UiMenu_NextMenuEntry(entry);
|
||||
}
|
||||
}
|
||||
void UiMenu_DisplayInitSlotsBackwards(const MenuDescriptor* entry)
|
||||
{
|
||||
int idx;
|
||||
for (idx=ts.Layout->MENUSIZE; idx > 0; idx--)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx-1],entry);
|
||||
entry = UiMenu_PrevMenuEntry(entry);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @returns true if at least one slot was moved, false if no change done
|
||||
*/
|
||||
bool UiMenu_DisplayMoveSlotsBackwards(int16_t change)
|
||||
{
|
||||
int idx;
|
||||
int dist = (change % ts.Layout->MENUSIZE);
|
||||
int screens = change / ts.Layout->MENUSIZE;
|
||||
bool retval = false; // n
|
||||
for (idx = 0; idx < screens; idx++)
|
||||
{
|
||||
const MenuDescriptor *prev = UiMenu_PrevMenuEntry(menu[0].entryItem);
|
||||
if (prev != NULL)
|
||||
{
|
||||
retval = true;
|
||||
UiMenu_DisplayInitSlotsBackwards(prev);
|
||||
}
|
||||
else
|
||||
{
|
||||
// we stop here, since no more previous elements.
|
||||
// TODO: Decide if roll over, in this case we would have to get very last element and
|
||||
// then continue from there.
|
||||
dist = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dist != 0)
|
||||
{
|
||||
retval = true;
|
||||
for (idx = ts.Layout->MENUSIZE-dist; idx > 0; idx--)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[ts.Layout->MENUSIZE-idx],menu[ts.Layout->MENUSIZE-(dist+idx)].entryItem);
|
||||
}
|
||||
|
||||
for (idx = ts.Layout->MENUSIZE-dist; idx >0; idx--)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx-1],UiMenu_PrevMenuEntry(menu[idx].entryItem));
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
/*
|
||||
* @returns true if at least one slot was moved, false if no change done
|
||||
*/
|
||||
bool UiMenu_DisplayMoveSlotsForward(int16_t change)
|
||||
{
|
||||
int idx;
|
||||
int dist = (change % ts.Layout->MENUSIZE);
|
||||
int screens = change / ts.Layout->MENUSIZE;
|
||||
bool retval = false;
|
||||
// first jump screens. we have to iterate through the menu structure one by one
|
||||
// in order to respect fold/unfold state etc.
|
||||
for (idx = 0; idx < screens; idx++)
|
||||
{
|
||||
const MenuDescriptor *next = UiMenu_NextMenuEntry(menu[ts.Layout->MENUSIZE-1].entryItem);
|
||||
if (next != NULL)
|
||||
{
|
||||
UiMenu_DisplayInitSlots(next);
|
||||
retval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// stop here
|
||||
// TODO: Rollover?
|
||||
dist = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (dist != 0)
|
||||
{
|
||||
retval = true;
|
||||
for (idx = 0; idx < ts.Layout->MENUSIZE-dist; idx++)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx],menu[dist+idx].entryItem);
|
||||
}
|
||||
for (idx = ts.Layout->MENUSIZE-dist; idx < ts.Layout->MENUSIZE; idx++)
|
||||
{
|
||||
UiMenu_FillSlotWithEntry(&menu[idx],UiMenu_NextMenuEntry(menu[idx-1].entryItem));
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @brief Display and change menu items
|
||||
* @param mode 0=show all, 1=update current item, 3=restore default setting for selected item
|
||||
*
|
||||
*/
|
||||
void UiMenu_RenderMenu(MenuProcessingMode_t mode)
|
||||
{
|
||||
if (init_done == false )
|
||||
{
|
||||
UiMenu_DisplayInitSlots(groups[MENU_START_IDX].entries);
|
||||
init_done = true;
|
||||
}
|
||||
// UiMenu_DisplayMoveSlotsForward(6);
|
||||
// UiMenu_DisplayMoveSlotsForward(3);
|
||||
// UiMenu_DisplayMoveSlotsBackwards(10);
|
||||
switch (mode)
|
||||
{
|
||||
case MENU_RENDER_ONLY: // (re)draw all labels and values
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < ts.Layout->MENUSIZE; idx++)
|
||||
{
|
||||
UiMenu_UpdateMenuEntry(menu[idx].entryItem,mode, idx);
|
||||
}
|
||||
UiMenu_MoveCursor(ts.menu_item%ts.Layout->MENUSIZE); //redraw of cursor
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_PROCESS_VALUE_SETDEFAULT:
|
||||
case MENU_PROCESS_VALUE_CHANGE:
|
||||
{
|
||||
// wrapping to next screen (and from end to start and vice versa)
|
||||
if (ts.menu_item >= ts.Layout->MENUSIZE)
|
||||
{
|
||||
if (UiMenu_RenderNextScreen() == false)
|
||||
{
|
||||
UiMenu_RenderFirstScreen();
|
||||
}
|
||||
}
|
||||
else if (ts.menu_item < 0)
|
||||
{
|
||||
if (UiMenu_RenderPrevScreen() == false)
|
||||
{
|
||||
UiMenu_RenderLastScreen();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ts.menu_item%=ts.Layout->MENUSIZE;
|
||||
if (ts.menu_item < 0) ts.menu_item+=ts.Layout->MENUSIZE;
|
||||
|
||||
uint16_t current_item = ts.menu_item%ts.Layout->MENUSIZE;
|
||||
UiMenu_UpdateMenuEntry(menu[current_item].entryItem,mode, current_item);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UiMenu_RenderChangeItemValue(int16_t pot_diff)
|
||||
{
|
||||
if(pot_diff < 0)
|
||||
{
|
||||
ts.menu_var--; // increment selected item
|
||||
}
|
||||
else
|
||||
{
|
||||
ts.menu_var++; // decrement selected item
|
||||
}
|
||||
UiMenu_RenderMenu(MENU_PROCESS_VALUE_CHANGE); // perform update of selected item
|
||||
}
|
||||
|
||||
void UiMenu_RenderChangeItem(int16_t pot_diff)
|
||||
{
|
||||
if(ts.flags2 & FLAGS2_UI_INVERSE_SCROLLING)
|
||||
{
|
||||
pot_diff = -pot_diff;
|
||||
}
|
||||
if(pot_diff < 0)
|
||||
{
|
||||
ts.menu_item--;
|
||||
}
|
||||
else if(pot_diff > 0)
|
||||
{
|
||||
ts.menu_item++;
|
||||
}
|
||||
ts.menu_var = 0; // clear variable that is used to change a menu item
|
||||
UiMenu_RenderMenu(MENU_PROCESS_VALUE_CHANGE); // Update that menu item
|
||||
}
|
||||
|
||||
void UiMenu_RenderLastScreen()
|
||||
{
|
||||
while (menu[ts.Layout->MENUSIZE-1].entryItem != NULL && UiMenu_NextMenuEntry(menu[ts.Layout->MENUSIZE-1].entryItem) != NULL )
|
||||
{
|
||||
UiMenu_DisplayMoveSlotsForward(ts.Layout->MENUSIZE);
|
||||
}
|
||||
UiMenu_RenderMenu(MENU_RENDER_ONLY);
|
||||
}
|
||||
|
||||
void UiMenu_RenderFirstScreen()
|
||||
{
|
||||
init_done = false;
|
||||
UiMenu_RenderMenu(MENU_RENDER_ONLY);
|
||||
}
|
||||
|
||||
bool UiMenu_RenderNextScreen()
|
||||
{
|
||||
bool retval = UiMenu_DisplayMoveSlotsForward(ts.Layout->MENUSIZE);
|
||||
if (retval)
|
||||
{
|
||||
UiMenu_RenderMenu(MENU_RENDER_ONLY);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
bool UiMenu_RenderPrevScreen()
|
||||
{
|
||||
bool retval = UiMenu_DisplayMoveSlotsBackwards(ts.Layout->MENUSIZE);
|
||||
if (retval)
|
||||
{
|
||||
UiMenu_RenderMenu(MENU_RENDER_ONLY);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
@@ -0,0 +1,856 @@
|
||||
/*
|
||||
* ui_menu_internal.h
|
||||
*
|
||||
* Created on: 24.12.2016
|
||||
* Author: danilo
|
||||
*/
|
||||
|
||||
#ifndef DRIVERS_UI_UI_MENU_INTERNAL_H_
|
||||
#define DRIVERS_UI_UI_MENU_INTERNAL_H_
|
||||
|
||||
#include "uhsdr_types.h"
|
||||
#define UiMenuDesc(a)
|
||||
|
||||
//
|
||||
// Enumeration for menu.
|
||||
enum
|
||||
{
|
||||
MENU_DSP_NR_STRENGTH = 0,
|
||||
MENU_AM_DISABLE,
|
||||
MENU_CW_DISABLE,
|
||||
MENU_DIGI_DISABLE,
|
||||
MENU_DEMOD_SAM,
|
||||
MENU_SSB_AUTO_MODE_SELECT,
|
||||
MENU_CW_AUTO_MODE_SELECT,
|
||||
MENU_FM_MODE_ENABLE,
|
||||
MENU_FM_GEN_SUBAUDIBLE_TONE,
|
||||
MENU_FM_DET_SUBAUDIBLE_TONE,
|
||||
MENU_FM_TONE_BURST_MODE,
|
||||
MENU_FM_DEV_MODE,
|
||||
// MENU_AGC_MODE,
|
||||
// MENU_RF_GAIN_ADJ,
|
||||
// MENU_CUSTOM_AGC,
|
||||
// MENU_AGC_WDSP_SWITCH,
|
||||
MENU_AGC_WDSP_MODE,
|
||||
MENU_AGC_WDSP_SLOPE,
|
||||
MENU_AGC_WDSP_TAU_DECAY,
|
||||
MENU_AGC_WDSP_THRESH,
|
||||
MENU_AGC_WDSP_HANG_ENABLE,
|
||||
MENU_AGC_WDSP_HANG_TIME,
|
||||
MENU_AGC_WDSP_HANG_THRESH,
|
||||
MENU_AGC_WDSP_TAU_HANG_DECAY,
|
||||
MENU_CODEC_GAIN_MODE,
|
||||
MENU_NOISE_BLANKER_SETTING,
|
||||
MENU_RX_FREQ_CONV,
|
||||
MENU_MIC_LINE_MODE,
|
||||
MENU_MIC_TYPE,
|
||||
MENU_MIC_GAIN,
|
||||
MENU_LINE_GAIN,
|
||||
MENU_ALC_RELEASE,
|
||||
MENU_ALC_POSTFILT_GAIN,
|
||||
MENU_TX_COMPRESSION_LEVEL,
|
||||
MENU_KEYER_MODE,
|
||||
MENU_KEYER_SPEED,
|
||||
MENU_KEYER_WEIGHT,
|
||||
MENU_SIDETONE_GAIN,
|
||||
MENU_SIDETONE_FREQUENCY,
|
||||
MENU_PADDLE_REVERSE,
|
||||
MENU_CW_TX_RX_DELAY,
|
||||
MENU_CW_OFFSET_MODE,
|
||||
MENU_CW_DECODER,
|
||||
MENU_CW_DECODER_THRESH,
|
||||
// MENU_CW_DECODER_AVERAGE,
|
||||
MENU_CW_DECODER_BLOCKSIZE,
|
||||
// MENU_CW_DECODER_AGC,
|
||||
MENU_CW_DECODER_NOISECANCEL,
|
||||
MENU_CW_DECODER_SPIKECANCEL,
|
||||
MENU_CW_DECODER_USE_3_GOERTZEL,
|
||||
MENU_CW_DECODER_SNAP_ENABLE,
|
||||
MENU_CW_DECODER_SHOW_CW_LED,
|
||||
MENU_TCXO_MODE,
|
||||
MENU_TCXO_C_F,
|
||||
MENU_SCOPE_SPEED,
|
||||
MENU_SPECTRUM_FILTER_STRENGTH,
|
||||
MENU_SCOPE_TRACE_COLOUR,
|
||||
MENU_SCOPE_TRACE_HL_COLOUR,
|
||||
MENU_SCOPE_BACKGROUND_HL_COLOUR,
|
||||
MENU_SCOPE_GRID_COLOUR,
|
||||
MENU_SPECTRUM_FREQSCALE_COLOUR,
|
||||
MENU_SPECTRUM_MAGNIFY,
|
||||
MENU_SCOPE_AGC_ADJUST,
|
||||
MENU_SCOPE_DB_DIVISION,
|
||||
MENU_SPECTRUM_CENTER_LINE_COLOUR,
|
||||
MENU_SCOPE_LIGHT_ENABLE,
|
||||
MENU_SPECTRUM_MODE,
|
||||
MENU_WFALL_COLOR_SCHEME,
|
||||
MENU_WFALL_STEP_SIZE,
|
||||
MENU_WFALL_OFFSET,
|
||||
MENU_WFALL_CONTRAST,
|
||||
MENU_WFALL_SPEED,
|
||||
// MENU_SCOPE_NOSIG_ADJUST,
|
||||
// MENU_WFALL_NOSIG_ADJUST,
|
||||
// MENU_S_METER,
|
||||
MENU_METER_COLOUR_UP,
|
||||
MENU_METER_COLOUR_DOWN,
|
||||
MENU_DBM_DISPLAY,
|
||||
MENU_DBM_CALIBRATE,
|
||||
MENU_UI_INVERSE_SCROLLING,
|
||||
MENU_FREQ_FONT,
|
||||
MENU_SPECTRUM_SIZE,
|
||||
MENU_BACKUP_CONFIG,
|
||||
MENU_RESTORE_CONFIG,
|
||||
MENU_HARDWARE_INFO,
|
||||
MENU_SAM_PLL_LOCKING_RANGE,
|
||||
MENU_SAM_PLL_STEP_RESPONSE,
|
||||
MENU_SAM_PLL_BANDWIDTH,
|
||||
MENU_SAM_FADE_LEVELER,
|
||||
// CONFIG_SAM_PLL_TAUR,
|
||||
// CONFIG_SAM_PLL_TAUI,
|
||||
// CONFIG_SAM_SIDEBAND,
|
||||
MENU_CONFIG_ENABLE,
|
||||
MENU_RESTART_CODEC,
|
||||
CONFIG_FREQ_STEP_MARKER_LINE,
|
||||
CONFIG_STEP_SIZE_BUTTON_SWAP,
|
||||
CONFIG_BAND_BUTTON_SWAP,
|
||||
CONFIG_TX_DISABLE,
|
||||
CONFIG_TX_OUT_ENABLE,
|
||||
CONFIG_AUDIO_MAIN_SCREEN_MENU_SWITCH,
|
||||
CONFIG_MUTE_LINE_OUT_TX,
|
||||
CONFIG_TXRX_SWITCH_AUDIO_MUTE,
|
||||
CONFIG_LCD_AUTO_OFF_MODE,
|
||||
CONFIG_VOLTMETER_CALIBRATION,
|
||||
MENU_LOW_POWER_SHUTDOWN,
|
||||
CONFIG_LOW_POWER_THRESHOLD,
|
||||
CONFIG_DISP_FILTER_BANDWIDTH,
|
||||
CONFIG_MAX_VOLUME,
|
||||
// CONFIG_MAX_RX_GAIN,
|
||||
CONFIG_LINEOUT_GAIN,
|
||||
CONFIG_BEEP_ENABLE,
|
||||
CONFIG_BEEP_FREQ,
|
||||
CONFIG_BEEP_VOLUME,
|
||||
CONFIG_CAT_ENABLE,
|
||||
CONFIG_FREQUENCY_CALIBRATE,
|
||||
CONFIG_FREQ_LIMIT_RELAX,
|
||||
CONFIG_FREQ_MEM_LIMIT_RELAX,
|
||||
CONFIG_IQ_AUTO_CORRECTION,
|
||||
|
||||
CONFIG_80M_RX_IQ_GAIN_BAL,
|
||||
CONFIG_80M_RX_IQ_PHASE_BAL,
|
||||
CONFIG_10M_RX_IQ_GAIN_BAL,
|
||||
CONFIG_10M_RX_IQ_PHASE_BAL,
|
||||
|
||||
CONFIG_160M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_160M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_80M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_80M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_40M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_40M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_30M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_30M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_20M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_20M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_17M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_17M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_15M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_15M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_12M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_12M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_10M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_10M_TX_IQ_PHASE_BAL,
|
||||
CONFIG_10M_UP_TX_IQ_GAIN_BAL,
|
||||
CONFIG_10M_UP_TX_IQ_PHASE_BAL,
|
||||
CONFIG_6M_TX_IQ_GAIN_BAL,
|
||||
CONFIG_6M_TX_IQ_PHASE_BAL,
|
||||
|
||||
CONFIG_160M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_160M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_80M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_80M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_40M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_40M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_30M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_30M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_17M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_17M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_12M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_12M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_10M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_10M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
CONFIG_6M_TX_IQ_GAIN_BAL_TRANS_OFF,
|
||||
CONFIG_6M_TX_IQ_PHASE_BAL_TRANS_OFF,
|
||||
|
||||
CONFIG_CW_PA_BIAS,
|
||||
CONFIG_PA_BIAS,
|
||||
CONFIG_FWD_REV_PWR_DISP,
|
||||
CONFIG_RF_FWD_PWR_NULL,
|
||||
CONFIG_FWD_REV_COUPLING_2200M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_630M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_160M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_80M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_40M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_20M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_15M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_10M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_6M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_2M_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_70CM_ADJ,
|
||||
CONFIG_FWD_REV_COUPLING_23CM_ADJ,
|
||||
CONFIG_FWD_REV_SENSE_SWAP,
|
||||
CONFIG_XVTR_OFFSET_MULT,
|
||||
CONFIG_XVTR_FREQUENCY_OFFSET,
|
||||
CONFIG_XVTR_FREQUENCY_OFFSET_TX,
|
||||
CONFIG_2200M_5W_ADJUST,
|
||||
CONFIG_630M_5W_ADJUST,
|
||||
CONFIG_160M_5W_ADJUST,
|
||||
CONFIG_80M_5W_ADJUST,
|
||||
CONFIG_60M_5W_ADJUST,
|
||||
CONFIG_40M_5W_ADJUST,
|
||||
CONFIG_30M_5W_ADJUST,
|
||||
CONFIG_20M_5W_ADJUST,
|
||||
CONFIG_17M_5W_ADJUST,
|
||||
CONFIG_15M_5W_ADJUST,
|
||||
CONFIG_12M_5W_ADJUST,
|
||||
CONFIG_10M_5W_ADJUST,
|
||||
CONFIG_6M_5W_ADJUST,
|
||||
CONFIG_4M_5W_ADJUST,
|
||||
CONFIG_2M_5W_ADJUST,
|
||||
CONFIG_70CM_5W_ADJUST,
|
||||
CONFIG_23CM_5W_ADJUST,
|
||||
CONFIG_2200M_FULL_POWER_ADJUST,
|
||||
CONFIG_630M_FULL_POWER_ADJUST,
|
||||
CONFIG_160M_FULL_POWER_ADJUST,
|
||||
CONFIG_80M_FULL_POWER_ADJUST,
|
||||
CONFIG_60M_FULL_POWER_ADJUST,
|
||||
CONFIG_40M_FULL_POWER_ADJUST,
|
||||
CONFIG_30M_FULL_POWER_ADJUST,
|
||||
CONFIG_20M_FULL_POWER_ADJUST,
|
||||
CONFIG_17M_FULL_POWER_ADJUST,
|
||||
CONFIG_15M_FULL_POWER_ADJUST,
|
||||
CONFIG_12M_FULL_POWER_ADJUST,
|
||||
CONFIG_10M_FULL_POWER_ADJUST,
|
||||
CONFIG_6M_FULL_POWER_ADJUST,
|
||||
CONFIG_4M_FULL_POWER_ADJUST,
|
||||
CONFIG_2M_FULL_POWER_ADJUST,
|
||||
CONFIG_70CM_FULL_POWER_ADJUST,
|
||||
CONFIG_23CM_FULL_POWER_ADJUST,
|
||||
#ifdef OBSOLETE_NR
|
||||
CONFIG_DSP_NR_DECORRELATOR_BUFFER_LENGTH,
|
||||
CONFIG_DSP_NR_FFT_NUMTAPS,
|
||||
// CONFIG_DSP_NR_POST_AGC_SELECT,
|
||||
CONFIG_DSP_NOTCH_CONVERGE_RATE,
|
||||
CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH,
|
||||
CONFIG_DSP_NOTCH_FFT_NUMTAPS,
|
||||
#endif
|
||||
#ifdef USE_LMS_AUTONOTCH
|
||||
CONFIG_DSP_NOTCH_CONVERGE_RATE,
|
||||
CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH,
|
||||
CONFIG_DSP_NOTCH_FFT_NUMTAPS,
|
||||
#endif
|
||||
// CONFIG_AGC_TIME_CONSTANT,
|
||||
CONFIG_AM_TX_FILTER_DISABLE,
|
||||
// CONFIG_SSB_TX_FILTER_DISABLE,
|
||||
CONFIG_SSB_TX_FILTER,
|
||||
CONFIG_TUNE_POWER_LEVEL,
|
||||
CONFIG_TUNE_TONE_MODE,
|
||||
// CONFIG_SPECTRUM_FFT_WINDOW_TYPE,
|
||||
CONFIG_RESET_SER_EEPROM,
|
||||
CONFIG_RESET_SER_EEPROM_SIGNATURE,
|
||||
CONFIG_CAT_IN_SANDBOX,
|
||||
CONFIG_CAT_XLAT,
|
||||
CONFIG_CAT_PTT_RTS,
|
||||
CONFIG_REDUCE_POWER_ON_LOW_BANDS,
|
||||
CONFIG_REDUCE_POWER_ON_HIGH_BANDS,
|
||||
MENU_FP_CW_01,
|
||||
MENU_FP_CW_02,
|
||||
MENU_FP_CW_03,
|
||||
MENU_FP_CW_04,
|
||||
MENU_FP_AM_01,
|
||||
MENU_FP_AM_02,
|
||||
MENU_FP_AM_03,
|
||||
MENU_FP_AM_04,
|
||||
MENU_FP_SSB_01,
|
||||
MENU_FP_SSB_02,
|
||||
MENU_FP_SSB_03,
|
||||
MENU_FP_SSB_04,
|
||||
// MENU_FP_SAM_01,
|
||||
// MENU_FP_SAM_02,
|
||||
// MENU_FP_SAM_03,
|
||||
// MENU_FP_SAM_04,
|
||||
MENU_DEBUG_TX_AUDIO,
|
||||
CONFIG_I2C1_SPEED,
|
||||
CONFIG_I2C2_SPEED,
|
||||
MENU_DEBUG_ENABLE_INFO,
|
||||
MENU_DEBUG_CLONEOUT,
|
||||
MENU_DEBUG_CLONEIN,
|
||||
// MENU_DEBUG_NEW_NB,
|
||||
// MENU_DEBUG_NR_ENABLE,
|
||||
// MENU_DEBUG_NR_GAIN_SMOOTH_ENABLE,
|
||||
MENU_DEBUG_NR_GAIN_SHOW,
|
||||
// MENU_DEBUG_NR_LONG_TONE_ENABLE,
|
||||
// MENU_DEBUG_NR_LONG_TONE_THRESH,
|
||||
// MENU_DEBUG_NR_LONG_TONE_ALPHA,
|
||||
// MENU_DEBUG_NR_GAIN_SMOOTH_ALPHA,
|
||||
// MENU_DEBUG_NR_ALPHA,
|
||||
// MENU_DEBUG_NR_THRESH,
|
||||
// MENU_DEBUG_NR_VAD_TYPE,
|
||||
// MENU_DEBUG_NR_VAD_DELAY,
|
||||
MENU_DEBUG_NR_BETA,
|
||||
// MENU_DEBUG_NR_Mode,
|
||||
//#if defined(STM32F7) || defined(STM32H7)
|
||||
// MENU_DEBUG_NR_FFT_SIZE,
|
||||
// MENU_DEBUG_NR_DEC_ENABLE,
|
||||
//#endif
|
||||
MENU_DEBUG_NR_ASNR,
|
||||
MENU_DEBUG_NR_GAIN_SMOOTH_WIDTH,
|
||||
MENU_DEBUG_NR_GAIN_SMOOTH_THRESHOLD,
|
||||
// MENU_DEBUG_RTTY_ATC,
|
||||
#ifdef USE_TWO_CHANNEL_AUDIO
|
||||
MENU_DEBUG_ENABLE_STEREO,
|
||||
#endif
|
||||
// MENU_DEBUG_CW_DECODER,
|
||||
#ifdef USE_LEAKY_LMS
|
||||
MENU_DEBUG_LEAKY_LMS,
|
||||
MENU_DEBUG_NR_POST_AGC_SELECT,
|
||||
MENU_DEBUG_ANR_TAPS,
|
||||
MENU_DEBUG_ANR_DELAY,
|
||||
MENU_DEBUG_ANR_GAIN,
|
||||
MENU_DEBUG_ANR_LEAK,
|
||||
#endif
|
||||
MENU_DEBUG_OSC_SI5351_PLLRESET,
|
||||
MENU_DEBUG_HMC1023_COARSE,
|
||||
MENU_DEBUG_HMC1023_FINE,
|
||||
MENU_DEBUG_HMC1023_GAIN,
|
||||
MENU_DEBUG_HMC1023_BYPASS,
|
||||
MENU_DEBUG_HMC1023_OPAMP,
|
||||
MENU_DEBUG_HMC1023_DRVR,
|
||||
MENU_DEBUG_TWINPEAKS_CORR_RUN,
|
||||
CONFIG_VSWR_PROTECTION_THRESHOLD,
|
||||
MENU_DEBUG_FREEDV_MODE,
|
||||
MENU_DEBUG_FREEDV_SQL_THRESHOLD,
|
||||
|
||||
CONFIG_RTC_START,
|
||||
CONFIG_RTC_HOUR,
|
||||
CONFIG_RTC_MIN,
|
||||
CONFIG_RTC_SEC,
|
||||
CONFIG_RTC_RESET,
|
||||
CONFIG_RTC_CALIB,
|
||||
MENU_DYNAMICTUNE,
|
||||
MENU_DIGITAL_MODE_SELECT,
|
||||
MENU_DEBUG_CW_OFFSET_SHIFT_KEEP_SIGNAL,
|
||||
CONFIG_SMETER_ATTACK,
|
||||
CONFIG_SMETER_DECAY,
|
||||
MENU_DEBUG_SMOOTH_DYN_TUNE,
|
||||
CONFIG_BANDEF_SELECT,
|
||||
INFO_LO_TX_SUPR_DACs,
|
||||
MENU_DEBUG_CAL_LO_TX_SUPR_0,
|
||||
MENU_DEBUG_CAL_LO_TX_SUPR_1,
|
||||
CONFIG_WIDE_SPEC_DEF,
|
||||
MENU_NO_SHOW_BNDMEM,
|
||||
CONFIG_BANDCH_JUMP_SWAP,
|
||||
MENU_INPUT_STATE,
|
||||
MENU_BOX_COLOUR,
|
||||
MENU_TXTLINE_COLOUR,
|
||||
CONFIG_ENC1_REVERSE,
|
||||
CONFIG_ENC2_REVERSE,
|
||||
CONFIG_ENC3_REVERSE,
|
||||
CONFIG_ENC4_REVERSE,
|
||||
MENU_CW_MACRO_INTERVAL,
|
||||
MENU_CW_BEACON_INTERVAL,
|
||||
MENU_DEBUG_SHOW_GREETING,
|
||||
MENU_PEAK_IND_TUNE,
|
||||
MENU_CLEAR_PAN_ON_TX,
|
||||
MENU_SMETER_AM_NOT_LO,
|
||||
MENU_CW_FAST_MACRO_1_2,
|
||||
MENU_DEBUG_CLEAN_TX_CW_RTTY_BPSK,
|
||||
MENU_CW_SMOOTH,
|
||||
MENU_DEBUG_CB_27MC_TX_ENABLE,
|
||||
MENU_DEBUG_CB_26MC_TX_ENABLE,
|
||||
MENU_DEBUG_CB_12W_SSB_TX_ENABLE,
|
||||
MENU_DEBUG_CB_10W_TX_ENABLE,
|
||||
MENU_DEBUG_MEM_BW_MOD_BAND,
|
||||
MENU_DEBUG_ILLUM_BUTT,
|
||||
MENU_DEBUG_BPF_OPTION,
|
||||
MENU_DEBUG_XVTR_OFF_PA,
|
||||
MENU_DEBUG_BANDCODE,
|
||||
MENU_DEBUG_DISABLE_TP,
|
||||
MENU_DEBUG_FMENUS_SEL,
|
||||
MENU_DEBUG_F6_IND_SEL,
|
||||
MENU_DEBUG_F7_IND_SEL,
|
||||
MENU_DEBUG_ALT_PWR_CTRL,
|
||||
MENU_DEBUG_ALT_PWR_CTRL_VOL,
|
||||
MENU_DEBUG_IMPROV_IQ_ADJ,
|
||||
CONFIG_TX_REVERB_GAIN,
|
||||
CONFIG_TX_REVERB_DELAY,
|
||||
CONFIG_TX_EQ0,
|
||||
CONFIG_TX_EQ1,
|
||||
CONFIG_TX_EQ2,
|
||||
CONFIG_TX_EQ3,
|
||||
CONFIG_TX_EQ4,
|
||||
MENU_DEBUG_BEEP_GEN,
|
||||
MENU_DEBUG_BAND_OFF_160M,
|
||||
MENU_DEBUG_BAND_OFF_80M,
|
||||
MENU_DEBUG_BAND_OFF_60M,
|
||||
MENU_DEBUG_BAND_OFF_40M,
|
||||
MENU_DEBUG_BAND_OFF_30M,
|
||||
MENU_DEBUG_BAND_OFF_20M,
|
||||
MENU_DEBUG_BAND_OFF_17M,
|
||||
MENU_DEBUG_BAND_OFF_15M,
|
||||
MENU_DEBUG_BAND_OFF_12M,
|
||||
MENU_DEBUG_BAND_OFF_10M,
|
||||
MENU_DEBUG_BAND_OFF_6M,
|
||||
MENU_DEBUG_REDUCE_POWER_ON_LOW_BANDS_MORE,
|
||||
// Menu Contest
|
||||
MENU_DEBUG_CONTEST,
|
||||
MENU_DEBUG_CQCOLOR,
|
||||
MAX_RADIO_CONFIG_ITEM // Number of radio configuration menu items - This must ALWAYS remain as the LAST item!
|
||||
};
|
||||
|
||||
|
||||
// menu entry kind constants
|
||||
enum MENU_KIND
|
||||
{
|
||||
MENU_STOP = 0, // last entry in a menu / group
|
||||
MENU_ITEM, // standard menu entry
|
||||
MENU_GROUP, // menu group entry
|
||||
MENU_INFO, // just like a normal entry (read-only) but just for display purposes.
|
||||
MENU_SEP, // separator line
|
||||
MENU_BLANK, // blank
|
||||
MENU_TEXT, // text output only
|
||||
};
|
||||
|
||||
|
||||
struct MenuGroupDescriptor_s;
|
||||
|
||||
// items are stored in RAM
|
||||
// Each menu group has to have a MenuGroupItem pointing to the descriptor
|
||||
// a MenuGroupItem is used to keep track of the fold/unfold state and to link the
|
||||
// Descriptors are stored in flash
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const uint16_t menuId; // backlink to the menu we are part of. That implies, an entry can only be part of a single menu group
|
||||
const uint16_t kind; // use the enum defined above to indicate what this entry represents
|
||||
const uint16_t number; // this is an identification number which is passed to the menu entry handled
|
||||
// for standard items it is the id of the value to be changed, intepretation is left to handler
|
||||
// MENU_GROUP: for menu groups this MUST BE the index in the menu group table, THIS IS USED INTERNALLY
|
||||
volatile bool* enabled; // pointer to a variable which contains a boolean value to tell us if the menu entry is enabled right now, set to NULL if always enabled
|
||||
// this was a visual 3 letter identification which may be display, depending on the render approach
|
||||
const char* label; // this is the label which will be display, depending on the render approach
|
||||
} MenuDescriptor;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
bool unfolded; // runtime variable, tells if the user wants to have this groups items to be shown
|
||||
uint16_t count; // number of menu entries. This will be filled automatically on first use by internal code
|
||||
// do not write to this variable unless you know what you are doing.
|
||||
const MenuDescriptor* me; // pointer to the MenuDescriptor of this menu group in its parent menu. This is the backlink to our parent.
|
||||
// This will be filled automatically on first use by internal code in order to avoid search through the menu structure.
|
||||
// do not write to this variable unless you know what you are doing.
|
||||
} MenuGroupState;
|
||||
|
||||
#ifdef HELP_MENU
|
||||
typedef struct
|
||||
{
|
||||
const uint16_t count; // number of menu entries
|
||||
const char* txt; // text of help
|
||||
} HelpDescriptor;
|
||||
#endif
|
||||
|
||||
// This data structure is intended to be placed in flash
|
||||
// all data is placed here at compile time
|
||||
typedef struct MenuGroupDescriptor_s
|
||||
{
|
||||
const MenuDescriptor* entries; // array of member entries in the menu group
|
||||
MenuGroupState* state; // writable data structure for menu management, pointer has to go into RAM
|
||||
const MenuDescriptor* parent; // pointer to the first element of the array in which our menu group is located in. It does not have
|
||||
// to point to the MENU_GROUP item, wich can be at any position in this array. Used to calculate the real
|
||||
// pointer later and to identify the parent menu group of this menu.
|
||||
// use NULL for top level menus here (i.e. no parent).
|
||||
} MenuGroupDescriptor;
|
||||
|
||||
|
||||
// Runtime management of menu entries for onscreen rendering.
|
||||
typedef struct
|
||||
{
|
||||
const MenuDescriptor* entryItem;
|
||||
} MenuDisplaySlot;
|
||||
|
||||
#define MENU_START_IDX 0
|
||||
|
||||
extern const MenuGroupDescriptor groups[];
|
||||
|
||||
void UiMenu_UpdateItem(uint16_t select, MenuProcessingMode_t mode, int pos, int var, char* options, const char** txt_ptr_ptr, uint32_t* clr_ptr);
|
||||
void UiMenu_DisplayValue(const char* value,uint32_t clr,uint16_t pos);
|
||||
|
||||
#endif /* DRIVERS_UI_UI_MENU_INTERNAL_H_ */
|
||||
|
||||
#ifdef HELP_MENU
|
||||
const HelpDescriptor Helps[] =
|
||||
{
|
||||
{ MENU_SSB_AUTO_MODE_SELECT, "If enabled, the appropriate sideband mode for SSB and FreeDV is chosen as default for each band by its frequency.\0"},
|
||||
{ MENU_DIGI_DISABLE, "Disable appearance of digital modes when pressing Mode button.\0"},
|
||||
{ MENU_CW_DISABLE, "Disable appearance of CW mode when pressing Mode button.\0"},
|
||||
{ MENU_AM_DISABLE, "Disable appearance of AM mode when pressing Mode button.\0"},
|
||||
{ MENU_DEMOD_SAM, "Disable appearance of SyncAM modes when pressing Mode button.\0"},
|
||||
{ MENU_SAM_PLL_LOCKING_RANGE, "SAM PLL Locking Range in Hz: this determines how far up and down from the carrier frequency of an AM station we can offtune the receiver, so that the PLL will still lock to the carrier.\0"},
|
||||
{ MENU_SAM_PLL_STEP_RESPONSE, "Step response = Zeta = damping factor of the SAM PLL. Sets the stability and transient response of the PLL. Larger values give faster lock even if you are offtune, but PLL is also more sensitive.\0"},
|
||||
{ MENU_SAM_PLL_BANDWIDTH, "Bandwidth of the PLL loop = OmegaN in Hz: smaller bandwidth = more stable lock. FAST LOCK SAM PLL - set Step response and PLL bandwidth to large values [eg. 80 / 350]; DX (SLOW & STABLE) SAM PLL - set Step response and PLL bandwidth to small values [eg. 30 / 100].\0"},
|
||||
{ MENU_SAM_FADE_LEVELER, "Fade leveler (in AM/SAM mode) ON/OFF. Fade leveler is helpful in situations with very fast QSB of the carrier ´flutter´. It is designed to remove the rapidly changing carrier and replace it with a more stable carrier. If there is no QSB on the carrier, there is no change.\0"},
|
||||
{ MENU_FM_MODE_ENABLE, "Disable appearance of FM mode when pressing Mode button.\0"},
|
||||
{ MENU_FM_GEN_SUBAUDIBLE_TONE, "Enable generation of CTCSS tones during FM transmissions.\0"},
|
||||
{ MENU_FM_DET_SUBAUDIBLE_TONE, "Enable detection of CTCSS tones during FM receive. RX is muted unless tone is detected.\0"},
|
||||
{ MENU_FM_TONE_BURST_MODE, "Enabled sending of short tone at beginning of each FM transmission. Used to open repeaters. Available frequencies are 1750 Hz and 2135 Hz.\0"},
|
||||
{ MENU_FM_DEV_MODE, "Select between normal and narrow deviation (5 and 2.5kHz) for FM RX/TX.\0"},
|
||||
{ MENU_DEBUG_FREEDV_MODE, "Change active FreeDV mode. Please note, you have to reboot to activate new mode.\0"},
|
||||
{ MENU_DEBUG_FREEDV_SQL_THRESHOLD, "If not OFF, FreeDV will squelch if detected SNR is below set value.\0"},
|
||||
{ MENU_AGC_WDSP_MODE, "Choose a bundle of preset AGC parameters for the WDSP AGC: FAST / MED / SLOW / LONG / very LONG or switch OFF the AGC.\0"},
|
||||
{ MENU_AGC_WDSP_SLOPE, "Slope of the AGC is the difference between the loudest signal and the quietest signal after the AGC action has taken place. Given in dB.\0"},
|
||||
{ MENU_AGC_WDSP_TAU_DECAY, "Time constant for the AGC decay (speed of recovery of the AGC gain) in milliseconds.\0"},
|
||||
{ MENU_AGC_WDSP_THRESH, "Threshold = Knee of the AGC: input signal level from which on the AGC action takes place. AGC threshold should be placed/adjusted just above the band noise for every particular RX situation to allow for optimal AGC action. The blue AGC box indicates when AGC action takes place and helps in adjusting this threshold.\0"},
|
||||
{ MENU_AGC_WDSP_HANG_ENABLE, "Enable/Disable Hang AGC function: If enabled: after the signal has decreased, the gain of the AGC is held constant for a certain time period (the hang time) in order to allow for speech pauses without disturbing noise because of fast acting AGC.\0"},
|
||||
{ MENU_AGC_WDSP_HANG_TIME, "Hang AGC: hang time is the time period over which the AGC gain is held constant when in AGC Hang mode. After this period the gain is increased fast.\0"},
|
||||
{ MENU_AGC_WDSP_HANG_THRESH, "´Threshold´ for the Hang AGC: Hang AGC is useful for medium to strong signals. The Hang threshold determines the signal strength a signal has to exceed for Hang AGC to take place.\0"},
|
||||
{ MENU_AGC_WDSP_TAU_HANG_DECAY, "Time constant for the Hang AGC decay (speed of recovery of the AGC gain after hang time has expired) in milliseconds.\0"},
|
||||
{ MENU_CODEC_GAIN_MODE, "Sets the Codec IQ signal gain. Higher values represent higher gain. If set to AUTO the mcHF controls the gain so that the best dynamic range is used.\0"},
|
||||
{ MENU_RX_FREQ_CONV, "Controls offset of the receiver IQ signal base frequency from the dial frequency. Use of +/-12Khz is recommended. Switching it to OFF is not recommended as it disables certain features.\0"},
|
||||
{ MENU_BACKUP_CONFIG, "Backup your I2C Configuration to flash. If you don't have suitable I2C EEPROM installed this function is not available.\0"},
|
||||
{ MENU_RESTORE_CONFIG, "Restore your I2C Configuration from flash. If you don't have suitable I2C EEPROM installed this function is not available.\0"},
|
||||
{ CONFIG_RESET_SER_EEPROM, "Clear the EEPROM so that at next start all stored configuration data is reset to the values stored in Flash (see Backup/Restore).\0"},
|
||||
{ CONFIG_RESET_SER_EEPROM_SIGNATURE, "Clear the EEPROMi signature but keep all config values. This is mainly for debugging purposes).\0"},
|
||||
{ CONFIG_BANDEF_SELECT, "Select which band definition to use for ham bands. Original UHSDR or IARU Region 1 - 3.\0"},
|
||||
{ CONFIG_FREQ_MEM_LIMIT_RELAX, "Select ON to save and restore frequencies which do not fit into the band during configuration saving (Power-Off or long press on Menu button).\0"},
|
||||
{ CONFIG_TX_OUT_ENABLE, "Permit low power transmission even if the frequency is out of the official ham bands. DO NOT USE WITH CONNECTED ANTENNA! Use a dummy load!\0"},
|
||||
{ CONFIG_AUDIO_MAIN_SCREEN_MENU_SWITCH, "Control if the screen automatically adapts Encoder value focus when switching between RX and TX.\0"},
|
||||
{ CONFIG_MUTE_LINE_OUT_TX, "During transmission with frequency translation off, line out will carry one of the two signal channels. Good for CW but not very useful otherwise. You may switch this signal off here.\0"},
|
||||
{ CONFIG_TXRX_SWITCH_AUDIO_MUTE, "When switching from RX to TX the audio and HF output will be muted for roughly VALUE ms. There are now several minimum times for muting defined in the firmware:<br/><br/> Input from Mic: 40ms<br/> Input from Line In: 40ms<br/> Digital Inputs (CW, USB): less than 1ms.<br/><br/> If the user defined 'TX Initial Muting Time' is set to more than zero, the maximum of both fixed input time and user defined time is used. Your microphone PTT switch is a potential source of noise if Mic is input! You need to increase the delay or change switches!\0"},
|
||||
{ CONFIG_MAX_VOLUME, "Set maximum speaker&headphone volume.\0"},
|
||||
{ CONFIG_LINEOUT_GAIN, "Set the constant gain level for the analog lineout jack.\0"},
|
||||
{ CONFIG_BEEP_FREQ, "Set key beep frequency in Hz.\0"},
|
||||
{ CONFIG_BEEP_VOLUME, "Set key beep volume.\0"},
|
||||
{ CONFIG_CAT_IN_SANDBOX, "If On, frequency Changes made via CAT will not automatically switch bands and affect the manually selected frequencies.\0"},
|
||||
{ CONFIG_CAT_XLAT, "Select which frequency is reported via CAT Interface to the connected PC in Digital IQ Mode. If ON, it reports the displayed frequency. If OFF, it reports the center frequency, which is more useful with SDR programs.\0"},
|
||||
{ CONFIG_CAT_PTT_RTS, "The virtual serial port signal RTS can be used to switch to TX. Use with care, many CAT-able programs also set RTS to aktiv and make the TRX go to TX mode.\0"},
|
||||
{ CONFIG_XVTR_OFFSET_MULT, "When connecting to a transverter, set this to 1 and set the XVERTER Offset to the LO Frequency of it. The mcHF frequency is multiplied by this factor before the offset is added, so anything but 1 will result in each Hz in the mcHF being displayed as 2 to 10 Hz change on display.\0"},
|
||||
{ CONFIG_XVTR_FREQUENCY_OFFSET, "When transverter mode is enabled, this value is added to the mcHF frequency after being multiplied with the XVTR Offs/Mult. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz.\0"},
|
||||
{ CONFIG_XVTR_FREQUENCY_OFFSET_TX, "When transverter mode is enabled, this value is added to the displayed mcHF TX frequency after being multiplied with the XVTR Offs/Mult. Setting it to 0 uses RX offset for TX. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz.\0"},
|
||||
{ CONFIG_STEP_SIZE_BUTTON_SWAP, "If ON, Step- behaves like Step+ and vice versa.\0"},
|
||||
{ CONFIG_BAND_BUTTON_SWAP, "If ON, Band- behaves like Band+ and vice versa.\0"},
|
||||
{ CONFIG_BANDCH_JUMP_SWAP, "If ON, LongAction of Band+/- is band change, ShortAction is jump by freq on panorama width.\0"},
|
||||
{ CONFIG_ENC1_REVERSE, "If ON, encoder 1 are reversed.\0"},
|
||||
{ CONFIG_ENC2_REVERSE, "If ON, encoder 2 are reversed.\0"},
|
||||
{ CONFIG_ENC3_REVERSE, "If ON, encoder 3 are reversed.\0"},
|
||||
{ CONFIG_ENC4_REVERSE, "If ON, encoder 4 are reversed.\0"},
|
||||
{ CONFIG_VOLTMETER_CALIBRATION, "Adjusts the displayed value of the voltmeter.\0"},
|
||||
{ CONFIG_LOW_POWER_THRESHOLD, "Voltage threshold for voltage warning colors and auto shutdown.\0"},
|
||||
{ MENU_LOW_POWER_SHUTDOWN, "Shutdown automatically when supply voltage is below threshold for 60 seconds (only in RX).\0"},
|
||||
{ CONFIG_FREQUENCY_CALIBRATE, "Adjust the frequency correction of the local oscillator. Measure TX frequency and adjust until both match. Or use receive a know reference signal and zero-beat it and then adjust. More information in the Wiki.\0"},
|
||||
{ CONFIG_RF_FWD_PWR_NULL, "Set the forward and reverse power sensors ADC zero power offset. This setting is enabled ONLY when Disp. Pwr (mW), is enabled. Needs SWR meter hardware modification to work. See Wiki Adjustment and Calibration.\0"},
|
||||
{ CONFIG_FWD_REV_SENSE_SWAP, "Exchange the assignment of the Power/SWR FWD and REV measurement ADC. Use if your power meter does not show anything during TX.\0"},
|
||||
{ CONFIG_I2C1_SPEED, "Sets speed of the I2C1 bus (Si570 oscillator and MCP9801 temperature sensor). Higher speeds provide quicker RX/TX switching but may also cause tuning issues (red digits). Be careful with speeds above 200 kHz.\0"},
|
||||
{ CONFIG_I2C2_SPEED, "Sets speed of the I2C2 bus (Audio Codec and I2C EEPROM). Higher speeds provide quicker RX/TX switching, configuration save and power off. Speeds above 200 kHz are not recommended for unmodified mcHF. Many modified mcHF seem to run with 300kHz without problems.\0"},
|
||||
{ CONFIG_IQ_AUTO_CORRECTION, "Receive IQ phase and amplitude imbalance can be automatically adjusted by the mcHF. Switch ON/OFF here. If OFF, it takes the following menu values for compensating the imbalance. The automatic algorithm achieves up to 60dB mirror rejection. See Wiki Adjustments and Calibration.\0"},
|
||||
{ CONFIG_80M_RX_IQ_GAIN_BAL, "IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.\0"},
|
||||
{ CONFIG_80M_RX_IQ_PHASE_BAL, "IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.\0"},
|
||||
{ CONFIG_10M_RX_IQ_GAIN_BAL, "IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.\0"},
|
||||
{ CONFIG_10M_RX_IQ_PHASE_BAL, "IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable. See Wiki Adjustments and Calibration.\0"},
|
||||
{ MENU_NOISE_BLANKER_SETTING, "Set the Noise Blanker strength. Higher values mean more agressive blanking. Also changeable using Encoder 2 if Noise Blanker is active.\0"},
|
||||
#ifdef OBSOLETE_NR
|
||||
{ CONFIG_DSP_NR_DECORRELATOR_BUFFER_LENGTH, "DSP LMS noise reduction: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.\0"},
|
||||
{ CONFIG_DSP_NR_FFT_NUMTAPS, "DSP LMS noise reduction: Number of taps in the DSP noise reduction FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.\0"},
|
||||
{ CONFIG_DSP_NOTCH_CONVERGE_RATE, "DSP LMS automatic notch filter: converge rate.\0"},
|
||||
{ CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH, "DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.\0"},
|
||||
{ CONFIG_DSP_NOTCH_FFT_NUMTAPS, "DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.\0"},
|
||||
#endif
|
||||
#ifdef USE_LMS_AUTONOTCH
|
||||
{ CONFIG_DSP_NOTCH_CONVERGE_RATE, "DSP LMS automatic notch filter: converge rate.\0"},
|
||||
{ CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH, "DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.\0"},
|
||||
{ CONFIG_DSP_NOTCH_FFT_NUMTAPS, "DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.\0"},
|
||||
#endif
|
||||
{ MENU_DEBUG_NR_GAIN_SHOW, "Debugging: show gains of spectral noise reduction.\0"},
|
||||
{ MENU_DSP_NR_STRENGTH, "Set the Noise Reduction Strength. Higher values mean more agressive noise reduction but also higher CPU load. Use with extreme care. Also changeable using Encoder 2 if DSP is active.\0"},
|
||||
{ MENU_DEBUG_NR_BETA, "Time constant beta for spectral noise reduction, leave at 0.85.\0"},
|
||||
{ MENU_DEBUG_NR_ASNR, "Devel 2 NR: asnr.\0"},
|
||||
{ MENU_DEBUG_NR_GAIN_SMOOTH_WIDTH, "Devel 2 NR: width of gain smoothing window.\0"},
|
||||
{ MENU_DEBUG_NR_GAIN_SMOOTH_THRESHOLD, "Devel 2 NR: threhold for gain smoothing.\0"},
|
||||
{ MENU_DEBUG_NR_POST_AGC_SELECT, "DSP LMS noise reduction: Perform the DSP LMS noise reduction BEFORE or AFTER the AGC. NO = before AGC, YES = after AGC.\0"},
|
||||
{ MENU_DEBUG_ANR_TAPS, "Number of taps of leaky LMS noise reduction.\0"},
|
||||
{ MENU_DEBUG_ANR_DELAY, "Delay length of leaky LMS noise reduction.\0"},
|
||||
{ MENU_DEBUG_ANR_GAIN, "Gain of leaky LMS noise reduction.\0"},
|
||||
{ MENU_DEBUG_ANR_LEAK, "Leak of leaky LMS noise reduction.\0"},
|
||||
{ CONFIG_WIDE_SPEC_DEF, "Wide mode of spectrum on screen 320x240 is default.\0"},
|
||||
{ CONFIG_LCD_AUTO_OFF_MODE, "After x seconds LCD turns dark and LCD data sections stop. So power consumption is decreased and RX hum is decreased, too. LCD operation starts when using any button or the touchscreen.\0"},
|
||||
{ MENU_CW_DECODER_SNAP_ENABLE, "Graphical tune helper: adjust frequency until yellow vertical line is in centre of green box --> right on CW carrier frequency.\0"},
|
||||
{ CONFIG_FREQ_STEP_MARKER_LINE, "If enabled, you'll see a line under the digit which is currently representing the selected tuning step size.\0"},
|
||||
{ MENU_NO_SHOW_BNDMEM, "Don't show BndMemory.\0"},
|
||||
{ MENU_CLEAR_PAN_ON_TX, "Clear panoram on TX/TUNE.\0"},
|
||||
{ CONFIG_DISP_FILTER_BANDWIDTH, "Colour of the horizontal Filter Bandwidth indicator bar.\0"},
|
||||
{ MENU_SPECTRUM_SIZE, "Change height of spectrum display.\0"},
|
||||
{ MENU_SPECTRUM_FILTER_STRENGTH, "Lowpass filter for the spectrum FFT. Low values: fast and nervous spectrum; High values: slow and calm spectrum.\0"},
|
||||
{ MENU_SPECTRUM_FREQSCALE_COLOUR, "Colour of the small frequency digits under the spectrum display.\0"},
|
||||
{ MENU_SPECTRUM_CENTER_LINE_COLOUR, "Colour of the vertical line indicating the TX carrier frequency in the spectrum or waterdall display.\0"},
|
||||
{ MENU_SCOPE_LIGHT_ENABLE, "The scope uses bars (NORMAL) or points (LIGHT) to represent data. LIGHT is a little less resource intensive.\0"},
|
||||
{ MENU_SCOPE_SPEED, "Lower Values: Higher refresh rate. Set to 0 to disable scope.\0"},
|
||||
{ MENU_SCOPE_AGC_ADJUST, "Adjusting of scope / waterfall AGC for fitting graphs to screen.\0"},
|
||||
{ MENU_SCOPE_TRACE_COLOUR, "Set colour of scope.\0"},
|
||||
{ MENU_SCOPE_TRACE_HL_COLOUR, "Set colour of highlighted BW scope.\0"},
|
||||
{ MENU_SCOPE_BACKGROUND_HL_COLOUR, "Set colour of highlighted BW background.\0"},
|
||||
{ MENU_SCOPE_GRID_COLOUR, "Set colour of scope grid.\0"},
|
||||
{ MENU_SCOPE_DB_DIVISION, "Set rf range for scope.\0"},
|
||||
{ MENU_WFALL_SPEED, "Lower Values: Higher refresh rate. Set to 0 to disable waterfall.\0"},
|
||||
{ MENU_WFALL_COLOR_SCHEME, "Select colour scheme for waterfall display.\0"},
|
||||
{ MENU_WFALL_STEP_SIZE, "How many lines are moved in a single screen update.\0"},
|
||||
{ MENU_WFALL_CONTRAST, "Adjust to fit your personal input level range to displayable colour range for waterfall.\0"},
|
||||
{ MENU_METER_COLOUR_UP, "Set the colour of the scale of combined S/Power-Meter.\0"},
|
||||
{ MENU_METER_COLOUR_DOWN, "Set the colour of the scale of combined SWR/AUD/ALC-Meter.\0"},
|
||||
{ MENU_BOX_COLOUR, "Screen boxes colour.\0"},
|
||||
{ MENU_TXTLINE_COLOUR, "Ticker colour.\0"},
|
||||
{ MENU_DBM_DISPLAY, "RX signal power (measured within the filter bandwidth) can be displayed in dBm or normalized as dBm/Hz. This value is supposed to be quite accurate to +-3dB. Preferably use low spectrum display magnify settings. Accuracy is lower for very very weak and very very strong signals.\0"},
|
||||
{ MENU_DBM_CALIBRATE, "dBm display calibration. Just an offset (in dB) that is added to the internally calculated dBm or dBm/Hz value.\0"},
|
||||
{ CONFIG_SMETER_ATTACK, "Attack controls how quickly the S-Meter reacts to rising signal levels, higher values represent quicker reaction.\0"},
|
||||
{ CONFIG_SMETER_DECAY, "Decay controls how quickly the S-Meter reacts to falling signal levels, higher values represent quicker reaction.\0"},
|
||||
{ MENU_PEAK_IND_TUNE, "Tune/OFF S/PWR meter peak indicator.\0"},
|
||||
{ MENU_SMETER_AM_NOT_LO, "Don't calculate LO in AM mode RX.\0"},
|
||||
{ MENU_TCXO_MODE, "The software TCXO can be turned ON (set frequency is adjusted so that generated frequency matches the wanted frequency); OFF (no correction or measurement done); or STOP (no correction but measurement).\0"},
|
||||
{ MENU_TCXO_C_F, "Show the measure TCXO temperature in Celsius or Fahrenheit.\0"},
|
||||
{ CONFIG_RTC_START, "Start using the RTC and use the modified button layout. Will reboot your mcHF. Please use only if you completed the RTC mod otherwise you will need to disconnect battery and power and reboot to get a working mcHF. This menu is only visible if Backup RAM (VBat) was detected.\0"},
|
||||
{ CONFIG_RTC_HOUR, "Sets the Real Time Clock Hour. Needs HW Modifications.\0"},
|
||||
{ CONFIG_RTC_MIN, "Sets the Real Time Clock Minutes. Needs HW Modifications.\0"},
|
||||
{ CONFIG_RTC_SEC, "Sets the Real Time Clock Seconds. Needs HW Modifications.\0"},
|
||||
{ CONFIG_RTC_RESET, "Full Reset of STM32 RTC. Can be used to simulate first start with RTC mod completed.\0"},
|
||||
{ CONFIG_RTC_CALIB, "Sets the Real Time Clock Frequency calibration value in ppm. 1s/day deviation equals 11.57 ppm deviation.\0"},
|
||||
{ MENU_FREQ_FONT, "Font selection for frequency display. Allows selection of old/modern fonts.\0"},
|
||||
{ MENU_UI_INVERSE_SCROLLING, "Inverts Enc2/Enc3 behavior in menu up/down and show/hide UI scrolling actions, used for side-mounted encoder dials.\0"},
|
||||
{ MENU_KEYER_MODE, "Select how the mcHF interprets the connected keyer signals. Supported modes: Iambic A and B Keyer (IAM A/B), Straight Key (STR_K), and Ultimatic Keyer (ULTIM).\0"},
|
||||
{ MENU_KEYER_SPEED, "Keyer Speed for the automatic keyer modes in WpM. Also changeable via Encoder 3 if in CW Mode.\0"},
|
||||
{ MENU_KEYER_WEIGHT, "Keyer Dit/Pause ratio for the automatic keyer modes. Higher values increase length of dit, decreases length of pause so that the total time is still according to the set WpM value.\0"},
|
||||
{ MENU_CW_SMOOTH, "Smooth of CW signal edges.\0"},
|
||||
{ MENU_SIDETONE_GAIN, "Audio volume for the monitor sidetone in CW TX. Also changeable via Encoder 1 if in CW Mode.\0"},
|
||||
{ MENU_SIDETONE_FREQUENCY, "Sidetone Frequency (also Offset frequency, see CW Freq. Offset below).\0"},
|
||||
{ MENU_PADDLE_REVERSE, "Dit is Dah and Dah is Dit. Use if your keyer needs reverse meaning of the paddles.\0"},
|
||||
{ MENU_CW_TX_RX_DELAY, "How long to stay in CW TX mode after stop sending a signal.\0"},
|
||||
{ MENU_CW_OFFSET_MODE, "TX: display is TX frequency if received frequency was zero-beated. DISP: display is RX frequency if received signal is matched to sidetone. SHIFT: LO shifts, display is RX frequency if signal is matched to sidetone.\0"},
|
||||
{ MENU_CW_AUTO_MODE_SELECT, "Set appropriate sideband mode for CW. If AUTO, sideband is chosen for bands by its frequency. A long press on Mode button gets the other sideband mode.\0"},
|
||||
{ MENU_CW_DECODER, "Enable experimental CW decoding.\0"},
|
||||
{ MENU_CW_DECODER_THRESH, "All signals above this threshold are intepreted as a dit or daah.\0"},
|
||||
{ MENU_CW_DECODER_BLOCKSIZE, "How many samples are taken for the signal detection with the Goertzel algorithm?\0"},
|
||||
{ MENU_CW_DECODER_NOISECANCEL, "Enable/disable noise canceler for CW decoder.\0"},
|
||||
{ MENU_CW_DECODER_SPIKECANCEL, "Enable/disable spike canceler or short cancel for CW decoder.\0"},
|
||||
{ MENU_CW_DECODER_USE_3_GOERTZEL, "Enable/disable AGC for CW decoder.\0"},
|
||||
{ MENU_CW_DECODER_SHOW_CW_LED, "Enable/disable LED for CW decoder.\0"},
|
||||
{ MENU_CW_MACRO_INTERVAL, "CW Macros Cycled TX interval, sec.\0"},
|
||||
{ MENU_CW_BEACON_INTERVAL, "CW Beacon interval, min.\0"},
|
||||
{ MENU_CW_FAST_MACRO_1_2, "Enable/disable fast TXing CW macro 1 and 2.\0"},
|
||||
{ MENU_FP_SSB_01, "Filter bandwidth #1 when toggling with filter select button in LSB or USB.\0"},
|
||||
{ MENU_FP_SSB_02, "Filter bandwidth #2 when toggling with filter select button in LSB or USB.\0"},
|
||||
{ MENU_FP_SSB_03, "Filter bandwidth #3 when toggling with filter select button in LSB or USB.\0"},
|
||||
{ MENU_FP_SSB_04, "Filter bandwidth #4 when toggling with filter select button in LSB or USB.\0"},
|
||||
{ MENU_FP_CW_01, "Filter bandwidth #1 when toggling with filter select button in CW.\0"},
|
||||
{ MENU_FP_CW_02, "Filter bandwidth #2 when toggling with filter select button in CW.\0"},
|
||||
{ MENU_FP_CW_03, "Filter bandwidth #3 when toggling with filter select button in CW.\0"},
|
||||
{ MENU_FP_CW_04, "Filter bandwidth #4 when toggling with filter select button in CW.\0"},
|
||||
{ MENU_FP_AM_01, "Filter bandwidth #1 when toggling with filter select button in AM & SAM.\0"},
|
||||
{ MENU_FP_AM_02, "Filter bandwidth #2 when toggling with filter select button in AM & SAM.\0"},
|
||||
{ MENU_FP_AM_03, "Filter bandwidth #3 when toggling with filter select button in AM & SAM.\0"},
|
||||
{ MENU_FP_AM_04, "Filter bandwidth #4 when toggling with filter select button in AM & SAM.\0"},
|
||||
{ CONFIG_AM_TX_FILTER_DISABLE, "Select if AM-TX signal is filtered (strongly recommended to agree to regulations).\0"},
|
||||
{ CONFIG_SSB_TX_FILTER, "Select if SSB-TX signal is filtered (strongly recommended to agree to regulations).\0"},
|
||||
{ CONFIG_TX_REVERB_GAIN, "TX reverberation gain, OFF - disabled.\0"},
|
||||
{ CONFIG_TX_REVERB_DELAY, "TX reverberation delay.\0"},
|
||||
{ CONFIG_TX_EQ0, "Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.\0"},
|
||||
{ CONFIG_TX_EQ1, "Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.\0"},
|
||||
{ CONFIG_TX_EQ2, "Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.\0"},
|
||||
{ CONFIG_TX_EQ3, "Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.\0"},
|
||||
{ CONFIG_TX_EQ4, "Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.\0"},
|
||||
{ CONFIG_TX_DISABLE, "Disable all transmissions unconditionally. In CW you will be able to hear a sidetone but no transmission is made.\0"},
|
||||
{ CONFIG_VSWR_PROTECTION_THRESHOLD, "If not OFF, on TX/tune the bias of PA will be down to 0 etc when exceeding the specified value of VSWR.\0"},
|
||||
{ MENU_MIC_TYPE, "Microphone type. Electret or Dynamic. ELECTRET is recommended. Selecting DYNAMIC when an Electret mic is present will likely cause terrible audio distortion.\0"},
|
||||
{ MENU_MIC_GAIN, "Microphone gain. Also changeable via Encoder 3 if Microphone is selected as Input.\0"},
|
||||
{ MENU_LINE_GAIN, "LineIn gain. Also changeable via Encoder 3 if LineIn Left (L>L) or LineIn Right (L>R) is selected as Input.\0"},
|
||||
{ MENU_TX_COMPRESSION_LEVEL, "Control the TX audio compressor. Higher values give more compression. Set to CUSTOM for user defined compression parameters. See below. Also changeable via Encoder 1 (CMP).\0"},
|
||||
{ MENU_ALC_RELEASE, "If Audio Compressor Config is set to CUSTOM, sets the value of the Audio Compressor Release time. Otherwise shows predefined value of selected compression level.\0"},
|
||||
{ MENU_ALC_POSTFILT_GAIN, "If Audio Compressor Config is set to CUSTOM, sets the value of the ALC Input Gain. Otherwise shows predefined value of selected compression level.\0"},
|
||||
{ CONFIG_TUNE_POWER_LEVEL, "Select the power level for TUNE operation. May be set using the selected power level or have a fixed power level.\0"},
|
||||
{ CONFIG_TUNE_TONE_MODE, "Select if single tone or two tone is generated during TUNE operation. Not persistent.\0"},
|
||||
{ CONFIG_CW_PA_BIAS, "If set to a value above 0, this BIAS is used during CW transmission; otherwise normal BIAS is used during CW.\0"},
|
||||
{ CONFIG_REDUCE_POWER_ON_LOW_BANDS, "If set (recommended!) frequencies below 8Mhz (40m or lower) require higher power adjust values (four times). This permits better control of generated power on these frequencies.\0"},
|
||||
{ CONFIG_REDUCE_POWER_ON_HIGH_BANDS, "If set frequencies above 8Mhz (30m or higher) require higher power adjust values (four times). This permits better control of generated power on these frequencies.\0"},
|
||||
{ CONFIG_PA_BIAS, "Defines the BIAS value of the PA. See Adjustment and Calibration for more information.\0"},
|
||||
{ CONFIG_2200M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_630M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_160M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_80M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_60M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_40M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_30M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_20M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_17M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_15M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_12M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_10M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_6M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_4M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_2M_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_70CM_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_23CM_5W_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_2200M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_630M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_160M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_80M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_60M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_40M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_30M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_20M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_17M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_15M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_12M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_10M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_6M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_4M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_2M_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_70CM_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_23CM_FULL_POWER_ADJUST, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_2200M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_630M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_160M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_80M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_40M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_20M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_15M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_10M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_6M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_2M_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_70CM_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_FWD_REV_COUPLING_23CM_ADJ, "RTFM.\0"},
|
||||
{ CONFIG_160M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_160M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_80M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_80M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_40M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_40M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_30M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_30M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_20M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_20M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_17M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_17M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_15M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_15M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_12M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_12M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_10M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_10M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_10M_UP_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_10M_UP_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_6M_TX_IQ_GAIN_BAL, "RTFM.\0"},
|
||||
{ CONFIG_6M_TX_IQ_PHASE_BAL, "RTFM.\0"},
|
||||
{ CONFIG_160M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_160M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_80M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_80M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_40M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_40M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_30M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_30M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_17M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_17M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_12M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_12M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_10M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_10M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_6M_TX_IQ_GAIN_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ CONFIG_6M_TX_IQ_PHASE_BAL_TRANS_OFF, "RTFM.\0"},
|
||||
{ MENU_INPUT_STATE, "Amber - State of RX input group.\0"},
|
||||
{ MENU_DYNAMICTUNE, "Toggles dynamic tune mode.\0"},
|
||||
{ MENU_MIC_LINE_MODE, "Select the required signal input for transmit (except in CW). Also changeable via long press on M3.\0"},
|
||||
{ MENU_SPECTRUM_MODE, "Select if you want a scope-like or a waterfall-like (actually a fountain) display.\0"},
|
||||
{ MENU_SPECTRUM_MAGNIFY, "Select level of magnification (1x, 2x, 4x, 8x, 16x, 32x) of spectrum and waterfall display. Also changeable via touch screen. Refresh rate is much slower with high magnification settings. The dBm display has its maximum accuracy in magnify 1x setting.\0"},
|
||||
{ MENU_RESTART_CODEC, "Sometimes there is a problem with the I2S IQ signal stream from the Codec, resulting in mirrored signal reception. Restarting the CODEC Stream will cure that problem. Try more than once, if first call did not help.\0"},
|
||||
{ MENU_DIGITAL_MODE_SELECT, "Select the active digital mode (FreeDV,RTTY, ...).\0"},
|
||||
{ INFO_DISPLAY, "Displays working mode (SPI/parallel.\0"},
|
||||
{ INFO_DISPLAY_CTRL, "Identified LCD controller chip.\0"},
|
||||
{ INFO_OSC_NAME, "Local oscillator type.\0"},
|
||||
{ INFO_SI570, "Startup frequency and I2C address of local oscillator Type SI570.\0"},
|
||||
{ INFO_EEPROM, "Type of serial EEPROM and its capacity.\0"},
|
||||
{ INFO_TP, "Touchscreen state.\0"},
|
||||
{ INFO_CPU, "Identification of fitted MCU.\0"},
|
||||
{ INFO_FLASH, "Flash size of MCU.\0"},
|
||||
{ INFO_RAM, "RAM size of MCU.\0"},
|
||||
{ INFO_FW_VERSION, "Firmware version.\0"},
|
||||
{ INFO_BUILD, "Firmware: timestamp of building.\0"},
|
||||
{ INFO_BL_VERSION, "Bootloader version.\0"},
|
||||
{ INFO_RFBOARD, "Displays the detected RF Board hardware identification.\0"},
|
||||
{ INFO_CODEC, "Audio Codec I2C communication successfully tested? This is not a full test of the Audio Codec functionality, it only reports if I2C communication reported no problem talking to the codec.\0"},
|
||||
{ INFO_CODEC_TWINPEAKS, "In some cases the audio codec needs to be restarted to produce correct IQ. The IQ auto correction detects this. If this fixes the problem, Done is displayed, Failed otherwise.\0"},
|
||||
{ INFO_VBAT, "Battery Support for Backup RAM present?\0"},
|
||||
{ INFO_RTC, "Battery Supported Real Time Clock present?\0"},
|
||||
{ INFO_LO_TX_SUPR_DACs, "LO_TX Supression DACs (0/1) are present?\0"},
|
||||
{ INFO_AMBER_IO8, "Amber - I/Ox8 PCF8574A is present?\0"},
|
||||
{ INFO_AMBER_IO4, "Amber - I/Ox4 PCA9536 is present?\0"},
|
||||
{ INFO_AMBER_DAC_PWR_TX, "Amber - DAC MCP4725 for TX PWR reg. is present?\0"},
|
||||
{ INFO_LICENCE, "Display license of firmware.\0"},
|
||||
{ INFO_HWLICENCE, "Display license of hardware.\0"},
|
||||
{ MENU_DEBUG_ENABLE_INFO, "Enable debug outputs on LCD for testing purposes (touch screen coordinates, load) and audio interrupt duration indication via green led.\0"},
|
||||
{ CONFIG_FWD_REV_PWR_DISP, "Shows the forward and reverse power values in mW, can be used to calibrate the SWR meter.\0"},
|
||||
{ MENU_DEBUG_CW_OFFSET_SHIFT_KEEP_SIGNAL, "Enable automatic sidetone correction for CW OFFSET MODE = SHIFT. If you tuned in SSB to a CW signal around the sidetone frequency, you'll keep that signal when going to CW. Even if you switch from USB to CW-LSB etc.\0"},
|
||||
{ MENU_DEBUG_TX_AUDIO, "If enabled, send generated audio to PC during TX.\0"},
|
||||
{ MENU_DEBUG_CLONEOUT, "Will in future send out memory data to an FT817 Clone Info (to be used with CHIRP).\0"},
|
||||
{ MENU_DEBUG_CLONEIN, "Will in future get memory data from an FT817 Clone Info (to be used with CHIRP).\0"},
|
||||
#ifdef USE_TWO_CHANNEL_AUDIO
|
||||
{ MENU_DEBUG_ENABLE_STEREO, "Enable stereo demodulation modes.\0"},
|
||||
#endif
|
||||
{ MENU_DEBUG_OSC_SI5351_PLLRESET, "Debug Setting: Select when the Si5351a does a PLL RESET.\0"},
|
||||
{ MENU_DEBUG_HMC1023_COARSE, "Debug Setting: Change LPF HMC1023LP5E coarse bandwidth.\0"},
|
||||
{ MENU_DEBUG_HMC1023_FINE, "Debug Setting: Change LPF HMC1023LP5E fine bandwidth.\0"},
|
||||
{ MENU_DEBUG_HMC1023_GAIN, "Debug Setting: Switch LPF HMC1023LP5E +10db Amp on/off.\0"},
|
||||
{ MENU_DEBUG_HMC1023_BYPASS, "Debug Setting: Set HMC1023 to bypass mode.\0"},
|
||||
{ MENU_DEBUG_HMC1023_OPAMP, "Debug Setting: Switch LPF HMC1023LP5E Opamp Bias.\0"},
|
||||
{ MENU_DEBUG_HMC1023_DRVR, "Debug Setting: Set HMC1023 Driver Bias.\0"},
|
||||
{ MENU_DEBUG_TWINPEAKS_CORR_RUN, "Trigger Twinpeaks Correction Manually if IQ Auto Correction is enabled, otherwise you will see Not Possible.\0"},
|
||||
{ MENU_DEBUG_CB_27MC_TX_ENABLE, "Enable transmitting (4W) on CB band 27 MHz (AM, FM, SSB, CW).\0"},
|
||||
{ MENU_DEBUG_CB_26MC_TX_ENABLE, "Enable transmitting (4W) on CB band 26 MHz (AM, FM, SSB, CW).\0"},
|
||||
{ MENU_DEBUG_CB_12W_SSB_TX_ENABLE, "Enable transmitting 12W SSB on CB bands, where TX is open.\0"},
|
||||
{ MENU_DEBUG_CB_10W_TX_ENABLE, "Enable transmitting 10W for any mode on CB bands, where TX is open.\0"},
|
||||
{ MENU_DEBUG_CAL_LO_TX_SUPR_0, "Calibration of LO_TX Supression on every band via balancing of TX mixer, channel 0.\0"},
|
||||
{ MENU_DEBUG_CAL_LO_TX_SUPR_1, "Calibration of LO_TX Supression on every band via balancing of TX mixer, channel 1.\0"},
|
||||
{ MENU_DEBUG_SHOW_GREETING, "Not for users.\0"},
|
||||
{ MENU_DEBUG_SMOOTH_DYN_TUNE, "Activate smooth dynamic tune.\0"},
|
||||
{ MENU_DEBUG_CLEAN_TX_CW_RTTY_BPSK, "Forming CW/RTTY/BPSK signal at intermediate frequency for clean TX.\0"},
|
||||
{ MENU_DEBUG_MEM_BW_MOD_BAND, "Remember the filter settings of each mode in each range for the duration of the session.\0"},
|
||||
{ MENU_DEBUG_ILLUM_BUTT, "Illumination of buttons.\0"},
|
||||
{ MENU_DEBUG_BPF_OPTION, "3 extra BPF instead of 2 on Amber-RF board.\0"},
|
||||
{ MENU_DEBUG_XVTR_OFF_PA, "Transverter mode - blocking PA on TX. The optional 'XVTR TX' SMA connector must be soldered and connected with coaxial cable to the output of the amplifier before PA driver (XVTR_TX contacts).\0"},
|
||||
{ MENU_DEBUG_BANDCODE, "PA bandcode variant, if not OFF.\0"},
|
||||
{ MENU_DEBUG_ALT_PWR_CTRL, "Alternative POWER lewel control ON/OFF.\0"},
|
||||
{ MENU_DEBUG_ALT_PWR_CTRL_VOL, "Alternative POWER lewel control - DAC volume in points, 0-4096 (0-5V).\0"},
|
||||
{ MENU_DEBUG_DISABLE_TP, "Disable touchscreen actions.\0"},
|
||||
{ MENU_DEBUG_FMENUS_SEL, "Type of F-menus selection.\0"},
|
||||
{ MENU_DEBUG_IMPROV_IQ_ADJ, "Improved I/Q adjusting. Added 160, 40, 30, 17, 12m.\0"},
|
||||
{ MENU_DEBUG_BEEP_GEN, "Activate beep (as button beep set) when the band border is crossed.\0"},
|
||||
{ MENU_DEBUG_F6_IND_SEL, "Amber 4 inch - Indication of F6 button.\0"},
|
||||
{ MENU_DEBUG_F7_IND_SEL, "Amber 4 inch - Indication of F7 button.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_160M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_80M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_60M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_40M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_30M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_20M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_17M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_15M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_12M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_10M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_BAND_OFF_6M, "Remove this band from switching queue.\0"},
|
||||
{ MENU_DEBUG_REDUCE_POWER_ON_LOW_BANDS_MORE, "Reduce power x20 (instead of x4) for F < 8 MHz.\0"},
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,717 @@
|
||||
#include "ui_menu.h"
|
||||
#include "ui_menu_internal.h"
|
||||
#include "uhsdr_hmc1023.h"
|
||||
#include "radio_management.h"
|
||||
#include "soft_tcxo.h"
|
||||
#include "ui_driver.h"
|
||||
/*
|
||||
* How to create a new menu entry in an existing menu:
|
||||
* - Copy an existing entry of MENU_KIND and paste at the desired position
|
||||
* - Just assign a unique number to the "number" attribute
|
||||
* - Change the label, and implement handling
|
||||
*
|
||||
* How to create a menu group:
|
||||
* - Add menu group id entry to enum below
|
||||
* - Create a MenuDescriptor Array with the desired entries, make sure to have the MENU_STOP element at last position
|
||||
* and that all elements have the enum value as first attribute (menuId)
|
||||
* - Added the menu group entry in the parent menu descriptor array.
|
||||
* - Create a MenuState element
|
||||
* - Added the menu group descriptor to the groups list at the position corresponding to the enum value
|
||||
* using the descriptor array, the address of the MenuState and the address of the parent menu descriptor array.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
// ATTENTION: The numbering here has to be match in the groups
|
||||
// data structure found more or less at the end of this
|
||||
// menu definition block ! Otherwise menu display will not work
|
||||
// as expected and may crash mcHF
|
||||
// If you move menus around, make sure to change the groups structure of the move
|
||||
// menu to reflect the new parent menu!
|
||||
|
||||
enum MENU_GROUP_ITEM
|
||||
{
|
||||
MENU_TOP = 0,
|
||||
MENU_BASE,
|
||||
MENU_CONF,
|
||||
MENU_DISPLAY,
|
||||
MENU_CW,
|
||||
MENU_FILTER,
|
||||
MENU_POW,
|
||||
MENU_MEN2TOUCH,
|
||||
MENU_SYSINFO,
|
||||
MENU_DEBUG,
|
||||
MENU_HALL_OF_FAME,
|
||||
};
|
||||
|
||||
|
||||
const MenuDescriptor topGroup[] =
|
||||
{
|
||||
{ MENU_TOP, MENU_GROUP, MENU_BASE, NULL, "Standard Menu", UiMenuDesc("Operational parameters") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_CONF, NULL, "Configuration Menu", UiMenuDesc("Configuration settings typically not so often to be changed") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_DISPLAY, NULL, "Display Menu", UiMenuDesc("Everything related to how the display presents data such as colors or speed of display") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_CW, NULL, "CW Mode Settings", UiMenuDesc("Everything related to CW Mode operation (except CW PA Bias)") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_FILTER, NULL, "Filter Selection", UiMenuDesc("Select the filters for filter button by mode. Each mode can have up to 4 filters for quick selection via short press Filter button G4.") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_POW, NULL, "PA Configuration", UiMenuDesc("Menu for power amplifier parameter and tune function adjustments") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_MEN2TOUCH, NULL, "Touchscreen via Menu", UiMenuDesc("All functions which are available by touchscreen here are available as menu selectables") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_SYSINFO, NULL, "System Info", UiMenuDesc("Lists various system info values") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_DEBUG, NULL, "Debug/Exper. Settings", UiMenuDesc("As the name says, contains debug or expert settings usually not relevant for operating the mcHF") },
|
||||
{ MENU_TOP, MENU_GROUP, MENU_HALL_OF_FAME, NULL, "Hall of Fame", UiMenuDesc("Thanks to all who contributed to the project") },
|
||||
|
||||
{ MENU_TOP, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor baseGroup[] =
|
||||
{
|
||||
// { MENU_BASE, MENU_ITEM, MENU_SSB_NARROW_FILT,"029","CW Filt in SSB Mode", UiMenuDesc(":soon:") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_SSB_AUTO_MODE_SELECT, NULL, "LSB/USB Auto Select", UiMenuDesc("If enabled, the appropriate sideband mode for SSB and FreeDV is chosen as default for each band by its frequency.")},
|
||||
{ MENU_BASE, MENU_ITEM, MENU_DIGI_DISABLE, NULL,"Digital Modes", UiMenuDesc("Disable appearance of digital modes when pressing Mode button")},
|
||||
{ MENU_BASE, MENU_ITEM, MENU_CW_DISABLE, NULL, "CW Mode", UiMenuDesc("Disable appearance of CW mode when pressing Mode button")},
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AM_DISABLE, NULL, "AM Mode", UiMenuDesc("Disable appearance of AM mode when pressing Mode button")},
|
||||
{ MENU_BASE, MENU_ITEM, MENU_DEMOD_SAM, NULL,"SyncAM Mode",UiMenuDesc("Disable appearance of SyncAM modes when pressing Mode button") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_SAM_PLL_LOCKING_RANGE, NULL, "SAM PLL locking range", UiMenuDesc("SAM PLL Locking Range in Hz: this determines how far up and down from the carrier frequency of an AM station we can offtune the receiver, so that the PLL will still lock to the carrier.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_SAM_PLL_STEP_RESPONSE, NULL, "SAM PLL step response", UiMenuDesc("Step response = Zeta = damping factor of the SAM PLL. Sets the stability and transient response of the PLL. Larger values give faster lock even if you are offtune, but PLL is also more sensitive.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_SAM_PLL_BANDWIDTH, NULL, "SAM PLL bandwidth in Hz", UiMenuDesc("Bandwidth of the PLL loop = OmegaN in Hz: smaller bandwidth = more stable lock. FAST LOCK SAM PLL - set Step response and PLL bandwidth to large values [eg. 80 / 350]; DX (SLOW & STABLE) SAM PLL - set Step response and PLL bandwidth to small values [eg. 30 / 100].") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_SAM_FADE_LEVELER, NULL, "SAM Fade Leveler", UiMenuDesc("Fade leveler (in AM/SAM mode) ON/OFF. Fade leveler is helpful in situations with very fast QSB of the carrier ´flutter´. It is designed to remove the rapidly changing carrier and replace it with a more stable carrier. If there is no QSB on the carrier, there is no change.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_FM_MODE_ENABLE, NULL, "FM Mode", UiMenuDesc("Disable appearance of FM mode when pressing Mode button")},
|
||||
{ MENU_BASE, MENU_ITEM, MENU_FM_GEN_SUBAUDIBLE_TONE, NULL, "FM Sub Tone Gen", UiMenuDesc("Enable generation of CTCSS tones during FM transmissions.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_FM_DET_SUBAUDIBLE_TONE, NULL, "FM Sub Tone Det", UiMenuDesc("Enable detection of CTCSS tones during FM receive. RX is muted unless tone is detected.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_FM_TONE_BURST_MODE, NULL, "FM Tone Burst", UiMenuDesc("Enabled sending of short tone at beginning of each FM transmission. Used to open repeaters. Available frequencies are 1750 Hz and 2135 Hz.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_FM_DEV_MODE, NULL, "FM Deviation", UiMenuDesc("Select between normal and narrow deviation (5 and 2.5kHz) for FM RX/TX") },
|
||||
#ifdef USE_FREEDV
|
||||
{ MENU_BASE, MENU_ITEM, MENU_DEBUG_FREEDV_MODE, NULL, "FreeDV Mode", UiMenuDesc("Change active FreeDV mode. Please note, you have to reboot to activate new mode") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_DEBUG_FREEDV_SQL_THRESHOLD, NULL, "FreeDV Squelch threshold", UiMenuDesc("If not OFF, FreeDV will squelch if detected SNR is below set value.") },
|
||||
#endif
|
||||
// { MENU_BASE, MENU_ITEM, MENU_RF_GAIN_ADJ, NULL, "RF Gain", UiMenuDesc("RF Receive Gain. This setting is also accessible via Encoder 2, RFG.") }, // also via knob
|
||||
// { MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_SWITCH, NULL, "AGC Mode Switch", UiMenuDesc("You can choose between two different AGC systems here: ´Standard AGC´ and ´WDSP AGC´.") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_AGC_MODE, NULL, "AGC STD Mode", UiMenuDesc("Standard AGC: Automatic Gain Control Mode setting. You may select preconfigured settings (SLOW,MED,FAST), define settings yourself (CUSTOM) or use MANUAL (no AGC, use RFG to control gain") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_CUSTOM_AGC, NULL, "AGC STD Custom Speed (+=Slower)", UiMenuDesc("Standard AGC: If AGC STD Mode is set to CUSTOM, this controls the speed setting of AGC") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_MODE, NULL, "AGC WDSP Mode", UiMenuDesc("Choose a bundle of preset AGC parameters for the WDSP AGC: FAST / MED / SLOW / LONG / very LONG or switch OFF the AGC.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_SLOPE, NULL, "AGC WDSP Slope", UiMenuDesc("Slope of the AGC is the difference between the loudest signal and the quietest signal after the AGC action has taken place. Given in dB.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_TAU_DECAY, NULL, "AGC WDSP Decay", UiMenuDesc("Time constant for the AGC decay (speed of recovery of the AGC gain) in milliseconds.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_THRESH, NULL, "AGC WDSP Threshold", UiMenuDesc("Threshold = Knee of the AGC: input signal level from which on the AGC action takes place. AGC threshold should be placed/adjusted just above the band noise for every particular RX situation to allow for optimal AGC action. The blue AGC box indicates when AGC action takes place and helps in adjusting this threshold.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_HANG_ENABLE, NULL, "AGC WDSP Hang enable", UiMenuDesc("Enable/Disable Hang AGC function: If enabled: after the signal has decreased, the gain of the AGC is held constant for a certain time period (the hang time) in order to allow for speech pauses without disturbing noise because of fast acting AGC.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_HANG_TIME, NULL, "AGC WDSP Hang time", UiMenuDesc("Hang AGC: hang time is the time period over which the AGC gain is held constant when in AGC Hang mode. After this period the gain is increased fast.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_HANG_THRESH, NULL, "AGC WDSP Hang threshold", UiMenuDesc("´Threshold´ for the Hang AGC: Hang AGC is useful for medium to strong signals. The Hang threshold determines the signal strength a signal has to exceed for Hang AGC to take place.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_AGC_WDSP_TAU_HANG_DECAY, NULL, "AGC WDSP Hang Decay", UiMenuDesc("Time constant for the Hang AGC decay (speed of recovery of the AGC gain after hang time has expired) in milliseconds.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_CODEC_GAIN_MODE, NULL, "RX Codec Gain", UiMenuDesc("Sets the Codec IQ signal gain. Higher values represent higher gain. If set to AUTO the mcHF controls the gain so that the best dynamic range is used.") },
|
||||
{ MENU_BASE, MENU_ITEM, MENU_RX_FREQ_CONV, NULL, "RX/TX Freq Xlate", UiMenuDesc("Controls offset of the receiver IQ signal base frequency from the dial frequency. Use of +/-12Khz is recommended. Switching it to OFF is not recommended as it disables certain features.") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_MIC_TYPE, NULL, "Mic Type", UiMenuDesc("Microphone type. Electret or Dynamic. ELECTRET is recommended. Selecting DYNAMIC when an Electret mic is present will likely cause terrible audio distortion") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_MIC_GAIN, NULL, "Mic Input Gain", UiMenuDesc("Microphone gain. Also changeable via Encoder 3 if Microphone is selected as Input") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_LINE_GAIN, NULL, "Line Input Gain", UiMenuDesc("LineIn gain. Also changeable via Encoder 3 if LineIn Left (L>L) or LineIn Right (L>R) is selected as Input") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_TX_COMPRESSION_LEVEL, NULL, "TX Audio Compress", UiMenuDesc("Control the TX audio compressor. Higher values give more compression. Set to CUSTOM for user defined compression parameters. See below. Also changeable via Encoder 1 (CMP).") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_ALC_RELEASE, NULL, "TX ALC Release Time", UiMenuDesc("If Audio Compressor Config is set to CUSTOM, sets the value of the Audio Compressor Release time. Otherwise shows predefined value of selected compression level.") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_ALC_POSTFILT_GAIN, NULL, "TX ALC Input Gain", UiMenuDesc("If Audio Compressor Config is set to CUSTOM, sets the value of the ALC Input Gain. Otherwise shows predefined value of selected compression level.") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_NOISE_BLANKER_SETTING, NULL, "RX NB Setting", UiMenuDesc("Set the Noise Blanker strength. Higher values mean more agressive blanking. Also changeable using Encoder 2 if Noise Blanker is active.") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_DSP_NR_STRENGTH, NULL, "DSP NR Strength", UiMenuDesc("Set the Noise Reduction Strength. Higher values mean more agressive noise reduction but also higher CPU load. Use with extreme care. Also changeable using Encoder 2 if DSP is active.") }, // via knob
|
||||
// { MENU_BASE, MENU_ITEM, MENU_TCXO_MODE, NULL, "TCXO Off/On/Stop", UiMenuDesc("The software TCXO can be turned ON (set frequency is adjusted so that generated frequency matches the wanted frequency); OFF (no correction or measurement done); or STOP (no correction but measurement).") },
|
||||
// { MENU_BASE, MENU_ITEM, MENU_TCXO_C_F, &lo.sensor_present, "TCXO Temp. (C/F)", UiMenuDesc("Show the measure TCXO temperature in Celsius or Fahrenheit.") },
|
||||
//#ifdef USE_CONFIGSTORAGE_FLASH
|
||||
// { MENU_BASE, MENU_ITEM, MENU_BACKUP_CONFIG, NULL, "Backup Config", UiMenuDesc("Backup your I2C Configuration to flash. If you don't have suitable I2C EEPROM installed this function is not available.") },
|
||||
//#endif
|
||||
// { MENU_BASE, MENU_ITEM, MENU_LOW_POWER_SHUTDOWN, NULL, "Low Voltage Shutdown", UiMenuDesc("Shutdown automatically when supply voltage is below threshold for 60 seconds (only in RX).") },
|
||||
//#ifdef USE_CONFIGSTORAGE_FLASH
|
||||
// { MENU_BASE, MENU_ITEM, MENU_RESTORE_CONFIG, NULL, "Restore Config", UiMenuDesc("Restore your I2C Configuration from flash. If you don't have suitable I2C EEPROM installed this function is not available.") },
|
||||
//#endif
|
||||
{ MENU_BASE, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor confGroup[] =
|
||||
{
|
||||
|
||||
// Unused in firmware: { MENU_CONF, MENU_ITEM, CONFIG_FREQ_LIMIT_RELAX,"231","Freq. Limit Disable", UiMenuDesc(":soon:") },
|
||||
#ifdef USE_CONFIGSTORAGE_FLASH
|
||||
{ MENU_CONF, MENU_ITEM, MENU_BACKUP_CONFIG, NULL, "Backup Config", UiMenuDesc("Backup your I2C Configuration to flash. If you don't have suitable I2C EEPROM installed this function is not available.") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_RESTORE_CONFIG, NULL, "Restore Config", UiMenuDesc("Restore your I2C Configuration from flash. If you don't have suitable I2C EEPROM installed this function is not available.") },
|
||||
// Reset I2C Config EEPROM to empty state
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_RESET_SER_EEPROM, NULL, "Rst Conf EEPROM", UiMenuDesc("Clear the EEPROM so that at next start all stored configuration data is reset to the values stored in Flash (see Backup/Restore).") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_RESET_SER_EEPROM_SIGNATURE, NULL, "RstEEPROM&KeepConf", UiMenuDesc("Clear the EEPROMi signature but keep all config values. This is mainly for debugging purposes).") },
|
||||
#endif
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_BANDEF_SELECT, NULL, "Band Definition", UiMenuDesc("Select which band definition to use for ham bands (Original UHSDR or IARU Region 1 - 3") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_FREQ_MEM_LIMIT_RELAX, NULL, "Save Out-Of-Band Freq.", UiMenuDesc("Select ON to save and restore frequencies which do not fit into the band during configuration saving (Power-Off or long press on Menu button)") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_TX_OUT_ENABLE, NULL, "TX on Out-Of-Band Freq.", UiMenuDesc("Permit low power transmission even if the frequency is out of the official ham bands. DO NOT USE WITH CONNECTED ANTENNA! Use a dummy load!") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_TX_DISABLE, NULL, "Transmit Disable", UiMenuDesc("Disable all transmissions unconditionally. In CW you will be able to hear a sidetone but no transmission is made.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_VSWR_PROTECTION_THRESHOLD, NULL, "VSWR Protect.threshold", UiMenuDesc("If not OFF, on TX/tune the bias of PA will be down to 0 etc when exceeding the specified value of VSWR") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_AUDIO_MAIN_SCREEN_MENU_SWITCH, NULL, "Menu SW on TX disable", UiMenuDesc("Control if the screen automatically adapts Encoder value focus when switching between RX and TX.") },
|
||||
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_MUTE_LINE_OUT_TX, NULL, "TX Mute LineOut", UiMenuDesc("During transmission with frequency translation off, line out will carry one of the two signal channels. Good for CW but not very useful otherwise. You may switch this signal off here.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_TXRX_SWITCH_AUDIO_MUTE, NULL, "TX Initial Muting Time", UiMenuDesc("When switching from RX to TX the audio and HF output will be muted for roughly VALUE ms. There are now several minimum times for muting defined in the firmware:<br/><br/> Input from Mic: 40ms<br/> Input from Line In: 40ms<br/> Digital Inputs (CW, USB): less than 1ms.<br/><br/> If the user defined 'TX Initial Muting Time' is set to more than zero, the maximum of both fixed input time and user defined time is used. Your microphone PTT switch is a potential source of noise if Mic is input! You need to increase the delay or change switches!") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_MAX_VOLUME, NULL, "Max Volume", UiMenuDesc("Set maximum speaker&headphone volume.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_MAX_RX_GAIN, NULL, "Max RX Gain (0=Max)", UiMenuDesc("Here you can set maximum gain for RX. A good choice is 3...5. If set to 0 RX is too sensitive in most working conditions.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_LINEOUT_GAIN, NULL, "Lineout Gain", UiMenuDesc("Set the constant gain level for the analog lineout jack") },
|
||||
|
||||
// UI Behavior / Key Beep
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_BEEP_FREQ, NULL, "Key Beep Frequency", UiMenuDesc("Set key beep frequency in Hz.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_BEEP_VOLUME, NULL, "Key Beep Volume", UiMenuDesc("Set key beep volume.") },
|
||||
|
||||
// USB CAT Related
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_CAT_IN_SANDBOX, NULL, "CAT Running In Sandbox", UiMenuDesc("If On, frequency Changes made via CAT will not automatically switch bands and affect the manually selected frequencies.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_CAT_XLAT, NULL, "CAT-DIQ-FREQ-XLAT", UiMenuDesc("Select which frequency is reported via CAT Interface to the connected PC in Digital IQ Mode. If ON, it reports the displayed frequency. If OFF, it reports the center frequency, which is more useful with SDR programs.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_CAT_PTT_RTS, NULL, "PTT via virtual RTS", UiMenuDesc("The virtual serial port signal RTS can be used to switch to TX. Use with care, many CAT-able programs also set RTS to aktiv and make the TRX go to TX mode.") },
|
||||
|
||||
// Transverter Configuration
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_XVTR_OFFSET_MULT, NULL, "XVTR Offs/Mult", UiMenuDesc("When connecting to a transverter, set this to 1 and set the XVERTER Offset to the LO Frequency of it. The mcHF frequency is multiplied by this factor before the offset is added, so anything but 1 will result in each Hz in the mcHF being displayed as 2 to 10 Hz change on display.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_XVTR_FREQUENCY_OFFSET, NULL, "XVTR Offset", UiMenuDesc("When transverter mode is enabled, this value is added to the mcHF frequency after being multiplied with the XVTR Offs/Mult. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_XVTR_FREQUENCY_OFFSET, NULL, "XVTR Offs. RX", UiMenuDesc("When transverter mode is enabled, this value is added to the mcHF frequency after being multiplied with the XVTR Offs/Mult. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_XVTR_OFFSET_MULT, NULL, "XVTR Offs/Mult", UiMenuDesc("When connecting to a transverter, set this to 1 and set the XVERTER Offset to the LO Frequency of it. The mcHF frequency is multiplied by this factor before the offset is added, so anything but 1 will result in each Hz in the mcHF being displayed as 2 to 10 Hz change on display.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_XVTR_FREQUENCY_OFFSET_TX, NULL, "XVTR Offs. TX", UiMenuDesc("When transverter mode is enabled, this value is added to the displayed mcHF TX frequency after being multiplied with the XVTR Offs/Mult. Setting it to 0 uses RX offset for TX. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz") },
|
||||
|
||||
// Button Handling Setup
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_STEP_SIZE_BUTTON_SWAP, NULL, "Step Button Swap", UiMenuDesc("If ON, Step- behaves like Step+ and vice versa.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_BAND_BUTTON_SWAP, NULL, "Band+/- Button Swap", UiMenuDesc("If ON, Band- behaves like Band+ and vice versa.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_BANDCH_JUMP_SWAP, NULL, "Band+/- BndCh/Jump Swap", UiMenuDesc("If ON, LongAction of Band+/- is band change, ShortAction is jump by freq on panorama width.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_ENC1_REVERSE, NULL, "Encoder 1 Reverse", UiMenuDesc("If ON, encoder 1 are reversed.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_ENC2_REVERSE, NULL, "Encoder 2 Reverse", UiMenuDesc("If ON, encoder 2 are reversed.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_ENC3_REVERSE, NULL, "Encoder 3 Reverse", UiMenuDesc("If ON, encoder 3 are reversed.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_ENC4_REVERSE, NULL, "Encoder 4 Reverse", UiMenuDesc("If ON, encoder 4 are reversed.") },
|
||||
|
||||
// // RTC Setup and Settings
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_START, &ts.vbat_present,"RTC Start", UiMenuDesc("Start using the RTC and use the modified button layout. Will reboot your mcHF. Please use only if you completed the RTC mod otherwise you will need to disconnect battery and power and reboot to get a working mcHF. This menu is only visible if Backup RAM (VBat) was detected.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_HOUR, &ts.rtc_present,"RTC Hour", UiMenuDesc("Sets the Real Time Clock Hour. Needs HW Modifications.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_MIN, &ts.rtc_present,"RTC Min", UiMenuDesc("Sets the Real Time Clock Minutes. Needs HW Modifications.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_SEC, &ts.rtc_present,"RTC Seconds", UiMenuDesc("Sets the Real Time Clock Seconds. Needs HW Modifications.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_RESET, &ts.vbat_present,"RTC Reset", UiMenuDesc("Full Reset of STM32 RTC. Can be used to simulate first start with RTC mod completed") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RTC_CALIB, &ts.rtc_present,"RTC Calibration", UiMenuDesc("Sets the Real Time Clock Frequency calibration value in ppm. 1s/day deviation equals 11.57 ppm deviation") },
|
||||
|
||||
// mcHF Setup Calibration (Initial Setup, never to be changed unless HW changes)
|
||||
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_VOLTMETER_CALIBRATION, NULL, "Voltmeter Cal.", UiMenuDesc("Adjusts the displayed value of the voltmeter.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_LOW_POWER_THRESHOLD, NULL, "Low Voltage Threshold", UiMenuDesc("Voltage threshold for voltage warning colors and auto shutdown.") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_LOW_POWER_SHUTDOWN, NULL, "Low Voltage Shutdown", UiMenuDesc("Shutdown automatically when supply voltage is below threshold for 60 seconds (only in RX).") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_FREQUENCY_CALIBRATE, NULL, "Freq. Calibrate", UiMenuDesc("Adjust the frequency correction of the local oscillator. Measure TX frequency and adjust until both match. Or use receive a know reference signal and zero-beat it and then adjust. More information in the Wiki.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_FWD_REV_PWR_DISP, NULL, "Pwr. Display mW", UiMenuDesc("Shows the forward and reverse power values in mW, can be used to calibrate the SWR meter.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_RF_FWD_PWR_NULL, NULL, "Pwr. Det. Null", UiMenuDesc(" Set the forward and reverse power sensors ADC zero power offset. This setting is enabled ONLY when Disp. Pwr (mW), is enabled. Needs SWR meter hardware modification to work. See Wiki Adjustment and Calibration.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_FWD_REV_SENSE_SWAP, NULL, "SWR/PWR Meter FWD/REV Swap", UiMenuDesc("Exchange the assignment of the Power/SWR FWD and REV measurement ADC. Use if your power meter does not show anything during TX.") },
|
||||
|
||||
#ifdef STM32F4
|
||||
// Not supported on STM32F7 HAL
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_I2C1_SPEED, NULL,"I2C1 Bus Speed", UiMenuDesc("Sets speed of the I2C1 bus (Si570 oscillator and MCP9801 temperature sensor). Higher speeds provide quicker RX/TX switching but may also cause tuning issues (red digits). Be careful with speeds above 200 kHz.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_I2C2_SPEED, NULL,"I2C2 Bus Speed", UiMenuDesc("Sets speed of the I2C2 bus (Audio Codec and I2C EEPROM). Higher speeds provide quicker RX/TX switching, configuration save and power off. Speeds above 200 kHz are not recommended for unmodified mcHF. Many modified mcHF seem to run with 300kHz without problems.") },
|
||||
#endif
|
||||
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_IQ_AUTO_CORRECTION, NULL, "RX IQ Auto Correction", UiMenuDesc("Receive IQ phase and amplitude imbalance can be automatically adjusted by the mcHF. Switch ON/OFF here. If OFF, it takes the following menu values for compensating the imbalance. The automatic algorithm achieves up to 60dB mirror rejection. See Wiki Adjustments and Calibration.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_80M_RX_IQ_GAIN_BAL, &ts.display_rx_iq, "RX IQ Balance (80m)", UiMenuDesc("IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_80M_RX_IQ_PHASE_BAL, &ts.display_rx_iq, "RX IQ Phase (80m)", UiMenuDesc("IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_10M_RX_IQ_GAIN_BAL, &ts.display_rx_iq, "RX IQ Balance (10m)", UiMenuDesc("IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_10M_RX_IQ_PHASE_BAL, &ts.display_rx_iq, "RX IQ Phase (10m)", UiMenuDesc("IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_80M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (80m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_80M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (80m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (20m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (20m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (15m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (15m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (10m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (10m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (10mUp)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (10mUp)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_80M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (80m,CW)", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_80M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (80m,CW)", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (20m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (20m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (15m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (15m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (10m,CW)", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (10m,CW)", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (10mUp,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (10mUp,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_AM_RX_GAIN_BAL,"244","AM RX IQ Bal.", UiMenuDesc(":soon:") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_AM_RX_PHASE_BAL,"244b","AM RX IQ Phase", UiMenuDesc(":soon:") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_FM_RX_GAIN_BAL,"245","FM RX IQ Bal.", UiMenuDesc(":soon:") },
|
||||
//{ MENU_CONF, MENU_ITEM, CONFIG_AM_TX_GAIN_BAL,"254","AM TX IQ Bal.", UiMenuDesc(":soon:") },
|
||||
//{ MENU_CONF, MENU_ITEM, CONFIG_FM_TX_GAIN_BAL,"255","FM TX IQ Bal.", UiMenuDesc(":soon:") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_NOISE_BLANKER_SETTING, NULL, "RX NB Setting", UiMenuDesc("Set the Noise Blanker strength. Higher values mean more agressive blanking. Also changeable using Encoder 2 if Noise Blanker is active.") },
|
||||
// { MENU_CONF, MENU_ITEM, MENU_DSP_NR_STRENGTH, NULL, "DSP NR Strength", UiMenuDesc("Set the Noise Reduction Strength. Higher values mean more agressive noise reduction but also higher CPU load. Use with extreme care. Also changeable using Encoder 2 if DSP is active.") }, // via knob
|
||||
|
||||
#ifdef OBSOLETE_NR
|
||||
// DSP Configuration, probably never touched
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NR_DECORRELATOR_BUFFER_LENGTH, NULL, "DSP NR BufLen", UiMenuDesc("DSP LMS noise reduction: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NR_FFT_NUMTAPS, NULL, "DSP NR FIR NumTaps", UiMenuDesc("DSP LMS noise reduction: Number of taps in the DSP noise reduction FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_DSP_NR_POST_AGC_SELECT, NULL, "DSP NR Post-AGC", UiMenuDesc("DSP LMS noise reduction: Perform the DSP LMS noise reduction BEFORE or AFTER the AGC. NO = before AGC, YES = after AGC.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_CONVERGE_RATE, NULL, "DSP Notch ConvRate", UiMenuDesc("DSP LMS automatic notch filter: ") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH, NULL, "DSP Notch BufLen", UiMenuDesc("DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_FFT_NUMTAPS, NULL, "DSP Notch FIRNumTap", UiMenuDesc("DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_AGC_TIME_CONSTANT, NULL, "NB AGC T/C (<=Slow)", UiMenuDesc("Noise Blanker AGC time constant adjustment: Lower values are equivalent with slower Noise blanker AGC. While the menu is displayed, the noise blanker is switched OFF, so in order to test the effect of adjusting this parameter, leave the menu.") },
|
||||
#endif
|
||||
#ifdef USE_LMS_AUTONOTCH
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_CONVERGE_RATE, NULL, "DSP Notch ConvRate", UiMenuDesc("DSP LMS automatic notch filter: ") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH, NULL, "DSP Notch BufLen", UiMenuDesc("DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources.") },
|
||||
{ MENU_CONF, MENU_ITEM, CONFIG_DSP_NOTCH_FFT_NUMTAPS, NULL, "DSP Notch FIRNumTap", UiMenuDesc("DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF.") },
|
||||
#endif
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_GAIN_SHOW, NULL,"NR Show gains", UiMenuDesc("Debugging: show gains of spectral noise reduction") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DSP_NR_STRENGTH, NULL, "NR Strength", UiMenuDesc("Set the Noise Reduction Strength. Higher values mean more agressive noise reduction but also higher CPU load. Use with extreme care. Also changeable using Encoder 2 if DSP is active.") }, // via knob
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_BETA, NULL,"NR beta", UiMenuDesc("time constant beta for spectral noise reduction, leave at 0.85") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_ASNR, NULL,"NR asnr", UiMenuDesc("Devel 2 NR: asnr") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_WIDTH, NULL,"NR smooth wd.", UiMenuDesc("Devel 2 NR: width of gain smoothing window") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_THRESHOLD, NULL,"NR smooth thr.", UiMenuDesc("Devel 2 NR: threhold for gain smoothing") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_NR_POST_AGC_SELECT, NULL, "ANR after AGC", UiMenuDesc("DSP LMS noise reduction: Perform the DSP LMS noise reduction BEFORE or AFTER the AGC. NO = before AGC, YES = after AGC.") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_ANR_TAPS, NULL,"ANR num taps", UiMenuDesc("Number of taps of leaky LMS noise reduction") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_ANR_DELAY, NULL,"ANR corr. delay", UiMenuDesc("Delay length of leaky LMS noise reduction") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_ANR_GAIN, NULL,"ANR gain", UiMenuDesc("Gain of leaky LMS noise reduction") },
|
||||
{ MENU_CONF, MENU_ITEM, MENU_DEBUG_ANR_LEAK, NULL,"ANR leak", UiMenuDesc("Leak of leaky LMS noise reduction") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_SAM_PLL_TAUR, NULL, "SAM PLL tauR", UiMenuDesc(":soon:") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_SAM_PLL_TAUI, NULL, "SAM PLL tauI", UiMenuDesc(":soon:") },
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_SAM_SIDEBAND, NULL, "SAM Sideband", UiMenuDesc(":soon:") },
|
||||
|
||||
// // Reset I2C Config EEPROM to empty state
|
||||
// { MENU_CONF, MENU_ITEM, CONFIG_RESET_SER_EEPROM, NULL, "Rst Conf EEPROM", UiMenuDesc("Clear the EEPROM so that at next start all stored configuration data is reset to the values stored in Flash (see Backup/Restore).") },
|
||||
|
||||
{ MENU_CONF, MENU_STOP, 0, NULL , NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor displayGroup[] =
|
||||
{
|
||||
#ifndef SDR_AMBER_480_320
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_WIDE_SPEC_DEF, NULL, "320x240 Def.Wide Spectrum", UiMenuDesc("Wide mode of spectrum on screen 320x240 is default.") },
|
||||
# endif
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_LCD_AUTO_OFF_MODE, NULL, "LCD Auto Blank", UiMenuDesc("After x seconds LCD turns dark and LCD data sections stop. So power consumption is decreased and RX hum is decreased, too. LCD operation starts when using any button or the touchscreen.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_CW_DECODER_SNAP_ENABLE, NULL,"Show Tune Helper", UiMenuDesc("graphical tune helper: adjust frequency until yellow vertical line is in centre of green box --> right on CW carrier frequency") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_FREQ_STEP_MARKER_LINE, NULL, "Step Size Marker", UiMenuDesc("If enabled, you'll see a line under the digit which is currently representing the selected tuning step size") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_NO_SHOW_BNDMEM, NULL, "Don't Show BndMem", UiMenuDesc("Don't show BndMemory.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_CLEAR_PAN_ON_TX, NULL, "Clear Panoram on TX", UiMenuDesc("Clear panoram on TX/TUNE") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_DISP_FILTER_BANDWIDTH, NULL, "Filter BW Display", UiMenuDesc("Colour of the horizontal Filter Bandwidth indicator bar.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SPECTRUM_SIZE, NULL, "Spectrum Size", UiMenuDesc("Change height of spectrum display") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SPECTRUM_FILTER_STRENGTH, NULL, "Spectrum Filter", UiMenuDesc("Lowpass filter for the spectrum FFT. Low values: fast and nervous spectrum; High values: slow and calm spectrum.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SPECTRUM_FREQSCALE_COLOUR, NULL, "Spec FreqScale Colour", UiMenuDesc("Colour of the small frequency digits under the spectrum display.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SPECTRUM_CENTER_LINE_COLOUR, NULL, "TX Carrier Colour", UiMenuDesc("Colour of the vertical line indicating the TX carrier frequency in the spectrum or waterdall display.") },
|
||||
// { MENU_DISPLAY, MENU_ITEM, CONFIG_SPECTRUM_FFT_WINDOW_TYPE, NULL, "Spectrum FFT Wind.", UiMenuDesc("Selects the window algorithm for the spectrum FFT. For low spectral leakage, Hann, Hamming or Blackman window is recommended.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_LIGHT_ENABLE, NULL, "Scope Light", UiMenuDesc("The scope uses bars (NORMAL) or points (LIGHT) to represent data. LIGHT is a little less resource intensive.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_SPEED, NULL, "Scope 1/Speed", UiMenuDesc("Lower Values: Higher refresh rate. Set to 0 to disable scope.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_AGC_ADJUST, NULL, "Scope AGC Adj.", UiMenuDesc("Adjusting of scope / waterfall AGC for fitting graphs to screen") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_TRACE_COLOUR, NULL, "Scope Trace Colour", UiMenuDesc("Set colour of scope") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_TRACE_HL_COLOUR, NULL, "Scope BW Trace Colour", UiMenuDesc("Set colour of highlighted BW scope") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_BACKGROUND_HL_COLOUR, NULL, "Scope BW BCKgr Colour", UiMenuDesc("Set colour of highlighted BW background") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_GRID_COLOUR, NULL, "Scope Grid Colour", UiMenuDesc("Set colour of scope grid") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_DB_DIVISION, NULL, "Scope Div.", UiMenuDesc("Set rf range for scope") },
|
||||
// { MENU_DISPLAY, MENU_ITEM, MENU_SCOPE_NOSIG_ADJUST, NULL, "Scope NoSig Adj.", UiMenuDesc("Set scope line corresponding to NO SIGNAL") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_WFALL_SPEED, NULL, "Wfall 1/Speed", UiMenuDesc("Lower Values: Higher refresh rate. Set to 0 to disable waterfall.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_WFALL_COLOR_SCHEME, NULL, "Wfall Colours", UiMenuDesc("Select colour scheme for waterfall display.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_WFALL_STEP_SIZE, NULL, "Wfall Step Size", UiMenuDesc("How many lines are moved in a single screen update") },
|
||||
// { MENU_DISPLAY, MENU_ITEM, MENU_WFALL_OFFSET, NULL, "Wfall Brightness", UiMenuDesc("Set to input level which waterfall uses for lowest level") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_WFALL_CONTRAST, NULL, "Wfall Contrast", UiMenuDesc("Adjust to fit your personal input level range to displayable colour range for waterfall") },
|
||||
// { MENU_DISPLAY, MENU_ITEM, MENU_WFALL_NOSIG_ADJUST, NULL, "Wfall NoSig Adj.", UiMenuDesc("Set NO SIGNAL state for waterfall") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_METER_COLOUR_UP, NULL, "Upper Meter Colour", UiMenuDesc("Set the colour of the scale of combined S/Power-Meter") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_METER_COLOUR_DOWN, NULL, "Lower Meter Colour", UiMenuDesc("Set the colour of the scale of combined SWR/AUD/ALC-Meter") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_BOX_COLOUR, NULL, "Boxes Colour", UiMenuDesc("Screen boxes colour") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_TXTLINE_COLOUR, NULL, "Ticker Colour", UiMenuDesc("Ticker colour") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_DBM_DISPLAY, NULL, "dBm display", UiMenuDesc("RX signal power (measured within the filter bandwidth) can be displayed in dBm or normalized as dBm/Hz. This value is supposed to be quite accurate to +-3dB. Preferably use low spectrum display magnify settings. Accuracy is lower for very very weak and very very strong signals.")},
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_DBM_CALIBRATE, NULL, "dBm calibrate", UiMenuDesc("dBm display calibration. Just an offset (in dB) that is added to the internally calculated dBm or dBm/Hz value.")},
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_SMETER_ATTACK, NULL, "S-Meter Attack", UiMenuDesc("Attack controls how quickly the S-Meter reacts to rising signal levels, higher values represent quicker reaction") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_SMETER_DECAY, NULL, "S-Meter Decay", UiMenuDesc("Decay controls how quickly the S-Meter reacts to falling signal levels, higher values represent quicker reaction") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_PEAK_IND_TUNE, NULL, "Peak Ind. Timer, ms", UiMenuDesc("Tune/OFF S/PWR meter peak indicator") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_SMETER_AM_NOT_LO, NULL, "S-Meter NotLO in AM", UiMenuDesc("Don't calculate LO in AM mode") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_TCXO_MODE, NULL, "TCXO Off/On/Stop", UiMenuDesc("The software TCXO can be turned ON (set frequency is adjusted so that generated frequency matches the wanted frequency); OFF (no correction or measurement done); or STOP (no correction but measurement).") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_TCXO_C_F, &lo.sensor_present, "TCXO Temp. (C/F)", UiMenuDesc("Show the measure TCXO temperature in Celsius or Fahrenheit.") },
|
||||
// RTC Setup and Settings
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_START, &ts.vbat_present,"RTC Start", UiMenuDesc("Start using the RTC and use the modified button layout. Will reboot your mcHF. Please use only if you completed the RTC mod otherwise you will need to disconnect battery and power and reboot to get a working mcHF. This menu is only visible if Backup RAM (VBat) was detected.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_HOUR, &ts.rtc_present,"RTC Hour", UiMenuDesc("Sets the Real Time Clock Hour. Needs HW Modifications.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_MIN, &ts.rtc_present,"RTC Min", UiMenuDesc("Sets the Real Time Clock Minutes. Needs HW Modifications.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_SEC, &ts.rtc_present,"RTC Seconds", UiMenuDesc("Sets the Real Time Clock Seconds. Needs HW Modifications.") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_RESET, &ts.vbat_present,"RTC Reset", UiMenuDesc("Full Reset of STM32 RTC. Can be used to simulate first start with RTC mod completed") },
|
||||
{ MENU_DISPLAY, MENU_ITEM, CONFIG_RTC_CALIB, &ts.rtc_present,"RTC Calibration", UiMenuDesc("Sets the Real Time Clock Frequency calibration value in ppm. 1s/day deviation equals 11.57 ppm deviation") },
|
||||
#ifdef USE_8bit_FONT
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_FREQ_FONT, NULL, "Freq display font", UiMenuDesc("Font selection for frequency display. Allows selection of old/modern fonts")},
|
||||
#endif
|
||||
{ MENU_DISPLAY, MENU_ITEM, MENU_UI_INVERSE_SCROLLING, NULL, "Menu Inverse Scrolling", UiMenuDesc("Inverts Enc2/Enc3 behavior in menu up/down and show/hide UI scrolling actions, used for side-mounted encoder dials.")},
|
||||
{ MENU_DISPLAY, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor cwGroup[] =
|
||||
{
|
||||
// { MENU_CW, MENU_ITEM, MENU_CW_WIDE_FILT,"028","Wide Filt in CW Mode", UiMenuDesc(":soon:") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_KEYER_MODE, NULL, "CW Keyer Mode", UiMenuDesc("Select how the mcHF interprets the connected keyer signals. Supported modes: Iambic A and B Keyer (IAM A/B), Straight Key (STR_K), and Ultimatic Keyer (ULTIM)") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_KEYER_SPEED, NULL, "CW Keyer Speed", UiMenuDesc("Keyer Speed for the automatic keyer modes in WpM. Also changeable via Encoder 3 if in CW Mode.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_KEYER_WEIGHT, NULL, "CW Keyer Weight", UiMenuDesc("Keyer Dit/Pause ratio for the automatic keyer modes. Higher values increase length of dit, decreases length of pause so that the total time is still according to the set WpM value.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_SMOOTH, NULL, "CW Sign.Eg.Smooth, ms", UiMenuDesc("Smooth of CW signal edges.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_SIDETONE_GAIN, NULL, "CW Sidetone Gain", UiMenuDesc("Audio volume for the monitor sidetone in CW TX. Also changeable via Encoder 1 if in CW Mode.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_SIDETONE_FREQUENCY, NULL, "CW Side/Offset Freq", UiMenuDesc("Sidetone Frequency (also Offset frequency, see CW Freq. Offset below)") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_PADDLE_REVERSE, NULL, "CW Paddle Reverse", UiMenuDesc("Dit is Dah and Dah is Dit. Use if your keyer needs reverse meaning of the paddles.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_TX_RX_DELAY, NULL, "CW TX->RX Delay", UiMenuDesc("How long to stay in CW TX mode after stop sending a signal.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_OFFSET_MODE, NULL, "CW Freq. Offset", UiMenuDesc("TX: display is TX frequency if received frequency was zero-beated. DISP: display is RX frequency if received signal is matched to sidetone. SHIFT: LO shifts, display is RX frequency if signal is matched to sidetone.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_AUTO_MODE_SELECT, NULL, "CW LSB/USB Select", UiMenuDesc("Set appropriate sideband mode for CW. If AUTO, sideband is chosen for bands by its frequency. A long press on Mode button gets the other sideband mode")},
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER, NULL,"CW decoder enable", UiMenuDesc("enable experimental CW decoding") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_THRESH, NULL,"Signal threshold", UiMenuDesc("All signals above this threshold are intepreted as a dit or daah") },
|
||||
// { MENU_CW, MENU_ITEM, MENU_CW_DECODER_SNAP_ENABLE, NULL,"Tune helper", UiMenuDesc("graphical tune helper: adjust frequency until yellow vertical line is in centre of green box --> right on CW carrier frequency") },
|
||||
// { MENU_CW, MENU_ITEM, MENU_CW_DECODER_AVERAGE, NULL,"Goertzel averager", UiMenuDesc("The CW tone is averaged over N Goertzel values") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_BLOCKSIZE, NULL,"Blocksize for Goertzel", UiMenuDesc("How many samples are taken for the signal detection with the Goertzel algorithm?") },
|
||||
// { MENU_CW, MENU_ITEM, MENU_CW_DECODER_AGC, NULL,"AGC for decoder", UiMenuDesc("Enable/disable AGC for CW decoder") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_NOISECANCEL, NULL,"Noise cancel", UiMenuDesc("Enable/disable noise canceler for CW decoder") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_SPIKECANCEL, NULL,"Spike cancel", UiMenuDesc("Enable/disable spike canceler or short cancel for CW decoder") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_USE_3_GOERTZEL, NULL,"AGC for decoder", UiMenuDesc("Enable/disable AGC for CW decoder") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_DECODER_SHOW_CW_LED, NULL,"Show CW LED", UiMenuDesc("Enable/disable LED for CW decoder") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_MACRO_INTERVAL, NULL,"CW MacroCycledInterv, sec.", UiMenuDesc("CW Macros Cycled TX interval, sec.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_BEACON_INTERVAL, NULL,"CW Beacon Interval, min.", UiMenuDesc("CW Beacon interval, min.") },
|
||||
{ MENU_CW, MENU_ITEM, MENU_CW_FAST_MACRO_1_2, NULL,"CW Fast Macro 1,2", UiMenuDesc("Enable/disable fast TXing CW macro 1 and 2") },
|
||||
{ MENU_CW, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor filterGroup[] =
|
||||
{
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_SSB_01, NULL, "SSB Filter 1", UiMenuDesc("Filter bandwidth #1 when toggling with filter select button in LSB or USB.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_SSB_02, NULL, "SSB Filter 2", UiMenuDesc("Filter bandwidth #2 when toggling with filter select button in LSB or USB.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_SSB_03, NULL, "SSB Filter 3", UiMenuDesc("Filter bandwidth #3 when toggling with filter select button in LSB or USB.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_SSB_04, NULL, "SSB Filter 4", UiMenuDesc("Filter bandwidth #4 when toggling with filter select button in LSB or USB.") },
|
||||
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_CW_01, NULL, "CW Filter 1", UiMenuDesc("Filter bandwidth #1 when toggling with filter select button in CW.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_CW_02, NULL, "CW Filter 2", UiMenuDesc("Filter bandwidth #2 when toggling with filter select button in CW.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_CW_03, NULL, "CW Filter 3", UiMenuDesc("Filter bandwidth #3 when toggling with filter select button in CW.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_CW_04, NULL, "CW Filter 4", UiMenuDesc("Filter bandwidth #4 when toggling with filter select button in CW.") },
|
||||
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_AM_01, NULL, "AM/SAM Filter 1", UiMenuDesc("Filter bandwidth #1 when toggling with filter select button in AM & SAM.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_AM_02, NULL, "AM/SAM Filter 2", UiMenuDesc("Filter bandwidth #2 when toggling with filter select button in AM & SAM.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_AM_03, NULL, "AM/SAM Filter 3", UiMenuDesc("Filter bandwidth #3 when toggling with filter select button in AM & SAM.") },
|
||||
{ MENU_FILTER, MENU_ITEM, MENU_FP_AM_04, NULL, "AM/SAM Filter 4", UiMenuDesc("Filter bandwidth #4 when toggling with filter select button in AM & SAM.") },
|
||||
|
||||
// not needed any more: AM & SAM use exactly the same filters
|
||||
// { MENU_FILTER, MENU_ITEM, MENU_FP_SAM_01,"600", "SAM Filter 1", UiMenuDesc(":soon:") },
|
||||
// { MENU_FILTER, MENU_ITEM, MENU_FP_SAM_02,"600", "SAM Filter 2", UiMenuDesc(":soon:") },
|
||||
// { MENU_FILTER, MENU_ITEM, MENU_FP_SAM_03,"600", "SAM Filter 3", UiMenuDesc(":soon:") },
|
||||
// { MENU_FILTER, MENU_ITEM, MENU_FP_SAM_04,"600", "SAM Filter 4", UiMenuDesc(":soon:") },
|
||||
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_AM_TX_FILTER_DISABLE, NULL,"AM TX Audio Filter", UiMenuDesc("Select if AM-TX signal is filtered (strongly recommended to agree to regulations)") },
|
||||
// { MENU_FILTER, MENU_ITEM, CONFIG_SSB_TX_FILTER_DISABLE, NULL,"SSB TX Audio Filter", UiMenuDesc(":soon:") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_SSB_TX_FILTER, NULL,"SSB TX Audio Filter2", UiMenuDesc("Select if SSB-TX signal is filtered (strongly recommended to agree to regulations)") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_REVERB_GAIN, NULL,"TX Reverb gain", UiMenuDesc("TX reverberation gain, OFF - disabled") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_REVERB_DELAY, NULL,"TX Reverb delay", UiMenuDesc("TX reverberation delay") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_EQ0, NULL,"TX EQ 175 Hz", UiMenuDesc("Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_EQ1, NULL,"TX EQ 350 Hz", UiMenuDesc("Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_EQ2, NULL,"TX EQ 700 Hz", UiMenuDesc("Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_EQ3, NULL,"TX EQ 1.4 kHz", UiMenuDesc("Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.") },
|
||||
{ MENU_FILTER, MENU_ITEM, CONFIG_TX_EQ4, NULL,"TX EQ 2.8 kHz", UiMenuDesc("Equalizer band level adjustment -20 ... + 20 dB, 0 - no adjustment.") },
|
||||
{ MENU_FILTER, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor powGroup[] =
|
||||
{
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_TX_DISABLE, NULL, "Transmit Disable", UiMenuDesc("Disable all transmissions unconditionally. In CW you will be able to hear a sidetone but no transmission is made.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_VSWR_PROTECTION_THRESHOLD, NULL, "VSWR Protect.threshold", UiMenuDesc("If not OFF, on TX/tune the bias of PA will be down to 0 etc when exceeding the specified value of VSWR") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_MIC_TYPE, NULL, "Mic Type", UiMenuDesc("Microphone type. Electret or Dynamic. ELECTRET is recommended. Selecting DYNAMIC when an Electret mic is present will likely cause terrible audio distortion") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_MIC_GAIN, NULL, "Mic Input Gain", UiMenuDesc("Microphone gain. Also changeable via Encoder 3 if Microphone is selected as Input") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_LINE_GAIN, NULL, "Line Input Gain", UiMenuDesc("LineIn gain. Also changeable via Encoder 3 if LineIn Left (L>L) or LineIn Right (L>R) is selected as Input") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_TX_COMPRESSION_LEVEL, NULL, "TX Audio Compress", UiMenuDesc("Control the TX audio compressor. Higher values give more compression. Set to CUSTOM for user defined compression parameters. See below. Also changeable via Encoder 1 (CMP).") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_ALC_RELEASE, NULL, "TX ALC Release Time", UiMenuDesc("If Audio Compressor Config is set to CUSTOM, sets the value of the Audio Compressor Release time. Otherwise shows predefined value of selected compression level.") },
|
||||
{ MENU_POW, MENU_ITEM, MENU_ALC_POSTFILT_GAIN, NULL, "TX ALC Input Gain", UiMenuDesc("If Audio Compressor Config is set to CUSTOM, sets the value of the ALC Input Gain. Otherwise shows predefined value of selected compression level.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_TUNE_POWER_LEVEL, NULL, "Tune Power Level", UiMenuDesc("Select the power level for TUNE operation. May be set using the selected power level or have a fixed power level.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_TUNE_TONE_MODE, NULL, "Tune Tone (SSB)", UiMenuDesc("Select if single tone or two tone is generated during TUNE operation. Not persistent.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_CW_PA_BIAS, NULL, "CW PA Bias (If >0 )", UiMenuDesc("If set to a value above 0, this BIAS is used during CW transmission; otherwise normal BIAS is used during CW") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_REDUCE_POWER_ON_LOW_BANDS, NULL, "Reduce Power on Low Bands", UiMenuDesc("If set (recommended!) frequencies below 8Mhz (40m or lower) require higher power adjust values (four times). This permits better control of generated power on these frequencies.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_REDUCE_POWER_ON_HIGH_BANDS, NULL, "Reduce Power on High Bands", UiMenuDesc("If set frequencies above 8Mhz (30m or higher) require higher power adjust values (four times). This permits better control of generated power on these frequencies.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_PA_BIAS, NULL, "PA Bias", UiMenuDesc("Defines the BIAS value of the PA. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_2200M_5W_ADJUST,&band_enabled[BAND_MODE_2200],"2200m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_630M_5W_ADJUST,&band_enabled[BAND_MODE_630],"630m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_5W_ADJUST, NULL, "160m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_5W_ADJUST, NULL, "80m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_60M_5W_ADJUST, NULL, "60m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_5W_ADJUST, NULL, "40m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_5W_ADJUST, NULL, "30m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_5W_ADJUST, NULL, "20m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_5W_ADJUST, NULL, "17m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_5W_ADJUST, NULL, "15m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_5W_ADJUST, NULL, "12m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_5W_ADJUST, NULL, "10m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_5W_ADJUST,&band_enabled[BAND_MODE_6],"6m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_4M_5W_ADJUST,&band_enabled[BAND_MODE_4],"4m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_2M_5W_ADJUST,&band_enabled[BAND_MODE_2],"2m 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_70CM_5W_ADJUST,&band_enabled[BAND_MODE_70],"70cm 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_23CM_5W_ADJUST,&band_enabled[BAND_MODE_23],"23cm 5W PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_2200M_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_2200],"2200m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_630M_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_630],"630m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_FULL_POWER_ADJUST, NULL, "160m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_FULL_POWER_ADJUST, NULL, "80m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_60M_FULL_POWER_ADJUST, NULL, "60m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_FULL_POWER_ADJUST, NULL, "40m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_FULL_POWER_ADJUST, NULL, "30m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_FULL_POWER_ADJUST, NULL, "20m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_FULL_POWER_ADJUST, NULL, "17m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_FULL_POWER_ADJUST, NULL, "15m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_FULL_POWER_ADJUST, NULL, "12m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_FULL_POWER_ADJUST, NULL, "10m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_6],"6m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_4M_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_4],"4m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_2M_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_2],"2m Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_70CM_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_70],"70cm Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_23CM_FULL_POWER_ADJUST,&band_enabled[BAND_MODE_23],"23cm Full PWR Adjust", UiMenuDesc("Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_2200M_ADJ,&band_enabled[BAND_MODE_2200],"2200m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 2200m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_630M_ADJ,&band_enabled[BAND_MODE_630],"630m Coupling Adj.", UiMenuDesc("Power Adjustment factor for the 630m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_160M_ADJ, NULL, "160m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 160m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_80M_ADJ, NULL, "80m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 80m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_40M_ADJ, NULL, "40m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 40m and 60m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_20M_ADJ, NULL, "20m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 20m and 30m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_15M_ADJ, NULL, "15m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 15m - 12m bands power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_10M_ADJ, NULL, "10m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 10m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_6M_ADJ,&band_enabled[BAND_MODE_6], "6m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 6m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_2M_ADJ,&band_enabled[BAND_MODE_2], "2m Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 2m band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_70CM_ADJ,&band_enabled[BAND_MODE_70], "70cm Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 70cm band power values. See Wiki.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_FWD_REV_COUPLING_23CM_ADJ,&band_enabled[BAND_MODE_23], "23cm Coupling Adj.", UiMenuDesc("Power Meter Adjustment factor for the 23cm band power values. See Wiki.") },
|
||||
// { MENU_POW, MENU_ITEM, CONFIG_80M_RX_IQ_GAIN_BAL, &ts.display_rx_iq, "RX IQ Balance (80m)", UiMenuDesc("IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_POW, MENU_ITEM, CONFIG_80M_RX_IQ_PHASE_BAL, &ts.display_rx_iq, "RX IQ Phase (80m)", UiMenuDesc("IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_POW, MENU_ITEM, CONFIG_10M_RX_IQ_GAIN_BAL, &ts.display_rx_iq, "RX IQ Balance (10m)", UiMenuDesc("IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration.") },
|
||||
// { MENU_POW, MENU_ITEM, CONFIG_10M_RX_IQ_PHASE_BAL, &ts.display_rx_iq, "RX IQ Phase (10m)", UiMenuDesc("IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable. See Wiki Adjustments and Calibration.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (160m)*", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 1.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (160m)*", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 1.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (80m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 3.600 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (80m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 3.600 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (40m)*", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 7.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (40m)*", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 7.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (30m)*", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 10.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (30m)*", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 10.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (20m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (20m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (17m)*", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 18.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (17m)*", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 18.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (15m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (15m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (12m)*", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 24.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (12m)*", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 24.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (10m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 28.100 MHz..") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (10m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 28.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (10mUp)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (10mUp)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (6m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 52.000 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (6m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 52.000 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (160m,CW)*", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 1.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_160M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (160m,CW)*", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 1.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (80m,CW)", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 3.600 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_80M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (80m,CW)", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 3.600 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (40m,CW)*", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 7.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_40M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (40m,CW)*", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 7.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (30m,CW)*", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 10.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_30M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (30m,CW)*", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 10.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (20m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (20m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (17m,CW)*", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 18.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_17M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (17m,CW)*", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 18.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (15m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (15m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (12m,CW)*", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 24.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_12M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (12m,CW)*", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 24.900 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (10m,CW)", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 28.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (10m,CW)", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 28.100 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (10mUp,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (10mUp,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (6m,CW)", UiMenuDesc("IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 52.000 MHz.") },
|
||||
{ MENU_POW, MENU_ITEM, CONFIG_6M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (6m,CW)", UiMenuDesc("IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF). Calibrate on 52.000 MHz.") },
|
||||
|
||||
{ MENU_POW, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor men2touchGroup[] =
|
||||
{
|
||||
#ifdef SDR_AMBER
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_INPUT_STATE, NULL, "RX Input State", UiMenuDesc("Amber - State of RX input group.") },
|
||||
#endif
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_DYNAMICTUNE, NULL, "Dynamic Tune", UiMenuDesc("Toggles dynamic tune mode") },
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_MIC_LINE_MODE, NULL, "Mic/Line Select", UiMenuDesc("Select the required signal input for transmit (except in CW). Also changeable via long press on M3") },
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_SPECTRUM_MODE, NULL, "Spectrum Type", UiMenuDesc("Select if you want a scope-like or a waterfall-like (actually a fountain) display") },
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_SPECTRUM_MAGNIFY, NULL, "Spectrum Magnify", UiMenuDesc("Select level of magnification (1x, 2x, 4x, 8x, 16x, 32x) of spectrum and waterfall display. Also changeable via touch screen. Refresh rate is much slower with high magnification settings. The dBm display has its maximum accuracy in magnify 1x setting.") },
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_RESTART_CODEC, NULL, "Restart Codec", UiMenuDesc("Sometimes there is a problem with the I2S IQ signal stream from the Codec, resulting in mirrored signal reception. Restarting the CODEC Stream will cure that problem. Try more than once, if first call did not help.") },
|
||||
{ MENU_MEN2TOUCH, MENU_ITEM, MENU_DIGITAL_MODE_SELECT, NULL, "Digital Mode", UiMenuDesc("Select the active digital mode (FreeDV,RTTY, ...).") },
|
||||
{ MENU_MEN2TOUCH, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor infoGroup[] =
|
||||
{
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_DISPLAY, NULL,"Display", UiMenuDesc("Displays working mode (SPI/parallel") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_DISPLAY_CTRL, NULL,"Disp. Controller", UiMenuDesc("identified LCD controller chip") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_OSC_NAME, NULL,"Oscillator", UiMenuDesc("Local oscillator type") },
|
||||
#ifdef USE_OSC_SI570
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_SI570, NULL,"SI570", UiMenuDesc("Startup frequency and I2C address of local oscillator Type SI570") },
|
||||
#endif
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_EEPROM, NULL,"EEPROM", UiMenuDesc("type of serial EEPROM and its capacity") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_TP, NULL,"Touchscreen", UiMenuDesc("touchscreen state") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_CPU, NULL,"CPU", UiMenuDesc("identification of fitted MCU") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_FLASH, NULL,"Flash Size (kB)", UiMenuDesc("flash size of MCU") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_RAM, NULL,"RAM Size (kB)", UiMenuDesc("RAM size of MCU") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_FW_VERSION, NULL,"Firmware", UiMenuDesc("firmware version") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_BUILD, NULL,"Build", UiMenuDesc("firmware: timestamp of building") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_BL_VERSION, NULL,"Bootloader", UiMenuDesc("bootloader version") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_RFBOARD, NULL,"RF Board", UiMenuDesc("Displays the detected RF Board hardware identification.") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_CODEC, NULL,"Audio Codec Presence", UiMenuDesc("Audio Codec I2C communication successfully tested? This is not a full test of the Audio Codec functionality, it only reports if I2C communication reported no problem talking to the codec.") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_CODEC_TWINPEAKS, NULL,"Audio Codec Twinpeaks Corr.", UiMenuDesc("In some cases the audio codec needs to be restarted to produce correct IQ. The IQ auto correction detects this. If this fixes the problem, Done is displayed, Failed otherwise") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_VBAT, NULL,"Backup RAM Battery", UiMenuDesc("Battery Support for Backup RAM present?") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_RTC, NULL,"Real Time Clock", UiMenuDesc("Battery Supported Real Time Clock present?") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_LO_TX_SUPR_DACs, NULL,"LO_TX Supression DACs", UiMenuDesc("LO_TX Supression DACs (0/1) are present?") },
|
||||
#ifdef SDR_AMBER
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_AMBER_IO8, NULL,"Amber-I/Ox8", UiMenuDesc("Amber - I/Ox8 PCF8574A is present?") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_AMBER_IO4, NULL,"Amber-I/Ox4", UiMenuDesc("Amber - I/Ox4 PCA9536 is present?") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_AMBER_DAC_PWR_TX, NULL,"Amber-DAC_TX_PWR", UiMenuDesc("Amber - DAC MCP4725 for TX PWR reg. is present?") },
|
||||
#endif
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_LICENCE, NULL,"FW license", UiMenuDesc("Display license of firmware") },
|
||||
{ MENU_SYSINFO, MENU_INFO, INFO_HWLICENCE, NULL,"HW license", UiMenuDesc("Display license of hardware") },
|
||||
|
||||
{ MENU_SYSINFO, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor debugGroup[] =
|
||||
{
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ENABLE_INFO, NULL,"Enable Debug Info Display", UiMenuDesc("Enable debug outputs on LCD for testing purposes (touch screen coordinates, load) and audio interrupt duration indication via green led") },
|
||||
{ MENU_DEBUG, MENU_ITEM, CONFIG_FWD_REV_PWR_DISP, NULL, "Pwr. F/R Display (mW)", UiMenuDesc("Shows the forward and reverse power values in mW, can be used to calibrate the SWR meter.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CW_OFFSET_SHIFT_KEEP_SIGNAL, NULL,"CW Shift Keeps Signal", UiMenuDesc("Enable automatic sidetone correction for CW OFFSET MODE = SHIFT. If you tuned in SSB to a CW signal around the sidetone frequency, you'll keep that signal when going to CW. Even if you switch from USB to CW-LSB etc.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_TX_AUDIO, NULL,"TX Audio via USB", UiMenuDesc("If enabled, send generated audio to PC during TX.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CLONEOUT, NULL,"FT817 Clone Transmit", UiMenuDesc("Will in future send out memory data to an FT817 Clone Info (to be used with CHIRP).") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CLONEIN, NULL,"FT817 Clone Receive", UiMenuDesc("Will in future get memory data from an FT817 Clone Info (to be used with CHIRP).") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NEW_NB, NULL,"New Noiseblanker", UiMenuDesc("New noiseblanker for testing purposes") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_ENABLE, NULL,"Spectral NR", UiMenuDesc("enable spectral noise reduction for testing purposes") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_LONG_TONE_ENABLE, NULL,"Long tone", UiMenuDesc("enable long tone detection in spectral noise reduction for testing purposes") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_GAIN_SHOW, NULL,"Show gains", UiMenuDesc("Debugging: show gains of spectral noise reduction") },
|
||||
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_LONG_TONE_ALPHA, NULL,"Long tone alpha", UiMenuDesc("time constant alpha for long tone detection in spectral noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_LONG_TONE_THRESH, NULL,"Long tone thresh", UiMenuDesc("threshold for long tone detection in spectral noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_ENABLE, NULL,"SNR gain smooth", UiMenuDesc("enable bin gain smoothing for spectral noise reduction for testing purposes") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_ALPHA, NULL,"SNR gain smooth alpha", UiMenuDesc("alpha = smoothing constant for spectral noise reduction for testing purposes") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_ALPHA, NULL,"NR alpha", UiMenuDesc("time constant alpha for spectral noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_THRESH, NULL,"NR thresh", UiMenuDesc("threshold for spectral noise reduction voice activity detector") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_VAD_TYPE, NULL,"NR VAD type", UiMenuDesc("VAD type for spectral noise reduction voice activity detector") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_VAD_DELAY, NULL,"NR VAD delay", UiMenuDesc("delay for spectral noise reduction voice activity detector") },
|
||||
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_BETA, NULL,"NR beta", UiMenuDesc("time constant beta for spectral noise reduction, leave at 0.85") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_Mode, NULL,"NR Mode", UiMenuDesc("switch between the released NR and two development NRs") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_ASNR, NULL,"NR asnr", UiMenuDesc("Devel 2 NR: asnr") },
|
||||
//#if defined(STM32F7) || defined(STM32H7)
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_FFT_SIZE, NULL,"NR FFT Size256", UiMenuDesc("enable FFT256 instead of FFT128 for devel2 NR") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_DEC_ENABLE, NULL,"NR decimation", UiMenuDesc("enable decimation-by-2 down to 6ksps for NR") },
|
||||
//#endif
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_WIDTH, NULL,"NR smooth wd.", UiMenuDesc("Devel 2 NR: width of gain smoothing window") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_GAIN_SMOOTH_THRESHOLD, NULL,"NR smooth thr.", UiMenuDesc("Devel 2 NR: threhold for gain smoothing") },
|
||||
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_RTTY_ATC, NULL,"RTTY ATC Enable", UiMenuDesc("Enable automatic threshold correction ATC for RTTY decoding") },
|
||||
#ifdef USE_TWO_CHANNEL_AUDIO
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ENABLE_STEREO, NULL,"STEREO Enable", UiMenuDesc("Enable stereo demodulation modes") },
|
||||
#endif
|
||||
#ifdef USE_LEAKY_LMS
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_LEAKY_LMS, NULL,"ANR(LeakyLMS) Enable", UiMenuDesc("Use leaky LMS noise reduction instead of built-in CMSIS LMS algorithm") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_NR_POST_AGC_SELECT, NULL, "ANR after AGC", UiMenuDesc("DSP LMS noise reduction: Perform the DSP LMS noise reduction BEFORE or AFTER the AGC. NO = before AGC, YES = after AGC.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ANR_TAPS, NULL,"ANR num taps", UiMenuDesc("Number of taps of leaky LMS noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ANR_DELAY, NULL,"ANR corr. delay", UiMenuDesc("Delay length of leaky LMS noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ANR_GAIN, NULL,"ANR gain", UiMenuDesc("Gain of leaky LMS noise reduction") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ANR_LEAK, NULL,"ANR leak", UiMenuDesc("Leak of leaky LMS noise reduction") },
|
||||
#endif
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_OSC_SI5351_PLLRESET, NULL,"Si5351a PLL Reset", UiMenuDesc("Debug Setting: Select when the Si5351a does a PLL RESET") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_COARSE, &hmc1023.present,"HMC1023 Coarse", UiMenuDesc("Debug Setting: Change LPF HMC1023LP5E coarse bandwidth") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_FINE, &hmc1023.present,"HMC1023 Fine", UiMenuDesc("Debug Setting: Change LPF HMC1023LP5E fine bandwidth") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_GAIN, &hmc1023.present,"HMC1023 Gain 10db", UiMenuDesc("Debug Setting: Switch LPF HMC1023LP5E +10db Amp on/off") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_BYPASS, &hmc1023.present,"HMC1023 Bypass", UiMenuDesc("Debug Setting: Set HMC1023 to bypass mode") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_OPAMP, &hmc1023.present,"HMC1023 Opamp Bias", UiMenuDesc("Debug Setting: Switch LPF HMC1023LP5E Opamp Bias") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_HMC1023_DRVR, &hmc1023.present,"HMC1023 Driver Bias", UiMenuDesc("Debug Setting: Set HMC1023 Driver Bias") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_TWINPEAKS_CORR_RUN, NULL,"Trigger Twinpeaks Corr.", UiMenuDesc("Trigger Twinpeaks Correction Manually if IQ Auto Correction is enabled, otherwise you will see 'Not Possible'") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (20m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (20m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (15m)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (15m)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL, NULL, "TX IQ Balance (10mUp)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL, NULL, "TX IQ Phase (10mUp)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (20m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (20m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (15m,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (15m,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF, NULL, "TX IQ Balance (10mUp,CW)", UiMenuDesc("IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF, NULL, "TX IQ Phase (10mUp,CW)", UiMenuDesc("IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_VSWR_PROTECTION_THRESHOLD, NULL, "VSWR Protect.threshold", UiMenuDesc("If not OFF, on TX/tune the bias of PA will be down to 0 etc when exceeding the specified value of VSWR") },
|
||||
// { MENU_DEBUG, MENU_ITEM, CONFIG_RESET_SER_EEPROM_SIGNATURE, NULL, "Rst Conf EEPROM", UiMenuDesc("Clear the EEPROMi signature but keep all config values. This is mainly for debugging purposes).") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_FREEDV_MODE, NULL, "FreeDV Mode", UiMenuDesc("Change active FreeDV mode. Please note, you have to reboot to activate new mode") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_FREEDV_SQL_THRESHOLD, NULL, "FreeDV Squelch threshold", UiMenuDesc("If not OFF, FreeDV will squelch if detected SNR is below set value.") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BANDEF_SELECT, NULL, "Band Definition", UiMenuDesc("Select which band definition to use for ham bands (Original UHSDR or IARU Region 1 - 3") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_27MC_TX_ENABLE, NULL, "CB 27Mc TX Enable(max4W)", UiMenuDesc("Enable transmitting (4W) on CB band 27 MHz (AM, FM, SSB).") },
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_26MC_TX_ENABLE, NULL, "CB 26Mc TX Enable(max4W)", UiMenuDesc("Enable transmitting (4W) on CB band 26 MHz (AM, FM, SSB).") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_27MC_TX_ENABLE, NULL, "CB 27Mc TX Enable(max4W)", UiMenuDesc("Enable transmitting (4W) on CB band 27 MHz (AM, FM, SSB, CW).") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_26MC_TX_ENABLE, NULL, "CB 26Mc TX Enable(max4W)", UiMenuDesc("Enable transmitting (4W) on CB band 26 MHz (AM, FM, SSB, CW).") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_12W_SSB_TX_ENABLE, NULL, "CB 12W SSB TX Enable", UiMenuDesc("Enable transmitting 12W SSB on CB bands, where TX is open.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CB_10W_TX_ENABLE, NULL, "CB 10W TX Enable", UiMenuDesc("Enable transmitting 10W for any mode on CB bands, where TX is open.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CAL_LO_TX_SUPR_0, NULL, "Cal.LO_TX Supression C0", UiMenuDesc("Calibration of LO_TX Supression on every band via balancing of TX mixer, channel 0") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CAL_LO_TX_SUPR_1, NULL, "Cal.LO_TX Supression C1", UiMenuDesc("Calibration of LO_TX Supression on every band via balancing of TX mixer, channel 1") },
|
||||
#ifdef SDR_AMBER
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_SHOW_GREETING, NULL, "Show FS Greeting", UiMenuDesc("Not for users.") },
|
||||
#endif
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_SMOOTH_DYN_TUNE, NULL, "Smooth dynamic tune", UiMenuDesc("Activate smooth dynamic tune.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CLEAN_TX_CW_RTTY_BPSK, NULL, "Clear TX CW,RTTY,BPSK", UiMenuDesc("Forming CW/RTTY/BPSK signal at intermediate frequency for clean TX.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_MEM_BW_MOD_BAND, NULL, "Remember BWs on bands", UiMenuDesc("Remember the filter settings of each mode in each range for the duration of the session.") },
|
||||
#ifdef SDR_AMBER
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ILLUM_BUTT, NULL, "Illum. of buttons", UiMenuDesc("Illumination of buttons.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BPF_OPTION, NULL, "RF - Amber BPF Option", UiMenuDesc("3 extra BPF instead of 2 on Amber-RF board.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_XVTR_OFF_PA, NULL, "XVTR - OFF PA", UiMenuDesc("Transverter mode - blocking PA on TX. The optional 'XVTR TX' SMA connector must be soldered and connected with coaxial cable to the output of the amplifier before PA driver ('XVTR_TX' contacts).") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BANDCODE, NULL, "Ext. PA Bandcode", UiMenuDesc("PA bandcode variant, if not OFF.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ALT_PWR_CTRL, NULL, "TX_PREAMP_DAC Option", UiMenuDesc("Alternative POWER lewel control ON/OFF") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_ALT_PWR_CTRL_VOL, NULL, "TX_PREAMP_DAC Vol.", UiMenuDesc("Alternative POWER lewel control - DAC volume in points, 0-4096 (0-5V).") },
|
||||
#endif
|
||||
// { MENU_DEBUG, MENU_ITEM, MENU_DEBUG_WIDE_SPEC_DEF, NULL, "Wide Spectrum Default", UiMenuDesc("Wide mode of spectrum on screen 320x240 is default.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_DISABLE_TP, NULL, "Disable touchscreen", UiMenuDesc("Disable touchscreen actions.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_FMENUS_SEL, NULL, "Choice of F-menu", UiMenuDesc("Type of F-menus selection.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_IMPROV_IQ_ADJ, NULL, "Improved I/Q Adj.", UiMenuDesc("Improved I/Q adjusting. Added 160, 40, 30, 17, 12m.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BEEP_GEN, NULL, "Beep GEN", UiMenuDesc("Activate beep (as button beep set) when the band border is crossed.") },
|
||||
#ifdef SDR_AMBER_4INCH
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_F6_IND_SEL, NULL, "F6 Ind.", UiMenuDesc("Amber 4'' - Indication of F6 button.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_F7_IND_SEL, NULL, "F7 Ind.", UiMenuDesc("Amber 4'' - Indication of F7 button.") },
|
||||
#endif
|
||||
//Menu Contest
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CONTEST, NULL, "CONTEST Y/N", UiMenuDesc("Line Contest activation on WaterFall.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_CQCOLOR, NULL, "COLOR CQ", UiMenuDesc("Contest Color.") },
|
||||
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_160M, NULL, "Band OFF -160m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_80M, NULL, "Band OFF - 80m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_60M, NULL, "Band OFF - 60m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_40M, NULL, "Band OFF - 40m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_30M, NULL, "Band OFF - 30m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_20M, NULL, "Band OFF - 20m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_17M, NULL, "Band OFF - 17m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_15M, NULL, "Band OFF - 15m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_12M, NULL, "Band OFF - 12m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_10M, NULL, "Band OFF - 10m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_BAND_OFF_6M, NULL, "Band OFF - 6m", UiMenuDesc("Remove this band from switching queue.") },
|
||||
{ MENU_DEBUG, MENU_ITEM, MENU_DEBUG_REDUCE_POWER_ON_LOW_BANDS_MORE, NULL, "ReducePWR_MoreOnLowBands", UiMenuDesc("Reduce power x20 (instead of x4) for F < 8 MHz.") },
|
||||
{ MENU_DEBUG, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
const MenuDescriptor hall_of_fameGroup[] =
|
||||
{
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"M0NKA (Chris) mcHF founder", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"KA7OEI (Clint) 1st great FW", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"DF8OE (Andreas)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"DL4SAI (Harald)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"DB4PLE (Danilo)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"DD4WH (Frank)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"DL2FW (Michael)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"HB9OCQ (Stephan)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL," (Asbjorn)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"YL3AKE (Eriks)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"PA7N (Erwin)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"UA9OLB (Dmitri)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"S53DZ (Bojan)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"SP9BSL (Slawek)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"HB9GND (Dimce)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"MM0MZW (Mike)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"UB8JDC (Yuri)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"RV9YW (Max)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"M0LNG (Martin)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"KB3CS (Chris)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_TEXT, 0, NULL,"F4IYT (Xav)", UiMenuDesc("") },
|
||||
{ MENU_HALL_OF_FAME, MENU_STOP, 0, NULL, NULL, UiMenuDesc("") }
|
||||
};
|
||||
|
||||
|
||||
MenuGroupState topGroupState;
|
||||
MenuGroupState baseGroupState;
|
||||
MenuGroupState confGroupState;
|
||||
MenuGroupState displayGroupState;
|
||||
MenuGroupState cwGroupState;
|
||||
MenuGroupState filterGroupState;
|
||||
MenuGroupState powGroupState;
|
||||
MenuGroupState men2touchState;
|
||||
MenuGroupState infoGroupState;
|
||||
MenuGroupState debugGroupState;
|
||||
MenuGroupState hall_of_fameGroupState;
|
||||
|
||||
|
||||
const MenuGroupDescriptor groups[] =
|
||||
{
|
||||
{ topGroup, &topGroupState, NULL}, // Group 0
|
||||
{ baseGroup, &baseGroupState, topGroup}, // Group 1
|
||||
{ confGroup, &confGroupState, topGroup}, // Group 2
|
||||
{ displayGroup, &displayGroupState, topGroup }, // Group 3
|
||||
{ cwGroup, &cwGroupState, topGroup }, // Group 4
|
||||
{ filterGroup, &filterGroupState, topGroup }, // Group 5
|
||||
{ powGroup, &powGroupState, topGroup }, // Group 6
|
||||
{ men2touchGroup, &men2touchState, topGroup }, // Group 7
|
||||
{ infoGroup, &infoGroupState, topGroup }, // Group 8
|
||||
{ debugGroup, &debugGroupState, topGroup }, // Group 9
|
||||
{ hall_of_fameGroup, &hall_of_fameGroupState, topGroup }, // Group 10
|
||||
};
|
||||
Reference in New Issue
Block a user