diff --git a/afsk/main.c b/afsk/main.c index 24aead7e..351eecce 100644 --- a/afsk/main.c +++ b/afsk/main.c @@ -122,7 +122,7 @@ int bitRate, mode, bufLen, rsFrames, payloads, rsFrameLen, dataLen, headerLen, s float sleepTime; int sampleTime = 0; int cycle = OFF, cw_id = ON; -int vB4 = FALSE, vB5 = FALSE, ax5043 = FALSE, onLed, onLedOn, onLedOff, txLed, txLedOn, txLedOff, payload = OFF; +int vB4 = FALSE, vB5 = FALSE, ax5043 = FALSE, transmit = FALSE, onLed, onLedOn, onLedOff, txLed, txLedOn, txLedOff, payload = OFF; float batteryThreshold = 0; struct SensorConfig { @@ -329,6 +329,7 @@ int main(int argc, char *argv[]) { mode = AFSK; cycle = OFF; printf("Mode AFSK with AX5043\n"); + transmit = TRUE; } else printf("AX5043 not present!\n"); @@ -356,6 +357,7 @@ int main(int argc, char *argv[]) { onLed = 0; onLedOn = LOW; onLedOff = HIGH; + transmit = TRUE; } else { pinMode (3, INPUT); @@ -372,6 +374,7 @@ int main(int argc, char *argv[]) { onLedOn = HIGH; onLedOff = LOW; batteryThreshold = 3.0; + transmit = TRUE; } else { @@ -389,7 +392,8 @@ int main(int argc, char *argv[]) { onLedOn = HIGH; onLedOff = LOW; batteryThreshold = 3.0; - } + transmit = TRUE; + } } } } @@ -492,13 +496,19 @@ else tx_freq_hz -= tx_channel * 50000; + if (transmit == FALSE) + { + fprintf(stderr,"\nNo CubeSatSim Band Pass Filter detected. No transmissions after the CW ID.\n"); + fprintf(stderr, " See http://cubesatsim.org/wiki for info about building a CubeSatSim\n\n"); + } + // Send ID in CW (Morse Code) if (cw_id == ON) // Don't send CW if using AX5043 or in mode cycling or set by 3rd argument { char cw_str[200]; char cw_header[] = "echo 'de "; - char cw_footer[] = "' > id.txt && gen_packets -M 20 id.txt -o morse.wav -r 48000 && cat morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.897e3"; + char cw_footer[] = "' > id.txt && gen_packets -M 20 id.txt -o morse.wav -r 48000 > /dev/null 2>&1 && cat morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.897e3"; strcpy(cw_str, cw_header); //printf("Before 1st strcpy\n"); @@ -507,11 +517,14 @@ if (cw_id == ON) // Don't send CW if using AX5043 or in mode cycling or set by 3 strcat(cw_str, cw_footer); //printf("Before 1st strcpy\n"); digitalWrite (txLed, txLedOn); -//printf("Before 1st strcpy\n"); +printf("Before cmd\n"); //printf("CW String: %s\n", cw_str); - popen(cw_str,"r"); -//printf("Before 1st strcpy\n"); - sleep(6); +// FILE* f; + system(cw_str); +// printf("File %d \n", f); +// printf("close: %d \n", pclose(f)); // execute command and wait for termination before continuing +printf("After command\n"); +// sleep(7); //printf("Before Write\n"); digitalWrite (txLed, txLedOn); //printf("After Write\n"); @@ -608,9 +621,9 @@ while (loop-- != 0) printf("Done sleeping\n"); } // int transmit = popen("timeout 1 sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.897e3","r"); - int transmit = popen("sudo killall -9 rpitx > /dev/null 2>&1", "r"); - transmit = popen("sudo killall -9 sendiq > /dev/null 2>&1", "r"); - transmit = popen("sudo fuser -k 8080/tcp > /dev/null 2>&1", "r"); + int txResult = popen("sudo killall -9 rpitx > /dev/null 2>&1", "r"); + txResult = popen("sudo killall -9 sendiq > /dev/null 2>&1", "r"); + txResult = popen("sudo fuser -k 8080/tcp > /dev/null 2>&1", "r"); if(cw_id == ON) // only turn off Power LED if CW ID is enabled (i.e. not demo.sh mode cycling) digitalWrite (onLed, onLedOff); @@ -659,7 +672,7 @@ static int init_rf() { int get_tlm(void) { - FILE* transmit; + FILE* txResult; for (int j = 0; j < frameCnt; j++) { @@ -793,8 +806,16 @@ for (int j = 0; j < frameCnt; j++) strcat(str, call); strcat(str,footer_str); fprintf(stderr, "String to execute: %s\n", str); - FILE* file2 = popen(str, "r"); - pclose(file2); + if (transmit) + { + FILE* file2 = popen(str, "r"); + pclose(file2); + } + else + { + fprintf(stderr,"\nNo CubeSatSim Band Pass Filter detected. No transmissions after the CW ID.\n"); + fprintf(stderr, " See http://cubesatsim.org/wiki for info about building a CubeSatSim\n\n"); + } digitalWrite (txLed, txLedOff); sleep(3); digitalWrite (txLed, txLedOn); @@ -1193,44 +1214,53 @@ if (firstTime != ON) // rpitx char cmdbuffer[1000]; - FILE* transmit; + FILE* txResult; if ((rpitxStatus != mode)) // || (mode == BPSK)) + { // change rpitx mode rpitxStatus = mode; printf("Changing rpitx mode!\n"); -// transmit = popen("ps -ef | grep rpitx | grep -v grep | awk '{print $2}' | sudo xargs kill -9 > /dev/null 2>&1", "r"); - transmit = popen("sudo killall -9 rpitx > /dev/null 2>&1", "r"); +// txResult = popen("ps -ef | grep rpitx | grep -v grep | awk '{print $2}' | sudo xargs kill -9 > /dev/null 2>&1", "r"); + txResult = popen("sudo killall -9 rpitx > /dev/null 2>&1", "r"); // printf("1\n"); // sleep(1); -// transmit = popen("ps -ef | grep sendiq | grep -v grep | awk '{print $2}' | sudo xargs kill -9 > /dev/null 2>&1", "r"); - transmit = popen("sudo killall -9 sendiq > /dev/null 2>&1", "r"); +// txResult = popen("ps -ef | grep sendiq | grep -v grep | awk '{print $2}' | sudo xargs kill -9 > /dev/null 2>&1", "r"); + txResult = popen("sudo killall -9 sendiq > /dev/null 2>&1", "r"); // printf("2\n"); // digitalWrite (txLed, txLedOn); sleep(1); - transmit = popen("sudo fuser -k 8080/tcp > /dev/null 2>&1", "r"); + txResult = popen("sudo fuser -k 8080/tcp > /dev/null 2>&1", "r"); socket_open = 0; // printf("3\n"); sleep(1); // digitalWrite (txLed, txLedOff); - - if (mode == FSK) { - // transmit = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.896e3&", "r"); - transmit = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.897e3&", "r"); + + if (transmit) + { + if (mode == FSK) { + // txResult = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.896e3&", "r"); + txResult = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.897e3&", "r"); // printf("4\n"); - } else if (mode == BPSK) { -// transmit = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr fir_interpolate_cc 2 | csdr dsb_fc | csdr bandpass_fir_fft_cc 0.002 0.06 0.01 | csdr fastagc_ff | sudo /home/pi/CubeSatSim/rpitx/sendiq -i /dev/stdin -s 96000 -f 434.8925e6 -t float 2>&1&", "r"); - transmit = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr fir_interpolate_cc 2 | csdr dsb_fc | csdr bandpass_fir_fft_cc 0.002 0.06 0.01 | csdr fastagc_ff | sudo /home/pi/rpitx/sendiq -i /dev/stdin -s 96000 -f 434.8945e6 -t float 2>&1&", "r"); - } -// fgets(cmdbuffer, 1000, transmit); - pclose(transmit); + } else if (mode == BPSK) { +// txResult = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr fir_interpolate_cc 2 | csdr dsb_fc | csdr bandpass_fir_fft_cc 0.002 0.06 0.01 | csdr fastagc_ff | sudo /home/pi/CubeSatSim/rpitx/sendiq -i /dev/stdin -s 96000 -f 434.8925e6 -t float 2>&1&", "r"); + txResult = popen("sudo nc -l 8080 | csdr convert_i16_f | csdr fir_interpolate_cc 2 | csdr dsb_fc | csdr bandpass_fir_fft_cc 0.002 0.06 0.01 | csdr fastagc_ff | sudo /home/pi/rpitx/sendiq -i /dev/stdin -s 96000 -f 434.8945e6 -t float 2>&1&", "r"); + } +// fgets(cmdbuffer, 1000, txResult); + pclose(txResult); + } + else + { + fprintf(stderr,"\nNo CubeSatSim Band Pass Filter detected. No transmissions after the CW ID.\n"); + fprintf(stderr, " See http://cubesatsim.org/wiki for info about building a CubeSatSim\n\n"); + } sleep(2); // printf("Results of transmit command: %s\n", cmdbuffer); } // socket write - if (!socket_open) + if (!socket_open && transmit) { printf("Opening socket!\n"); struct sockaddr_in address; @@ -1268,7 +1298,7 @@ if (firstTime != ON) socket_open = 1; } - if (!error) + if (!error && transmit) { // digitalWrite (0, LOW); printf("Sending %d buffer bytes over socket after %d ms!\n", ctr, millis()-start); @@ -1290,6 +1320,11 @@ if (firstTime != ON) //rpitxStatus = -1; } } + if (!transmit) + { + fprintf(stderr,"\nNo CubeSatSim Band Pass Filter detected. No transmissions after the CW ID.\n"); + fprintf(stderr, " See http://cubesatsim.org/wiki for info about building a CubeSatSim\n\n"); + } // digitalWrite (0, HIGH); firstTime = 0; @@ -1364,7 +1399,7 @@ return 0; update_rs(parity,data[i]); transmit_word(encode_8b10b(&state,data[i]); } - // Transmit the RS parities + // get the RS parities for(i=0;i<32;i++) transmit_word(encode_8b10b(&state,parity[i]);