diff --git a/afsk/main.c b/afsk/main.c index 79da0281..4648f509 100644 --- a/afsk/main.c +++ b/afsk/main.c @@ -78,7 +78,7 @@ int socket_open = 0; int sock = 0; #define S_RATE (48000) // (44100) -#define BUF_SIZE (S_RATE*10) /* 2 second buffer */ +//#define BUF_SIZE (S_RATE*10) /* 2 second buffer */ /* // BPSK Settings #define BIT_RATE 1200 // 200 for DUV @@ -92,7 +92,7 @@ int sock = 0; #define HEADER_LEN 8 // 6 for DUV #define PARITY_LEN 32 #define FRAME_CNT 3 //33 // Add 3 frames to the count -*/ + // FSK Settings #define BIT_RATE 200 #define FSK 1 @@ -107,6 +107,10 @@ int sock = 0; #define FRAME_CNT 3 // 2 //14 // 3 33 // Add 3 frames to the count #define SAMPLES (S_RATE / BIT_RATE) +*/ + +#define FSK 1 +#define BPSK 2 float amplitude; // = ; // 20000; // 32767/(10%amp+5%amp+100%amp) float freq_Hz = 3000; // 1200 @@ -119,10 +123,10 @@ void write_to_buffer(int i, int symbol, int val); void write_wave(); //#define BUF_LEN (FRAME_CNT * (SYNC_BITS + 10 * (8 + 6 * DATA_LEN + 96)) * SAMPLES) -#define BUF_LEN (FRAME_CNT * (SYNC_BITS + 10 * (HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN))) * SAMPLES) -short int buffer[BUF_LEN]; -short int data10[HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN)]; -short int data8[HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN)]; +//#define BUF_LEN (FRAME_CNT * (SYNC_BITS + 10 * (HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN))) * SAMPLES) +//short int buffer[BUF_LEN]; +//short int data10[HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN)]; +//short int data8[HEADER_LEN + RS_FRAMES * (RS_FRAME_LEN + PARITY_LEN)]; int reset_count; float uptime_sec; long int uptime; @@ -241,25 +245,48 @@ char dest_addr[5] = "CQ"; int main(int argc, char *argv[]) { + int bitRate, mode, bufLen, rsFrames, payloads, rsFrameLen, dataLen, syncBits, syncWord, parityLen, frameCnt; + + + bitRate = 200; + mode = FSK; + bufLen; + rsFrames = 1; + payloads = 1; + rsFrameLen = 64; + headerLen = 6; + dataLen = 6; + syncBits = 10; + syncWord = 0b0011111010; + parityLen = 32; + frameCnt = 3; + bufLen = (frameCnt * (syncBits + 10 * (headerLen + rsFrames * (rsFramesLen + parityLen))) * samples); + + short int buffer[bufLen]; + short int data10[headerLen + rsFrames * (rsFrameLen + parityLen)]; + short int data8[headerLen + rsFrames * (rsFrameLen + parityLen)]; + if (argc > 1) { strcpy(src_addr, argv[1]); } wiringPiSetup (); pinMode (0, OUTPUT); - digitalWrite (0, HIGH); + digitalWr;ite (0, HIGH); - if (FSK) + if (mode == FSK) { amplitude = 32767/3; printf("\n FSK Mode, %d bits per frame, %d bits per second, %d seconds per frame\n\n", - BUF_LEN/(SAMPLES * FRAME_CNT), BIT_RATE, BUF_LEN/(SAMPLES * FRAME_CNT * BIT_RATE)); +// BUF_LEN/(SAMPLES * FRAME_CNT), BIT_RATE, BUF_LEN/(SAMPLES * FRAME_CNT * BIT_RATE)); + bufLen/(samples * frameCnt), bitRate, bufLen/(samples * frameCnt * bitRate)); } else // BPSK { amplitude = 32767; printf("\n BPSK Mode, %d bits per frame, %d bits per second, %d seconds per frame\n\n", - BUF_LEN/(SAMPLES * FRAME_CNT), BIT_RATE, BUF_LEN/(SAMPLES * FRAME_CNT * BIT_RATE)); +// BUF_LEN/(SAMPLES * FRAME_CNT), BIT_RATE, BUF_LEN/(SAMPLES * FRAME_CNT * BIT_RATE)); + bufLen/(samples * frameCnt), bitRate, bufLen/(samples * frameCnt * bitRate)); } @@ -491,15 +518,21 @@ int get_tlm_fox() { short int h[HEADER_LEN] = {0x05,0x00,0x00,0x00,0x00,0x10,0x00,0x00}; */ - short int b[DATA_LEN]; +// short int b[DATA_LEN]; + short int b[dataLen]; memset(b, 0, sizeof(b)); - short int h[HEADER_LEN]; +// short int h[HEADER_LEN]; + short int h[headerLen]; memset(h, 0, sizeof(h)); - short int b10[DATA_LEN], h10[HEADER_LEN]; - short int rs_frame[RS_FRAMES][223]; - unsigned char parities[RS_FRAMES][PARITY_LEN],inputByte; +// short int b10[DATA_LEN], h10[HEADER_LEN]; +// short int rs_frame[RS_FRAMES][223]; +// unsigned char parities[RS_FRAMES][PARITY_LEN],inputByte; + short int b10[dataLen], h10[headerLen]; + short int rs_frame[rsFrames][223]; + unsigned char parities[rsFrames][parityLen], inputByte; + /* int id = 7, frm_type = 0x01, TxTemp = 0, IHUcpuTemp = 0; int batt_a_v = 0, batt_b_v = 0, batt_c_v = 8.95 * 100, battCurr = 48.6 * 10; @@ -607,7 +640,8 @@ int get_tlm_fox() { int ctr3 = 0; for (i = 0; i < RS_FRAME_LEN; i++) { - for (int j = 0; j < RS_FRAMES ; j++) +// for (int j = 0; j < RS_FRAMES ; j++) + for (int j = 0; j < rsFrames ; j++) { if (!((i == (RS_FRAME_LEN - 1)) && (j == 2))) // skip last one for BPSK { @@ -657,7 +691,8 @@ int get_tlm_fox() { for (i = 0; i < PARITY_LEN; i++) { - for (int j = 0; j < RS_FRAMES; j++) +// for (int j = 0; j < RS_FRAMES; j++) + for (int j = 0; j < rsFrames; j++) { data10[ctr2++] = (Encode_8b10b[rd][((int)parities[j][i])] & 0x3ff); nrd = (Encode_8b10b[rd][((int)parities[j][i])] >> 10) & 1; @@ -681,7 +716,7 @@ int get_tlm_fox() { data = val & 1 << (bit - 1); // printf ("%d i: %d new frame %d sync bit %d = %d \n", // ctr/SAMPLES, i, frames, bit, (data > 0) ); - if (FSK) + if (mode == FSK) { phase = ((data != 0) * 2) - 1; // printf("Sending a %d\n", phase); @@ -702,7 +737,8 @@ int get_tlm_fox() { } for (i = 1; - i <= (10 * (HEADER_LEN + DATA_LEN * PAYLOADS + RS_FRAMES * PARITY_LEN) * SAMPLES); i++) // 572 +// i <= (10 * (HEADER_LEN + DATA_LEN * PAYLOADS + RS_FRAMES * PARITY_LEN) * SAMPLES); i++) // 572 + i <= (10 * (headerLen + dataLen * PAYLOADS + RS_FRAMES * PARITY_LEN) * SAMPLES); i++) // 572 { write_wave(ctr); if ( (i % SAMPLES) == 0) { @@ -712,7 +748,7 @@ int get_tlm_fox() { data = val & 1 << (bit - 1); // printf ("%d i: %d new frame %d data10[%d] = %x bit %d = %d \n", // ctr/SAMPLES, i, frames, symbol, val, bit, (data > 0) ); - if (FSK) + if (mode == FSK) { phase = ((data != 0) * 2) - 1; // printf("Sending a %d\n", phase);