Compare commits
12 Commits
v0.33
...
version1.0
Author | SHA1 | Date | |
---|---|---|---|
|
e0f9148972 | ||
|
81333e7af4 | ||
|
ed767f2e34 | ||
|
1e9576ddc2 | ||
|
a7684284d2 | ||
|
3b4aaa664c | ||
|
14888bb7d7 | ||
|
57cd385b8a | ||
|
60777178a8 | ||
|
dd68b38454 | ||
|
d229a10092 | ||
|
3d019cdd44 |
@@ -109,7 +109,8 @@ 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;
|
||||||
@@ -149,15 +150,21 @@ void CatGetFreqMode(unsigned long freq, byte fromType)
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@@ -193,7 +200,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, 0);
|
menuVfoToggle(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSendACK)
|
if (isSendACK)
|
||||||
@@ -232,7 +239,8 @@ 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
|
||||||
@@ -255,7 +263,8 @@ void ReadEEPRom(byte fromType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//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;
|
||||||
@@ -275,7 +284,8 @@ void WriteEEPRom(byte fromType)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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];
|
||||||
@@ -601,7 +611,8 @@ 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;
|
||||||
|
|
||||||
@@ -621,7 +632,8 @@ void CatRxStatus(byte fromType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
||||||
@@ -722,11 +734,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, fromType);
|
CatSetSplit(CAT_BUFF[4] == 0x02);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x03 : //Read Frequency and mode
|
case 0x03 : //Read Frequency and mode
|
||||||
CatGetFreqMode(frequency, fromType);
|
CatGetFreqMode(frequency);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x07 : //Set Operating Mode
|
case 0x07 : //Set Operating Mode
|
||||||
@@ -743,24 +755,24 @@ void Check_Cat(byte fromType)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xDB: //Read uBITX EEPROM Data
|
case 0xDB: //Read uBITX EEPROM Data
|
||||||
ReadEEPRom(fromType); //Call by uBITX Manager Program
|
ReadEEPRom(); //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(fromType);
|
ReadEEPRom_FT817();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xDC: //Write uBITX EEPROM Data
|
case 0xDC: //Write uBITX EEPROM Data
|
||||||
WriteEEPRom(fromType); //Call by uBITX Manager Program
|
WriteEEPRom(); //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(fromType);
|
CatRxStatus();
|
||||||
break;
|
break;
|
||||||
case 0xF7: //Read TX Status
|
case 0xF7: //Read TX Status
|
||||||
CatTxStatus(fromType);
|
CatTxStatus();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/*
|
/*
|
||||||
|
@@ -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
|
||||||
|
@@ -156,11 +156,12 @@ int count = 0; //to generally count ticks, loops, etc
|
|||||||
#define VFO_B_MODE 257
|
#define VFO_B_MODE 257
|
||||||
#define CW_DELAY 258
|
#define CW_DELAY 258
|
||||||
#define CW_START 259
|
#define CW_START 259
|
||||||
#define HAM_BAND_COUNT 260 //
|
#define HAM_BAND_COUNT 260 //
|
||||||
#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
|
||||||
@@ -691,7 +696,6 @@ 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)))
|
||||||
@@ -745,36 +749,19 @@ void doRIT(){
|
|||||||
unsigned long old_freq = frequency;
|
unsigned long old_freq = frequency;
|
||||||
|
|
||||||
if (knob < 0)
|
if (knob < 0)
|
||||||
frequency -= 100l;
|
frequency -= (arTuneStep[tuneStepIndex -1]); //
|
||||||
|
//frequency -= 100l;
|
||||||
else if (knob > 0)
|
else if (knob > 0)
|
||||||
frequency += 100;
|
frequency += (arTuneStep[tuneStepIndex -1]); //
|
||||||
|
//frequency += 100;
|
||||||
|
|
||||||
if (old_freq != frequency){
|
if (old_freq != frequency){
|
||||||
setFrequency(frequency);
|
setFrequency(frequency);
|
||||||
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 +793,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
|
||||||
@@ -906,13 +909,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 1 frequency range
|
//if empty band Information, auto insert default region 2 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 1
|
hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 2
|
||||||
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;
|
||||||
@@ -926,8 +929,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 +1006,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 +1087,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 v1.01"));
|
||||||
|
|
||||||
Init_Cat(38400, SERIAL_8N1);
|
Init_Cat(38400, SERIAL_8N1);
|
||||||
initMeter(); //not used in this build
|
initMeter(); //not used in this build
|
||||||
@@ -1103,7 +1106,7 @@ void setup()
|
|||||||
|
|
||||||
initPorts();
|
initPorts();
|
||||||
|
|
||||||
byteToMode(vfoA_mode);
|
byteToMode(vfoA_mode, 0);
|
||||||
initOscillators();
|
initOscillators();
|
||||||
|
|
||||||
frequency = vfoA;
|
frequency = vfoA;
|
||||||
@@ -1115,14 +1118,7 @@ void setup()
|
|||||||
factory_alignment();
|
factory_alignment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC
|
||||||
/**
|
|
||||||
* The loop checks for keydown, ptt, function button and tuning.
|
|
||||||
*/
|
|
||||||
//for debug
|
|
||||||
int dbgCnt = 0;
|
|
||||||
byte flasher = 0;
|
|
||||||
|
|
||||||
void checkAutoSaveFreqMode()
|
void checkAutoSaveFreqMode()
|
||||||
{
|
{
|
||||||
//when tx or ritOn, disable auto save
|
//when tx or ritOn, disable auto save
|
||||||
@@ -1140,18 +1136,8 @@ void checkAutoSaveFreqMode()
|
|||||||
//check time for Frequency auto save
|
//check time for Frequency auto save
|
||||||
if (millis() - saveCheckTime > saveIntervalSec * 1000)
|
if (millis() - saveCheckTime > saveIntervalSec * 1000)
|
||||||
{
|
{
|
||||||
if (vfoActive == VFO_A)
|
FrequencyToVFO(1);
|
||||||
{
|
saveCheckTime = 0; //for reduce cpu use rate
|
||||||
vfoA = frequency;
|
|
||||||
vfoA_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vfoB = frequency;
|
|
||||||
vfoB_mode = modeToByte();
|
|
||||||
storeFrequencyAndMode(2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1178,11 +1164,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();
|
|
||||||
}
|
}
|
||||||
|
@@ -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[12] = 'z';
|
||||||
}
|
}
|
||||||
line2Buffer[11] = 'H';
|
|
||||||
line2Buffer[12] = 'z';
|
|
||||||
|
|
||||||
line2Buffer[13] = ' ';
|
line2Buffer[13] = ' ';
|
||||||
//if (
|
//if (
|
||||||
@@ -196,16 +213,18 @@ 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)
|
||||||
{
|
{
|
||||||
drawMeter(meterValue); //call original source code
|
if (meterType == 0 || meterType == 1 || meterType == 2)
|
||||||
int lineNumber = 0;
|
{
|
||||||
if ((displayOption1 & 0x01) == 0x01)
|
drawMeter(meterValue); //call original source code
|
||||||
lineNumber = 1;
|
int lineNumber = 0;
|
||||||
|
if ((displayOption1 & 0x01) == 0x01)
|
||||||
|
lineNumber = 1;
|
||||||
|
|
||||||
lcd.setCursor(drawPosition, lineNumber);
|
lcd.setCursor(drawPosition, lineNumber);
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6
|
|
||||||
lcd.write(lcdMeter[i]);
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6
|
||||||
|
lcd.write(lcdMeter[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
byte testValue = 0;
|
byte testValue = 0;
|
||||||
@@ -215,6 +234,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)
|
||||||
|
@@ -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 long ktimer;
|
static unsigned 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;
|
unsigned char tmpKeyerControl = 0;
|
||||||
int paddle = analogRead(ANALOG_KEYER);
|
int paddle = analogRead(ANALOG_KEYER);
|
||||||
|
|
||||||
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
|
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
|
||||||
@@ -126,9 +126,7 @@ 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;
|
||||||
|
|
||||||
@@ -174,6 +172,9 @@ 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);
|
||||||
@@ -206,7 +207,7 @@ void cwKeyer(void){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Check_Cat(3);
|
Check_Cat(2);
|
||||||
} //end of while
|
} //end of while
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -214,6 +215,9 @@ 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);
|
||||||
@@ -231,13 +235,14 @@ void cwKeyer(void){
|
|||||||
keyDown = 0;
|
keyDown = 0;
|
||||||
stopTx();
|
stopTx();
|
||||||
}
|
}
|
||||||
if (!cwTimeout)
|
//if (!cwTimeout) //removed by KD8CEC
|
||||||
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);
|
//delay_background(5, 3); //removed by KD8CEC
|
||||||
continue;
|
//continue; //removed by KD8CEC
|
||||||
|
return; //Tx stop control by Main Loop
|
||||||
}
|
}
|
||||||
|
|
||||||
Check_Cat(2);
|
Check_Cat(2);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -99,8 +99,6 @@ 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++) {
|
||||||
@@ -235,7 +233,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