Compare commits

..

25 Commits

Author SHA1 Message Date
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
6 changed files with 198 additions and 366 deletions

View File

@@ -1,7 +1,21 @@
#IMPORTANT INFORMATION #IMPORTANT INFORMATION
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
- Beta 0.26 and Beta 0.261, Beta 0.262, Beta 0.27 is complete test -Working on version 0.29 now. Download the source from the release section rather than the master branch version.
- You can download and use it. Master version is working now.
- 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 (Release section).
# Current work list (for Version 0.29)
1 Testing CAT Control with Software using hamlib on Linux
2 BFO setting based on current value - complete
3 Select Tune Step - Testing
4 Change Tune control type, Do not keep the original source - Complete
- Coded differently after clearing the original source
- Prevent malfunction by applying threshold
5 stabilize and remove many warning messages - by Pullrequest and merge
6 Study on improvement method for cw keying - need idea
- set ADC Range value
#NOTICE #NOTICE
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
@@ -46,6 +60,10 @@ Prepared or finished tasks for the next version
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
## REVISION RECORD ## REVISION RECORD
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

@@ -1,5 +1,4 @@
/************************************************************************* /*************************************************************************
KD8CEC's CAT Library for uBITX and HAM
This source code is written for uBITX, but it can also be used on other radios. This source code is written for uBITX, but it can also be used on other radios.
The CAT protocol is used by many radios to provide remote control to comptuers through The CAT protocol is used by many radios to provide remote control to comptuers through

View File

@@ -1,6 +1,4 @@
/************************************************************************* /*************************************************************************
KD8CEC's Memory Keyer for HAM
This source code is written for All amateur radio operator, This source code is written for All amateur radio operator,
I have not had amateur radio communication for a long time. CW has been I have not had amateur radio communication for a long time. CW has been
around for a long time, and I do not know what kind of keyer and keying around for a long time, and I do not know what kind of keyer and keying
@@ -15,7 +13,6 @@
I wrote this code myself, so there is no license restriction. I wrote this code myself, so there is no license restriction.
So this code allows anyone to write with confidence. So this code allows anyone to write with confidence.
But keep it as long as the original author of the code. But keep it as long as the original author of the code.
DE Ian KD8CEC
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by

View File

@@ -1,10 +1,4 @@
/** /**
Since KD8CEC Version 0.29, most of the original code is no longer available.
Most features(TX, Frequency Range, Ham Band, TX Control, CW delay, start Delay... more) have been added by KD8CEC.
However, the license rules are subject to the original source rules.
DE Ian KD8CEC
Original source comment -------------------------------------------------------------
* This source file is under General Public License version 3. * This source file is under General Public License version 3.
* *
* This verision uses a built-in Si5351 library * This verision uses a built-in Si5351 library
@@ -160,19 +154,6 @@ int count = 0; //to generally count ticks, loops, etc
#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)
//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_ST_FROM 349 //CW ADC Range STRAIGHT KEY from (Lower 8 bit)
#define CW_ADC_ST_TO 350 //CW ADC Range STRAIGHT KEY to (Lower 8 bit)
#define CW_ADC_DOT_FROM 351 //CW ADC Range DOT from (Lower 8 bit)
#define CW_ADC_DOT_TO 352 //CW ADC Range DOT to (Lower 8 bit)
#define CW_ADC_MOST_BIT2 353 //most 2bits of BOTH_TO, BOTH_FROM, DASH_TO, DASH_FROM
#define CW_ADC_DASH_FROM 354 //CW ADC Range DASH from (Lower 8 bit)
#define CW_ADC_DASH_TO 355 //CW ADC Range DASH to (Lower 8 bit)
#define CW_ADC_BOTH_FROM 356 //CW ADC Range BOTH from (Lower 8 bit)
#define CW_ADC_BOTH_TO 357 //CW ADC Range BOTH to (Lower 8 bit)
//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
@@ -258,16 +239,6 @@ byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
byte arTuneStep[5]; byte 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
//CW ADC Range
int cwAdcSTFrom = 0;
int cwAdcSTTo = 0;
int cwAdcDotFrom = 0;
int cwAdcDotTo = 0;
int cwAdcDashFrom = 0;
int cwAdcDashTo = 0;
int cwAdcBothFrom = 0;
int cwAdcBothTo = 0;
//Variables for auto cw mode //Variables for auto cw mode
byte isCWAutoMode = 0; //0 : none, 1 : CW_AutoMode_Menu_Selection, 2 : CW_AutoMode Sending byte isCWAutoMode = 0; //0 : none, 1 : CW_AutoMode_Menu_Selection, 2 : CW_AutoMode Sending
byte cwAutoTextCount = 0; //cwAutoText Count byte cwAutoTextCount = 0; //cwAutoText Count
@@ -597,13 +568,8 @@ applied Threshold for reduct errors, dial Lock, dynamic Step
byte threshold = 2; //noe action for count byte threshold = 2; //noe action for count
unsigned long lastEncInputtime = 0; unsigned long lastEncInputtime = 0;
int encodedSumValue = 0; int encodedSumValue = 0;
unsigned long lastTunetime = 0; //if continous moving, skip threshold processing
byte lastMovedirection = 0; //0 : stop, 1 : cw, 2 : ccw
#define skipThresholdTime 100
#define encodeTimeOut 1000 #define encodeTimeOut 1000
void doTuning(){
void doTuningWithThresHold(){
int s = 0; int s = 0;
unsigned long prev_freq; unsigned long prev_freq;
long incdecValue = 0; long incdecValue = 0;
@@ -620,8 +586,6 @@ void doTuningWithThresHold(){
if (s == 0) { if (s == 0) {
if (encodedSumValue != 0 && (millis() - encodeTimeOut) > lastEncInputtime) if (encodedSumValue != 0 && (millis() - encodeTimeOut) > lastEncInputtime)
encodedSumValue = 0; encodedSumValue = 0;
lastMovedirection = 0;
return; return;
} }
lastEncInputtime = millis(); lastEncInputtime = millis();
@@ -629,18 +593,16 @@ void doTuningWithThresHold(){
//for check moving direction //for check moving direction
encodedSumValue += (s > 0 ? 1 : -1); encodedSumValue += (s > 0 ? 1 : -1);
//check threshold and operator actions (hold dial speed = continous moving, skip threshold check) //check threshold
if ((lastTunetime < millis() - skipThresholdTime) && ((encodedSumValue * encodedSumValue) <= (threshold * threshold))) if ((encodedSumValue * encodedSumValue) <= (threshold * threshold))
return; return;
lastTunetime = millis();
//Valid Action without noise //Valid Action without noise
encodedSumValue = 0; encodedSumValue = 0;
prev_freq = frequency; prev_freq = frequency;
//incdecValue = tuningStep * s; //incdecValue = tuningStep * s;
frequency += (arTuneStep[tuneStepIndex -1] * s * (s * s < 10 ? 1 : 3)); //appield weight (s is speed) frequency += (arTuneStep[tuneStepIndex -1] * s);
if (prev_freq < 10000000l && frequency > 10000000l) if (prev_freq < 10000000l && frequency > 10000000l)
isUSB = true; isUSB = true;
@@ -718,10 +680,7 @@ void initSettings(){
EEPROM.get(VFO_B, vfoB); EEPROM.get(VFO_B, vfoB);
EEPROM.get(CW_SIDETONE, sideTone); EEPROM.get(CW_SIDETONE, sideTone);
EEPROM.get(CW_SPEED, cwSpeed); EEPROM.get(CW_SPEED, cwSpeed);
//End of original code
//----------------------------------------------------------------
//Add Lines by KD8CEC
//for custom source Section ============================= //for custom source Section =============================
//ID & Version Check from EEProm //ID & Version Check from EEProm
//if found different firmware, erase eeprom (32 //if found different firmware, erase eeprom (32
@@ -823,45 +782,6 @@ void initSettings(){
if (tuneStepIndex == 0) //New User if (tuneStepIndex == 0) //New User
tuneStepIndex = 3; tuneStepIndex = 3;
//CW Key ADC Range ======= adjust set value for reduce cw keying error
//by KD8CEC
unsigned int tmpMostBits = 0;
tmpMostBits = EEPROM.read(CW_ADC_MOST_BIT1);
cwAdcSTFrom = EEPROM.read(CW_ADC_ST_FROM) | ((tmpMostBits & 0x03) << 8);
cwAdcSTTo = EEPROM.read(CW_ADC_ST_TO) | ((tmpMostBits & 0x0C) << 6);
cwAdcDotFrom = EEPROM.read(CW_ADC_DOT_FROM) | ((tmpMostBits & 0x30) << 4);
cwAdcDotTo = EEPROM.read(CW_ADC_DOT_TO) | ((tmpMostBits & 0xC0) << 2);
tmpMostBits = EEPROM.read(CW_ADC_MOST_BIT2);
cwAdcDashFrom = EEPROM.read(CW_ADC_DASH_FROM) | ((tmpMostBits & 0x03) << 8);
cwAdcDashTo = EEPROM.read(CW_ADC_DASH_TO) | ((tmpMostBits & 0x0C) << 6);
cwAdcBothFrom = EEPROM.read(CW_ADC_BOTH_FROM) | ((tmpMostBits & 0x30) << 4);
cwAdcBothTo = EEPROM.read(CW_ADC_BOTH_TO) | ((tmpMostBits & 0xC0) << 2);
//default Value (for original hardware)
if (cwAdcSTFrom >= cwAdcSTTo)
{
cwAdcSTFrom = 0;
cwAdcSTTo = 50;
}
if (cwAdcBothFrom >= cwAdcBothTo)
{
cwAdcBothFrom = 51;
cwAdcBothTo = 300;
}
if (cwAdcDotFrom >= cwAdcDotTo)
{
cwAdcDotFrom = 301;
cwAdcDotTo = 600;
}
if (cwAdcDashFrom >= cwAdcDashTo)
{
cwAdcDashFrom = 601;
cwAdcDashTo = 800;
}
//end of CW Keying Variables
if (cwDelayTime < 1 || cwDelayTime > 250) if (cwDelayTime < 1 || cwDelayTime > 250)
cwDelayTime = 60; cwDelayTime = 60;
@@ -872,7 +792,6 @@ void initSettings(){
if (vfoB_mode < 2) if (vfoB_mode < 2)
vfoB_mode = 3; vfoB_mode = 3;
//original code with modified by kd8cec
if (usbCarrier > 12010000l || usbCarrier < 11990000l) if (usbCarrier > 12010000l || usbCarrier < 11990000l)
usbCarrier = 11995000l; usbCarrier = 11995000l;
@@ -885,9 +804,8 @@ void initSettings(){
vfoB = 14150000l; vfoB = 14150000l;
vfoB_mode = 3; vfoB_mode = 3;
} }
//end of original code section
//for protect eeprom life by KD8CEC //for protect eeprom life
vfoA_eeprom = vfoA; vfoA_eeprom = vfoA;
vfoB_eeprom = vfoB; vfoB_eeprom = vfoB;
vfoA_mode_eeprom = vfoA_mode; vfoA_mode_eeprom = vfoA_mode;
@@ -958,7 +876,7 @@ void setup()
//Serial.begin(9600); //Serial.begin(9600);
lcd.begin(16, 2); lcd.begin(16, 2);
printLineF(1, F("CECBT v0.30")); printLineF(1, F("CECBT v0.27"));
Init_Cat(38400, SERIAL_8N1); Init_Cat(38400, SERIAL_8N1);
initMeter(); //not used in this build initMeter(); //not used in this build
@@ -1045,7 +963,7 @@ void loop(){
if (ritOn) if (ritOn)
doRIT(); doRIT();
else else
doTuningWithThresHold(); doTuning();
} }
//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

View File

@@ -1,9 +1,8 @@
/** /**
CW Keyer * CW Keyer
CW Key logic change with ron's code (ubitx_keyer.cpp) * CW Key logic change with ron's code (ubitx_keyer.cpp) <=== **********************************
Ron's logic has been modified to work with the original uBITX by KD8CEC * The file you are working on. The code only applies and is still in testing. <==== ***********
*
Original Comment ----------------------------------------------------------------------------
* The CW keyer handles either a straight key or an iambic / paddle key. * The CW keyer handles either a straight key or an iambic / paddle key.
* They all use just one analog input line. This is how it works. * They all use just one analog input line. This is how it works.
* The analog line has the internal pull-up resistor enabled. * The analog line has the internal pull-up resistor enabled.
@@ -83,64 +82,104 @@ void cwKeyUp(){
cwTimeout = millis() + cwDelayTime * 10; cwTimeout = millis() + cwDelayTime * 10;
} }
//Variables for Ron's new logic /*****************************************************************************
// New logic, by RON
// modified by KD8CEC
******************************************************************************/
#define DIT_L 0x01 // DIT latch #define DIT_L 0x01 // DIT latch
#define DAH_L 0x02 // DAH latch #define DAH_L 0x02 // DAH latch
#define DIT_PROC 0x04 // DIT is being processed #define DIT_PROC 0x04 // DIT is being processed
#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 long ktimer; static long ktimer;
bool Iambic_Key = true; bool Iambic_Key = true;
unsigned char keyerControl = IAMBICB; unsigned char keyerControl = IAMBICB;
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.
//create by KD8CEC for compatible with new CW Logic /*
char update_PaddleLatch(byte isUpdateKeyState) { char update_PaddleLatch(byte isUpdateKeyState) {
unsigned char tmpKeyerControl;
int paddle = analogRead(ANALOG_KEYER); int paddle = analogRead(ANALOG_KEYER);
unsigned char tmpKeyerControl;
if (paddle > cwAdcDashFrom && paddle < cwAdcDashTo) if (paddle > 800) // above 4v is up
tmpKeyerControl = 0;
//else if (paddle > 600) // 4-3v is DASH
else if (paddle > 693 && paddle < 700) // 4-3v is DASH
tmpKeyerControl |= DAH_L; tmpKeyerControl |= DAH_L;
else if (paddle > cwAdcDotFrom && paddle < cwAdcDotTo) //else if (paddle > 300) //1-2v is DOT
else if (paddle > 323 && paddle < 328) //1-2v is DOT
tmpKeyerControl |= DIT_L; tmpKeyerControl |= DIT_L;
else if (paddle > cwAdcBothFrom && paddle < cwAdcBothTo) //else if (paddle > 50)
tmpKeyerControl |= (DAH_L | DIT_L) ; else if (paddle > 280 && paddle < 290)
tmpKeyerControl |= (DAH_L | DIT_L) ; //both are between 1 and 2v
else else
{ tmpKeyerControl = 0 ; //STRAIGHT KEY in original code
if (Iambic_Key) //keyerControl |= (DAH_L | DIT_L) ; //STRAIGHT KEY in original code
tmpKeyerControl = 0 ;
else if (paddle > cwAdcSTFrom && paddle < cwAdcSTTo) if (isUpdateKeyState == 1) {
tmpKeyerControl = DIT_L ; keyerControl |= tmpKeyerControl;
else
tmpKeyerControl = 0 ;
} }
if (isUpdateKeyState == 1) byte buff[17];
keyerControl |= tmpKeyerControl; sprintf(buff, "Key : %d", paddle);
if (tmpKeyerControl > 0)
printLine2(buff);
return tmpKeyerControl; return tmpKeyerControl;
//if (analogRead(ANALOG_DOT) < 600 ) keyerControl |= DIT_L;
//if (analogRead(ANALOG_DASH) < 600 ) keyerControl |= DAH_L;
}
*/
//create by KD8CEC for compatible with new CW Logic
char update_PaddleLatch(byte isUpdateKeyState) {
int paddle = analogRead(ANALOG_KEYER);
unsigned char tmpKeyerControl;
if (paddle > 800) // above 4v is up
tmpKeyerControl = 0;
else if (paddle > 600) // 4-3v is DASH
tmpKeyerControl |= DAH_L;
else if (paddle > 300) //1-2v is DOT
tmpKeyerControl |= DIT_L;
else if (paddle > 50)
tmpKeyerControl |= (DAH_L | DIT_L) ; //both are between 1 and 2v
else
tmpKeyerControl = 0 ; //STRAIGHT KEY in original code
//keyerControl |= (DAH_L | DIT_L) ; //STRAIGHT KEY in original code
if (isUpdateKeyState == 1) {
keyerControl |= tmpKeyerControl;
}
return tmpKeyerControl;
//if (analogRead(ANALOG_DOT) < 600 ) keyerControl |= DIT_L;
//if (analogRead(ANALOG_DASH) < 600 ) keyerControl |= DAH_L;
} }
/*****************************************************************************
// New logic, by RON
// modified by KD8CEC
******************************************************************************/
void cwKeyer(void){ void cwKeyer(void){
byte paddle; byte paddle;
lastPaddle = 0; lastPaddle = 0;
int dot,dash; int dot,dash;
bool continue_loop = true; bool continue_loop = true;
unsigned tmpKeyControl = 0; unsigned tmpKeyControl = 0;
if( Iambic_Key ){
if( Iambic_Key ) { while(continue_loop){
while(continue_loop) {
switch (keyerState) { switch (keyerState) {
case IDLE: case IDLE:
tmpKeyControl = update_PaddleLatch(0); tmpKeyControl = update_PaddleLatch(0);
if ( tmpKeyControl == DAH_L || tmpKeyControl == DIT_L || if ( tmpKeyControl == DAH_L || tmpKeyControl == DIT_L ||
tmpKeyControl == (DAH_L | DIT_L) || (keyerControl & 0x03)) { tmpKeyControl == (DAH_L | DIT_L) || (keyerControl & 0x03)) {
//DIT or DASH or current state DIT & DASH
//(analogRead(ANALOG_DOT) < 600) || //DIT
//(analogRead(ANALOG_DASH) < 600) || //DIT
// (keyerControl & 0x03)) {
update_PaddleLatch(1); update_PaddleLatch(1);
keyerState = CHK_DIT; keyerState = CHK_DIT;
}else{ }else{
@@ -178,7 +217,7 @@ void cwKeyer(void){
if (!inTx){ if (!inTx){
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 0);
} }
cwKeydown(); cwKeydown();
break; break;
@@ -207,27 +246,24 @@ void cwKeyer(void){
} }
break; break;
} }
} //end of while
Check_Cat(3); }else{
} //end of while
}
else{
while(1){ while(1){
//if (analogRead(ANALOG_DOT) < 600){
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){
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 0);
} }
// start the transmission)
cwKeydown(); cwKeydown();
//while ( analogRead(ANALOG_DOT) < 600 ) delay(1);
while ( update_PaddleLatch(0) == DIT_L ) while ( update_PaddleLatch(0) == DIT_L ) delay(1);
delay_background(1, 3);
cwKeyUp(); cwKeyUp();
} }else{
else{
if (0 < cwTimeout && cwTimeout < millis()){ if (0 < cwTimeout && cwTimeout < millis()){
cwTimeout = 0; cwTimeout = 0;
keyDown = 0; keyDown = 0;
@@ -237,15 +273,13 @@ void cwKeyer(void){
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);
continue; continue;
} }
} //end of else
Check_Cat(2);
} //end of while
} //end of elese
} }
}
//======================================================================================= //=======================================================================================

View File

@@ -13,7 +13,6 @@
#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
void menuBand(int btn){ void menuBand(int btn){
int knob = 0; int knob = 0;
int stepChangeCount = 0; int stepChangeCount = 0;
@@ -118,7 +117,6 @@ void menuBand(int btn){
menuOn = 0; menuOn = 0;
} }
//Convert Mode, Number by KD8CEC
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM //0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
byte modeToByte(){ byte modeToByte(){
if (isUSB) if (isUSB)
@@ -127,15 +125,12 @@ byte modeToByte(){
return 2; return 2;
} }
//Convert Number to Mode by KD8CEC
void byteToMode(byte modeValue){ void byteToMode(byte modeValue){
if (modeValue == 3) if (modeValue == 3)
isUSB = 1; isUSB = 1;
else else
isUSB = 0; isUSB = 0;
} }
//Convert Number to Mode by KD8CEC
void byteWithFreqToMode(byte modeValue){ void byteWithFreqToMode(byte modeValue){
if (modeValue == 3) if (modeValue == 3)
isUSB = 1; isUSB = 1;
@@ -145,7 +140,6 @@ void byteWithFreqToMode(byte modeValue){
isUSB = 0; isUSB = 0;
} }
//VFO Toggle and save VFO Information, modified by KD8CEC
void menuVfoToggle(int btn, char isUseDelayTime) void menuVfoToggle(int btn, char isUseDelayTime)
{ {
if (!btn){ if (!btn){
@@ -235,123 +229,6 @@ void menuSidebandToggle(int btn){
} }
} }
//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;
}
}
//Analog pin monitoring with CW Key and function keys connected.
//by KD8CEC
void menuADCMonitor(int btn){
int adcPinA0 = 0; //A0(BLACK, EncoderA)
int adcPinA1 = 0; //A1(BROWN, EncoderB)
int adcPinA2 = 0; //A2(RED, Function Key)
int adcPinA3 = 0; //A3(ORANGE, CW Key)
int adcPinA6 = 0; //A6(BLUE, Ptt)
int adcPinA7 = 0; //A7(VIOLET, Spare)
unsigned long pressKeyTime = 0;
if (!btn){
printLineF2(F("ADC Line Monitor"));
return;
}
printLineF2(F("Exit:Long PTT"));
delay_background(2000, 0);
printLineF1(F("A0 A1 A2"));
printLineF2(F("A3 A6 A7"));
delay_background(3000, 0);
while (true) {
adcPinA0 = analogRead(A0); //A0(BLACK, EncoderA)
adcPinA1 = analogRead(A1); //A1(BROWN, EncoderB)
adcPinA2 = analogRead(A2); //A2(RED, Function Key)
adcPinA3 = analogRead(A3); //A3(ORANGE, CW Key)
adcPinA6 = analogRead(A6); //A6(BLUE, Ptt)
adcPinA7 = analogRead(A7); //A7(VIOLET, Spare)
/*
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)
pressKeyTime = millis();
else if (pressKeyTime < (millis() - 3000))
break;
}
else
pressKeyTime = 0;
ltoa(adcPinA0, c, 10);
//strcat(b, c);
strcpy(b, c);
strcat(b, ", ");
ltoa(adcPinA1, c, 10);
strcat(b, c);
strcat(b, ", ");
ltoa(adcPinA2, c, 10);
strcat(b, c);
printLine1(b);
//strcpy(b, " ");
ltoa(adcPinA3, c, 10);
strcpy(b, c);
strcat(b, ", ");
ltoa(adcPinA6, c, 10);
strcat(b, c);
strcat(b, ", ");
ltoa(adcPinA7, c, 10);
strcat(b, c);
printLine2(b);
delay_background(200, 0);
} //end of while
printLine2ClearAndUpdate();
menuOn = 0;
}
//Function to disbled transmission
//by KD8CEC
void menuTxOnOff(int btn, byte optionType){ void menuTxOnOff(int btn, byte optionType){
if (!btn){ if (!btn){
if ((isTxType & optionType) == 0) if ((isTxType & optionType) == 0)
@@ -465,7 +342,6 @@ void menuCWSpeed(int btn){
menuOn = 0; menuOn = 0;
} }
//Builtin CW Keyer Logic by KD8CEC
void menuCWAutoKey(int btn){ void menuCWAutoKey(int btn){
if (!btn){ if (!btn){
printLineF2(F("CW AutoKey Mode?")); printLineF2(F("CW AutoKey Mode?"));
@@ -489,7 +365,6 @@ void menuCWAutoKey(int btn){
menuOn = 0; menuOn = 0;
} }
//Modified by KD8CEC
void menuSetupCwDelay(int btn){ void menuSetupCwDelay(int btn){
int knob = 0; int knob = 0;
int tmpCWDelay = cwDelayTime * 10; int tmpCWDelay = cwDelayTime * 10;
@@ -538,7 +413,6 @@ void menuSetupCwDelay(int btn){
menuOn = 0; menuOn = 0;
} }
//CW Time delay by KD8CEC
void menuSetupTXCWInterval(int btn){ void menuSetupTXCWInterval(int btn){
int knob = 0; int knob = 0;
int tmpTXCWInterval = delayBeforeCWStartTime * 2; int tmpTXCWInterval = delayBeforeCWStartTime * 2;
@@ -750,7 +624,6 @@ void printCarrierFreq(unsigned long freq){
printLine2(c); printLine2(c);
} }
//modified by KD8CEC (just 1 line remarked //usbCarrier = ...
void menuSetupCarrier(int btn){ void menuSetupCarrier(int btn){
int knob = 0; int knob = 0;
unsigned long prevCarrier; unsigned long prevCarrier;
@@ -804,7 +677,6 @@ void menuSetupCarrier(int btn){
menuOn = 0; menuOn = 0;
} }
//Modified by KD8CEC
void menuSetupCwTone(int btn){ void menuSetupCwTone(int btn){
int knob = 0; int knob = 0;
int prev_sideTone; int prev_sideTone;
@@ -853,7 +725,6 @@ void menuSetupCwTone(int btn){
menuOn = 0; menuOn = 0;
} }
//Lock Dial move by KD8CEC
void setDialLock(byte tmpLock, byte fromMode) { void setDialLock(byte tmpLock, byte fromMode) {
if (tmpLock == 1) if (tmpLock == 1)
isDialLock |= (vfoActive == VFO_A ? 0x01 : 0x02); isDialLock |= (vfoActive == VFO_A ? 0x01 : 0x02);
@@ -876,7 +747,6 @@ unsigned int btnDownTimeCount;
#define PRESS_ADJUST_TUNE 1000 #define PRESS_ADJUST_TUNE 1000
#define PRESS_LOCK_CONTROL 2000 #define PRESS_LOCK_CONTROL 2000
//Modified by KD8CEC
void doMenu(){ void doMenu(){
int select=0, i,btnState; int select=0, i,btnState;
char isNeedDisplay = 0; char isNeedDisplay = 0;
@@ -960,7 +830,7 @@ void doMenu(){
btnState = btnDown(); btnState = btnDown();
if (i > 0){ if (i > 0){
if (modeCalibrate && select + i < 170) if (modeCalibrate && select + i < 150)
select += i; select += i;
if (!modeCalibrate && select + i < 80) if (!modeCalibrate && select + i < 80)
select += i; select += i;
@@ -998,12 +868,8 @@ void doMenu(){
else if (select < 130 && modeCalibrate) else if (select < 130 && modeCalibrate)
menuSetupTXCWInterval(btnState); menuSetupTXCWInterval(btnState);
else if (select < 140 && modeCalibrate) else if (select < 140 && modeCalibrate)
menuSetupKeyType(btnState);
else if (select < 150 && modeCalibrate)
menuADCMonitor(btnState);
else if (select < 160 && modeCalibrate)
menuTxOnOff(btnState, 0x01); //TX OFF / ON menuTxOnOff(btnState, 0x01); //TX OFF / ON
else if (select < 170 && modeCalibrate) else if (select < 150 && modeCalibrate)
menuExit(btnState); menuExit(btnState);
Check_Cat(0); //To prevent disconnections Check_Cat(0); //To prevent disconnections