diff --git a/ubitx_20/cat_libs.ino b/ubitx_20/cat_libs.ino index 2285d526..3ae0844f 100644 --- a/ubitx_20/cat_libs.ino +++ b/ubitx_20/cat_libs.ino @@ -278,7 +278,19 @@ void WriteEEPRom(void) //for remove warning } else { - EEPROM.write(eepromStartIndex, write1Byte); + //Special Command + if (eepromStartIndex == 13131) //Magic Key + { + if (write1Byte == 0x51) //Restart + { + asm volatile (" jmp 0"); + } + } + else + { + EEPROM.write(eepromStartIndex, write1Byte); + } + Serial.write(0x77); //OK Serial.write(ACK); } diff --git a/ubitx_20/ubitx.h b/ubitx_20/ubitx.h index 20872b8e..734c4d0e 100644 --- a/ubitx_20/ubitx.h +++ b/ubitx_20/ubitx.h @@ -34,7 +34,7 @@ //#define EXTEND_KEY_GROUP2 //Numeric (0~9), Point(.), Enter //Not supported in Version 1.0x #define ENABLE_FACTORYALIGN -#define ENABLE_ADCMONITOR //Starting with Version 1.07, you can read ADC values directly from uBITX Manager. So this function is not necessary. +//#define ENABLE_ADCMONITOR //Starting with Version 1.07, you can read ADC values directly from uBITX Manager. So this function is not necessary. extern byte I2C_LCD_MASTER_ADDRESS; //0x27 //if Set I2C Address by uBITX Manager, read from EEProm extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode @@ -112,17 +112,41 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode #define printLineF1(x) (printLineF(1, x)) #define printLineF2(x) (printLineF(0, x)) +//0x00 : None, 0x01 : MODE, 0x02:BAND+, 0x03:BAND-, 0x04:TUNE_STEP, 0x05:VFO Toggle, 0x06:SplitOn/Off, 0x07:TX/ON-OFF, 0x08:SDR Mode On / Off, 0x09:Rit Toggle #define FUNCTION_KEY_ADC 80 //MODE, BAND(-), BAND(+), STEP -#define FKEY_PRESS 120 -#define FKEY_MODE 0 -#define FKEY_BANDUP 1 -#define FKEY_BANDDOWN 2 -#define FKEY_STEP 3 +#define FKEY_PRESS 0x78 +#define FKEY_MODE 0x01 +#define FKEY_BANDUP 0x02 +#define FKEY_BANDDOWN 0x03 +#define FKEY_STEP 0x04 +#define FKEY_VFOCHANGE 0x05 +#define FKEY_SPLIT 0x06 +#define FKEY_TXOFF 0x07 +#define FKEY_SDRMODE 0x08 +#define FKEY_RIT 0x09 + +#define FKEY_ENTER 0x0A +#define FKEY_POINT 0x0B +#define FKEY_DELETE 0x0C +#define FKEY_CANCEL 0x0D + +#define FKEY_NUM0 0x10 +#define FKEY_NUM1 0x11 +#define FKEY_NUM2 0x12 +#define FKEY_NUM3 0x13 +#define FKEY_NUM4 0x14 +#define FKEY_NUM5 0x15 +#define FKEY_NUM6 0x16 +#define FKEY_NUM7 0x17 +#define FKEY_NUM8 0x18 +#define FKEY_NUM9 0x19 + +#define FKEY_TYPE_MAX 0x1F extern unsigned long frequency; extern byte WsprMSGCount; extern byte sMeterLevels[9]; -extern byte KeyValues[16][2]; //ADC value Ranges for Extend Key +extern byte KeyValues[16][3]; //Set : Start Value, End Value, Key Type, 16 Set (3 * 16 = 48) extern void printLine1(const char *c); extern void printLine2(const char *c); diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index 2b716e4f..00d509db 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -185,31 +185,7 @@ byte sMeterLevels[9]; byte I2C_LCD_MASTER_ADDRESS; //0x27 //if Set I2C Address by uBITX Manager, read from EEProm byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode - -byte KeyValues[16][2]; -/*= { - {1023, 1025}, //1 - {707, 711}, //5 - {570, 574}, //9 - {493, 500}, //13 - - {932, 936}, //2 - {860, 864}, //3 - {800, 805}, //4 - - {672, 676}, //6 - {642, 646}, //7 - {616, 620}, //8 - - {552, 556}, //10 - {535, 539}, //11 - {520, 524}, //12 - - {438, 442}, //14 - {403, 407}, //15 - {378, 382} //16 -}; -*/ +byte KeyValues[16][3]; byte isIFShift = 0; //1 = ifShift, 2 extend int ifShiftValue = 0; // @@ -426,7 +402,7 @@ void setFrequency(unsigned long f){ // Offset Frequency : 30Mhz and current Frequncy is 14.074 => 34.074Mhz moveFrequency = (f % 10000000); } - else if (sdrOption == 3) //Khzz move + else if (sdrOption == 3) //Khz move { //Offset Frequency + Khz, //Example : Offset Frequency : 30Mhz and current Frequncy is 7.080 => 30.080Mhz @@ -458,31 +434,6 @@ void setFrequency(unsigned long f){ } } - /* - if (cwMode == 0) - { - if (isUSB){ - si5351bx_setfreq(2, SECOND_OSC_USB - appliedCarrier + f); - si5351bx_setfreq(1, SECOND_OSC_USB); - } - else{ - si5351bx_setfreq(2, SECOND_OSC_LSB + appliedCarrier + f); - si5351bx_setfreq(1, SECOND_OSC_LSB); - } - } - else - { - if (cwMode == 1){ //CWL - si5351bx_setfreq(2, SECOND_OSC_LSB + appliedCarrier + f); - si5351bx_setfreq(1, SECOND_OSC_LSB); - } - else{ //CWU - si5351bx_setfreq(2, SECOND_OSC_USB - appliedCarrier + f); - si5351bx_setfreq(1, SECOND_OSC_USB); - } - } - */ - frequency = f; } @@ -634,6 +585,8 @@ void checkPTT(){ } #ifdef EXTEND_KEY_GROUP1 void checkButton(){ + char currentBandIndex = -1; + //only if the button is pressed int keyStatus = getBtnStatus(); if (keyStatus == -1) @@ -646,8 +599,69 @@ void checkButton(){ if (keyStatus == FKEY_PRESS) //Menu Key doMenu(); - else if (keyStatus <= FKEY_STEP) //EXTEND KEY GROUP #1 + else if (keyStatus <= FKEY_TYPE_MAX) //EXTEND KEY GROUP #1 { + + switch(keyStatus) + { + case FKEY_MODE : + if (cwMode == 1) + { + cwMode = 2; + } + else if (cwMode == 2) + { + cwMode = 0; + isUSB = 0; + } + else if (isUSB == 0) + { + isUSB = 1; + } + else + { + cwMode = 1; + } + break; + case FKEY_BANDUP : + case FKEY_BANDDOWN : + //Save Band Information + if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move + currentBandIndex = getIndexHambanBbyFreq(frequency); + + if (currentBandIndex >= 0) { + saveBandFreqByIndex(frequency, modeToByte(), currentBandIndex); + } + } + setNextHamBandFreq(frequency, keyStatus == FKEY_BANDDOWN ? -1 : 1); //Prior Band + break; + + case FKEY_STEP : + if (++tuneStepIndex > 5) + tuneStepIndex = 1; + + EEPROM.put(TUNING_STEP, tuneStepIndex); + printLine2ClearAndUpdate(); + break; + + case FKEY_VFOCHANGE : + menuVfoToggle(1); //Vfo Toggle + break; + + case FKEY_SPLIT : + menuSplitOnOff(1); + break; + case FKEY_TXOFF: + menuTxOnOff(1, 0x01); + break; + case FKEY_SDRMODE : + menuSDROnOff(1); + break; + case FKEY_RIT : + menuRitToggle(1); + break; + } + /* if (keyStatus == FKEY_MODE) //Press Mode Key { if (cwMode == 1) @@ -668,10 +682,6 @@ void checkButton(){ cwMode = 1; } } - //else if (keyStatus == FKEY_BANDDOWN) //Press Mode Key - //{ - // setNextHamBandFreq(frequency, -1); //Prior Band - //} else if (keyStatus == FKEY_BANDUP || keyStatus == FKEY_BANDDOWN) //Press Mode Key { @@ -696,6 +706,28 @@ void checkButton(){ EEPROM.put(TUNING_STEP, tuneStepIndex); printLine2ClearAndUpdate(); } + + else if (keyStatus == FKEY_VFOCHANGE) + { + menuVfoToggle(1); //Vfo Toggle + } + else if (keyStatus == FKEY_SPLIT) + { + menuSplitOnOff(1); + } + else if (keyStatus == FKEY_TXOFF) + { + menuTxOnOff(1, 0x01); + } + else if (keyStatus == FKEY_SDRMODE) + { + menuSDROnOff(1); + } + else if (keyStatus == FKEY_RIT) + { + menuRitToggle(1); + } + */ FrequencyToVFO(1); SetCarrierFreq(); @@ -942,8 +974,9 @@ void initSettings(){ //KeyValues for (byte i = 0; i < 16; i++) { - KeyValues[i][0] = EEPROM.read(EXTENDED_KEY_RANGE + (i * 2)); - KeyValues[i][1] = EEPROM.read(EXTENDED_KEY_RANGE + (i * 2) + 1); + KeyValues[i][0] = EEPROM.read(EXTENDED_KEY_RANGE + (i * 3)); //RANGE : Start Value + KeyValues[i][1] = EEPROM.read(EXTENDED_KEY_RANGE + (i * 3) + 1); //RANGE : End Value + KeyValues[i][2] = EEPROM.read(EXTENDED_KEY_RANGE + (i * 3) + 2); //KEY TYPE } //User callsign information diff --git a/ubitx_20/ubitx_eemap.h b/ubitx_20/ubitx_eemap.h index a2cd8a79..2bdb32dc 100644 --- a/ubitx_20/ubitx_eemap.h +++ b/ubitx_20/ubitx_eemap.h @@ -50,10 +50,13 @@ // 256 ~ 1023 (EEProm Section #1) // 255 ~ 101 (EEProm Section #2) //============================================================================== + +//0x00 : None, 0x01 : MODE, 0x02:BAND+, 0x03:BAND-, 0x04:TUNE_STEP, 0x05:VFO Toggle, 0x06:SplitOn/Off, 0x07:TX/ON-OFF, 0x08:SDR Mode On / Off, 0x09:Rit Toggle +#define EXTENDED_KEY_RANGE 140 //Extended Key => Set : Start Value, End Value, Key Type, 16 Set (3 * 16 = 48) + #define I2C_LCD_MASTER 190 #define I2C_LCD_SECOND 191 -//RESERVE 192 ~ 195 -#define EXTENDED_KEY_RANGE 196 //Extended Key, KEY RANGE (MODE, BAND+, BAND-, TUNE_STEP, NUM0~NUM9, POINT, ENTER + #define S_METER_LEVELS 230 //LEVEL0 ~ LEVEL7 #define ADVANCED_FREQ_OPTION1 240 //Bit0: use IFTune_Value, Bit1 : use Stored enabled SDR Mode, Bit2 : dynamic sdr frequency diff --git a/ubitx_20/ubitx_menu.ino b/ubitx_20/ubitx_menu.ino index eac44b00..2af96277 100644 --- a/ubitx_20/ubitx_menu.ino +++ b/ubitx_20/ubitx_menu.ino @@ -403,15 +403,15 @@ void menuSplitOnOff(int btn){ else { if (splitOn == 1){ splitOn = 0; - //printLineF2(F("Split Off!")); - printLineF2(F("[OFF]")); + printLineF2(F("SPT Off")); + //printLineF2(F("[OFF]")); } else { splitOn = 1; if (ritOn == 1) ritOn = 0; - //printLineF2(F("Split On!")); - printLineF2(F("[ON]")); + printLineF2(F("SPT On")); + //printLineF2(F("[ON]")); } menuClearExit(500); @@ -430,11 +430,11 @@ void menuTxOnOff(int btn, byte optionType){ else { if ((isTxType & optionType) == 0){ isTxType |= optionType; - printLineF2(F("TX OFF!")); + printLineF2(F("TX OFF")); } else { isTxType &= ~(optionType); - printLineF2(F("TX ON!")); + printLineF2(F("TX ON")); } menuClearExit(500); @@ -453,7 +453,7 @@ void menuSDROnOff(int btn) else { if (sdrModeOn == 1){ sdrModeOn = 0; - printLineF2(F("[OFF]")); + printLineF2(F("SPK MODE")); } else { sdrModeOn = 1; @@ -464,7 +464,7 @@ void menuSDROnOff(int btn) if (splitOn == 1) splitOn = 0; - printLineF2(F("[ON]")); + printLineF2(F("SDR MODE")); } EEPROM.put(ENABLE_SDR, sdrModeOn); diff --git a/ubitx_20/ubitx_si5351.ino b/ubitx_20/ubitx_si5351.ino index 6587db61..2708b36b 100644 --- a/ubitx_20/ubitx_si5351.ino +++ b/ubitx_20/ubitx_si5351.ino @@ -15,7 +15,6 @@ ************************************************************************************/ // ************* SI5315 routines - tks Jerry Gaffke, KE7ER *********************** - // An minimalist standalone set of Si5351 routines. // VCOA is fixed at 875mhz, VCOB not used. // The output msynth dividers are used to generate 3 independent clocks @@ -127,7 +126,9 @@ void si5351_set_calibration(int32_t cal){ void SetCarrierFreq() { unsigned long appliedCarrier = ((cwMode == 0 ? usbCarrier : cwmCarrier) + (isIFShift && (inTx == 0) ? ifShiftValue : 0)); - si5351bx_setfreq(0, (sdrModeOn ? 0 : appliedCarrier)); + //si5351bx_setfreq(0, (sdrModeOn ? 0 : appliedCarrier)); + si5351bx_setfreq(0, ((sdrModeOn && (inTx == 0)) ? 0 : appliedCarrier)); //found bug by KG4GEK + /* if (cwMode == 0) diff --git a/ubitx_20/ubitx_ui.ino b/ubitx_20/ubitx_ui.ino index 57fa1a9b..c303daa6 100644 --- a/ubitx_20/ubitx_ui.ino +++ b/ubitx_20/ubitx_ui.ino @@ -185,10 +185,11 @@ int getBtnStatus(void){ else { readButtonValue = readButtonValue / 4; - + //return FKEY_VFOCHANGE; for (int i = 0; i < 16; i++) if (KeyValues[i][0] <= readButtonValue && KeyValues[i][1] >= readButtonValue) - return i; + return KeyValues[i][2]; + //return i; } return -1;