Compare commits
6 Commits
v0.33
...
version0.3
Author | SHA1 | Date | |
---|---|---|---|
|
14888bb7d7 | ||
|
57cd385b8a | ||
|
60777178a8 | ||
|
dd68b38454 | ||
|
d229a10092 | ||
|
3d019cdd44 |
26
README.md
26
README.md
@@ -1,11 +1,7 @@
|
|||||||
#IMPORTANT INFORMATION
|
#IMPORTANT INFORMATION
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
- 0.30 Version Test only download. almost complete
|
- Beta 0.26 and Beta 0.261, Beta 0.262, Beta 0.27 is complete test
|
||||||
- Beta 0.26 and Beta 0.261, Beta 0.262,0.27 is complete test, 0.28 is tested.
|
- You can download and use it.
|
||||||
- You can download and use it (Release section).
|
|
||||||
|
|
||||||
# Current work list (for Version 0.31)
|
|
||||||
1 Testing CAT Control with Software using hamlib on Linux
|
|
||||||
|
|
||||||
#NOTICE
|
#NOTICE
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
@@ -50,24 +46,6 @@ Prepared or finished tasks for the next version
|
|||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
## REVISION RECORD
|
## REVISION RECORD
|
||||||
0.30
|
|
||||||
- implemented the function to monitor the value of all analog inputs. This allows you to monitor the status of the CW keys connected to your uBITX.
|
|
||||||
- possible to set the ADC range for CW Keying. If no setting is made, it will have the same range as the original code. If you set the CW Keying ADC Values using uBITX Manager 0.3, you can reduce the key error.
|
|
||||||
- Added the function to select Straight Key, IAMBICA, IAMBICB key from the menu.
|
|
||||||
- default Band select is Ham Band mode, if you want common type, long press function key at band select menu, uBITX Manager can be used to modify frequencies to suit your country.
|
|
||||||
|
|
||||||
0.29
|
|
||||||
- Remove the use of initialization values in BFO settings - using crruent value, if factory reset
|
|
||||||
- Select Tune Step, default 0, 20, 50, 100, 200, Use the uBITX Manager to set the steps value you want. You can select Step by pressing and holding the Function Key (1sec ~ 2sec).
|
|
||||||
- Modify Dial Lock Function, Press the Function key for more than 3 seconds to toggle dial lock.
|
|
||||||
- created a new frequency tune method. remove original source codes, Threshold has been applied to reduce malfunction. checked the continuity of the user operating to make natural tune possible.
|
|
||||||
- stabilize and remove many warning messages - by Pullrequest and merge
|
|
||||||
- Changed cw keying method. removed the original code and applied Ron's code and Improved compatibility with original hardware and CAT commnication. It can be used without modification of hardware.
|
|
||||||
|
|
||||||
0.28
|
|
||||||
- Fixed CAT problem with hamlib on Linux
|
|
||||||
- restore Protocol autorecovery logic
|
|
||||||
|
|
||||||
0.27
|
0.27
|
||||||
(First alpha test version, This will be renamed to the major version 1.0)
|
(First alpha test version, This will be renamed to the major version 1.0)
|
||||||
- Dual VFO Dial Lock (vfoA Dial lock)
|
- Dual VFO Dial Lock (vfoA Dial lock)
|
||||||
|
@@ -365,6 +365,11 @@ void controlAutoCW(){
|
|||||||
//check interval time, if you want adjust interval between chars, modify below
|
//check interval time, if you want adjust interval between chars, modify below
|
||||||
if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3))
|
if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3))
|
||||||
{
|
{
|
||||||
|
if (!inTx){ //if not TX Status, change RX -> TX
|
||||||
|
keyDown = 0;
|
||||||
|
startTx(TX_CW, 0); //disable updateDisplay Command for reduce latency time
|
||||||
|
}
|
||||||
|
|
||||||
sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++));
|
sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++));
|
||||||
|
|
||||||
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send
|
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send
|
||||||
|
@@ -160,7 +160,8 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
#define TX_TUNE_TYPE 261 //
|
#define TX_TUNE_TYPE 261 //
|
||||||
#define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte
|
#define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte
|
||||||
#define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode
|
#define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode
|
||||||
#define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5)
|
#define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5) //1STEP :
|
||||||
|
|
||||||
|
|
||||||
//for reduce cw key error, eeprom address
|
//for reduce cw key error, eeprom address
|
||||||
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
|
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
|
||||||
@@ -179,6 +180,10 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
#define DISPLAY_OPTION1 361 //Display Option1
|
#define DISPLAY_OPTION1 361 //Display Option1
|
||||||
#define DISPLAY_OPTION2 362 //Display Option2
|
#define DISPLAY_OPTION2 362 //Display Option2
|
||||||
|
|
||||||
|
#define CHANNEL_FREQ 630 //Channel 1 ~ 20, 1 Channel = 4 bytes
|
||||||
|
#define CHANNEL_DESC 710 //Channel 1 ~ 20, 1 Channel = 4 bytes
|
||||||
|
#define RESERVE3 770 //Reserve3 between Channel and Firmware id check
|
||||||
|
|
||||||
//Check Firmware type and version
|
//Check Firmware type and version
|
||||||
#define FIRMWAR_ID_ADDR 776 //776 : 0x59, 777 :0x58, 778 : 0x68 : Id Number, if not found id, erase eeprom(32~1023) for prevent system error.
|
#define FIRMWAR_ID_ADDR 776 //776 : 0x59, 777 :0x58, 778 : 0x68 : Id Number, if not found id, erase eeprom(32~1023) for prevent system error.
|
||||||
#define VERSION_ADDRESS 779 //check Firmware version
|
#define VERSION_ADDRESS 779 //check Firmware version
|
||||||
@@ -260,7 +265,7 @@ byte sideToneSub = 0;
|
|||||||
//DialLock
|
//DialLock
|
||||||
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
|
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
|
||||||
byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
|
byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
|
||||||
byte arTuneStep[5];
|
long arTuneStep[5];
|
||||||
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
|
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
|
||||||
|
|
||||||
byte displayOption1 = 0;
|
byte displayOption1 = 0;
|
||||||
@@ -381,7 +386,7 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
|||||||
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
||||||
|
|
||||||
setFrequency(resultFreq);
|
setFrequency(resultFreq);
|
||||||
byteWithFreqToMode(loadMode);
|
byteToMode(loadMode, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
||||||
@@ -536,12 +541,12 @@ void startTx(byte txMode, byte isDisplayUpdate){
|
|||||||
if (vfoActive == VFO_B) {
|
if (vfoActive == VFO_B) {
|
||||||
vfoActive = VFO_A;
|
vfoActive = VFO_A;
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
}
|
}
|
||||||
else if (vfoActive == VFO_A){
|
else if (vfoActive == VFO_A){
|
||||||
vfoActive = VFO_B;
|
vfoActive = VFO_B;
|
||||||
frequency = vfoB;
|
frequency = vfoB;
|
||||||
byteToMode(vfoB_mode);
|
byteToMode(vfoB_mode, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
@@ -596,12 +601,12 @@ void stopTx(){
|
|||||||
if (vfoActive == VFO_B){
|
if (vfoActive == VFO_B){
|
||||||
vfoActive = VFO_A;
|
vfoActive = VFO_A;
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
}
|
}
|
||||||
else if (vfoActive == VFO_A){
|
else if (vfoActive == VFO_A){
|
||||||
vfoActive = VFO_B;
|
vfoActive = VFO_B;
|
||||||
frequency = vfoB;
|
frequency = vfoB;
|
||||||
byteToMode(vfoB_mode);
|
byteToMode(vfoB_mode, 0);
|
||||||
}
|
}
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
} //end of else
|
} //end of else
|
||||||
@@ -754,27 +759,8 @@ void doRIT(){
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void doIFShift(){
|
save Frequency and mode to eeprom for Auto Save with protected eeprom cycle, by kd8cec
|
||||||
int knob = enc_read();
|
|
||||||
unsigned long old_freq = frequency;
|
|
||||||
|
|
||||||
if (knob != 0)
|
|
||||||
{
|
|
||||||
if (knob < 0)
|
|
||||||
ifShiftValue -= 1l;
|
|
||||||
else if (knob > 0)
|
|
||||||
ifShiftValue += 1;
|
|
||||||
|
|
||||||
updateLine2Buffer(1);
|
|
||||||
setFrequency(frequency);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
save Frequency and mode to eeprom
|
|
||||||
*/
|
*/
|
||||||
void storeFrequencyAndMode(byte saveType)
|
void storeFrequencyAndMode(byte saveType)
|
||||||
{
|
{
|
||||||
@@ -806,6 +792,22 @@ void storeFrequencyAndMode(byte saveType)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//calculate step size from 1 byte, compatible uBITX Manager, by KD8CEC
|
||||||
|
unsigned int byteToSteps(byte srcByte) {
|
||||||
|
byte powerVal = (byte)(srcByte >> 6);
|
||||||
|
unsigned int baseVal = srcByte & 0x3F;
|
||||||
|
|
||||||
|
if (powerVal == 1)
|
||||||
|
return baseVal * 10;
|
||||||
|
else if (powerVal == 2)
|
||||||
|
return baseVal * 100;
|
||||||
|
else if (powerVal == 3)
|
||||||
|
return baseVal * 1000;
|
||||||
|
else
|
||||||
|
return baseVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The settings are read from EEPROM. The first time around, the values may not be
|
* The settings are read from EEPROM. The first time around, the values may not be
|
||||||
* present or out of range, in this case, some intelligent defaults are copied into the
|
* present or out of range, in this case, some intelligent defaults are copied into the
|
||||||
@@ -926,8 +928,8 @@ void initSettings(){
|
|||||||
findedValidValueCount = 0;
|
findedValidValueCount = 0;
|
||||||
EEPROM.get(TUNING_STEP, tuneStepIndex);
|
EEPROM.get(TUNING_STEP, tuneStepIndex);
|
||||||
for (byte i = 0; i < 5; i++) {
|
for (byte i = 0; i < 5; i++) {
|
||||||
arTuneStep[i] = EEPROM.read(TUNING_STEP + i + 1);
|
arTuneStep[i] = byteToSteps(EEPROM.read(TUNING_STEP + i + 1));
|
||||||
if (arTuneStep[i] >= 1 && arTuneStep[i] < 251) //Maximum 250 for check valid Value
|
if (arTuneStep[i] >= 1 && arTuneStep[i] <= 60000) //Maximum 650 for check valid Value
|
||||||
findedValidValueCount++;
|
findedValidValueCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1003,12 +1005,12 @@ void initSettings(){
|
|||||||
|
|
||||||
if (vfoA > 35000000l || 3500000l > vfoA) {
|
if (vfoA > 35000000l || 3500000l > vfoA) {
|
||||||
vfoA = 7150000l;
|
vfoA = 7150000l;
|
||||||
vfoA_mode = 2;
|
vfoA_mode = 2; //LSB
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vfoB > 35000000l || 3500000l > vfoB) {
|
if (vfoB > 35000000l || 3500000l > vfoB) {
|
||||||
vfoB = 14150000l;
|
vfoB = 14150000l;
|
||||||
vfoB_mode = 3;
|
vfoB_mode = 3; //USB
|
||||||
}
|
}
|
||||||
//end of original code section
|
//end of original code section
|
||||||
|
|
||||||
@@ -1084,7 +1086,7 @@ void setup()
|
|||||||
|
|
||||||
//Serial.begin(9600);
|
//Serial.begin(9600);
|
||||||
lcd.begin(16, 2);
|
lcd.begin(16, 2);
|
||||||
printLineF(1, F("CECBT v0.33"));
|
printLineF(1, F("CECBT v0.35"));
|
||||||
|
|
||||||
Init_Cat(38400, SERIAL_8N1);
|
Init_Cat(38400, SERIAL_8N1);
|
||||||
initMeter(); //not used in this build
|
initMeter(); //not used in this build
|
||||||
@@ -1103,7 +1105,7 @@ void setup()
|
|||||||
|
|
||||||
initPorts();
|
initPorts();
|
||||||
|
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
initOscillators();
|
initOscillators();
|
||||||
|
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
@@ -1116,13 +1118,11 @@ void setup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The loop checks for keydown, ptt, function button and tuning.
|
|
||||||
*/
|
|
||||||
//for debug
|
//for debug
|
||||||
int dbgCnt = 0;
|
int dbgCnt = 0;
|
||||||
byte flasher = 0;
|
byte flasher = 0;
|
||||||
|
|
||||||
|
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC
|
||||||
void checkAutoSaveFreqMode()
|
void checkAutoSaveFreqMode()
|
||||||
{
|
{
|
||||||
//when tx or ritOn, disable auto save
|
//when tx or ritOn, disable auto save
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
byte line2Buffer[16];
|
char line2Buffer[16];
|
||||||
//KD8CEC 200Hz ST
|
//KD8CEC 200Hz ST
|
||||||
//L14.150 200Hz ST
|
//L14.150 200Hz ST
|
||||||
//U14.150 +150khz
|
//U14.150 +150khz
|
||||||
@@ -53,8 +53,11 @@ void updateLine2Buffer(char isDirectCall)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
} //end of ritOn display
|
||||||
|
|
||||||
|
//======================================================
|
||||||
|
//other VFO display
|
||||||
|
//======================================================
|
||||||
if (vfoActive == VFO_B)
|
if (vfoActive == VFO_B)
|
||||||
{
|
{
|
||||||
tmpFreq = vfoA;
|
tmpFreq = vfoA;
|
||||||
@@ -82,18 +85,18 @@ void updateLine2Buffer(char isDirectCall)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//EXAMPLE #1
|
//EXAMPLE #1
|
||||||
if ((displayOption1 & 0x04) == 0x00)
|
if ((displayOption1 & 0x04) == 0x00) //none scroll display
|
||||||
line2Buffer[6] = 'k';
|
line2Buffer[6] = 'k';
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//example #2
|
//example #2
|
||||||
if (freqScrollPosition++ > 18)
|
if (freqScrollPosition++ > 18) //none scroll display time
|
||||||
{
|
{
|
||||||
line2Buffer[6] = 'k';
|
line2Buffer[6] = 'k';
|
||||||
if (freqScrollPosition > 25)
|
if (freqScrollPosition > 25)
|
||||||
freqScrollPosition = -1;
|
freqScrollPosition = -1;
|
||||||
}
|
}
|
||||||
else
|
else //scroll frequency
|
||||||
{
|
{
|
||||||
line2Buffer[10] = 'H';
|
line2Buffer[10] = 'H';
|
||||||
line2Buffer[11] = 'z';
|
line2Buffer[11] = 'z';
|
||||||
@@ -115,11 +118,11 @@ void updateLine2Buffer(char isDirectCall)
|
|||||||
line2Buffer[i] = ' ';
|
line2Buffer[i] = ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} //scroll
|
||||||
|
|
||||||
line2Buffer[7] = ' ';
|
line2Buffer[7] = ' ';
|
||||||
} //check direct call by encoder
|
} //check direct call by encoder
|
||||||
|
|
||||||
|
|
||||||
if (isIFShift)
|
if (isIFShift)
|
||||||
{
|
{
|
||||||
if (isDirectCall == 1)
|
if (isDirectCall == 1)
|
||||||
@@ -152,24 +155,38 @@ void updateLine2Buffer(char isDirectCall)
|
|||||||
|
|
||||||
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
|
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
|
||||||
printLine2(line2Buffer);
|
printLine2(line2Buffer);
|
||||||
}
|
} // end of display IF
|
||||||
else
|
else // step display
|
||||||
{
|
{
|
||||||
if (isDirectCall != 0)
|
if (isDirectCall != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
memset(&line2Buffer[8], ' ', 8);
|
||||||
//Step
|
//Step
|
||||||
byte tmpStep = arTuneStep[tuneStepIndex -1];
|
long tmpStep = arTuneStep[tuneStepIndex -1];
|
||||||
for (int i = 10; i >= 8; i--) {
|
|
||||||
|
byte isStepKhz = 0;
|
||||||
|
if (tmpStep >= 1000)
|
||||||
|
{
|
||||||
|
isStepKhz = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 10; i >= 8 - isStepKhz; i--) {
|
||||||
if (tmpStep > 0) {
|
if (tmpStep > 0) {
|
||||||
line2Buffer[i] = tmpStep % 10 + 0x30;
|
line2Buffer[i + isStepKhz] = tmpStep % 10 + 0x30;
|
||||||
tmpStep /= 10;
|
tmpStep /= 10;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
line2Buffer[i] = ' ';
|
line2Buffer[i +isStepKhz] = ' ';
|
||||||
}
|
}
|
||||||
|
//if (isStepKhz == 1)
|
||||||
|
// line2Buffer[10] = 'k';
|
||||||
|
|
||||||
|
if (isStepKhz == 0)
|
||||||
|
{
|
||||||
line2Buffer[11] = 'H';
|
line2Buffer[11] = 'H';
|
||||||
line2Buffer[12] = 'z';
|
line2Buffer[12] = 'z';
|
||||||
|
}
|
||||||
|
|
||||||
line2Buffer[13] = ' ';
|
line2Buffer[13] = ' ';
|
||||||
//if (
|
//if (
|
||||||
@@ -215,6 +232,9 @@ void idle_process()
|
|||||||
//space for user graphic display
|
//space for user graphic display
|
||||||
if (menuOn == 0)
|
if (menuOn == 0)
|
||||||
{
|
{
|
||||||
|
if ((displayOption1 & 0x10) == 0x10) //always empty topline
|
||||||
|
return;
|
||||||
|
|
||||||
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
|
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
|
||||||
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
|
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
|
||||||
if (checkCount++ > 1)
|
if (checkCount++ > 1)
|
||||||
|
@@ -13,7 +13,39 @@
|
|||||||
#define printLineF1(x) (printLineF(1, x))
|
#define printLineF1(x) (printLineF(1, x))
|
||||||
#define printLineF2(x) (printLineF(0, x))
|
#define printLineF2(x) (printLineF(0, x))
|
||||||
|
|
||||||
//Ham band move by KD8CEC
|
//Current Frequency and mode to active VFO by KD8CEC
|
||||||
|
void FrequencyToVFO(byte isSaveFreq)
|
||||||
|
{
|
||||||
|
//Save Frequency & Mode Information
|
||||||
|
if (vfoActive == VFO_A)
|
||||||
|
{
|
||||||
|
vfoA = frequency;
|
||||||
|
vfoA_mode = modeToByte();
|
||||||
|
|
||||||
|
if (isSaveFreq)
|
||||||
|
storeFrequencyAndMode(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vfoB = frequency;
|
||||||
|
vfoB_mode = modeToByte();
|
||||||
|
|
||||||
|
if (isSaveFreq)
|
||||||
|
storeFrequencyAndMode(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Commonly called functions when exiting menus by KD8CEC
|
||||||
|
void menuClearExit(int delayTime)
|
||||||
|
{
|
||||||
|
if (delayTime > 0)
|
||||||
|
delay_background(delayTime, 0);
|
||||||
|
|
||||||
|
printLine2ClearAndUpdate();
|
||||||
|
menuOn = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ham band or general band movement by KD8CEC
|
||||||
void menuBand(int btn){
|
void menuBand(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
int stepChangeCount = 0;
|
int stepChangeCount = 0;
|
||||||
@@ -27,8 +59,7 @@ void menuBand(int btn){
|
|||||||
printLineF2(F("Press to confirm"));
|
printLineF2(F("Press to confirm"));
|
||||||
//wait for the button menu select button to be lifted)
|
//wait for the button menu select button to be lifted)
|
||||||
while (btnDown()) {
|
while (btnDown()) {
|
||||||
delay(50);
|
delay_background(50, 0);
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
if (btnPressCount++ > 20) {
|
if (btnPressCount++ > 20) {
|
||||||
btnPressCount = 0;
|
btnPressCount = 0;
|
||||||
if (tuneTXType > 0) { //Just toggle 0 <-> 2, if tuneTXType is 100, 100 -> 0 -> 2
|
if (tuneTXType > 0) { //Just toggle 0 <-> 2, if tuneTXType is 100, 100 -> 0 -> 2
|
||||||
@@ -57,23 +88,13 @@ void menuBand(int btn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(50);
|
//delay(50);
|
||||||
ritDisable();
|
ritDisable();
|
||||||
|
|
||||||
while(!btnDown()){
|
while(!btnDown()){
|
||||||
|
|
||||||
knob = enc_read();
|
knob = enc_read();
|
||||||
if (knob != 0){
|
if (knob != 0){
|
||||||
/*
|
|
||||||
if (band > 3 && knob < 0)
|
|
||||||
band--;
|
|
||||||
if (band < 30 && knob > 0)
|
|
||||||
band++;
|
|
||||||
if (band > 10)
|
|
||||||
isUSB = true;
|
|
||||||
else
|
|
||||||
isUSB = false;
|
|
||||||
setFrequency(((unsigned long)band * 1000000l) + offset); */
|
|
||||||
if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move
|
if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move
|
||||||
if (knob < 0) {
|
if (knob < 0) {
|
||||||
if (stepChangeCount-- < -3) {
|
if (stepChangeCount-- < -3) {
|
||||||
@@ -87,9 +108,7 @@ void menuBand(int btn){
|
|||||||
stepChangeCount = 0;
|
stepChangeCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} //end of only ham band move
|
||||||
//setFrequency(frequency + 200000l);
|
|
||||||
}
|
|
||||||
else { //original source
|
else { //original source
|
||||||
if (knob < 0 && frequency > 3000000l)
|
if (knob < 0 && frequency > 3000000l)
|
||||||
setFrequency(frequency - 200000l);
|
setFrequency(frequency - 200000l);
|
||||||
@@ -105,19 +124,21 @@ void menuBand(int btn){
|
|||||||
updateDisplay();
|
updateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(20);
|
delay_background(20, 0);
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
while(btnDown()) {
|
while(btnDown()) {
|
||||||
delay(50);
|
delay(50);
|
||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
FrequencyToVFO(1);
|
||||||
|
|
||||||
delay(50);
|
//printLine2ClearAndUpdate();
|
||||||
|
//delay_background(500, 0);
|
||||||
printLine2ClearAndUpdate();
|
//menuOn = 0;
|
||||||
menuOn = 0;
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Convert Mode, Number by KD8CEC
|
//Convert Mode, Number by KD8CEC
|
||||||
@@ -141,7 +162,9 @@ byte modeToByte(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteToMode(byte modeValue){
|
//autoSetModebyFreq : 0
|
||||||
|
//autoSetModebyFreq : 1, if (modValue is not set, set mode by frequency)
|
||||||
|
void byteToMode(byte modeValue, byte autoSetModebyFreq){
|
||||||
if (modeValue == 4)
|
if (modeValue == 4)
|
||||||
cwMode = 1;
|
cwMode = 1;
|
||||||
else if (modeValue == 5)
|
else if (modeValue == 5)
|
||||||
@@ -151,11 +174,14 @@ void byteToMode(byte modeValue){
|
|||||||
cwMode = 0;
|
cwMode = 0;
|
||||||
if (modeValue == 3)
|
if (modeValue == 3)
|
||||||
isUSB = 1;
|
isUSB = 1;
|
||||||
|
else if (autoSetModebyFreq == 1 && (modeValue == 0))
|
||||||
|
isUSB = (frequency > 10000000l) ? true : false;
|
||||||
else
|
else
|
||||||
isUSB = 0;
|
isUSB = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
//Convert Number to Mode by KD8CEC
|
//Convert Number to Mode by KD8CEC
|
||||||
void byteWithFreqToMode(byte modeValue){
|
void byteWithFreqToMode(byte modeValue){
|
||||||
if (modeValue == 4)
|
if (modeValue == 4)
|
||||||
@@ -172,99 +198,10 @@ void byteWithFreqToMode(byte modeValue){
|
|||||||
isUSB = 0;
|
isUSB = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//VFO Toggle and save VFO Information, modified by KD8CEC
|
|
||||||
void menuVfoToggle(int btn, char isUseDelayTime)
|
|
||||||
{
|
|
||||||
if (!btn){
|
|
||||||
if (vfoActive == VFO_A)
|
|
||||||
printLineF2(F("Select VFO B?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("Select VFO A?"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (vfoActive == VFO_B){
|
|
||||||
vfoB = frequency;
|
|
||||||
vfoB_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(2); //vfoB -> eeprom
|
|
||||||
|
|
||||||
vfoActive = VFO_A;
|
|
||||||
frequency = vfoA;
|
|
||||||
saveCheckFreq = frequency;
|
|
||||||
byteToMode(vfoA_mode);
|
|
||||||
printLineF2(F("Selected VFO A"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vfoA = frequency;
|
|
||||||
vfoA_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(1); //vfoA -> eeprom
|
|
||||||
|
|
||||||
vfoActive = VFO_B;
|
|
||||||
frequency = vfoB;
|
|
||||||
saveCheckFreq = frequency;
|
|
||||||
byteToMode(vfoB_mode);
|
|
||||||
printLineF2(F("Selected VFO B"));
|
|
||||||
}
|
|
||||||
|
|
||||||
ritDisable();
|
|
||||||
setFrequency(frequency);
|
|
||||||
|
|
||||||
if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
|
||||||
delay_background(500, 0);
|
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
//exit the menu
|
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void menuRitToggle(int btn){
|
|
||||||
if (!btn){
|
|
||||||
if (ritOn == 1)
|
|
||||||
printLineF2(F("RIT:On, Off?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("RIT:Off, On?"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (ritOn == 0){
|
|
||||||
printLineF2(F("RIT is ON"));
|
|
||||||
//enable RIT so the current frequency is used at transmit
|
|
||||||
ritEnable(frequency);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
printLineF2(F("RIT is OFF"));
|
|
||||||
ritDisable();
|
|
||||||
}
|
|
||||||
menuOn = 0;
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void menuIFSToggle(int btn){
|
|
||||||
if (!btn){
|
|
||||||
if (isIFShift == 1)
|
|
||||||
printLineF2(F("IF Shift:On, Off?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("IF Shift:Off, On?"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (isIFShift == 0){
|
|
||||||
printLineF2(F("IF Shift is ON"));
|
|
||||||
isIFShift = 1;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
printLineF2(F("IF Shift is OFF"));
|
|
||||||
isIFShift = 0;
|
|
||||||
}
|
|
||||||
menuOn = 0;
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
void menuIFSToggle(int btn){
|
|
||||||
|
//IF Shift function, BFO Change like RIT, by KD8CEC
|
||||||
|
void menuIFSSetup(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
char needApplyChangeValue = 1;
|
char needApplyChangeValue = 1;
|
||||||
|
|
||||||
@@ -275,18 +212,18 @@ void menuIFSToggle(int btn){
|
|||||||
printLineF2(F("IF Shift:Off, On?"));
|
printLineF2(F("IF Shift:Off, On?"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (isIFShift == 0){
|
//if (isIFShift == 0){
|
||||||
printLineF2(F("IF Shift is ON"));
|
//printLineF2(F("IF Shift is ON"));
|
||||||
delay_background(500, 0);
|
//delay_background(500, 0);
|
||||||
isIFShift = 1;
|
isIFShift = 1;
|
||||||
}
|
//}
|
||||||
|
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
updateLine2Buffer(1);
|
updateLine2Buffer(1);
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
|
|
||||||
//Off or Change Value
|
//Off or Change Value
|
||||||
while(!btnDown() && digitalRead(PTT) == HIGH){
|
while(!btnDown() ){
|
||||||
if (needApplyChangeValue ==1)
|
if (needApplyChangeValue ==1)
|
||||||
{
|
{
|
||||||
updateLine2Buffer(1);
|
updateLine2Buffer(1);
|
||||||
@@ -303,9 +240,9 @@ void menuIFSToggle(int btn){
|
|||||||
knob = enc_read();
|
knob = enc_read();
|
||||||
if (knob != 0){
|
if (knob != 0){
|
||||||
if (knob < 0)
|
if (knob < 0)
|
||||||
ifShiftValue -= 1l;
|
ifShiftValue -= 50l;
|
||||||
else if (knob > 0)
|
else if (knob > 0)
|
||||||
ifShiftValue += 1;
|
ifShiftValue += 50;
|
||||||
|
|
||||||
needApplyChangeValue = 1;
|
needApplyChangeValue = 1;
|
||||||
}
|
}
|
||||||
@@ -313,7 +250,7 @@ void menuIFSToggle(int btn){
|
|||||||
|
|
||||||
delay_background(500, 0); //for check Long Press function key
|
delay_background(500, 0); //for check Long Press function key
|
||||||
|
|
||||||
if (btnDown() || digitalRead(PTT) == LOW || ifShiftValue == 0)
|
if (btnDown() || ifShiftValue == 0)
|
||||||
{
|
{
|
||||||
isIFShift = 0;
|
isIFShift = 0;
|
||||||
printLineF2(F("IF Shift is OFF"));
|
printLineF2(F("IF Shift is OFF"));
|
||||||
@@ -321,38 +258,13 @@ void menuIFSToggle(int btn){
|
|||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
//delay_background(500, 0);
|
//printLine2ClearAndUpdate();
|
||||||
printLine2ClearAndUpdate();
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Functions for CWL and CWU by KD8CEC
|
||||||
/*
|
|
||||||
void menuSidebandToggle(int btn){
|
|
||||||
if (!btn){
|
|
||||||
if (isUSB == true)
|
|
||||||
printLineF2(F("Select LSB?"));
|
|
||||||
else
|
|
||||||
printLineF2(F("Select USB?"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cwMode = 0;
|
|
||||||
if (isUSB == true){
|
|
||||||
isUSB = false;
|
|
||||||
printLineF2(F("LSB Selected"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
isUSB = true;
|
|
||||||
printLineF2(F("USB Selected"));
|
|
||||||
}
|
|
||||||
setFrequency(frequency);
|
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
void menuSelectMode(int btn){
|
void menuSelectMode(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
int selectModeType = 0;
|
int selectModeType = 0;
|
||||||
@@ -412,8 +324,7 @@ void menuSelectMode(int btn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (beforeMode != selectModeType) {
|
if (beforeMode != selectModeType) {
|
||||||
printLineF1(F("Changed Mode"));
|
//printLineF1(F("Changed Mode"));
|
||||||
|
|
||||||
if (selectModeType == 0) {
|
if (selectModeType == 0) {
|
||||||
cwMode = 0; isUSB = 0;
|
cwMode = 0; isUSB = 0;
|
||||||
}
|
}
|
||||||
@@ -427,19 +338,7 @@ void menuSelectMode(int btn){
|
|||||||
cwMode = 2;
|
cwMode = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Save Frequency & Mode Information
|
FrequencyToVFO(1);
|
||||||
if (vfoActive == VFO_A)
|
|
||||||
{
|
|
||||||
vfoA = frequency;
|
|
||||||
vfoA_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vfoB = frequency;
|
|
||||||
vfoB_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwMode == 0)
|
if (cwMode == 0)
|
||||||
@@ -448,72 +347,140 @@ void menuSelectMode(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(500, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuSplitOnOff(int btn){
|
|
||||||
|
//Memory to VFO, VFO to Memory by KD8CEC
|
||||||
|
//select between MtoV and VtoM by isMemoryToVfo
|
||||||
|
void menuCHMemory(int btn, byte isMemoryToVfo){
|
||||||
|
int knob = 0;
|
||||||
|
int selectChannel = 0;
|
||||||
|
byte isDisplayInfo = 1;
|
||||||
|
byte isCancel = 0;
|
||||||
|
int moveStep = 0;
|
||||||
|
unsigned long resultFreq, tmpFreq = 0;
|
||||||
|
byte loadMode = 0;
|
||||||
|
|
||||||
if (!btn){
|
if (!btn){
|
||||||
if (splitOn == 0)
|
if (isMemoryToVfo == 1)
|
||||||
printLineF2(F("Split On?"));
|
printLine2("Channel To VFO?");
|
||||||
else
|
else
|
||||||
printLineF2(F("Split Off?"));
|
printLine2("VFO To Channel?");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (splitOn == 1){
|
|
||||||
splitOn = 0;
|
|
||||||
printLineF2(F("Split Off!"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
splitOn = 1;
|
|
||||||
if (ritOn == 1)
|
|
||||||
ritOn = 0;
|
|
||||||
printLineF2(F("Split On!"));
|
|
||||||
}
|
|
||||||
delay_background(500, 0);
|
delay_background(500, 0);
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
while(!btnDown()){
|
||||||
|
if (isDisplayInfo == 1) {
|
||||||
|
//Display Channel info *********************************
|
||||||
|
memset(c, 0, sizeof(c));
|
||||||
|
|
||||||
|
if (selectChannel >= 20 || selectChannel <=-1)
|
||||||
|
{
|
||||||
|
strcpy(c, "Exit setup?");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Read Frequency from eeprom
|
||||||
|
EEPROM.get(CHANNEL_FREQ + 4 * selectChannel, resultFreq);
|
||||||
|
|
||||||
|
loadMode = (byte)(resultFreq >> 29);
|
||||||
|
resultFreq = resultFreq & 0x1FFFFFFF;
|
||||||
|
|
||||||
|
//display channel description
|
||||||
|
if (selectChannel < 10 && EEPROM.read(CHANNEL_DESC + 6 * selectChannel) == 0x03) { //0x03 is display Chnnel Name
|
||||||
|
//display Channel Name
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
c[i] = EEPROM.read(CHANNEL_DESC + 6 * selectChannel + i + 1);
|
||||||
|
|
||||||
|
c[5] = ':';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//Display frequency
|
||||||
|
//1 LINE : Channel Information : CH00
|
||||||
|
strcpy(c, "CH");
|
||||||
|
if (selectChannel < 9)
|
||||||
|
c[2] = '0';
|
||||||
|
|
||||||
|
ltoa(selectChannel + 1, b, 10);
|
||||||
|
strcat(c, b); //append channel Number;
|
||||||
|
strcat(c, " :"); //append channel Number;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
//Select CW Key Type by KD8CEC
|
if (selectChannel < 10)
|
||||||
void menuSetupKeyType(int btn){
|
printLineFromEEPRom(0, 4, 0, userCallsignLength -1); //eeprom to lcd use offset (USER_CALLSIGN_DAT)
|
||||||
if (!btn && digitalRead(PTT) == HIGH){
|
*/
|
||||||
if (Iambic_Key)
|
|
||||||
printLineF2(F("Key: Straight?"));
|
//display frequency
|
||||||
else
|
tmpFreq = resultFreq;
|
||||||
printLineF2(F("Key: Fn=A, PTT=B"));
|
for (int i = 15; i >= 6; i--) {
|
||||||
}
|
if (tmpFreq > 0) {
|
||||||
|
if (i == 12 || i == 8) c[i] = '.';
|
||||||
else {
|
else {
|
||||||
if (Iambic_Key)
|
c[i] = tmpFreq % 10 + 0x30;
|
||||||
{
|
tmpFreq /= 10;
|
||||||
printLineF2(F("Straight Key!"));
|
}
|
||||||
Iambic_Key = false;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
c[i] = ' ';
|
||||||
Iambic_Key = true;
|
|
||||||
if (btn)
|
|
||||||
{
|
|
||||||
keyerControl &= ~IAMBICB;
|
|
||||||
printLineF2(F("IAMBICA Key!"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
keyerControl |= IAMBICB;
|
|
||||||
printLineF2(F("IAMBICB Key!"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delay_background(500, 0);
|
printLine2(c);
|
||||||
printLine2ClearAndUpdate();
|
|
||||||
menuOn = 0;
|
isDisplayInfo = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
knob = enc_read();
|
||||||
|
|
||||||
|
if (knob != 0)
|
||||||
|
{
|
||||||
|
moveStep += (knob > 0 ? 1 : -1);
|
||||||
|
if (moveStep < -3) {
|
||||||
|
if (selectChannel > -1)
|
||||||
|
selectChannel--;
|
||||||
|
|
||||||
|
isDisplayInfo = 1;
|
||||||
|
moveStep = 0;
|
||||||
|
}
|
||||||
|
else if (moveStep > 3) {
|
||||||
|
if (selectChannel < 20)
|
||||||
|
selectChannel++;
|
||||||
|
|
||||||
|
isDisplayInfo = 1;
|
||||||
|
moveStep = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
Check_Cat(0); //To prevent disconnections
|
||||||
|
} //end of while (knob)
|
||||||
|
|
||||||
|
if (selectChannel < 20 && selectChannel >= 0)
|
||||||
|
{
|
||||||
|
if (isMemoryToVfo == 1)
|
||||||
|
{
|
||||||
|
if (resultFreq > 3000 && resultFreq < 60000000)
|
||||||
|
setFrequency(resultFreq);
|
||||||
|
byteToMode(loadMode, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Save current Frequency to Channel (selectChannel)
|
||||||
|
EEPROM.put(CHANNEL_FREQ + 4 * selectChannel, (frequency & 0x1FFFFFFF) | (modeToByte() << 29) );
|
||||||
|
printLine2("Saved Frequency");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menuClearExit(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Select CW Key Type by KD8CEC
|
//Select CW Key Type by KD8CEC
|
||||||
void menuSetupKeyType(int btn){
|
void menuSetupKeyType(int btn){
|
||||||
@@ -572,10 +539,11 @@ void menuSetupKeyType(int btn){
|
|||||||
else
|
else
|
||||||
keyerControl |= IAMBICB;
|
keyerControl |= IAMBICB;
|
||||||
}
|
}
|
||||||
delay_background(2000, 0);
|
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(2000, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -655,10 +623,110 @@ void menuADCMonitor(int btn){
|
|||||||
delay_background(200, 0);
|
delay_background(200, 0);
|
||||||
} //end of while
|
} //end of while
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//VFO Toggle and save VFO Information, modified by KD8CEC
|
||||||
|
void menuVfoToggle(int btn, char isUseDelayTime)
|
||||||
|
{
|
||||||
|
if (!btn){
|
||||||
|
if (vfoActive == VFO_A)
|
||||||
|
printLineF2(F("Select VFO B?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("Select VFO A?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FrequencyToVFO(1);
|
||||||
|
|
||||||
|
if (vfoActive == VFO_B){
|
||||||
|
//vfoB = frequency;
|
||||||
|
//vfoB_mode = modeToByte();
|
||||||
|
//storeFrequencyAndMode(2); //vfoB -> eeprom
|
||||||
|
|
||||||
|
vfoActive = VFO_A;
|
||||||
|
frequency = vfoA;
|
||||||
|
saveCheckFreq = frequency;
|
||||||
|
byteToMode(vfoA_mode, 0);
|
||||||
|
//printLineF2(F("Selected VFO A"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//vfoA = frequency;
|
||||||
|
//vfoA_mode = modeToByte();
|
||||||
|
//storeFrequencyAndMode(1); //vfoA -> eeprom
|
||||||
|
|
||||||
|
vfoActive = VFO_B;
|
||||||
|
frequency = vfoB;
|
||||||
|
saveCheckFreq = frequency;
|
||||||
|
byteToMode(vfoB_mode, 0);
|
||||||
|
//printLineF2(F("Selected VFO B"));
|
||||||
|
}
|
||||||
|
|
||||||
|
ritDisable();
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
|
//if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
|
||||||
|
// delay_background(500, 0);
|
||||||
|
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuRitToggle(int btn){
|
||||||
|
if (!btn){
|
||||||
|
if (ritOn == 1)
|
||||||
|
printLineF2(F("RIT:On, Off?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("RIT:Off, On?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (ritOn == 0){
|
||||||
|
printLineF2(F("RIT is ON"));
|
||||||
|
//enable RIT so the current frequency is used at transmit
|
||||||
|
ritEnable(frequency);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printLineF2(F("RIT is OFF"));
|
||||||
|
ritDisable();
|
||||||
|
}
|
||||||
|
//delay_background(500, 0);
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Split communication using VFOA and VFOB by KD8CEC
|
||||||
|
void menuSplitOnOff(int btn){
|
||||||
|
if (!btn){
|
||||||
|
if (splitOn == 0)
|
||||||
|
printLineF2(F("Split On?"));
|
||||||
|
else
|
||||||
|
printLineF2(F("Split Off?"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (splitOn == 1){
|
||||||
|
splitOn = 0;
|
||||||
|
printLineF2(F("Split Off!"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
splitOn = 1;
|
||||||
|
if (ritOn == 1)
|
||||||
|
ritOn = 0;
|
||||||
|
printLineF2(F("Split On!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
//delay_background(500, 0);
|
||||||
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Function to disbled transmission
|
//Function to disbled transmission
|
||||||
//by KD8CEC
|
//by KD8CEC
|
||||||
void menuTxOnOff(int btn, byte optionType){
|
void menuTxOnOff(int btn, byte optionType){
|
||||||
@@ -677,9 +745,11 @@ void menuTxOnOff(int btn, byte optionType){
|
|||||||
isTxType &= ~(optionType);
|
isTxType &= ~(optionType);
|
||||||
printLineF2(F("TX ON!"));
|
printLineF2(F("TX ON!"));
|
||||||
}
|
}
|
||||||
delay_background(500, 0);
|
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(500, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -702,21 +772,19 @@ void menuSetup(int btn){
|
|||||||
modeCalibrate = false;
|
modeCalibrate = false;
|
||||||
printLineF2(F("Setup:Off"));
|
printLineF2(F("Setup:Off"));
|
||||||
}
|
}
|
||||||
delay_background(2000, 0);
|
//delay_background(2000, 0);
|
||||||
printLine2Clear();
|
//printLine2Clear();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuExit(int btn){
|
void menuExit(int btn){
|
||||||
|
|
||||||
if (!btn){
|
if (!btn){
|
||||||
printLineF2(F("Exit Menu?"));
|
printLineF2(F("Exit Menu?"));
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
printLine2ClearAndUpdate();
|
menuClearExit(0);
|
||||||
menuOn = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuCWSpeed(int btn){
|
void menuCWSpeed(int btn){
|
||||||
@@ -768,10 +836,11 @@ void menuCWSpeed(int btn){
|
|||||||
printLineF2(F("CW Speed set!"));
|
printLineF2(F("CW Speed set!"));
|
||||||
cwSpeed = 1200/wpm;
|
cwSpeed = 1200/wpm;
|
||||||
EEPROM.put(CW_SPEED, cwSpeed);
|
EEPROM.put(CW_SPEED, cwSpeed);
|
||||||
delay_background(2000, 0);
|
|
||||||
//}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
//delay_background(2000, 0);
|
||||||
menuOn = 0;
|
//printLine2ClearAndUpdate();
|
||||||
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Builtin CW Keyer Logic by KD8CEC
|
//Builtin CW Keyer Logic by KD8CEC
|
||||||
@@ -841,10 +910,11 @@ void menuSetupCwDelay(int btn){
|
|||||||
printLineF2(F("CW Delay set!"));
|
printLineF2(F("CW Delay set!"));
|
||||||
cwDelayTime = tmpCWDelay / 10;
|
cwDelayTime = tmpCWDelay / 10;
|
||||||
EEPROM.put(CW_DELAY, cwDelayTime);
|
EEPROM.put(CW_DELAY, cwDelayTime);
|
||||||
delay_background(2000, 0);
|
//delay_background(2000, 0);
|
||||||
//}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//CW Time delay by KD8CEC
|
//CW Time delay by KD8CEC
|
||||||
@@ -890,10 +960,11 @@ void menuSetupTXCWInterval(int btn){
|
|||||||
printLineF2(F("CW Start set!"));
|
printLineF2(F("CW Start set!"));
|
||||||
delayBeforeCWStartTime = tmpTXCWInterval / 2;
|
delayBeforeCWStartTime = tmpTXCWInterval / 2;
|
||||||
EEPROM.put(CW_START, delayBeforeCWStartTime);
|
EEPROM.put(CW_START, delayBeforeCWStartTime);
|
||||||
delay_background(2000, 0);
|
//delay_background(2000, 0);
|
||||||
//}
|
//}
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -976,7 +1047,8 @@ void factoryCalibration(int btn){
|
|||||||
|
|
||||||
while(btnDown())
|
while(btnDown())
|
||||||
delay(50);
|
delay(50);
|
||||||
delay(100);
|
|
||||||
|
menuClearExit(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuSetupCalibration(int btn){
|
void menuSetupCalibration(int btn){
|
||||||
@@ -1040,8 +1112,9 @@ void menuSetupCalibration(int btn){
|
|||||||
initOscillators();
|
initOscillators();
|
||||||
//si5351_set_calibration(calibration);
|
//si5351_set_calibration(calibration);
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printCarrierFreq(unsigned long freq){
|
void printCarrierFreq(unsigned long freq){
|
||||||
@@ -1114,8 +1187,9 @@ void menuSetupCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Append by KD8CEC
|
//Append by KD8CEC
|
||||||
@@ -1150,8 +1224,9 @@ void menuSetupCWCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier);
|
si5351bx_setfreq(0, cwmCarrier);
|
||||||
printCarrierFreq(cwmCarrier);
|
printCarrierFreq(cwmCarrier);
|
||||||
|
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
delay(100);
|
//delay(100);
|
||||||
|
delay_background(100, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//save the setting
|
//save the setting
|
||||||
@@ -1169,9 +1244,11 @@ void menuSetupCWCarrier(int btn){
|
|||||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||||
|
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Modified by KD8CEC
|
//Modified by KD8CEC
|
||||||
void menuSetupCwTone(int btn){
|
void menuSetupCwTone(int btn){
|
||||||
int knob = 0;
|
int knob = 0;
|
||||||
@@ -1204,21 +1281,23 @@ void menuSetupCwTone(int btn){
|
|||||||
itoa(sideTone, b, 10);
|
itoa(sideTone, b, 10);
|
||||||
printLine2(b);
|
printLine2(b);
|
||||||
|
|
||||||
delay(100);
|
//delay(100);
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
|
delay_background(100, 0);
|
||||||
}
|
}
|
||||||
noTone(CW_TONE);
|
noTone(CW_TONE);
|
||||||
//save the setting
|
//save the setting
|
||||||
if (digitalRead(PTT) == LOW){
|
if (digitalRead(PTT) == LOW){
|
||||||
printLineF2(F("Sidetone set!"));
|
printLineF2(F("Sidetone set!"));
|
||||||
EEPROM.put(CW_SIDETONE, usbCarrier);
|
EEPROM.put(CW_SIDETONE, sideTone);
|
||||||
delay_background(2000, 0);
|
delay_background(2000, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sideTone = prev_sideTone;
|
sideTone = prev_sideTone;
|
||||||
|
|
||||||
printLine2ClearAndUpdate();
|
//printLine2ClearAndUpdate();
|
||||||
menuOn = 0;
|
//menuOn = 0;
|
||||||
|
menuClearExit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Lock Dial move by KD8CEC
|
//Lock Dial move by KD8CEC
|
||||||
@@ -1256,8 +1335,9 @@ void doMenu(){
|
|||||||
|
|
||||||
//Appened Lines by KD8CEC for Adjust Tune step and Set Dial lock
|
//Appened Lines by KD8CEC for Adjust Tune step and Set Dial lock
|
||||||
while(btnDown()){
|
while(btnDown()){
|
||||||
delay(50);
|
//delay(50);
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
|
delay_background(50, 0);
|
||||||
|
|
||||||
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
|
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
|
||||||
printLineF2(F("Set Tune Step?"));
|
printLineF2(F("Set Tune Step?"));
|
||||||
@@ -1280,8 +1360,9 @@ void doMenu(){
|
|||||||
|
|
||||||
while (digitalRead(PTT) == HIGH && !btnDown())
|
while (digitalRead(PTT) == HIGH && !btnDown())
|
||||||
{
|
{
|
||||||
Check_Cat(0); //To prevent disconnections
|
//Check_Cat(0); //To prevent disconnections
|
||||||
delay(50); //debounce
|
//delay(50); //debounce
|
||||||
|
delay_background(50, 0);
|
||||||
|
|
||||||
if (isNeedDisplay) {
|
if (isNeedDisplay) {
|
||||||
strcpy(b, "Tune Step:");
|
strcpy(b, "Tune Step:");
|
||||||
@@ -1320,7 +1401,6 @@ void doMenu(){
|
|||||||
} //set tune step
|
} //set tune step
|
||||||
|
|
||||||
//Below codes are origial code with modified by KD8CEC
|
//Below codes are origial code with modified by KD8CEC
|
||||||
//Select menu
|
|
||||||
menuOn = 2;
|
menuOn = 2;
|
||||||
|
|
||||||
while (menuOn){
|
while (menuOn){
|
||||||
@@ -1328,9 +1408,9 @@ void doMenu(){
|
|||||||
btnState = btnDown();
|
btnState = btnDown();
|
||||||
|
|
||||||
if (i > 0){
|
if (i > 0){
|
||||||
if (modeCalibrate && select + i < 200)
|
if (modeCalibrate && select + i < 220)
|
||||||
select += i;
|
select += i;
|
||||||
if (!modeCalibrate && select + i < 100)
|
if (!modeCalibrate && select + i < 120)
|
||||||
select += i;
|
select += i;
|
||||||
}
|
}
|
||||||
//if (i < 0 && select - i >= 0)
|
//if (i < 0 && select - i >= 0)
|
||||||
@@ -1348,36 +1428,40 @@ void doMenu(){
|
|||||||
else if (select < 40)
|
else if (select < 40)
|
||||||
menuRitToggle(btnState);
|
menuRitToggle(btnState);
|
||||||
else if (select < 50)
|
else if (select < 50)
|
||||||
menuIFSToggle(btnState);
|
menuIFSSetup(btnState);
|
||||||
else if (select < 60)
|
else if (select < 60)
|
||||||
menuCWSpeed(btnState);
|
menuCWSpeed(btnState);
|
||||||
else if (select < 70)
|
else if (select < 70)
|
||||||
menuSplitOnOff(btnState); //SplitOn / off
|
menuSplitOnOff(btnState); //SplitOn / off
|
||||||
else if (select < 80)
|
else if (select < 80)
|
||||||
menuCWAutoKey(btnState);
|
menuCHMemory(btnState, 0); //VFO to Memroy
|
||||||
else if (select < 90)
|
else if (select < 90)
|
||||||
menuSetup(btnState);
|
menuCHMemory(btnState, 1); //Memory to VFO
|
||||||
else if (select < 100)
|
else if (select < 100)
|
||||||
|
menuCWAutoKey(btnState);
|
||||||
|
else if (select < 110)
|
||||||
|
menuSetup(btnState);
|
||||||
|
else if (select < 120)
|
||||||
menuExit(btnState);
|
menuExit(btnState);
|
||||||
else if (select < 110 && modeCalibrate)
|
|
||||||
menuSetupCalibration(btnState); //crystal
|
|
||||||
else if (select < 120 && modeCalibrate)
|
|
||||||
menuSetupCarrier(btnState); //lsb
|
|
||||||
else if (select < 130 && modeCalibrate)
|
else if (select < 130 && modeCalibrate)
|
||||||
menuSetupCWCarrier(btnState); //lsb
|
menuSetupCalibration(btnState); //crystal
|
||||||
else if (select < 140 && modeCalibrate)
|
else if (select < 140 && modeCalibrate)
|
||||||
menuSetupCwTone(btnState);
|
menuSetupCarrier(btnState); //lsb
|
||||||
else if (select < 150 && modeCalibrate)
|
else if (select < 150 && modeCalibrate)
|
||||||
menuSetupCwDelay(btnState);
|
menuSetupCWCarrier(btnState); //lsb
|
||||||
else if (select < 160 && modeCalibrate)
|
else if (select < 160 && modeCalibrate)
|
||||||
menuSetupTXCWInterval(btnState);
|
menuSetupCwTone(btnState);
|
||||||
else if (select < 170 && modeCalibrate)
|
else if (select < 170 && modeCalibrate)
|
||||||
menuSetupKeyType(btnState);
|
menuSetupCwDelay(btnState);
|
||||||
else if (select < 180 && modeCalibrate)
|
else if (select < 180 && modeCalibrate)
|
||||||
menuADCMonitor(btnState);
|
menuSetupTXCWInterval(btnState);
|
||||||
else if (select < 190 && modeCalibrate)
|
else if (select < 190 && modeCalibrate)
|
||||||
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
menuSetupKeyType(btnState);
|
||||||
else if (select < 200 && modeCalibrate)
|
else if (select < 200 && modeCalibrate)
|
||||||
|
menuADCMonitor(btnState);
|
||||||
|
else if (select < 210 && modeCalibrate)
|
||||||
|
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
||||||
|
else if (select < 220 && modeCalibrate)
|
||||||
menuExit(btnState);
|
menuExit(btnState);
|
||||||
|
|
||||||
Check_Cat(0); //To prevent disconnections
|
Check_Cat(0); //To prevent disconnections
|
||||||
@@ -1385,9 +1469,8 @@ void doMenu(){
|
|||||||
|
|
||||||
//debounce the button
|
//debounce the button
|
||||||
while(btnDown()){
|
while(btnDown()){
|
||||||
delay(50);
|
delay_background(50, 0); //To prevent disconnections
|
||||||
Check_Cat(0); //To prevent disconnections
|
|
||||||
}
|
}
|
||||||
delay(50);
|
//delay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -235,7 +235,6 @@ char byteToChar(byte srcByte){
|
|||||||
void updateDisplay() {
|
void updateDisplay() {
|
||||||
// tks Jack Purdum W8TEE
|
// tks Jack Purdum W8TEE
|
||||||
// replaced fsprint commmands by str commands for code size reduction
|
// replaced fsprint commmands by str commands for code size reduction
|
||||||
|
|
||||||
// replace code for Frequency numbering error (alignment, point...) by KD8CEC
|
// replace code for Frequency numbering error (alignment, point...) by KD8CEC
|
||||||
int i;
|
int i;
|
||||||
unsigned long tmpFreq = frequency; //
|
unsigned long tmpFreq = frequency; //
|
||||||
|
Reference in New Issue
Block a user