Updates to be compatible with iopcomm.h/iopcomm.cpp, and with the new

two-tone test mode.
This commit is contained in:
Rob French 2020-05-16 23:51:46 -05:00
parent c8b2110052
commit 681e01d019
4 changed files with 81 additions and 72 deletions

View File

@ -32,6 +32,8 @@
**************************************************************************/
#include <iopcomm.h>
#include "ubitx.h"
//for broken protocol
@ -48,55 +50,25 @@
#define CAT_MODE_FMN 0x88
#define ACK 0
// KC4UPR--uBITX IOP: prefixes to determine "mode" of serial transmission
#define CAT_PREFIX 0xC0
#define IOP_PREFIX 0xD0
#define EEPROM_READ_PREFIX 0xE0
#define EEPROM_WRITE_PREFIX 0xF0
#define IOP_MODE_COMMAND 0x00
#define IOP_START_TX_COMMAND 0x01
#define IOP_STOP_TX_COMMAND 0x02
#define IOP_MODE_SSB 0x00
#define IOP_MODE_DIGI 0x01
#define IOP_MODE_CW 0x02
/*
* KC4UPR - IOP update, 2020-05-03
*
* Send the current mode to the I/O Processor.
*
* NOTE: Not yet called from CAT, only from menu...
*/
void iopSendMode(char cw_mode, char is_usb, char digi_mode)
void iopSendMode(char cw_mode, char is_usb, char digi_mode, char is_test)
{
byte mode;
Serial.write(IOP_PREFIX | 2);
Serial.write(IOP_MODE_COMMAND);
if (cw_mode > 0)
mode = IOP_MODE_CW;
mode = MODE_CW;
else if (digi_mode > 0)
mode = IOP_MODE_DIGI;
mode = MODE_DIGI;
else if (is_test)
mode = MODE_TEST;
else
mode = IOP_MODE_SSB;
Serial.write(mode);
}
// Used to tell the IOP that we're transmitting, when it came via
// CAT (otherwise, IOP is the one who tells Raduino to start TX!).
void iopStartTx()
{
Serial.write(IOP_PREFIX | 1);
Serial.write(IOP_START_TX_COMMAND);
}
// Used to tell the IOP to stop transmitting, when it came via
// CAT (otherwise, IOP is the one who tells Raduino to stop TX!).
void iopStopTx()
{
Serial.write(IOP_PREFIX | 1);
Serial.write(IOP_STOP_TX_COMMAND);
mode = MODE_SSB;
sendIOPModeCommand(mode);
}
unsigned int skipTimeCount = 0;
@ -111,7 +83,7 @@ void SendCatData(byte sendCount)
//
// NOTE: Need to do some error checking at some point to ensure we don't
// try to send more than 15 bytes!!!
Serial.write(CAT_PREFIX | sendCount);
Serial.write(prefixAndLengthToByte(CAT_PREFIX, sendCount));
for (byte i = 0; i < sendCount; i++)
Serial.write(CAT_BUFF[i]);
@ -236,7 +208,7 @@ void CatSetPTT(boolean isPTTOn, byte fromType)
txCAT = true;
// KC4UPR - added the next line to tell the IOP we're transmitting
iopStartTx();
sendIOPStartTxCommand();
startTx(TX_SSB, 1);
//Exit menu, Memory Keyer... ETC
@ -252,7 +224,7 @@ void CatSetPTT(boolean isPTTOn, byte fromType)
if (inTx)
{
// KC4UPR - added the next line to tell the IOP we're not transmitting
iopStopTx();
sendIOPStopTxCommand();
stopTx();
txCAT = false;
@ -281,21 +253,33 @@ void CatSetMode(byte tmpMode, byte fromType)
if (!inTx)
{
if (tmpMode == CAT_MODE_CW)
{
cwMode = 1;
}
else if (tmpMode == CAT_MODE_USB)
{
cwMode = 0;
isUSB = true;
}
else
{
cwMode = 0;
isUSB = false;
}
switch(tmpMode) {
case CAT_MODE_CW:
cwMode = 2; // should be CWU
break;
case CAT_MODE_CWR:
cwMode = 1; // should be CWL
break;
case CAT_MODE_USB:
cwMode = 0;
digiMode = 0;
isUSB = true;
break;
case CAT_MODE_LSB:
cwMode = 0;
digiMode = 0;
isUSB = false;
break;
case CAT_MODE_DIG:
cwMode = 0;
digiMode = 1;
isUSB = true; // DGU - but need to eventually use the FT-817 customization
}
iopSendMode(cwMode, isUSB, digiMode, isTest);
setFrequency(frequency);
updateDisplay();
}
@ -318,7 +302,7 @@ void ReadEEPRom() //for remove warnings.
// KC4UPR--uBITX IOP: Adding an additional byte at the beginning that
// indicates that this is a "Memory Manager mode" transmission.
// Then we repeat some of the CAT_BUFF data.
Serial.write(EEPROM_READ_PREFIX);
Serial.write(prefixAndLengthToByte(RAD_EEPROM_READ_PREFIX, 5));
Serial.write(CAT_BUFF[0]);
Serial.write(CAT_BUFF[1]);
Serial.write(CAT_BUFF[2]);
@ -371,7 +355,7 @@ void WriteEEPRom(void) //for remove warning
// indicates that this is a "Memory Manager mode" transmission.
//
// Also indicates that we are going to be sending two bytes of data.
Serial.write(EEPROM_WRITE_PREFIX | 2);
Serial.write(prefixAndLengthToByte(RAD_EEPROM_WRITE_PREFIX, 2));
//Check Checksum
if (CAT_BUFF[3] != ((CAT_BUFF[0] + CAT_BUFF[1] + CAT_BUFF[2]) % 256))
@ -969,4 +953,8 @@ void Init_Cat(long baud, int portConfig)
{
Serial.begin(baud, portConfig);
Serial.flush();
// At start, immediately send mode to IOP. Currently, IOP has no way to
// request the mode.
iopSendMode(cwMode, isUSB, digiMode, isTest);
}

View File

@ -1,4 +1,4 @@
//Firmware Version
//Firmware Version
//+ : This symbol identifies the firmware.
// It was originally called 'CEC V1.072' but it is too long to waste the LCD window.
// I do not want to make this Firmware users's uBITX messy with my callsign.
@ -193,6 +193,7 @@ char splitOn = 0; //working split, uses VFO B as the transmit freque
char keyDown = 0; //in cw mode, denotes the carrier is being transmitted
char isUSB = 0; //upper sideband was selected, this is reset to the default for the
char isTest = 0; // two-tone test mode
char cwMode = 0; //compatible original source, and extend mode //if cwMode == 0, mode check : isUSB, cwMode > 0, mode Check : cwMode
//iscwMode = 0 : ssbmode, 1 :cwl, 2 : cwu, 3 : cwn (none tx)
char digiMode = 0; // 0: normal uBITX behavior (transmit LSB/USB when PTT is depressed)

View File

@ -443,6 +443,11 @@ void updateDisplay() {
strcpy(c, "DGU ");
else
strcpy(c, "DGL ");
} else if (isTest == 1) {
if (isUSB)
strcpy(c, "TTU ");
else
strcpy(c, "TTL ");
} else {
if (isUSB)
strcpy(c, "USB ");

View File

@ -149,6 +149,7 @@ byte modeToByte(){
//autoSetModebyFreq : 0
//autoSetModebyFreq : 1, if (modValue is not set, set mode by frequency)
void byteToMode(byte modeValue, byte autoSetModebyFreq){
isTest = false; // test never settable from EEPROM
isUSB = false;
cwMode = 0;
digiMode = 0;
@ -181,6 +182,15 @@ void byteToMode(byte modeValue, byte autoSetModebyFreq){
isUSB = true;
digiMode = 1;
break;
/*
case 8: // TTL
isUSB = false;
break;
case 9: // TTU
isUSB = true;
break;
*/
}
}
/* if (modeValue == 4) {
@ -973,7 +983,7 @@ void menuSelectMode(int btn){
}
else
{
//LSB, USB, CWL, CWU, DGL, DGU
//LSB, USB, CWL, CWU, DGL, DGU, TTL, TTU
if (cwMode == 0) {
if (isUSB == 0) {
selectModeType = 0; // LSB
@ -983,6 +993,10 @@ void menuSelectMode(int btn){
// modify if digital mode is set
if (digiMode > 0) {
selectModeType += (3 + digiMode);
// modify if two-tone test mode is set
} else if (isTest > 0) {
selectModeType += 5;
}
} else if (cwMode == 1) {
selectModeType = 2; // CWL
@ -999,29 +1013,30 @@ void menuSelectMode(int btn){
selectModeType = 3;*/
beforeMode = selectModeType;
selectModeType = getValueByKnob(11, selectModeType, 0, 5, 1, " LSB USB CWL CWU DGL DGU ", 4); //3 : Select Mode, targetValue, minKnobValue, maxKnobValue, stepSize
selectModeType = getValueByKnob(11, selectModeType, 0, 7, 1, " LSB USB CWL CWU DGL DGU TTL TTU", 4); //3 : Select Mode, targetValue, minKnobValue, maxKnobValue, stepSize
if (beforeMode != selectModeType)
{
//printLineF1(F("Changed Mode"));
if (selectModeType == 0) {
cwMode = 0; isUSB = 0; digiMode = 0;
}
else if (selectModeType == 1) {
cwMode = 0; isUSB = 1; digiMode = 0;
}
else if (selectModeType == 2) {
cwMode = 1; digiMode = 0;
}
else if (selectModeType == 3) {
cwMode = 2; digiMode = 0;
cwMode = 0; isUSB = 0; digiMode = 0; isTest = 0;
} else if (selectModeType == 1) {
cwMode = 0; isUSB = 1; digiMode = 0; isTest = 0;
} else if (selectModeType == 2) {
cwMode = 1; digiMode = 0; isTest = 0;
} else if (selectModeType == 3) {
cwMode = 2; digiMode = 0; isTest = 0;
} else if (selectModeType == 4) {
cwMode = 0; isUSB = 0; digiMode = 1;
cwMode = 0; isUSB = 0; digiMode = 1; isTest = 0;
} else if (selectModeType == 5) {
cwMode = 0; isUSB = 1; digiMode = 1;
cwMode = 0; isUSB = 1; digiMode = 1; isTest = 0;
} else if (selectModeType == 6) {
cwMode = 0; isUSB = 0; digiMode = 0; isTest = 1;
} else if (selectModeType == 7) {
cwMode = 0; isUSB = 1; digiMode = 0; isTest = 1;
}
// KC4UPR: sending mode to IOP
iopSendMode(cwMode, isUSB, digiMode);
iopSendMode(cwMode, isUSB, digiMode, isTest);
FrequencyToVFO(1);
}