Compare commits

..

40 Commits

Author SHA1 Message Date
phdlee
d69588d999 Merge pull request #19 from phdlee/version0.35
Version0.35
2018-02-05 16:48:56 +09:00
phdlee
e915c21412 Merge pull request #18 from phdlee/version0.34
Version0.34
2018-02-03 17:17:43 +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
phdlee
4f5ac283b7 Merge pull request #17 from phdlee/version0.33
Version0.33
2018-01-31 10:47:20 +09:00
phdlee
3058d52551 Merge pull request #16 from phdlee/version0.32
Version0.32
2018-01-30 12:20:18 +09:00
phdlee
04699ba074 Merge pull request #15 from phdlee/version0.31
Fixed Bug CW Key Range
Append Feature : Display Line Toggle, (Between line1 and line2)
 Append function : for other users / using s.meter, p.meter ... (when idle time execute function)
2018-01-29 18:44:05 +09:00
phdlee
aa61281c38 Merge pull request #14 from phdlee/version0.296
rename version to 0.30
2018-01-27 18:39:22 +09:00
phdlee
261215b1ad Merge pull request #13 from phdlee/version0.296
Version0.296 => Version 0.30
2018-01-27 18:36:07 +09:00
phdlee
1a2f5b4fde Update README.md 2018-01-27 18:33:51 +09:00
phdlee
8203427808 Merge pull request #12 from phdlee/version0.296
Add Comment
2018-01-26 18:25:48 +09:00
phdlee
4e15f2150c Update README.md 2018-01-25 23:39:33 +09:00
phdlee
82a5fd7df9 Merge pull request #11 from phdlee/version0.296
Version0.296
2018-01-25 23:33:04 +09:00
phdlee
386a0b2d46 Update README.md 2018-01-25 22:33:20 +09:00
phdlee
c6401af7d1 Merge pull request #10 from phdlee/version0.29
Version0.29
2018-01-25 22:26:19 +09:00
phdlee
b153a305d6 Merge branch 'master' into version0.29 2018-01-25 22:25:35 +09:00
phdlee
e61e45d3dd Update README.md 2018-01-22 18:26:22 +09:00
phdlee
a1f941f965 Update README.md 2018-01-22 18:25:41 +09:00
phdlee
d1e72b3bd5 Update README.md 2018-01-22 18:24:29 +09:00
phdlee
032e7f919f Update README.md 2018-01-22 18:21:55 +09:00
phdlee
b6bc264332 Update README.md 2018-01-22 18:11:15 +09:00
phdlee
b1cc5eb98a Update README.md 2018-01-22 02:11:35 +09:00
phdlee
2fe1662d67 Merge pull request #8 from qiwenmin/master
Fixed most compilation warnings and a delay issue
2018-01-20 21:24:15 +09:00
phdlee
ebbc5aae5e Merge pull request #9 from phdlee/version0.28
change delaytimes via cat
2018-01-18 11:47:21 +09:00
Qi Wenmin
209cd3a49c Fixed most compilation warnings and a delay issue
* Fixed most compilation warnings (Compiler warning level: All)
* Fixed a delay issue in enc_read function.
2018-01-17 14:42:15 +08:00
phdlee
95e5c1dfe5 Update README.md 2018-01-14 14:53:28 +09:00
phdlee
45a8479061 Update README.md 2018-01-14 14:52:58 +09:00
phdlee
a6ad381c24 Update README.md 2018-01-14 14:52:22 +09:00
phdlee
bcf80f851d Update README.md 2018-01-14 14:51:46 +09:00
phdlee
16304efacd Update README.md 2018-01-14 14:51:23 +09:00
phdlee
968024ab73 Merge pull request #7 from phdlee/beta0.26
Beta0.26
2018-01-14 14:19:53 +09:00
phdlee
3e60728727 Update README.md 2018-01-13 22:27:23 +09:00
phdlee
9781ef086b Update README.md 2018-01-13 10:58:47 +09:00
phdlee
f27f504ea4 Merge pull request #6 from phdlee/beta0.26
Beta0.26
2018-01-12 20:19:09 +09:00
phdlee
2b08a76fbf Update README.md 2018-01-12 10:16:59 +09:00
phdlee
90655e03b8 Update README.md
add status of project
2018-01-12 09:51:58 +09:00
phdlee
8551ff1b68 Update README.md 2018-01-11 17:40:00 +09:00
phdlee
5ce94e8e49 Merge pull request #5 from qiwenmin/master
Fix the delay condition bug when overflow
2018-01-10 13:51:59 +09:00
Qi Wenmin
7ef9c29fa8 Fix the delay condition bug when overflow
The original expression will cause bug when overflow.
2018-01-10 12:00:53 +08:00
phdlee
fda398046e Merge pull request #4 from phdlee/beta0.25
beta 0.25 commit
2018-01-10 11:39:15 +09:00
7 changed files with 175 additions and 138 deletions

View File

@@ -1,19 +1,14 @@
#IMPORTANT INFORMATION #IMPORTANT INFORMATION
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
- Beta 0.26 and Beta 0.261, Beta 0.262, Beta 0.27 is complete test - 0.33 Version Test only download. almost complete
- You can download and use it. - 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).
#NOTICE #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. 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. 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. 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. 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.
@@ -46,6 +41,41 @@ Prepared or finished tasks for the next version
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
## REVISION RECORD ## 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.
- 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)

View File

@@ -109,8 +109,7 @@ void CatSetFreq(byte fromType)
//#define BCD_LEN 9 //#define BCD_LEN 9
//PROTOCOL : 0x03 //PROTOCOL : 0x03
//Computer <-(frequency)-> TRCV CAT_BUFF //Computer <-(frequency)-> TRCV CAT_BUFF
//void CatGetFreqMode(unsigned long freq, byte fromType) void CatGetFreqMode(unsigned long freq, byte fromType)
void CatGetFreqMode(unsigned long freq) //for remove warning messages
{ {
int i; int i;
byte tmpValue; byte tmpValue;
@@ -150,21 +149,15 @@ void CatGetFreqMode(unsigned long freq) //for remove warning messages
SendCatData(5); SendCatData(5);
} }
//void CatSetSplit(boolean isSplit, byte fromType) void CatSetSplit(boolean isSplit, byte fromType)
void CatSetSplit(boolean isSplit) //for remove warning messages
{ {
if (isSplit)
splitOn = 1;
else
splitOn = 0;
Serial.write(ACK); Serial.write(ACK);
} }
void CatSetPTT(boolean isPTTOn, byte fromType) void CatSetPTT(boolean isPTTOn, byte fromType)
{ {
// if (fromType == 2 || fromType == 3) {
if ((!inTx) && (fromType == 2 || fromType == 3)) {
Serial.write(ACK); Serial.write(ACK);
return; return;
} }
@@ -200,7 +193,7 @@ void CatSetPTT(boolean isPTTOn, byte fromType)
void CatVFOToggle(boolean isSendACK, byte fromType) void CatVFOToggle(boolean isSendACK, byte fromType)
{ {
if (fromType != 2 && fromType != 3) { if (fromType != 2 && fromType != 3) {
menuVfoToggle(1); menuVfoToggle(1, 0);
} }
if (isSendACK) if (isSendACK)
@@ -239,8 +232,7 @@ void CatSetMode(byte tmpMode, byte fromType)
} }
//Read EEProm by uBITX Manager Software //Read EEProm by uBITX Manager Software
//void ReadEEPRom(byte fromType) void ReadEEPRom(byte fromType)
void ReadEEPRom() //for remove warnings.
{ {
//5BYTES //5BYTES
//CAT_BUFF[0] [1] [2] [3] [4] //4 COMMAND //CAT_BUFF[0] [1] [2] [3] [4] //4 COMMAND
@@ -263,8 +255,7 @@ void ReadEEPRom() //for remove warnings.
} }
//Write just proecess 1byes //Write just proecess 1byes
//void WriteEEPRom(byte fromType) void WriteEEPRom(byte fromType)
void WriteEEPRom(void) //for remove warning
{ {
//5BYTES //5BYTES
uint16_t eepromStartIndex = CAT_BUFF[0] + CAT_BUFF[1] * 256; uint16_t eepromStartIndex = CAT_BUFF[0] + CAT_BUFF[1] * 256;
@@ -284,8 +275,7 @@ void WriteEEPRom(void) //for remove warning
} }
} }
//void ReadEEPRom_FT817(byte fromType) void ReadEEPRom_FT817(byte fromType)
void ReadEEPRom_FT817(void) //for remove warnings
{ {
byte temp0 = CAT_BUFF[0]; byte temp0 = CAT_BUFF[0];
byte temp1 = CAT_BUFF[1]; byte temp1 = CAT_BUFF[1];
@@ -611,8 +601,7 @@ void WriteEEPRom_FT817(byte fromType)
Serial.write(ACK); Serial.write(ACK);
} }
//void CatRxStatus(byte fromType) void CatRxStatus(byte fromType)
void CatRxStatus(void) //for remove warning
{ {
byte sMeterValue = 1; byte sMeterValue = 1;
@@ -632,8 +621,7 @@ void CatRxStatus(void) //for remove warning
} }
//void CatTxStatus(byte fromType) void CatTxStatus(byte fromType)
void CatTxStatus(void) //for remove warning
{ {
boolean isHighSWR = false; boolean isHighSWR = false;
boolean isSplitOn = false; boolean isSplitOn = false;
@@ -734,11 +722,11 @@ void Check_Cat(byte fromType)
case 0x02 : //Split On case 0x02 : //Split On
case 0x82: //Split Off case 0x82: //Split Off
CatSetSplit(CAT_BUFF[4] == 0x02); CatSetSplit(CAT_BUFF[4] == 0x02, fromType);
break; break;
case 0x03 : //Read Frequency and mode case 0x03 : //Read Frequency and mode
CatGetFreqMode(frequency); CatGetFreqMode(frequency, fromType);
break; break;
case 0x07 : //Set Operating Mode case 0x07 : //Set Operating Mode
@@ -755,24 +743,24 @@ void Check_Cat(byte fromType)
break; break;
case 0xDB: //Read uBITX EEPROM Data case 0xDB: //Read uBITX EEPROM Data
ReadEEPRom(); //Call by uBITX Manager Program ReadEEPRom(fromType); //Call by uBITX Manager Program
break; break;
case 0xBB: //Read FT-817 EEPROM Data (for comfirtable) case 0xBB: //Read FT-817 EEPROM Data (for comfirtable)
ReadEEPRom_FT817(); ReadEEPRom_FT817(fromType);
break; break;
case 0xDC: //Write uBITX EEPROM Data case 0xDC: //Write uBITX EEPROM Data
WriteEEPRom(); //Call by uBITX Manager Program WriteEEPRom(fromType); //Call by uBITX Manager Program
break; break;
case 0xBC: //Write FT-817 EEPROM Data (for comfirtable) case 0xBC: //Write FT-817 EEPROM Data (for comfirtable)
WriteEEPRom_FT817(fromType); WriteEEPRom_FT817(fromType);
break; break;
case 0xE7 : //Read RX Status case 0xE7 : //Read RX Status
CatRxStatus(); CatRxStatus(fromType);
break; break;
case 0xF7: //Read TX Status case 0xF7: //Read TX Status
CatTxStatus(); CatTxStatus(fromType);
break; break;
default: default:
/* /*

View File

@@ -696,6 +696,7 @@ byte lastMovedirection = 0; //0 : stop, 1 : cw, 2 : ccw
void doTuningWithThresHold(){ void doTuningWithThresHold(){
int s = 0; int s = 0;
unsigned long prev_freq; unsigned long prev_freq;
long incdecValue = 0;
if ((vfoActive == VFO_A && ((isDialLock & 0x01) == 0x01)) || if ((vfoActive == VFO_A && ((isDialLock & 0x01) == 0x01)) ||
(vfoActive == VFO_B && ((isDialLock & 0x02) == 0x02))) (vfoActive == VFO_B && ((isDialLock & 0x02) == 0x02)))
@@ -749,11 +750,9 @@ void doRIT(){
unsigned long old_freq = frequency; unsigned long old_freq = frequency;
if (knob < 0) if (knob < 0)
frequency -= (arTuneStep[tuneStepIndex -1]); // frequency -= 100l;
//frequency -= 100l;
else if (knob > 0) else if (knob > 0)
frequency += (arTuneStep[tuneStepIndex -1]); // frequency += 100;
//frequency += 100;
if (old_freq != frequency){ if (old_freq != frequency){
setFrequency(frequency); setFrequency(frequency);
@@ -909,13 +908,13 @@ void initSettings(){
if ((3 < tuneTXType && tuneTXType < 100) || 103 < tuneTXType || useHamBandCount < 1 || findedValidValueCount < 5) if ((3 < tuneTXType && tuneTXType < 100) || 103 < tuneTXType || useHamBandCount < 1 || findedValidValueCount < 5)
{ {
tuneTXType = 2; tuneTXType = 2;
//if empty band Information, auto insert default region 2 frequency range //if empty band Information, auto insert default region 1 frequency range
//This part is made temporary for people who have difficulty setting up, so can remove it when you run out of memory. //This part is made temporary for people who have difficulty setting up, so can remove it when you run out of memory.
useHamBandCount = 10; useHamBandCount = 10;
hamBandRange[0][0] = 1810; hamBandRange[0][1] = 2000; hamBandRange[0][0] = 1810; hamBandRange[0][1] = 2000;
hamBandRange[1][0] = 3500; hamBandRange[1][1] = 3800; hamBandRange[1][0] = 3500; hamBandRange[1][1] = 3800;
hamBandRange[2][0] = 5351; hamBandRange[2][1] = 5367; hamBandRange[2][0] = 5351; hamBandRange[2][1] = 5367;
hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 2 hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 1
hamBandRange[4][0] = 10100; hamBandRange[4][1] = 10150; hamBandRange[4][0] = 10100; hamBandRange[4][1] = 10150;
hamBandRange[5][0] = 14000; hamBandRange[5][1] = 14350; hamBandRange[5][0] = 14000; hamBandRange[5][1] = 14350;
hamBandRange[6][0] = 18068; hamBandRange[6][1] = 18168; hamBandRange[6][0] = 18068; hamBandRange[6][1] = 18168;
@@ -1087,7 +1086,7 @@ void setup()
//Serial.begin(9600); //Serial.begin(9600);
lcd.begin(16, 2); lcd.begin(16, 2);
printLineF(1, F("CECBT v1.01")); 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
@@ -1118,6 +1117,11 @@ void setup()
factory_alignment(); factory_alignment();
} }
//for debug
int dbgCnt = 0;
byte flasher = 0;
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC //Auto save Frequency and Mode with Protected eeprom life by KD8CEC
void checkAutoSaveFreqMode() void checkAutoSaveFreqMode()
{ {
@@ -1136,8 +1140,18 @@ void checkAutoSaveFreqMode()
//check time for Frequency auto save //check time for Frequency auto save
if (millis() - saveCheckTime > saveIntervalSec * 1000) if (millis() - saveCheckTime > saveIntervalSec * 1000)
{ {
FrequencyToVFO(1); if (vfoActive == VFO_A)
saveCheckTime = 0; //for reduce cpu use rate {
vfoA = frequency;
vfoA_mode = modeToByte();
storeFrequencyAndMode(1);
}
else
{
vfoB = frequency;
vfoB_mode = modeToByte();
storeFrequencyAndMode(2);
}
} }
} }
} }
@@ -1164,11 +1178,11 @@ void loop(){
if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 250) { if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 250) {
idle_process(); idle_process();
checkAutoSaveFreqMode(); //move here form out scope for reduce cpu use rate
beforeIdle_ProcessTime = millis(); beforeIdle_ProcessTime = millis();
} }
} //end of check TX Status } //end of check TX Status
//we check CAT after the encoder as it might put the radio into TX //we check CAT after the encoder as it might put the radio into TX
Check_Cat(inTx? 1 : 0); Check_Cat(inTx? 1 : 0);
checkAutoSaveFreqMode();
} }

View File

@@ -213,8 +213,6 @@ void updateLine2Buffer(char isDirectCall)
//meterType : 0 = S.Meter, 1 : P.Meter //meterType : 0 = S.Meter, 1 : P.Meter
void DisplayMeter(byte meterType, byte meterValue, char drawPosition) void DisplayMeter(byte meterType, byte meterValue, char drawPosition)
{ {
if (meterType == 0 || meterType == 1 || meterType == 2)
{
drawMeter(meterValue); //call original source code drawMeter(meterValue); //call original source code
int lineNumber = 0; int lineNumber = 0;
if ((displayOption1 & 0x01) == 0x01) if ((displayOption1 & 0x01) == 0x01)
@@ -224,7 +222,7 @@ void DisplayMeter(byte meterType, byte meterValue, char drawPosition)
for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6 for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6
lcd.write(lcdMeter[i]); lcd.write(lcdMeter[i]);
}
} }
byte testValue = 0; byte testValue = 0;

View File

@@ -90,13 +90,13 @@ void cwKeyUp(){
#define PDLSWAP 0x08 // 0 for normal, 1 for swap #define PDLSWAP 0x08 // 0 for normal, 1 for swap
#define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B #define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B
enum KSTYPE {IDLE, CHK_DIT, CHK_DAH, KEYED_PREP, KEYED, INTER_ELEMENT }; enum KSTYPE {IDLE, CHK_DIT, CHK_DAH, KEYED_PREP, KEYED, INTER_ELEMENT };
static unsigned long ktimer; static long ktimer;
unsigned char keyerState = IDLE; unsigned char keyerState = IDLE;
//Below is a test to reduce the keying error. do not delete lines //Below is a test to reduce the keying error. do not delete lines
//create by KD8CEC for compatible with new CW Logic //create by KD8CEC for compatible with new CW Logic
char update_PaddleLatch(byte isUpdateKeyState) { char update_PaddleLatch(byte isUpdateKeyState) {
unsigned char tmpKeyerControl = 0; unsigned char tmpKeyerControl;
int paddle = analogRead(ANALOG_KEYER); int paddle = analogRead(ANALOG_KEYER);
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo) if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
@@ -126,7 +126,9 @@ char update_PaddleLatch(byte isUpdateKeyState) {
// modified by KD8CEC // modified by KD8CEC
******************************************************************************/ ******************************************************************************/
void cwKeyer(void){ void cwKeyer(void){
byte paddle;
lastPaddle = 0; lastPaddle = 0;
int dot,dash;
bool continue_loop = true; bool continue_loop = true;
unsigned tmpKeyControl = 0; unsigned tmpKeyControl = 0;
@@ -172,9 +174,6 @@ void cwKeyer(void){
keyerControl &= ~(DIT_L + DAH_L); // clear both paddle latch bits keyerControl &= ~(DIT_L + DAH_L); // clear both paddle latch bits
keyerState = KEYED; // next state keyerState = KEYED; // next state
if (!inTx){ if (!inTx){
//DelayTime Option
delay_background(delayBeforeCWStartTime * 2, 2);
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 1);
@@ -207,7 +206,7 @@ void cwKeyer(void){
break; break;
} }
Check_Cat(2); Check_Cat(3);
} //end of while } //end of while
} }
else{ else{
@@ -215,9 +214,6 @@ void cwKeyer(void){
if (update_PaddleLatch(0) == DIT_L) { if (update_PaddleLatch(0) == DIT_L) {
// if we are here, it is only because the key is pressed // if we are here, it is only because the key is pressed
if (!inTx){ if (!inTx){
//DelayTime Option
delay_background(delayBeforeCWStartTime * 2, 2);
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 1);
@@ -235,14 +231,13 @@ void cwKeyer(void){
keyDown = 0; keyDown = 0;
stopTx(); stopTx();
} }
//if (!cwTimeout) //removed by KD8CEC if (!cwTimeout)
// return; return;
// got back to the beginning of the loop, if no further activity happens on straight key // got back to the beginning of the loop, if no further activity happens on straight key
// we will time out, and return out of this routine // we will time out, and return out of this routine
//delay(5); //delay(5);
//delay_background(5, 3); //removed by KD8CEC delay_background(5, 3);
//continue; //removed by KD8CEC continue;
return; //Tx stop control by Main Loop
} }
Check_Cat(2); Check_Cat(2);

View File

@@ -64,7 +64,7 @@ void menuBand(int btn){
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
tuneTXType = 0; tuneTXType = 0;
printLineF2(F("General mode")); printLineF2(F("Full range mode"));
} }
else { else {
tuneTXType = 2; tuneTXType = 2;
@@ -289,12 +289,17 @@ void menuSelectMode(int btn){
beforeMode = selectModeType; beforeMode = selectModeType;
while(!btnDown()){ while(!btnDown() && digitalRead(PTT) == HIGH){
//Display Mode Name //Display Mode Name
memset(c, 0, sizeof(c)); printLineF1(F("LSB USB CWL CWU"));
strcpy(c, " LSB USB CWL CWU"); if (selectModeType == 0)
c[selectModeType * 4] = '>'; printLineF1(F("LSB"));
printLine1(c); else if (selectModeType == 1)
printLineF1(F("USB"));
else if (selectModeType == 2)
printLineF1(F("CWL"));
else if (selectModeType == 3)
printLineF1(F("CWU"));
knob = enc_read(); knob = enc_read();
@@ -315,8 +320,7 @@ void menuSelectMode(int btn){
} }
} }
//Check_Cat(0); //To prevent disconnections Check_Cat(0); //To prevent disconnections
delay_background(50, 0);
} }
if (beforeMode != selectModeType) { if (beforeMode != selectModeType) {
@@ -358,15 +362,16 @@ void menuCHMemory(int btn, byte isMemoryToVfo){
int knob = 0; int knob = 0;
int selectChannel = 0; int selectChannel = 0;
byte isDisplayInfo = 1; byte isDisplayInfo = 1;
byte isCancel = 0;
int moveStep = 0; int moveStep = 0;
unsigned long resultFreq, tmpFreq = 0; unsigned long resultFreq, tmpFreq = 0;
byte loadMode = 0; byte loadMode = 0;
if (!btn){ if (!btn){
if (isMemoryToVfo == 1) if (isMemoryToVfo == 1)
printLineF2(F("Channel To VFO?")); printLine2("Channel To VFO?");
else else
printLineF2(F("VFO To Channel?")); printLine2("VFO To Channel?");
} }
else { else {
delay_background(500, 0); delay_background(500, 0);
@@ -467,7 +472,7 @@ void menuCHMemory(int btn, byte isMemoryToVfo){
else else
{ {
//Save current Frequency to Channel (selectChannel) //Save current Frequency to Channel (selectChannel)
EEPROM.put(CHANNEL_FREQ + 4 * selectChannel, (frequency & 0x1FFFFFFF) | (((unsigned long)modeToByte()) << 29) ); EEPROM.put(CHANNEL_FREQ + 4 * selectChannel, (frequency & 0x1FFFFFFF) | (modeToByte() << 29) );
printLine2("Saved Frequency"); printLine2("Saved Frequency");
} }
} }
@@ -486,7 +491,7 @@ void menuSetupKeyType(int btn){
printLineF2(F("Change Key Type?")); printLineF2(F("Change Key Type?"));
} }
else { else {
//printLineF2(F("Press to set Key")); //for reduce usable flash memory printLineF2(F("Press to set Key"));
delay_background(500, 0); delay_background(500, 0);
selectedKeyType = cwKeyType; selectedKeyType = cwKeyType;
@@ -535,6 +540,9 @@ void menuSetupKeyType(int btn){
keyerControl |= IAMBICB; keyerControl |= IAMBICB;
} }
//delay_background(2000, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(1000); menuClearExit(1000);
} }
} }
@@ -565,11 +573,18 @@ void menuADCMonitor(int btn){
adcPinA0 = analogRead(A0); //A0(BLACK, EncoderA) adcPinA0 = analogRead(A0); //A0(BLACK, EncoderA)
adcPinA1 = analogRead(A1); //A1(BROWN, EncoderB) adcPinA1 = analogRead(A1); //A1(BROWN, EncoderB)
adcPinA2 = analogRead(A2); //A2(RED, Function Key) adcPinA2 = analogRead(A2); //A2(RED, Function Key)
adcPinA3 = analogRead(A3); //A3(PTT) adcPinA3 = analogRead(A3); //A3(ORANGE, CW Key)
adcPinA6 = analogRead(A6); //A6(KEYER) adcPinA6 = analogRead(A6); //A6(BLUE, Ptt)
adcPinA7 = analogRead(A7); //A7(VIOLET, Spare) adcPinA7 = analogRead(A7); //A7(VIOLET, Spare)
if (adcPinA3 < 50) { /*
sprintf(c, "%4d %4d %4d", adcPinA0, adcPinA1, adcPinA2);
printLine1(c);
sprintf(c, "%4d %4d %4d", adcPinA3, adcPinA6, adcPinA7);
printLine2(c);
*/
if (adcPinA6 < 10) {
if (pressKeyTime == 0) if (pressKeyTime == 0)
pressKeyTime = millis(); pressKeyTime = millis();
else if (pressKeyTime < (millis() - 3000)) else if (pressKeyTime < (millis() - 3000))
@@ -608,11 +623,13 @@ void menuADCMonitor(int btn){
delay_background(200, 0); delay_background(200, 0);
} //end of while } //end of while
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0); menuClearExit(0);
} }
//VFO Toggle and save VFO Information, modified by KD8CEC //VFO Toggle and save VFO Information, modified by KD8CEC
void menuVfoToggle(int btn) void menuVfoToggle(int btn, char isUseDelayTime)
{ {
if (!btn){ if (!btn){
if (vfoActive == VFO_A) if (vfoActive == VFO_A)
@@ -632,6 +649,7 @@ void menuVfoToggle(int btn)
frequency = vfoA; frequency = vfoA;
saveCheckFreq = frequency; saveCheckFreq = frequency;
byteToMode(vfoA_mode, 0); byteToMode(vfoA_mode, 0);
//printLineF2(F("Selected VFO A"));
} }
else { else {
//vfoA = frequency; //vfoA = frequency;
@@ -647,11 +665,16 @@ void menuVfoToggle(int btn)
ritDisable(); ritDisable();
setFrequency(frequency); setFrequency(frequency);
//if (isUseDelayTime == 1) //Found Issue in wsjt-x Linux 32bit
// delay_background(500, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(0); menuClearExit(0);
} }
} }
//modified for reduce used flash memory by KD8CEC
void menuRitToggle(int btn){ void menuRitToggle(int btn){
if (!btn){ if (!btn){
if (ritOn == 1) if (ritOn == 1)
@@ -669,7 +692,9 @@ void menuRitToggle(int btn){
printLineF2(F("RIT is OFF")); printLineF2(F("RIT is OFF"));
ritDisable(); ritDisable();
} }
//delay_background(500, 0);
//printLine2ClearAndUpdate();
//menuOn = 0;
menuClearExit(500); menuClearExit(500);
} }
} }
@@ -739,18 +764,14 @@ void menuSetup(int btn){
else else
printLineF2(F("Setup Off?")); printLineF2(F("Setup Off?"));
}else { }else {
modeCalibrate = ! modeCalibrate;
/*
if (!modeCalibrate){ if (!modeCalibrate){
modeCalibrate = true; modeCalibrate = true;
//printLineF2(F("Setup:On")); printLineF2(F("Setup:On"));
} }
else { else {
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;
@@ -781,14 +802,14 @@ void menuCWSpeed(int btn){
return; return;
} }
printLineF1(F("Press to set WPM")); printLineF1(F("Press to set WPm"));
strcpy(b, "WPM:"); strcpy(b, "WPM:");
itoa(wpm,c, 10); itoa(wpm,c, 10);
strcat(b, c); strcat(b, c);
printLine2(b); printLine2(b);
delay_background(300, 0); delay_background(300, 0);
while(!btnDown()){ while(!btnDown() && digitalRead(PTT) == HIGH){
knob = enc_read(); knob = enc_read();
if (knob != 0){ if (knob != 0){
@@ -852,7 +873,8 @@ void menuSetupCwDelay(int btn){
int tmpCWDelay = cwDelayTime * 10; int tmpCWDelay = cwDelayTime * 10;
if (!btn){ if (!btn){
printLineF2(F("CW TX->RX Delay")); strcpy(b, "CW TX->RX Delay");
printLine2(b);
return; return;
} }
@@ -863,7 +885,7 @@ void menuSetupCwDelay(int btn){
printLine2(b); printLine2(b);
delay_background(300, 0); delay_background(300, 0);
while(!btnDown()){ while(!btnDown() && digitalRead(PTT) == HIGH){
knob = enc_read(); knob = enc_read();
if (knob != 0){ if (knob != 0){
if (tmpCWDelay > 3 && knob < 0) if (tmpCWDelay > 3 && knob < 0)
@@ -897,47 +919,34 @@ void menuSetupCwDelay(int btn){
//CW Time delay by KD8CEC //CW Time delay by KD8CEC
void menuSetupTXCWInterval(int btn){ void menuSetupTXCWInterval(int btn){
char needDisplayInformation = 1;
int knob = 0; int knob = 0;
int tmpTXCWInterval = delayBeforeCWStartTime * 2; int tmpTXCWInterval = delayBeforeCWStartTime * 2;
if (!btn){ if (!btn){
printLineF2(F("CW Start Delay")); strcpy(b, "CW Start Delay");
printLine2(b);
return; return;
} }
printLineF1(F("Press, set Delay")); printLineF1(F("Press, set Delay"));
/*
strcpy(b, "Start Delay:"); strcpy(b, "Start Delay:");
itoa(tmpTXCWInterval,c, 10); itoa(tmpTXCWInterval,c, 10);
strcat(b, c); strcat(b, c);
printLine2(b); printLine2(b);
*/
delay_background(300, 0); delay_background(300, 0);
while(!btnDown()){ while(!btnDown() && digitalRead(PTT) == HIGH){
if (needDisplayInformation == 1) {
strcpy(b, "Start Delay:");
itoa(tmpTXCWInterval,c, 10);
strcat(b, c);
printLine2(b);
needDisplayInformation = 0;
}
knob = enc_read(); knob = enc_read();
if (knob != 0){ if (knob != 0){
if (tmpTXCWInterval > 0 && knob < 0) if (tmpTXCWInterval > 0 && knob < 0)
tmpTXCWInterval -= 2; tmpTXCWInterval -= 2;
if (tmpTXCWInterval < 500 && knob > 0) if (tmpTXCWInterval < 500 && knob > 0)
tmpTXCWInterval += 2; tmpTXCWInterval += 2;
/*
strcpy(b, "Start Delay:"); strcpy(b, "Start Delay:");
itoa(tmpTXCWInterval,c, 10); itoa(tmpTXCWInterval,c, 10);
strcat(b, c); strcat(b, c);
printLine2(b); printLine2(b);
*/
needDisplayInformation = 1;
} }
//abort if this button is down //abort if this button is down
if (btnDown()) if (btnDown())
@@ -1272,6 +1281,8 @@ void menuSetupCwTone(int btn){
itoa(sideTone, b, 10); itoa(sideTone, b, 10);
printLine2(b); printLine2(b);
//delay(100);
//Check_Cat(0); //To prevent disconnections
delay_background(100, 0); delay_background(100, 0);
} }
noTone(CW_TONE); noTone(CW_TONE);
@@ -1298,22 +1309,19 @@ void setDialLock(byte tmpLock, byte fromMode) {
if (fromMode == 2 || fromMode == 3) return; if (fromMode == 2 || fromMode == 3) return;
//for reduce using flash memory
/*
if (tmpLock == 1) if (tmpLock == 1)
printLineF2(F("Dial Lock ON")); printLineF2(F("Dial Lock ON"));
else else
printLineF2(F("Dial Lock OFF")); printLineF2(F("Dial Lock OFF"));
*/
delay_background(1000, 0); delay_background(1000, 0);
printLine2ClearAndUpdate(); printLine2ClearAndUpdate();
} }
byte btnDownTimeCount; unsigned int btnDownTimeCount;
#define PRESS_ADJUST_TUNE 20 //1000msec 20 * 50 = 1000milisec #define PRESS_ADJUST_TUNE 1000
#define PRESS_LOCK_CONTROL 40 //2000msec 40 * 50 = 2000milisec #define PRESS_LOCK_CONTROL 2000
//Modified by KD8CEC //Modified by KD8CEC
void doMenu(){ void doMenu(){
@@ -1327,12 +1335,14 @@ 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);
//Check_Cat(0); //To prevent disconnections
delay_background(50, 0); delay_background(50, 0);
if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE)) { //Set Tune Step if (btnDownTimeCount++ == (PRESS_ADJUST_TUNE / 50)) { //Set Tune Step
printLineF2(F("Set Tune Step?")); printLineF2(F("Set Tune Step?"));
} }
else if (btnDownTimeCount > (PRESS_LOCK_CONTROL)) { //check long time Down Button -> 2.5 Second => Lock else if (btnDownTimeCount > (PRESS_LOCK_CONTROL / 50)) { //check long time Down Button -> 2.5 Second => Lock
if (vfoActive == VFO_A) if (vfoActive == VFO_A)
setDialLock((isDialLock & 0x01) == 0x01 ? 0 : 1, 0); //Reverse Dial lock setDialLock((isDialLock & 0x01) == 0x01 ? 0 : 1, 0); //Reverse Dial lock
else else
@@ -1343,12 +1353,12 @@ void doMenu(){
delay(50); //debounce delay(50); //debounce
//ADJUST TUNE STEP //ADJUST TUNE STEP
if (btnDownTimeCount > PRESS_ADJUST_TUNE) if (btnDownTimeCount > (PRESS_ADJUST_TUNE / 50))
{ {
printLineF1(F("Press to set")); printLineF1(F("Press to set step"));
isNeedDisplay = 1; //check to need display for display current value isNeedDisplay = 1; //check to need display for display current value
while (!btnDown()) while (digitalRead(PTT) == HIGH && !btnDown())
{ {
//Check_Cat(0); //To prevent disconnections //Check_Cat(0); //To prevent disconnections
//delay(50); //debounce //delay(50); //debounce
@@ -1382,7 +1392,7 @@ void doMenu(){
} }
} //end of while } //end of while
//printLineF2(F("Changed Step!")); //remarked for reduce program memory by KD8CEC printLineF2(F("Changed Step!"));
//SAVE EEPROM //SAVE EEPROM
EEPROM.put(TUNING_STEP, tuneStepIndex); EEPROM.put(TUNING_STEP, tuneStepIndex);
delay_background(500, 0); delay_background(500, 0);
@@ -1412,7 +1422,7 @@ void doMenu(){
else if (select < 10) else if (select < 10)
menuBand(btnState); menuBand(btnState);
else if (select < 20) else if (select < 20)
menuVfoToggle(btnState); menuVfoToggle(btnState, 1);
else if (select < 30) else if (select < 30)
menuSelectMode(btnState); menuSelectMode(btnState);
else if (select < 40) else if (select < 40)

View File

@@ -99,6 +99,8 @@ void initMeter(){
//0 ~ 25 : 30 over : + 10 //0 ~ 25 : 30 over : + 10
void drawMeter(int needle) { void drawMeter(int needle) {
//5Char + O over //5Char + O over
int drawCharLength = needle / 5;
int drawCharLengthLast = needle % 5;
int i; int i;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {