Modify marker menu created adn ADF4351 core added

tinySA
erikkaashoek 6 years ago
parent feb6f5e81a
commit aa6c062341

@ -56,6 +56,7 @@
#define GPIOA_XP 6
#define GPIOA_YP 7
#define GPIOA_MCO 8
#define GPIOA_TX 9
#define GPIOA_USB_DISC 10
#define GPIOA_USB_DM 11
#define GPIOA_USB_DP 12
@ -116,16 +117,23 @@
* PA13 - SWDIO (alternate 0).
* PA14 - SWCLK (alternate 0).
*/
#define __ULTRA_SA__
#ifdef __ULTRA_SA__
#define PIN_MOD_ULTRA(X) PIN_MODE_OUTPUT(X)
#else
#define PIN_MOD_ULTRA(X) PIN_MODE_INPUT(X)
#endif
#define VAL_GPIOA_MODER (PIN_MODE_OUTPUT(GPIOA_PE_SEL) | \
PIN_MODE_INPUT(1U) | \
PIN_MODE_INPUT(2U) | \
PIN_MODE_INPUT(3U) | \
PIN_MOD_ULTRA(1U) | \
PIN_MOD_ULTRA(2U) | \
PIN_MOD_ULTRA(3U) | \
PIN_MODE_OUTPUT(GPIOA_RX_SEL) | \
PIN_MODE_OUTPUT(GPIOA_LO_SEL) | \
PIN_MODE_ANALOG(GPIOA_XP) | \
PIN_MODE_ANALOG(GPIOA_YP) | \
PIN_MODE_ALTERNATE(GPIOA_MCO) | \
PIN_MODE_INPUT(9U) | \
PIN_MOD_ULTRA(9U) | \
PIN_MODE_OUTPUT(GPIOA_USB_DISC) | \
PIN_MODE_INPUT(GPIOA_USB_DM) | \
PIN_MODE_INPUT(GPIOA_USB_DP) | \
@ -149,9 +157,9 @@
PIN_OTYPE_PUSHPULL(GPIOA_JTCK) | \
PIN_OTYPE_PUSHPULL(GPIOA_LCD_RESET))
#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_100M(GPIOA_PE_SEL) | \
PIN_OSPEED_2M(1) | \
PIN_OSPEED_2M(2) | \
PIN_OSPEED_2M(3) | \
PIN_OSPEED_100M(1) | \
PIN_OSPEED_100M(2) | \
PIN_OSPEED_100M(3) | \
PIN_OSPEED_100M(4) | \
PIN_OSPEED_100M(5) | \
PIN_OSPEED_2M(6) | \

@ -2716,6 +2716,8 @@ int main(void)
#endif
ADF4351_Setup();
/*
* SPI LCD Initialize
*/

@ -31,6 +31,7 @@
#define __SELFTEST__
#define __CALIBRATE__
//#define __ULTRA__
#define __ULTRA_SA__
/*
* main.c
@ -329,7 +330,7 @@ float groupdelay_from_array(int i, float array[POINTS_COUNT][2]);
#endif
// marker
enum {
M_NORMAL=0,M_REFERENCE=1, M_DELTA=2, M_NOISE=4, M_TRACKING=8 // Tracking must be last.
M_NORMAL=0,M_REFERENCE=1, M_DELTA=2, M_NOISE=4, M_TRACKING=8, M_DELETE=16 // Tracking must be last.
};
enum {

@ -32,8 +32,9 @@ int setting_tracking_output;
int setting_measurement;
int vbwSteps = 1;
#ifdef __ULTRA__
int setting_spur = 0;
#endif
float minFreq = 0;
float maxFreq = 520000000;
@ -69,7 +70,9 @@ void reset_settings(int m)
trace[TRACE_TEMP].enabled = false;
setting_measurement = M_OFF;
#ifdef __ULTRA__
setting_spur = 0;
#endif
switch(m) {
case M_LOW:
minFreq = 0;
@ -352,12 +355,13 @@ int GetActualRBW(void)
return((int) actual_rbw);
}
#ifdef __ULTRA
void SetSpur(int v)
{
setting_spur = v;
dirty = true;
}
#endif
void SetStepDelay(int d)
{
@ -847,8 +851,11 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
if (MODE_HIGH(setting_mode))
local_IF = 0;
else
local_IF = frequency_IF + (int)(actual_rbw < 300.0?setting_spur * 1000 * actual_rbw:0);
// local_IF = frequency_IF;
local_IF = frequency_IF
#ifdef __ULTRA__
+ (int)(actual_rbw < 300.0?setting_spur * 1000 * actual_rbw:0)
#endif
;
if (i == 0 && dirty) {
apply_settings();
@ -961,7 +968,9 @@ static bool sweep(bool break_on_operation)
temppeakLevel = -150;
float temp_min_level = 100;
// spur_old_stepdelay = 0;
#ifdef __ULTRA__
again:
#endif
for (int i = 0; i < sweep_points; i++) {
RSSI = perform(break_on_operation, i, frequencies[i], setting_tracking);
@ -973,12 +982,14 @@ again:
}
if (MODE_INPUT(setting_mode)) {
if (setting_spur == 1) { // First pass
#ifdef __ULTRA__
if (setting_spur == 1) { // First pass
temp_t[i] = RSSI;
continue; // Skip all other processing
}
if (setting_spur == -1) // Second pass
RSSI = ( RSSI < temp_t[i] ? RSSI : temp_t[i]); // Minimum of two passes
#endif
temp_t[i] = RSSI;
if (setting_subtract_stored) {
RSSI = RSSI - stored_t[i] ;
@ -1066,12 +1077,13 @@ again:
temp_min_level = actual_t[i];
}
#ifdef __ULTRA__
if (setting_spur == 1) {
setting_spur = -1;
goto again;
} else if (setting_spur == -1)
setting_spur = 1;
#endif
if (scandirty) {
scandirty = false;
draw_cal_status();
@ -1378,7 +1390,7 @@ void draw_cal_status(void)
buf[5]=0;
ili9341_drawstring(buf, x, y);
}
#if 1
#ifdef __ULTRA__
if (setting_spur) {
ili9341_set_foreground(BRIGHT_COLOR_BLUE);
y += YSTEP*2;
@ -1426,7 +1438,11 @@ void draw_cal_status(void)
ili9341_drawstring("Scan:", x, y);
y += YSTEP;
int32_t t = (int)((2* vbwSteps * sweep_points * ( actualStepDelay / 100) )) /10 * (setting_spur ? 2 : 1); // in mS
int32_t t = (int)((2* vbwSteps * sweep_points * ( actualStepDelay / 100) )) /10
#ifdef __ULTRA__
* (setting_spur ? 2 : 1)
#endif
; // in mS
if (t>1000)
plot_printf(buf, BLEN, "%dS",(t+500)/1000);
else

@ -19,7 +19,7 @@
#include "ch.h"
#include "hal.h"
#include "nanovna.h"
#include <math.h>
#include "si4432.h"
#define CS_SI0_HIGH palSetPad(GPIOA, GPIOA_RX_SEL)
@ -502,4 +502,364 @@ float Simulated_SI4432_RSSI(uint32_t i, int s)
return(v);
}
#endif
//------------------------------- ADF4351 -------------------------------------
#ifdef __ULTRA_SA__
#define bitClear(X,n) (X) ^= ((uint32_t)0xfffffffe) << (n)
#define bitSet(X,n) (X) |= ((uint32_t)1) << (n)
#define bitWrite(X,n,v) if (v) bitSet(X,n); else bitClear(X,n)
#define CS_ADF0_HIGH palSetPad(GPIOA, 9)
#define CS_ADF1_HIGH palSetPad(GPIOA, 10)
#define CS_ADF0_LOW palClearPad(GPIOA, 9)
#define CS_ADF1_LOW palClearPad(GPIOA, 10)
#define SPI3_CLK_HIGH palSetPad(GPIOA, 1)
#define SPI3_CLK_LOW palClearPad(GPIOA, 1)
#define SPI3_SDI_HIGH palSetPad(GPIOA, 2)
#define SPI3_SDI_LOW palClearPad(GPIOA, 2)
void ADF_shiftOut(uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
if (val & (1 << (7 - i)))
SPI3_SDI_HIGH;
else
SPI3_SDI_LOW;
chThdSleepMicroseconds(1);
SPI3_CLK_HIGH;
SPI3_CLK_LOW;
}
}
//unsigned long registers[6] = {0x4580A8, 0x80080C9, 0x4E42, 0x4B3, 0xBC803C, 0x580005} ;
//unsigned long registers[6] = {0x4C82C8, 0x80083E9, 0x6E42, 0x8004B3, 0x8C81FC, 0x580005} ;
unsigned long registers[6] = {0x320000, 0x8008011, 0x18004E42, 0x4B3,0x8C803C , 0x00580005} ;
int debug = 0;
int ADF4351_LE[2] = { 9, 10};
int ADF4351_Mux = 7;
//#define DEBUG(X) // Serial.print( X )
//#define DEBUGLN(X) Serial.println( X )
//#define DEBUGFLN(X,Y) Serial.println( X,Y )
//#define DEBUGF(X,Y) Serial.print( X,Y )
#define DEBUG(X)
#define DEBUGLN(X)
double RFout, //Output freq in MHz
#if 1 //Black modules
PFDRFout[6] = {25.0,25.0,25.0,10.0,10.0,10.0}, //Reference freq in MHz
Chrystal[6] = {25.0,25.0,25.0,10.0,10.0,10.0},
#else // Green modules
PFDRFout[6] = {10.0,10.0,10.0,10.0,10.0,10.0}, //Reference freq in MHz
Chrystal[6] = {10.0,10.0,10.0,10.0,10.0,10.0},
#endif
OutputChannelSpacing = 0.010, // = 0.01
FRACF; // Temp
unsigned int long RFint, // Output freq/10Hz
INTA, // Temp
RFcalc, //UI
MOD, //Temp
FRAC; //Temp
byte OutputDivider; // Temp
byte lock=2; //Not used
// Lock = A4
void ADF4351_Setup()
{
// palSetPadMode(GPIOA, 1, PAL_MODE_OUTPUT_PUSHPULL );
// palSetPadMode(GPIOA, 2, PAL_MODE_OUTPUT_PUSHPULL );
SPI3_CLK_HIGH;
SPI3_SDI_HIGH;
CS_ADF0_HIGH;
CS_ADF1_HIGH;
// bitSet (registers[2], 17); // R set to 8
// bitClear (registers[2], 14); // R set to 8
ADF4351_R_counter(1);
ADF4351_level(3);
ADF4351_channel_spacing(10);
while(1) {
//
ADF4351_set_frequency(1,100000000,0);
// ADF4351_set_frequency(1,150000000,0);
// ADF4351_Set(0);
// ADF4351_Set(1);
chThdSleepMilliseconds(1000);
}
// bitSet (registers[2], 17); // R set to 8
// bitClear (registers[2], 14); // R set to 8
// for (int i=0; i<6; i++) pinMode(ADF4351_LE[i], OUTPUT); // Setup pins
// for (int i=0; i<6; i++) digitalWrite(ADF4351_LE[i], HIGH);
// pinMode(ADF4351_Mux, INPUT);
// SPI.begin(); // Init SPI bus
// SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
//SPI.setDataMode(SPI_MODE0); // CPHA = 0 Clock positive
//SPI.setBitOrder(MSBFIRST);
}
void ADF4351_WriteRegister32(int channel, const uint32_t value)
{
palClearPad(GPIOA, ADF4351_LE[channel]);
// chThdSleepMicroseconds(SELECT_DELAY);
for (int i = 3; i >= 0; i--) ADF_shiftOut((value >> 8 * i) & 0xFF);
palSetPad(GPIOA, ADF4351_LE[channel]);
// chThdSleepMicroseconds(SELECT_DELAY);
palClearPad(GPIOA, ADF4351_LE[channel]);
// chThdSleepMicroseconds(SELECT_DELAY);
}
void ADF4351_disable_output()
{
bitClear (registers[4], 5); // digital lock
ADF4351_Set(0);
}
void ADF4351_enable_output()
{
bitSet (registers[4], 5); // digital lock
ADF4351_Set(0);
}
void ADF4351_Set(int channel)
{ for (int i = 5; i >= 0; i--) {
ADF4351_WriteRegister32(channel, registers[i]);
// if (debug) Serial.println(registers[i],HEX);
}
}
void ADF4351_set_frequency(int channel, unsigned long freq, int drive) // freq / 10Hz
{
ADF4351_prep_frequency(channel,freq, drive);
ADF4351_Set(channel);
}
void ADF4351_spur_mode(int S)
{
if (S & 1)
bitSet (registers[2], 29); // R set to 8
else
bitClear (registers[2], 29); // R set to 8
if (S & 2)
bitSet (registers[2], 30); // R set to 8
else
bitClear (registers[2], 30); // R set to 8
}
void ADF4351_R_counter(int R)
{
int dbl = false;
if (R < 0) {
dbl = true;
R = -R;
}
if (R<1)
return;
if (dbl) {
bitSet (registers[2], 25); // Reference doubler
} else {
bitClear (registers[2], 25); // Reference doubler
}
for (int channel=0; channel < 6; channel++) {
PFDRFout[channel] = Chrystal[channel] * (dbl?2:1) / R;
}
registers[2] &= ~ (((unsigned long)0x3FF) << 14);
registers[2] |= (((unsigned long)R) << 14);
}
void ADF4351_CP(int p)
{
registers[2] &= ~ (((unsigned long)0xF) << 9);
registers[2] |= (((unsigned long)p) << 9);
}
void ADF4351_level(int p)
{
registers[4] &= ~ (((unsigned long)0x3) << 3);
registers[4] |= (((unsigned long)p) << 3);
}
void ADF4351_channel_spacing(int spacing)
{
OutputChannelSpacing = 0.001 * spacing;
}
static uint32_t gcd(uint32_t x, uint32_t y)
{
uint32_t z;
while (y != 0) {
z = x % y;
x = y;
y = z;
}
return x;
}
void ADF4351_prep_frequency(int channel, unsigned long freq, int drive) // freq / 10Hz
{
(void)drive;
// if (channel == 0)
RFout=freq/1000000.0; // To MHz
// else
// RFout=freq/1000002.764; // To MHz
if (RFout >= 2200) {
OutputDivider = 1;
bitWrite (registers[4], 22, 0);
bitWrite (registers[4], 21, 0);
bitWrite (registers[4], 20, 0);
} else if (RFout >= 1100) {
OutputDivider = 2;
bitWrite (registers[4], 22, 0);
bitWrite (registers[4], 21, 0);
bitWrite (registers[4], 20, 1);
} else if (RFout >= 550) {
OutputDivider = 4;
bitWrite (registers[4], 22, 0);
bitWrite (registers[4], 21, 1);
bitWrite (registers[4], 20, 0);
} else if (RFout >= 275) {
OutputDivider = 8;
bitWrite (registers[4], 22, 0);
bitWrite (registers[4], 21, 1);
bitWrite (registers[4], 20, 1);
} else if (RFout >= 137.5) {
OutputDivider = 16;
bitWrite (registers[4], 22, 1);
bitWrite (registers[4], 21, 0);
bitWrite (registers[4], 20, 0);
} else if (RFout >= 68.75) {
OutputDivider = 32;
bitWrite (registers[4], 22, 1);
bitWrite (registers[4], 21, 0);
bitWrite (registers[4], 20, 1);
} else {
OutputDivider = 64;
bitWrite (registers[4], 22, 1);
bitWrite (registers[4], 21, 1);
bitWrite (registers[4], 20, 0);
}
INTA = (RFout * OutputDivider) / PFDRFout[channel];
MOD = (PFDRFout[channel] / OutputChannelSpacing) + 0.01;
// MOD = 3125;
FRACF = (((RFout * OutputDivider) / PFDRFout[channel]) - INTA) * MOD;
FRAC = round(FRACF);
while (FRAC > 4095 || MOD > 4095) {
FRAC = FRAC >> 1;
MOD = MOD >> 1;
// Serial.println( "MOD/FRAC reduced");
}
int32_t k = gcd(FRAC, MOD);
if (k > 1) {
FRAC /= k;
MOD /= k;
// Serial.print( "MOD/FRAC gcd reduced");
}
// while (denom >= (1<<20)) {
// num >>= 1;
// denom >>= 1;
// }
// if (INTA <= 75) Serial.println( "INTA <= 75");
// if (FRAC > 4095) Serial.println( "FRAC > 4095");
// if (MOD > 4095) Serial.println( "MOD > 4095");
// if (FRAC > 4095) Serial.println( "FRAC > 4095");
// if (MOD > 4095) Serial.println( "MOD > 4095");
// if (INTA > 4095) Serial.println( "INT > 4095");
if (debug) {
DEBUG(" ODIV=");
DEBUG(OutputDivider);
DEBUG(" INT=");
DEBUG(INTA);
DEBUG(" FRAC=");
DEBUG(FRAC);
DEBUG(" MOD=");
DEBUG(MOD);
DEBUG( " CalF=");
// DEBUGFLN(PFDRFout[channel] *(INTA + ((double)FRAC)/MOD)/OutputDivider,6);
// DEBUG(" FRACF=");
// DEBUGF(FRACF,6);
}
registers[0] = 0;
registers[0] = INTA << 15; // OK
FRAC = FRAC << 3;
registers[0] = registers[0] + FRAC;
//if (MOD == 1) MOD = 2;
registers[1] = 0;
registers[1] = MOD << 3;
registers[1] = registers[1] + 1 ; // restore address "001"
bitSet (registers[1], 27); // Prescaler at 8/9
/*
drive = 1;
if (drive == 0) {
bitClear (registers[4], 3); // +5dBm + out
bitClear (registers[4], 4); // +5dBm
bitClear (registers[4], 6); // +5dBm - out
bitClear (registers[4], 7); // +5dBm
} else if (drive == 1) {
bitSet (registers[4], 6); // +5dBm
bitClear (registers[4], 7); // +5dBm - out
bitSet (registers[4], 3); // +5dBm
bitClear (registers[4], 4); // +5dBm + out
} else if (drive == 2) {
bitClear (registers[4], 6); // +5dBm - out
bitSet (registers[4], 7); // +5dBm
bitClear (registers[4], 3); // +5dBm + out
bitSet (registers[4], 4); // +5dBm
}
else {
bitSet (registers[4], 6); // +5dBm - out
bitSet (registers[4], 7); // +5dBm
bitSet (registers[4], 3); // +5dBm + out
bitSet (registers[4], 4); // +5dBm
}
*/
bitSet (registers[4], 5); // enable + output
bitClear (registers[4], 8); // enable B output
#if 0
if (FRAC == 0)
bitSet (registers[2], 8); // INT mode
else
bitClear (registers[2], 8); // INT mode
bitSet (registers[2], 13); // Double buffered
bitSet (registers[2], 28); // Digital lock == "110" sur b28 b27 b26
bitSet (registers[2], 27); // digital lock
bitClear (registers[2], 26); // digital lock
//bitSet (registers[4], 10); // Mute till lock
bitSet (registers[3], 23); // Fast lock
#endif
bitSet (registers[4], 10); // Mute till lock
// ADF4351_Set(channel);
}
#endif

@ -19,4 +19,26 @@ float SI4432_SET_RBW(float WISH);
void PE4302_Write_Byte(unsigned char DATA );
void PE4302_init(void);
#ifdef __ULTRA_SA__
extern int ADF4351_LE[];
extern int debug;
void ADF4351_Setup(void);
void ADF4351_WriteRegister32(int channel, const uint32_t value);
void ADF4351_set_frequency(int channel, uint32_t freq, int drive_strength);
void ADF4351_prep_frequency(int channel, uint32_t freq, int drive_strength);
//int ADF4351_set_frequency_with_offset(uint32_t freq, int offset, uint8_t drive_strength);
void ADF4351_Set(int channel);
void ADF4351_enable_output(void);
void ADF4351_disable_output(void);
void ADF4351_spur_mode(int S);
void ADF4351_R_counter(int R);
void ADF4351_channel_spacing(int spacing);
void ADF4351_CP(int p);
void ADF4351_level(int p);
int ADF4351_locked(void);
#endif
#endif //__SI4432_H__

17
ui.c

@ -53,7 +53,11 @@ uistat_t uistat = {
#define BIT_DOWN1 1
#define READ_PORT() palReadPort(GPIOA)
#ifdef __ULTRA_SA__
#define BUTTON_MASK 0
#else
#define BUTTON_MASK 0b1110
#endif
static uint16_t last_button = 0b0000;
static uint32_t last_button_down_ticks;
@ -128,7 +132,7 @@ static void choose_active_marker(void);
static void menu_move_back(void);
static void menu_push_submenu(const menuitem_t *submenu);
static const menuitem_t menu_marker_type[];
//static const menuitem_t menu_marker_type[];
static int btn_check(void)
{
@ -1109,7 +1113,7 @@ const menuitem_t menu_top[] = {
#include "ui_sa.c"
#define MENU_STACK_DEPTH_MAX 4
#define MENU_STACK_DEPTH_MAX 5
const menuitem_t *menu_stack[MENU_STACK_DEPTH_MAX] = {
menu_mode, NULL, NULL, NULL
};
@ -1784,7 +1788,7 @@ static void
draw_numeric_area(void)
{
char buf[10];
plot_printf(buf, sizeof buf, "%9d", uistat.value);
plot_printf(buf, sizeof buf, "%9d", ((int32_t)uistat.value));
draw_numeric_input(buf);
}
@ -2497,8 +2501,13 @@ static void extcb1(EXTDriver *extp, expchannel_t channel)
static const EXTConfig extcfg = {
{
{EXT_CH_MODE_DISABLED, NULL},
#ifdef __ULTRA_SA__
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
#else
{EXT_CH_MODE_RISING_EDGE | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOA, extcb1},
{EXT_CH_MODE_RISING_EDGE | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOA, extcb1},
#endif
{EXT_CH_MODE_RISING_EDGE | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOA, extcb1},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
@ -2556,8 +2565,8 @@ ui_init()
/*
* Activates the EXT driver 1.
*/
extStart(&EXTD1, &extcfg);
extStart(&EXTD1, &extcfg);
#if 1
gptStart(&GPTD3, &gpt3cfg);
gptPolledDelay(&GPTD3, 10); /* Small delay.*/

@ -1,6 +1,6 @@
void markmap_all_markers(void);
static void menu_marker_type_cb(int item, uint8_t data);
static void menu_marker_modify_cb(int item, uint8_t data);
extern const menuitem_t menu_marker_modify[];
void set_sweep_frequency(int type, uint32_t frequency);
uint32_t get_sweep_frequency(int type);
void clearDisplay(void);
@ -23,8 +23,10 @@ void SetDrive(int d);
void SetIF(int f);
void SetStepDelay(int t);
extern int setting_rbw;
#ifdef __ULTRA__
extern int setting_spur;
void SetSpur(int v);
#endif
void SetAverage(int);
int GetAverage(void);
extern int setting_average;
@ -620,8 +622,7 @@ static void menu_drive_cb(int item, uint8_t data)
#if 1
#ifdef __ULTRA__
static void menu_spur_cb(int item, uint8_t data)
{
(void)data;
@ -791,12 +792,31 @@ static void menu_average_cb(int item, uint8_t data)
draw_cal_status();
}
static void menu_marker_type_cb(int item, uint8_t data)
static void
menu_marker_select_cb(int item, uint8_t data)
{
(void)data;
// int t;
if (item >= 0 && item < MARKERS_MAX) {
markers[item].enabled = true;
active_marker_select(item);
menu_push_submenu(menu_marker_modify);
redraw_marker(active_marker);
draw_menu();
}
}
static void menu_marker_modify_cb(int item, uint8_t data)
{
(void)item;
if (markers[active_marker].enabled == M_ENABLED)
{
if (data == M_NORMAL) {
if (data == M_DELETE) {
markers[active_marker].enabled = false;
menu_move_back();
// ui_mode_normal();
// return;
} else if (data == M_NORMAL) {
markers[active_marker].mtype = M_NORMAL;
} else if (data == M_REFERENCE) {
for (int i = 0; i<MARKER_COUNT; i++ ) {
@ -821,7 +841,7 @@ static void menu_marker_type_cb(int item, uint8_t data)
}
const int rbwsel[]={0,3,10,30,100,300};
const int rbwsel[]={0,3,10,30,100,300,600};
static void menu_rbw_cb(int item, uint8_t data)
{
@ -999,6 +1019,7 @@ static const menuitem_t menu_rbw[] = {
{ MT_CALLBACK, 3, " 30kHz", menu_rbw_cb},
{ MT_CALLBACK, 4, "100kHz", menu_rbw_cb},
{ MT_CALLBACK, 5, "300kHz", menu_rbw_cb},
{ MT_CALLBACK, 6, "600kHz", menu_rbw_cb},
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
@ -1051,12 +1072,13 @@ static const menuitem_t menu_reflevel[] = {
static const menuitem_t menu_marker_type[] = {
{ MT_CALLBACK, M_REFERENCE, "REFERENCE", menu_marker_type_cb},
{ MT_CALLBACK, M_DELTA, "DELTA", menu_marker_type_cb},
{ MT_CALLBACK, M_NOISE, "NOISE", menu_marker_type_cb},
{ MT_CALLBACK, M_TRACKING, "TRACKING", menu_marker_type_cb},
{ MT_CALLBACK, M_NORMAL, "NORMAL", menu_marker_type_cb},
const menuitem_t menu_marker_modify[] = {
{ MT_CALLBACK, M_REFERENCE, "REFERENCE", menu_marker_modify_cb},
{ MT_CALLBACK, M_DELTA, "DELTA", menu_marker_modify_cb},
{ MT_CALLBACK, M_NOISE, "NOISE", menu_marker_modify_cb},
{ MT_CALLBACK, M_TRACKING, "TRACKING", menu_marker_modify_cb},
{ MT_CALLBACK, M_NORMAL, "NORMAL", menu_marker_modify_cb},
{ MT_CALLBACK, M_DELETE, "DELETE", menu_marker_modify_cb},
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
@ -1085,6 +1107,14 @@ const menuitem_t menu_marker_sel[] = {
{ MT_NONE, 0, NULL, NULL } // sentinel
};
const menuitem_t menu_marker_select[] = {
{ MT_CALLBACK, 1, "MARKER 1", menu_marker_select_cb },
{ MT_CALLBACK, 2, "MARKER 2", menu_marker_select_cb },
{ MT_CALLBACK, 3, "MARKER 3", menu_marker_select_cb },
{ MT_CALLBACK, 4, "MARKER 4", menu_marker_select_cb },
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
#if 0
@ -1113,8 +1143,8 @@ const menuitem_t menu_marker_ops[] = {
static const menuitem_t menu_marker[] = {
{ MT_SUBMENU, 0, "\2SELECT\0MARKERS", menu_marker_sel},
{ MT_SUBMENU, 0, "\2CHANGE\0MARKER", menu_marker_type},
{ MT_SUBMENU, 0, "\2SELECT\0MARKER", menu_marker_sel},
{ MT_SUBMENU, 0, "\2MODIFY\0MARKERS", menu_marker_select},
{ MT_SUBMENU, 0, "\2MARKER\0OPS", menu_marker_ops},
{ MT_SUBMENU, 0, "\2SEARCH\0MARKER", menu_marker_search},
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
@ -1256,7 +1286,9 @@ static const menuitem_t menu_stimulus[] = {
{ MT_KEYPAD, KM_SPAN, "SPAN", NULL},
{ MT_KEYPAD, KM_CW, "\2ZERO\0SPAN", NULL},
{ MT_SUBMENU,0, "RBW", menu_rbw},
#ifdef __ULTRA__
{ MT_CALLBACK,0, "\2SPUR\0REMOVAL", menu_spur_cb},
#endif
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
@ -1393,9 +1425,11 @@ static void menu_item_modify_attribute(
if (item == 5 /* PAUSE */ && !(sweep_mode&SWEEP_ENABLE)) {
mark = true;
}
#ifdef __ULTRA__
if (item == 6 && setting_spur) {
mark = true;
}
#endif
} else if (menu == menu_average) {
if (item == GetAverage()){
mark = true;
@ -1448,7 +1482,7 @@ static void menu_item_modify_attribute(
if (item == 2 && setting_tracking){ // should not happen in high mode
mark = true;
}
} else if (menu == menu_marker_type && active_marker >= 0 && markers[active_marker].enabled == M_ENABLED) {
} else if (menu == menu_marker_modify && active_marker >= 0 && markers[active_marker].enabled == M_ENABLED) {
if (data & markers[active_marker].mtype)
mark = true;
else if (item < 5 && data==markers[active_marker].mtype) // This catches the M_NORMAL case
@ -1460,8 +1494,8 @@ static void menu_item_modify_attribute(
mark = true;
if (item == 4 && markers[active_marker].mtype & M_TRACKING)
mark = true;
} else if (menu == menu_marker_sel) {
if (item < MARKERS_MAX && markers[item].enabled)
} else if (menu == menu_marker_sel || menu == menu_marker_select) {
if (item < 4 && markers[item].enabled)
mark = true;
else if (item == 4 && uistat.marker_delta)
mark = true;
@ -1516,19 +1550,19 @@ static void fetch_numeric_target(void)
break;
case KM_SCALE:
uistat.value = setting_scale;
plot_printf(uistat.text, sizeof uistat.text, "%ddB/", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%ddB/", ((int32_t)uistat.value));
break;
case KM_REFPOS:
uistat.value = setting_reflevel;
plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_ATTENUATION:
uistat.value = GetAttenuation();
plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_ACTUALPOWER:
uistat.value = settingLevelOffset();
plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_IF:
uistat.value = frequency_IF;
@ -1536,23 +1570,23 @@ static void fetch_numeric_target(void)
break;
case KM_SAMPLETIME:
uistat.value = setting_step_delay;
plot_printf(uistat.text, sizeof uistat.text, "%3duS", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%3duS", ((int32_t)uistat.value));
break;
case KM_DRIVE:
uistat.value = setting_drive;
plot_printf(uistat.text, sizeof uistat.text, "%3ddB", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%3ddB", ((int32_t)uistat.value));
break;
case KM_LOWOUTLEVEL:
uistat.value = GetAttenuation(); // compensation for dB offset during low output mode
plot_printf(uistat.text, sizeof uistat.text, "%ddB", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_DECAY:
uistat.value = setting_decay;
plot_printf(uistat.text, sizeof uistat.text, "%3d", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%3d", ((int32_t)uistat.value));
break;
case KM_NOISE:
uistat.value = setting_noise;
plot_printf(uistat.text, sizeof uistat.text, "%3d", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%3d", ((int32_t)uistat.value));
break;
case KM_10MHZ:
uistat.value = setting_10mhz;

Loading…
Cancel
Save

Powered by TurnKey Linux.