From dd43ba4c335decd676b25fda08566aedcb41a5d4 Mon Sep 17 00:00:00 2001 From: phdlee Date: Thu, 28 Jun 2018 23:29:06 +0900 Subject: [PATCH] Modified about Loopback protocol --- ubitx_20/ubitx_20.ino | 12 +- ubitx_20/ubitx_lcd_nextion.ino | 25 ++- ubitx_20/ubitx_menu.ino | 314 +++++++++++---------------------- 3 files changed, 135 insertions(+), 216 deletions(-) diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index 5d31c8d..6e2f910 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -6,7 +6,7 @@ // So I put + in the sense that it was improved one by one based on Original Firmware. // This firmware has been gradually changed based on the original firmware created by Farhan, Jack, Jerry and others. -#define FIRMWARE_VERSION_INFO F("+v1.094") +#define FIRMWARE_VERSION_INFO F("+v1.095") #define FIRMWARE_VERSION_NUM 0x04 //1st Complete Project : 1 (Version 1.061), 2st Project : 2, 1.08: 3, 1.09 : 4 /** @@ -467,13 +467,17 @@ void startTx(byte txMode, byte isDisplayUpdate){ } else { - if (splitOn == 1) { - if (vfoActive == VFO_B) { + if (splitOn == 1) + { + FrequencyToVFO(1); //Save current Frequency and Mode to eeprom + if (vfoActive == VFO_B) + { vfoActive = VFO_A; frequency = vfoA; byteToMode(vfoA_mode, 0); } - else if (vfoActive == VFO_A){ + else if (vfoActive == VFO_A) + { vfoActive = VFO_B; frequency = vfoB; byteToMode(vfoB_mode, 0); diff --git a/ubitx_20/ubitx_lcd_nextion.ino b/ubitx_20/ubitx_lcd_nextion.ino index 5aa46ac..06340ae 100644 --- a/ubitx_20/ubitx_lcd_nextion.ino +++ b/ubitx_20/ubitx_lcd_nextion.ino @@ -184,9 +184,16 @@ byte L_displayOption2; //byte displayOption2 (Reserve) #define TS_CMD_STOPADC 14 #define TS_CMD_SPECTRUMOPT 15 //Option for Spectrum #define TS_CMD_SPECTRUM 16 //Get Spectrum Value +#define TS_CMD_TUNESTEP 17 //Get Spectrum Value #define TS_CMD_SWTRIG 21 //SW Action Trigger for WSPR and more #define TS_CMD_READMEM 31 //Read EEProm #define TS_CMD_WRITEMEM 32 //Write EEProm +#define TS_CMD_LOOPBACK0 74 //Loopback1 (Response to Loopback Channgel) +#define TS_CMD_LOOPBACK1 75 //Loopback2 (Response to Loopback Channgel) +#define TS_CMD_LOOPBACK2 76 //Loopback3 (Response to Loopback Channgel) +#define TS_CMD_LOOPBACK3 77 //Loopback4 (Response to Loopback Channgel) +#define TS_CMD_LOOPBACK4 78 //Loopback5 (Response to Loopback Channgel) +#define TS_CMD_LOOPBACK5 79 //Loopback6 (Response to Loopback Channgel) #define TS_CMD_FACTORYRESET 85 //Factory Reset #define TS_CMD_UBITX_REBOOT 95 //Reboot @@ -776,7 +783,7 @@ void SWS_Process(void) } else if (commandType == TS_CMD_SPLIT) { - menuSplitOnOff(1); + menuSplitOnOff(10); } else if (commandType == TS_CMD_RIT) { @@ -855,6 +862,10 @@ void SWS_Process(void) spectrumScanCount = swr_buffer[commandStartIndex + 6]; //Maximum 120 spectrumIncStep = swr_buffer[commandStartIndex + 7] * 20; //Increaase Step } + else if (commandType == TS_CMD_TUNESTEP) //Set Tune Step + { + tuneStepIndex = swr_buffer[commandStartIndex + 4]; //Tune Step Index + } else if (commandType == TS_CMD_SWTRIG) { TriggerBySW = 1; //Action Trigger by Software @@ -903,7 +914,14 @@ void SWS_Process(void) { eepromIndex = -2; } - SendCommandL('n', eepromIndex); //Index Input + SendCommandL('n', eepromIndex); //Index Input + } + //else if (TS_CMD_LOOPBACK0 <= commandType && commandType <= TS_CMD_LOOPBACK5) //Loop back Channel 0 ~ 5 Loop back Channel 1~5 : Reserve + else if (TS_CMD_LOOPBACK0 == commandType) //Loop back Channel 0 ~ 5 + { + SendCommandUL('v', *(unsigned long *)&swr_buffer[commandStartIndex + 4]); //Return data + SendCommandUL('g', commandType); //Index Input + //return; } else if (commandType == TS_CMD_FACTORYRESET || commandType == TS_CMD_UBITX_REBOOT) { @@ -911,6 +929,7 @@ void SWS_Process(void) { if (commandType == TS_CMD_UBITX_REBOOT) { + FrequencyToVFO(1); //Save current Frequency and Mode to eeprom asm volatile (" jmp 0"); } else @@ -979,7 +998,7 @@ void SendUbitxData(void) EEPROM.get(EXTERNAL_DEVICE_OPT1, nextionDisplayOption); SendCommandUL(CMD_DISP_OPTION2, nextionDisplayOption); - SendCommandStr(CMD_VERSION, "+v1.094"); //Version + SendCommandStr(CMD_VERSION, "+v1.095"); //Version SendEEPromData(CMD_CALLSIGN, 0, userCallsignLength -1, 0); /* diff --git a/ubitx_20/ubitx_menu.ino b/ubitx_20/ubitx_menu.ino index bca69ef..80055c4 100644 --- a/ubitx_20/ubitx_menu.ino +++ b/ubitx_20/ubitx_menu.ino @@ -389,7 +389,14 @@ void menuVfoToggle(int btn) ritDisable(); setFrequency(frequency); - menuClearExit(0); + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + menuClearExit(0); +#endif + } } @@ -406,17 +413,20 @@ void menuSplitOnOff(int btn){ if (splitOn == 1){ splitOn = 0; printLineF2(F("SPT Off")); - //printLineF2(F("[OFF]")); } else { splitOn = 1; if (ritOn == 1) ritOn = 0; printLineF2(F("SPT On")); - //printLineF2(F("[ON]")); } - + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else +//Only Clear And Delay for Character LCD menuClearExit(500); +#endif } } @@ -438,8 +448,13 @@ void menuTxOnOff(int btn, byte optionType){ isTxType &= ~(optionType); printLineF2(F("TX ON")); } - + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(500); +#endif } } @@ -472,7 +487,13 @@ void menuSDROnOff(int btn) EEPROM.put(ENABLE_SDR, sdrModeOn); setFrequency(frequency); SetCarrierFreq(); + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(500); +#endif } } @@ -730,7 +751,14 @@ void menuCWSpeed(int btn){ //printLineF2(F("CW Speed set!")); cwSpeed = 1200 / wpm; EEPROM.put(CW_SPEED, cwSpeed); - menuClearExit(1000); + //menuClearExit(1000); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + menuClearExit(1000); +#endif + } //Modified by KD8CEC @@ -751,44 +779,22 @@ void menuSetupCwTone(int btn){ sideTone = getValueByKnob(1, sideTone, 100, 2000, 10, "Tone", 2); //1 : Generate Tone, targetValue, minKnobValue, maxKnobValue, stepSize - /* - //disable all clock 1 and clock 2 - while (digitalRead(PTT) == HIGH && !btnDown()) - { - knob = enc_read(); - - if (knob > 0 && sideTone < 2000) - sideTone += 10; - else if (knob < 0 && sideTone > 100 ) - sideTone -= 10; - else - continue; //don't update the frequency or the display - - tone(CW_TONE, sideTone); - itoa(sideTone, b, 10); - printLine2(b); - - delay_background(100, 0); - } - */ - - noTone(CW_TONE); - //save the setting - //if (digitalRead(PTT) == LOW){ - printLineF2(F("Sidetone set!")); - EEPROM.put(CW_SIDETONE, sideTone); - delay_background(2000, 0); - //} - //else - // sideTone = prev_sideTone; - - menuClearExit(0); + printLineF2(F("Sidetone set!")); + EEPROM.put(CW_SIDETONE, sideTone); + + //delay_background(2000, 0); + //menuClearExit(0); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + delay_background(2000, 0); + menuClearExit(0); +#endif } - - //Modified by KD8CEC void menuSetupCwDelay(int btn){ //int knob = 0; @@ -799,44 +805,18 @@ void menuSetupCwDelay(int btn){ return; } - //printLineF1(F("Press, set Delay")); - /* - strcpy(b, "DELAY:"); - itoa(tmpCWDelay,c, 10); - strcat(b, c); - printLine2(b); - */ - //delay_background(300, 0); - tmpCWDelay = getValueByKnob(0, tmpCWDelay, 3, 2500, 10, "Delay", 2); //0 : Generate Tone, targetValue, minKnobValue, maxKnobValue, stepSize -/* - while(!btnDown()){ - knob = enc_read(); - if (knob != 0){ - if (tmpCWDelay > 3 && knob < 0) - tmpCWDelay -= 10; - if (tmpCWDelay < 2500 && knob > 0) - tmpCWDelay += 10; - - strcpy(b, "DELAY:"); - itoa(tmpCWDelay,c, 10); - strcat(b, c); - printLine2(b); - } - //abort if this button is down - if (btnDown()) - break; - - Check_Cat(0); //To prevent disconnections - } -*/ - //save the setting - //printLineF2(F("CW Delay set!")); cwDelayTime = tmpCWDelay / 10; EEPROM.put(CW_DELAY, cwDelayTime); - menuClearExit(1000); + //menuClearExit(1000); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + menuClearExit(1000); +#endif } //CW Time delay by KD8CEC @@ -855,41 +835,17 @@ void menuSetupTXCWInterval(int btn){ tmpTXCWInterval = getValueByKnob(0, tmpTXCWInterval, 0, 500, 2, "Delay", 2); //0 : Generate Tone, targetValue, minKnobValue, maxKnobValue, stepSize -/* - while(!btnDown()){ - - if (needDisplayInformation == 1) { - strcpy(b, "Start Delay:"); - itoa(tmpTXCWInterval,c, 10); - strcat(b, c); - printLine2(b); - needDisplayInformation = 0; - } - - knob = enc_read(); - if (knob != 0){ - if (tmpTXCWInterval > 0 && knob < 0) - tmpTXCWInterval -= 2; - if (tmpTXCWInterval < 500 && knob > 0) - tmpTXCWInterval += 2; - - needDisplayInformation = 1; - } - //abort if this button is down - //if (btnDown()) - // break; - - Check_Cat(0); //To prevent disconnections - } -*/ - - - //save the setting - //printLineF2(F("CW Start set!")); delayBeforeCWStartTime = tmpTXCWInterval / 2; EEPROM.put(CW_START, delayBeforeCWStartTime); + //menuClearExit(1000); + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + menuClearExit(1000); +#endif - menuClearExit(1000); } //IF Shift function, BFO Change like RIT, by KD8CEC @@ -907,36 +863,7 @@ void menuIFSSetup(int btn){ { isIFShift = 1; - //delay_background(500, 0); - //updateLine2Buffer(1); - //setFrequency(frequency); - ifShiftValue = getValueByKnob(2, ifShiftValue, -20000, 20000, 50, "IFS", 2); //2 : IF Setup (updateLine2Buffer(1), SetFrequency), targetValue, minKnobValue, maxKnobValue, stepSize - -/* - //Off or Change Value - while(!btnDown() ){ - if (needApplyChangeValue ==1) - { - updateLine2Buffer(1); - setFrequency(frequency); - SetCarrierFreq(); - needApplyChangeValue = 0; - } - - knob = enc_read(); - if (knob != 0){ - if (knob < 0) - ifShiftValue -= 50; - else if (knob > 0) - ifShiftValue += 50; - - needApplyChangeValue = 1; - } - Check_Cat(0); //To prevent disconnections - } -*/ - delay_background(500, 0); //for check Long Press function key if (btnDown() || ifShiftValue == 0) @@ -949,7 +876,13 @@ void menuIFSSetup(int btn){ //Store IF Shiift EEPROM.put(IF_SHIFTVALUE, ifShiftValue); - menuClearExit(0); + //menuClearExit(0); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD + menuClearExit(0); +#endif } } @@ -975,7 +908,15 @@ void menuATTSetup(int btn){ setFrequency(frequency); //SetCarrierFreq(); } + //menuClearExit(0); + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(0); +#endif + } } @@ -1002,44 +943,10 @@ void menuSelectMode(int btn){ selectModeType = 3; beforeMode = selectModeType; - - //delay_background(500, 0); - selectModeType = getValueByKnob(11, selectModeType, 0, 3, 1, " LSB USB CWL CWU", 4); //3 : Select Mode, targetValue, minKnobValue, maxKnobValue, stepSize -/* - while(!btnDown()){ - //Display Mode Name - memset(c, 0, sizeof(c)); - strcpy(c, " LSB USB CWL CWU"); - c[selectModeType * 4] = '>'; - printLine1(c); - - knob = enc_read(); - - if (knob != 0) - { - moveStep += (knob > 0 ? 1 : -1); - if (moveStep < -3) { - if (selectModeType > 0) - selectModeType--; - - moveStep = 0; - } - else if (moveStep > 3) { - if (selectModeType < 3) - selectModeType++; - - moveStep = 0; - } - } - - //Check_Cat(0); //To prevent disconnections - delay_background(50, 0); - } -*/ - - if (beforeMode != selectModeType) { + if (beforeMode != selectModeType) + { //printLineF1(F("Changed Mode")); if (selectModeType == 0) { cwMode = 0; isUSB = 0; @@ -1058,9 +965,14 @@ void menuSelectMode(int btn){ } SetCarrierFreq(); - setFrequency(frequency); + //menuClearExit(500); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(500); +#endif } } @@ -1073,45 +985,11 @@ void menuSetupKeyType(int btn){ printLineF2(F("Change Key Type?")); } else { - //printLineF2(F("Press to set Key")); //for reduce usable flash memory - //delay_background(500, 0); selectedKeyType = cwKeyType; //selectedKeyType = getValueByKnob(12, selectedKeyType, 0, 2, 1, " KEY:", 5); //4 : Select Key Type, targetValue, minKnobValue, maxKnobValue, stepSize selectedKeyType = getValueByKnob(11, selectedKeyType, 0, 2, 1, " ST IA IB", 5); //4 : Select Key Type, targetValue, minKnobValue, maxKnobValue, stepSize - /* - while(!btnDown()){ - - //Display Key Type - if (selectedKeyType == 0) - printLineF1(F("Straight")); - else if (selectedKeyType == 1) - printLineF1(F("IAMBICA")); - else if (selectedKeyType == 2) - printLineF1(F("IAMBICB")); - - knob = enc_read(); - - if (knob != 0) - { - moveStep += (knob > 0 ? 1 : -1); - if (moveStep < -3) { - if (selectedKeyType > 0) - selectedKeyType--; - moveStep = 0; - } - else if (moveStep > 3) { - if (selectedKeyType < 2) - selectedKeyType++; - moveStep = 0; - } - } - - Check_Cat(0); //To prevent disconnections - } - */ - printLineF2(F("CW Key Type set!")); cwKeyType = selectedKeyType; EEPROM.put(CW_KEY_TYPE, cwKeyType); @@ -1127,7 +1005,14 @@ void menuSetupKeyType(int btn){ keyerControl |= IAMBICB; } + //menuClearExit(1000); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(1000); +#endif + } } @@ -1364,7 +1249,14 @@ void menuSetup(int btn){ else { modeCalibrate = ! modeCalibrate; + //menuClearExit(1000); + +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(1000); +#endif } } @@ -1395,13 +1287,17 @@ void menuRitToggle(int btn){ ritDisable(); } + //menuClearExit(500); +#ifdef USE_SW_SERIAL + menuOn = 0; +#else + //Only Clear And Delay for Character LCD menuClearExit(500); +#endif + } } - - - /** * Take a deep breath, math(ematics) ahead * The 25 mhz oscillator is multiplied by 35 to run the vco at 875 mhz