diff --git a/TeensyDSP/TeensyDSP.ino b/TeensyDSP/TeensyDSP.ino index 58ca27b..97aaf2c 100644 --- a/TeensyDSP/TeensyDSP.ino +++ b/TeensyDSP/TeensyDSP.ino @@ -232,7 +232,7 @@ void sendCommand1Num(char varIndex, char sendValue) //======================================================= int i2cCommand = 0; -void CalculateCoeff(uint8_t freqIndex); +void calculateCoeff(uint8_t freqIndex); char forwardBuff[MAX_FORWARD_BUFF_LENGTH + 1]; static int nowBuffIndex = 0; @@ -249,7 +249,7 @@ char FFTToUartIdleCount = 0; elapsedMillis sinceForward = 0; uint8_t responseCommand = 0; // -uint8_t TXStatus = 0; //0:RX, 1:TX +bool isTX = false; void responseConfig() { if (responseCommand == 2) @@ -357,7 +357,7 @@ char commandParser(int lastIndex) else if (cmd1 >= 100 && cmd1 <= 145) { cwDecodeHz = cmd1 - 100; - CalculateCoeff(cwDecodeHz); + calculateCoeff(cwDecodeHz); DSPType = 2; EEPROM.put(EEPROM_DSPTYPE, DSPType); EEPROM.put(EEPROM_CW_FREQ, cwDecodeHz); @@ -383,12 +383,12 @@ char commandParser(int lastIndex) { if (commandVal == 0) //RX { - TXStatus = 0; + isTX = false; SMeterToUartIdleCount = 0; } else if (commandVal == 1) //TX { - TXStatus = 1; + isTX = true; SMeterToUartIdleCount = 0; } } @@ -462,7 +462,7 @@ void forwardData(void) } } -void SendMeterData(uint8_t isSend) +void sendMeterData(uint8_t isSend) { //basic : 1.5Khz int newScaledSMeter = 0; @@ -638,10 +638,16 @@ void setup() Serial1.flush(); SAMPLE_INTERVAL = round(1000000 * (1.0 / SAMPLE_FREQUENCY)); - //CalculateCoeff(cwDecodeHz); //Set 750Hz //9 * 50 + 300 = 750Hz + //calculateCoeff(cwDecodeHz); //Set 750Hz //9 * 50 + 300 = 750Hz //Serial1.println("Start..."); } +/*! + @brief Receive a command via I2C. The most recent command will be received, which will + indicate which data the DSP should be preparing to return. + @param numBytes + Number of bytes received--not used in this procedure. + */ void i2cReceiveEvent(size_t numBytes) { int readCommand = 0; @@ -649,6 +655,8 @@ void i2cReceiveEvent(size_t numBytes) while (Wire1.available() > 0) // for Last command { readCommand = Wire1.read(); + // KC4UPR: Note that this looks to be only reading the last command, i.e. + // if multiple commands have been queued up, only the last will get executed. } if (0x50 <= readCommand && readCommand <= 0x59) @@ -657,6 +665,10 @@ void i2cReceiveEvent(size_t numBytes) } } +/*! + @brief Respond to a request from the I2C Master (Raduino). Returns the appropriate data + based on whatever command was previously issued. + */ void i2cRequestEvent(void) { int maxValue = 0; @@ -664,20 +676,16 @@ void i2cRequestEvent(void) int readValue = 0; unsigned long curr = 0; - //if (nowADCSampling == 1) //Now Sampling ADC's - //{ - // nowADCSampling = 2; //when finished ADC Sampling, response I2CRequest Event - // return; - //} //end of if - - if (i2cCommand == I2CMETER_CALCS) - { + switch (i2cCommand) { + case I2CMETER_CALCS: + // Returns an already-calculated S-meter value. Wire1.write(scaledSMeter); - } - else if (i2cCommand == I2CMETER_UNCALCS) - { - //Wire1.write(ADC_DIFF); - //8292Hz + break; + + case I2CMETER_UNCALCS: + // Returns a raw signal strength value. + // KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values. + // So then this would just grab the current value, and return it. for(int i=0; i < 7; i++) { curr = micros(); @@ -707,23 +715,32 @@ void i2cRequestEvent(void) readValue = 255; } Wire1.write(readValue); - } - else if (i2cCommand == I2CMETER_CALCP) - { + break; + + case I2CMETER_CALCP: + // Returns a raw forward power value. + // KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values. + // So then this would just grab the current value, and return it. readValue = analogRead(POWER_METER_ADC); //POWER Wire1.write(readValue); - } - else if (i2cCommand == I2CMETER_CALCR) //SWR - { + break; + + case I2CMETER_CALCR: + // Returns a raw reverse power value. + // KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values. + // So then this would just grab the current value, and return it. readValue = analogRead(SWR_METER_ADC); Wire1.write(readValue); + break; + + default: + break; } } extern void Decode_Morse(float magnitude); extern double coeff; - #define LAST_TIME_INTERVAL 159 //int SWRAdcValue = 0; @@ -759,30 +776,10 @@ void loop() } //=========================================== - //TRANSCEIVER STATUS : RX + // TRANSCEIVER STATUS : TX //=========================================== - if (TXStatus == 1) //TX Mode + if (isTX) //TX Mode { - /* - int readValue = 0; - SMeterToUartIdleCount++; - if (SMeterToUartIdleCount > 130) //SWR - { - //SWR Send - sendCommandL('m', SWRAdcValue); - sendCommand1Num('m', 3); - SMeterToUartIdleCount = 0; - } - else if (SMeterToUartIdleCount == 100) //POWER 500msec interval - { - readValue = analogRead(POWER_METER_ADC ); - SWRAdcValue = analogRead(SWR_METER_ADC); - sendCommandL('m', readValue); - sendCommand1Num('m',2); - //PWR Send - } - */ - //************************************************ //Read FWD and RWD adcFWD = adcFWD * 0.8 + analogRead(A2) * 0.2; @@ -852,7 +849,7 @@ void loop() for (int i = 0; i < 10; i++) { forwardData(); - if (TXStatus != 1) //if TX -> RX break + if (!isTX) //if TX -> RX break { break; } @@ -911,14 +908,14 @@ void loop() //nowSendingProtocol -> not finished data forward, (not found 0xff, 0xff, 0xff yet) if (nowSendingProtocol == 0 && isProcess == 1) //Complete ADC Sampling and Idle status { - SendMeterData(1); + sendMeterData(1); SMeterToUartIdleCount = 0; } } } //end of if else { - SendMeterData(0); //only calculate Signal Level + sendMeterData(0); //only calculate Signal Level } forwardData(); diff --git a/TeensyDSP/fftfunctions.cpp b/TeensyDSP/fftfunctions.cpp index 3b97c36..057e77d 100644 --- a/TeensyDSP/fftfunctions.cpp +++ b/TeensyDSP/fftfunctions.cpp @@ -88,7 +88,7 @@ void FFT(double *x,double *y, int n, long m) double coeff; -void CalculateCoeff(uint8_t freqIndex) +void calculateCoeff(uint8_t freqIndex) { float omega; int targetFrequency = freqIndex * 50 + 300;