Compare commits

...

7 Commits
v0.33 ... v0.34

Author SHA1 Message Date
phdlee
e915c21412 Merge pull request #18 from phdlee/version0.34
Version0.34
2018-02-03 17:17:43 +09:00
phdlee
60777178a8 TX Check in auto keysend 2018-02-03 17:07:11 +09:00
phdlee
dd68b38454 Optimize codes 2018-02-03 16:35:27 +09:00
phdlee
d229a10092 change tune step size and fixed bug 2018-02-02 20:49:00 +09:00
phdlee
3d019cdd44 change IF Shift Step 1 -> 50Hz 2018-01-31 17:53:20 +09:00
phdlee
55cfeeb924 Update README.md 2018-01-31 12:13:44 +09:00
phdlee
c8879e0e59 Update README.md 2018-01-31 12:12:58 +09:00
6 changed files with 323 additions and 347 deletions

View File

@@ -1,23 +1,14 @@
#IMPORTANT INFORMATION
----------------------------------------------------------------------------
- 0.30 Version Test only download. almost complete
- 0.33 Version Test only download. almost complete
- Beta 0.26 and Beta 0.261, Beta 0.262,0.27 is complete test, 0.28 is tested.
- 0.31 is tested but has not critical bug
- 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
----------------------------------------------------------------------------
I received uBITX a month ago and found that many features are required, and began coding with the idea of implementing minimal functionality as a general hf transceiver rather than an experimental device.
- fixed bugs...
- Diallock for uBITX's sensitive encoders
- built in softare Memory keyer and cw options control for CW communication
- Implementation of CAT communication protocol for Digital Communication (as FT8, JT65, etc)
- Delay Options for external Linear.
- and more...
Most of the basic functions of the HF transceiver I thought were implemented.
The minimum basic specification for uBITX to operate as a radio, I think it is finished.
So I will release the 0.27 version and if I do not see the bug anymore, I will try to change the version name to 1.0.
@@ -50,6 +41,23 @@ Prepared or finished tasks for the next version
----------------------------------------------------------------------------
## REVISION RECORD
0.33
- Added CWL, CWU Mode, (dont complete test yet)
- fixed VFO changed bug.
- Added Additional BFO for CWL, CWL
- Added IF Shift
- Change confirmation key PTT -> function key (not critical menus)
- Change CW Key Select type, (toggle -> select by dial)
0.32
- Added function Scroll Frequencty on upper line
- Added Example code for Draw meter and remarked (you can see and use this code in source codes)
- Added Split function, just toggle VFOs when TX/RX
0.31
- Fixed CW ADC Range error
- Display Message on Upper Line (anothor VFO Frequency, Tune Step, Selected Key Type)
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.

View File

@@ -365,6 +365,11 @@ void controlAutoCW(){
//check interval time, if you want adjust interval between chars, modify below
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++));
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send

View File

@@ -160,7 +160,8 @@ int count = 0; //to generally count ticks, loops, etc
#define TX_TUNE_TYPE 261 //
#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 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
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
@@ -260,7 +261,7 @@ byte sideToneSub = 0;
//DialLock
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
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 displayOption1 = 0;
@@ -381,7 +382,7 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
setFrequency(resultFreq);
byteWithFreqToMode(loadMode);
byteToMode(loadMode, 1);
}
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
@@ -536,12 +537,12 @@ void startTx(byte txMode, byte isDisplayUpdate){
if (vfoActive == VFO_B) {
vfoActive = VFO_A;
frequency = vfoA;
byteToMode(vfoA_mode);
byteToMode(vfoA_mode, 0);
}
else if (vfoActive == VFO_A){
vfoActive = VFO_B;
frequency = vfoB;
byteToMode(vfoB_mode);
byteToMode(vfoB_mode, 0);
}
setFrequency(frequency);
@@ -596,12 +597,12 @@ void stopTx(){
if (vfoActive == VFO_B){
vfoActive = VFO_A;
frequency = vfoA;
byteToMode(vfoA_mode);
byteToMode(vfoA_mode, 0);
}
else if (vfoActive == VFO_A){
vfoActive = VFO_B;
frequency = vfoB;
byteToMode(vfoB_mode);
byteToMode(vfoB_mode, 0);
}
setFrequency(frequency);
} //end of else
@@ -754,27 +755,8 @@ void doRIT(){
updateDisplay();
}
}
/*
void doIFShift(){
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
save Frequency and mode to eeprom for Auto Save with protected eeprom cycle, by kd8cec
*/
void storeFrequencyAndMode(byte saveType)
{
@@ -806,6 +788,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
* present or out of range, in this case, some intelligent defaults are copied into the
@@ -926,8 +924,8 @@ void initSettings(){
findedValidValueCount = 0;
EEPROM.get(TUNING_STEP, tuneStepIndex);
for (byte i = 0; i < 5; i++) {
arTuneStep[i] = EEPROM.read(TUNING_STEP + i + 1);
if (arTuneStep[i] >= 1 && arTuneStep[i] < 251) //Maximum 250 for check valid Value
arTuneStep[i] = byteToSteps(EEPROM.read(TUNING_STEP + i + 1));
if (arTuneStep[i] >= 1 && arTuneStep[i] <= 60000) //Maximum 650 for check valid Value
findedValidValueCount++;
}
@@ -1003,12 +1001,12 @@ void initSettings(){
if (vfoA > 35000000l || 3500000l > vfoA) {
vfoA = 7150000l;
vfoA_mode = 2;
vfoA_mode = 2; //LSB
}
if (vfoB > 35000000l || 3500000l > vfoB) {
vfoB = 14150000l;
vfoB_mode = 3;
vfoB_mode = 3; //USB
}
//end of original code section
@@ -1084,7 +1082,7 @@ void setup()
//Serial.begin(9600);
lcd.begin(16, 2);
printLineF(1, F("CECBT v0.33"));
printLineF(1, F("CECBT v0.35"));
Init_Cat(38400, SERIAL_8N1);
initMeter(); //not used in this build
@@ -1103,7 +1101,7 @@ void setup()
initPorts();
byteToMode(vfoA_mode);
byteToMode(vfoA_mode, 0);
initOscillators();
frequency = vfoA;
@@ -1116,13 +1114,11 @@ void setup()
}
/**
* The loop checks for keydown, ptt, function button and tuning.
*/
//for debug
int dbgCnt = 0;
byte flasher = 0;
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC
void checkAutoSaveFreqMode()
{
//when tx or ritOn, disable auto save

View File

@@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
byte line2Buffer[16];
char line2Buffer[16];
//KD8CEC 200Hz ST
//L14.150 200Hz ST
//U14.150 +150khz
@@ -53,8 +53,11 @@ void updateLine2Buffer(char isDirectCall)
}
return;
}
} //end of ritOn display
//======================================================
//other VFO display
//======================================================
if (vfoActive == VFO_B)
{
tmpFreq = vfoA;
@@ -82,18 +85,18 @@ void updateLine2Buffer(char isDirectCall)
}
//EXAMPLE #1
if ((displayOption1 & 0x04) == 0x00)
if ((displayOption1 & 0x04) == 0x00) //none scroll display
line2Buffer[6] = 'k';
else
{
//example #2
if (freqScrollPosition++ > 18)
if (freqScrollPosition++ > 18) //none scroll display time
{
line2Buffer[6] = 'k';
if (freqScrollPosition > 25)
freqScrollPosition = -1;
}
else
else //scroll frequency
{
line2Buffer[10] = 'H';
line2Buffer[11] = 'z';
@@ -115,11 +118,11 @@ void updateLine2Buffer(char isDirectCall)
line2Buffer[i] = ' ';
}
}
}
} //scroll
line2Buffer[7] = ' ';
} //check direct call by encoder
if (isIFShift)
{
if (isDirectCall == 1)
@@ -152,24 +155,38 @@ void updateLine2Buffer(char isDirectCall)
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
printLine2(line2Buffer);
}
else
} // end of display IF
else // step display
{
if (isDirectCall != 0)
return;
memset(&line2Buffer[8], ' ', 8);
//Step
byte tmpStep = arTuneStep[tuneStepIndex -1];
for (int i = 10; i >= 8; i--) {
long tmpStep = arTuneStep[tuneStepIndex -1];
byte isStepKhz = 0;
if (tmpStep >= 1000)
{
isStepKhz = 2;
}
for (int i = 10; i >= 8 - isStepKhz; i--) {
if (tmpStep > 0) {
line2Buffer[i] = tmpStep % 10 + 0x30;
line2Buffer[i + isStepKhz] = tmpStep % 10 + 0x30;
tmpStep /= 10;
}
else
line2Buffer[i] = ' ';
line2Buffer[i +isStepKhz] = ' ';
}
//if (isStepKhz == 1)
// line2Buffer[10] = 'k';
if (isStepKhz == 0)
{
line2Buffer[11] = 'H';
line2Buffer[12] = 'z';
}
line2Buffer[13] = ' ';
//if (
@@ -215,6 +232,9 @@ void idle_process()
//space for user graphic display
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 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
if (checkCount++ > 1)

View File

@@ -13,6 +13,36 @@
#define printLineF1(x) (printLineF(1, x))
#define printLineF2(x) (printLineF(0, x))
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);
}
}
void menuClearExit(int delayTime)
{
if (delayTime > 0)
delay_background(delayTime, 0);
printLine2ClearAndUpdate();
menuOn = 0;
}
//Ham band move by KD8CEC
void menuBand(int btn){
int knob = 0;
@@ -27,8 +57,7 @@ void menuBand(int btn){
printLineF2(F("Press to confirm"));
//wait for the button menu select button to be lifted)
while (btnDown()) {
delay(50);
Check_Cat(0); //To prevent disconnections
delay_background(50, 0);
if (btnPressCount++ > 20) {
btnPressCount = 0;
if (tuneTXType > 0) { //Just toggle 0 <-> 2, if tuneTXType is 100, 100 -> 0 -> 2
@@ -57,23 +86,13 @@ void menuBand(int btn){
}
}
delay(50);
//delay(50);
ritDisable();
while(!btnDown()){
knob = enc_read();
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 (knob < 0) {
if (stepChangeCount-- < -3) {
@@ -87,9 +106,7 @@ void menuBand(int btn){
stepChangeCount = 0;
}
}
//setFrequency(frequency + 200000l);
}
} //end of only ham band move
else { //original source
if (knob < 0 && frequency > 3000000l)
setFrequency(frequency - 200000l);
@@ -105,19 +122,21 @@ void menuBand(int btn){
updateDisplay();
}
delay(20);
Check_Cat(0); //To prevent disconnections
delay_background(20, 0);
}
/*
while(btnDown()) {
delay(50);
Check_Cat(0); //To prevent disconnections
}
*/
FrequencyToVFO(1);
delay(50);
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//delay_background(500, 0);
//menuOn = 0;
menuClearExit(500);
}
//Convert Mode, Number by KD8CEC
@@ -141,7 +160,9 @@ byte modeToByte(){
}
//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)
cwMode = 1;
else if (modeValue == 5)
@@ -151,11 +172,14 @@ void byteToMode(byte modeValue){
cwMode = 0;
if (modeValue == 3)
isUSB = 1;
else if (autoSetModebyFreq == 1 && (modeValue == 0))
isUSB = (frequency > 10000000l) ? true : false;
else
isUSB = 0;
}
}
/*
//Convert Number to Mode by KD8CEC
void byteWithFreqToMode(byte modeValue){
if (modeValue == 4)
@@ -172,99 +196,9 @@ void byteWithFreqToMode(byte modeValue){
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){
void menuIFSSetup(int btn){
int knob = 0;
char needApplyChangeValue = 1;
@@ -275,18 +209,18 @@ void menuIFSToggle(int btn){
printLineF2(F("IF Shift:Off, On?"));
}
else {
if (isIFShift == 0){
printLineF2(F("IF Shift is ON"));
delay_background(500, 0);
//if (isIFShift == 0){
//printLineF2(F("IF Shift is ON"));
//delay_background(500, 0);
isIFShift = 1;
}
//}
delay_background(500, 0);
updateLine2Buffer(1);
setFrequency(frequency);
//Off or Change Value
while(!btnDown() && digitalRead(PTT) == HIGH){
while(!btnDown() ){
if (needApplyChangeValue ==1)
{
updateLine2Buffer(1);
@@ -303,9 +237,9 @@ void menuIFSToggle(int btn){
knob = enc_read();
if (knob != 0){
if (knob < 0)
ifShiftValue -= 1l;
ifShiftValue -= 50l;
else if (knob > 0)
ifShiftValue += 1;
ifShiftValue += 50;
needApplyChangeValue = 1;
}
@@ -313,7 +247,7 @@ void menuIFSToggle(int btn){
delay_background(500, 0); //for check Long Press function key
if (btnDown() || digitalRead(PTT) == LOW || ifShiftValue == 0)
if (btnDown() || ifShiftValue == 0)
{
isIFShift = 0;
printLineF2(F("IF Shift is OFF"));
@@ -321,38 +255,12 @@ void menuIFSToggle(int btn){
delay_background(500, 0);
}
menuOn = 0;
//delay_background(500, 0);
printLine2ClearAndUpdate();
//menuOn = 0;
//printLine2ClearAndUpdate();
menuClearExit(0);
}
}
/*
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){
int knob = 0;
int selectModeType = 0;
@@ -412,8 +320,7 @@ void menuSelectMode(int btn){
}
if (beforeMode != selectModeType) {
printLineF1(F("Changed Mode"));
//printLineF1(F("Changed Mode"));
if (selectModeType == 0) {
cwMode = 0; isUSB = 0;
}
@@ -427,19 +334,7 @@ void menuSelectMode(int btn){
cwMode = 2;
}
//Save Frequency & Mode Information
if (vfoActive == VFO_A)
{
vfoA = frequency;
vfoA_mode = modeToByte();
storeFrequencyAndMode(1);
}
else
{
vfoB = frequency;
vfoB_mode = modeToByte();
storeFrequencyAndMode(2);
}
FrequencyToVFO(1);
}
if (cwMode == 0)
@@ -448,73 +343,14 @@ void menuSelectMode(int btn){
si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off
setFrequency(frequency);
delay_background(500, 0);
printLine2ClearAndUpdate();
menuOn = 0;
}
}
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;
//delay_background(500, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(500);
}
}
/*
//Select CW Key Type by KD8CEC
void menuSetupKeyType(int btn){
if (!btn && digitalRead(PTT) == HIGH){
if (Iambic_Key)
printLineF2(F("Key: Straight?"));
else
printLineF2(F("Key: Fn=A, PTT=B"));
}
else {
if (Iambic_Key)
{
printLineF2(F("Straight Key!"));
Iambic_Key = false;
}
else
{
Iambic_Key = true;
if (btn)
{
keyerControl &= ~IAMBICB;
printLineF2(F("IAMBICA Key!"));
}
else
{
keyerControl |= IAMBICB;
printLineF2(F("IAMBICB Key!"));
}
}
delay_background(500, 0);
printLine2ClearAndUpdate();
menuOn = 0;
}
}
*/
//Select CW Key Type by KD8CEC
void menuSetupKeyType(int btn){
int knob = 0;
@@ -572,10 +408,11 @@ void menuSetupKeyType(int btn){
else
keyerControl |= IAMBICB;
}
delay_background(2000, 0);
printLine2ClearAndUpdate();
menuOn = 0;
//delay_background(2000, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(1000);
}
}
@@ -655,10 +492,109 @@ void menuADCMonitor(int btn){
delay_background(200, 0);
} //end of while
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//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);
}
}
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
//by KD8CEC
void menuTxOnOff(int btn, byte optionType){
@@ -677,9 +613,11 @@ void menuTxOnOff(int btn, byte optionType){
isTxType &= ~(optionType);
printLineF2(F("TX ON!"));
}
delay_background(500, 0);
printLine2ClearAndUpdate();
menuOn = 0;
//delay_background(500, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(500);
}
}
@@ -702,21 +640,19 @@ void menuSetup(int btn){
modeCalibrate = false;
printLineF2(F("Setup:Off"));
}
delay_background(2000, 0);
printLine2Clear();
menuOn = 0;
//delay_background(2000, 0);
//printLine2Clear();
//menuOn = 0;
menuClearExit(1000);
}
}
void menuExit(int btn){
if (!btn){
printLineF2(F("Exit Menu?"));
}
else{
printLine2ClearAndUpdate();
menuOn = 0;
}
else
menuClearExit(0);
}
void menuCWSpeed(int btn){
@@ -768,10 +704,11 @@ void menuCWSpeed(int btn){
printLineF2(F("CW Speed set!"));
cwSpeed = 1200/wpm;
EEPROM.put(CW_SPEED, cwSpeed);
delay_background(2000, 0);
//}
printLine2ClearAndUpdate();
menuOn = 0;
//delay_background(2000, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(1000);
}
//Builtin CW Keyer Logic by KD8CEC
@@ -841,10 +778,11 @@ void menuSetupCwDelay(int btn){
printLineF2(F("CW Delay set!"));
cwDelayTime = tmpCWDelay / 10;
EEPROM.put(CW_DELAY, cwDelayTime);
delay_background(2000, 0);
//delay_background(2000, 0);
//}
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(1000);
}
//CW Time delay by KD8CEC
@@ -890,10 +828,11 @@ void menuSetupTXCWInterval(int btn){
printLineF2(F("CW Start set!"));
delayBeforeCWStartTime = tmpTXCWInterval / 2;
EEPROM.put(CW_START, delayBeforeCWStartTime);
delay_background(2000, 0);
//delay_background(2000, 0);
//}
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(1000);
}
@@ -976,7 +915,8 @@ void factoryCalibration(int btn){
while(btnDown())
delay(50);
delay(100);
menuClearExit(100);
}
void menuSetupCalibration(int btn){
@@ -1040,8 +980,9 @@ void menuSetupCalibration(int btn){
initOscillators();
//si5351_set_calibration(calibration);
setFrequency(frequency);
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0);
}
void printCarrierFreq(unsigned long freq){
@@ -1114,8 +1055,9 @@ void menuSetupCarrier(int btn){
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
setFrequency(frequency);
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0);
}
//Append by KD8CEC
@@ -1150,8 +1092,9 @@ void menuSetupCWCarrier(int btn){
si5351bx_setfreq(0, cwmCarrier);
printCarrierFreq(cwmCarrier);
Check_Cat(0); //To prevent disconnections
delay(100);
//Check_Cat(0); //To prevent disconnections
//delay(100);
delay_background(100, 0);
}
//save the setting
@@ -1169,9 +1112,11 @@ void menuSetupCWCarrier(int btn){
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
setFrequency(frequency);
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0);
}
//Modified by KD8CEC
void menuSetupCwTone(int btn){
int knob = 0;
@@ -1204,21 +1149,23 @@ void menuSetupCwTone(int btn){
itoa(sideTone, b, 10);
printLine2(b);
delay(100);
Check_Cat(0); //To prevent disconnections
//delay(100);
//Check_Cat(0); //To prevent disconnections
delay_background(100, 0);
}
noTone(CW_TONE);
//save the setting
if (digitalRead(PTT) == LOW){
printLineF2(F("Sidetone set!"));
EEPROM.put(CW_SIDETONE, usbCarrier);
EEPROM.put(CW_SIDETONE, sideTone);
delay_background(2000, 0);
}
else
sideTone = prev_sideTone;
printLine2ClearAndUpdate();
menuOn = 0;
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0);
}
//Lock Dial move by KD8CEC
@@ -1256,8 +1203,9 @@ void doMenu(){
//Appened Lines by KD8CEC for Adjust Tune step and Set Dial lock
while(btnDown()){
delay(50);
Check_Cat(0); //To prevent disconnections
//delay(50);
//Check_Cat(0); //To prevent disconnections
delay_background(50, 0);
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
printLineF2(F("Set Tune Step?"));
@@ -1280,8 +1228,9 @@ void doMenu(){
while (digitalRead(PTT) == HIGH && !btnDown())
{
Check_Cat(0); //To prevent disconnections
delay(50); //debounce
//Check_Cat(0); //To prevent disconnections
//delay(50); //debounce
delay_background(50, 0);
if (isNeedDisplay) {
strcpy(b, "Tune Step:");
@@ -1348,7 +1297,7 @@ void doMenu(){
else if (select < 40)
menuRitToggle(btnState);
else if (select < 50)
menuIFSToggle(btnState);
menuIFSSetup(btnState);
else if (select < 60)
menuCWSpeed(btnState);
else if (select < 70)
@@ -1385,9 +1334,8 @@ void doMenu(){
//debounce the button
while(btnDown()){
delay(50);
Check_Cat(0); //To prevent disconnections
delay_background(50, 0); //To prevent disconnections
}
delay(50);
//delay(50);
}

View File

@@ -235,7 +235,6 @@ char byteToChar(byte srcByte){
void updateDisplay() {
// tks Jack Purdum W8TEE
// replaced fsprint commmands by str commands for code size reduction
// replace code for Frequency numbering error (alignment, point...) by KD8CEC
int i;
unsigned long tmpFreq = frequency; //