mirror of https://github.com/drowe67/pirip.git
first frame repeat, but stuck in a loop
parent
72bc03d23e
commit
d260ab8e2a
|
@ -72,8 +72,8 @@ int main(int argc, char *argv[]) {
|
||||||
char buf[256];
|
char buf[256];
|
||||||
ret = read(rpitx_fsk_fifo, buf, sizeof(buf));
|
ret = read(rpitx_fsk_fifo, buf, sizeof(buf));
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
fprintf(stderr, "Read %d bytes from rpitx_fsk\n", ret);
|
fprintf(stderr, "frame_repeater: Read %d bytes from rpitx_fsk: %s\n", ret, buf);
|
||||||
if (strcmp(buf,"Tx off\n") == 0) tx_off_event = 0;
|
if (strcmp(buf,"Tx off") == 0) tx_off_event = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prev_rx_status != rx_status)
|
if (prev_rx_status != rx_status)
|
||||||
|
@ -83,7 +83,7 @@ int main(int argc, char *argv[]) {
|
||||||
switch(state) {
|
switch(state) {
|
||||||
case IDLE:
|
case IDLE:
|
||||||
if (rx_status == (FREEDV_RX_SYNC | FREEDV_RX_BITS)) {
|
if (rx_status == (FREEDV_RX_SYNC | FREEDV_RX_BITS)) {
|
||||||
fprintf(stderr, " Starting to receive a burst\n");
|
fprintf(stderr, "frame_repeater: Starting to receive a burst\n");
|
||||||
memcpy(data_buffer, data, data_bytes_per_frame);
|
memcpy(data_buffer, data, data_bytes_per_frame);
|
||||||
bytes_in = data_bytes_per_frame;
|
bytes_in = data_bytes_per_frame;
|
||||||
next_state = RECEIVING_BURST;
|
next_state = RECEIVING_BURST;
|
||||||
|
@ -91,26 +91,26 @@ int main(int argc, char *argv[]) {
|
||||||
break;
|
break;
|
||||||
case RECEIVING_BURST:
|
case RECEIVING_BURST:
|
||||||
if (rx_status & FREEDV_RX_BITS) {
|
if (rx_status & FREEDV_RX_BITS) {
|
||||||
fprintf(stderr, " Receiving a frame in a burst\n");
|
fprintf(stderr, "frame_repeater: Receiving a frame in a burst\n");
|
||||||
// buffer latest packet
|
// buffer latest packet
|
||||||
memcpy(data_buffer, data, data_bytes_per_frame);
|
memcpy(data_buffer, data, data_bytes_per_frame);
|
||||||
bytes_in += data_bytes_per_frame;
|
bytes_in += data_bytes_per_frame;
|
||||||
assert(bytes_in <= data_bytes_per_frame*MAX_FRAMES);
|
assert(bytes_in <= data_bytes_per_frame*MAX_FRAMES);
|
||||||
}
|
}
|
||||||
if (!(rx_status & FREEDV_RX_SYNC)) {
|
if (!(rx_status & FREEDV_RX_SYNC)) {
|
||||||
fprintf(stderr, " Sending received burst of %d bytes\n", bytes_in);
|
fprintf(stderr, "frame_repeater: Sending received burst of %d bytes\n", bytes_in);
|
||||||
/* We've lost RX_SYNC so receive burst finished. So
|
/* We've lost RX_SYNC so receive burst finished. So
|
||||||
lets Tx data we received. fwrite's shouldn't block
|
lets Tx data we received. fwrite's shouldn't block
|
||||||
due to size of stdout buffer */
|
due to size of stdout buffer */
|
||||||
bytes_out = 0; burst_control = 1;
|
bytes_out = 0; burst_control = 1;
|
||||||
while(bytes_out != bytes_in) {
|
while(bytes_out != bytes_in) {
|
||||||
fwrite(&burst_control, sizeof(uint8_t), data_bytes_per_frame, stdout);
|
fwrite(&burst_control, sizeof(uint8_t), 1, stdout);
|
||||||
fwrite(&data_buffer[bytes_out], sizeof(uint8_t), data_bytes_per_frame, stdout);
|
fwrite(&data_buffer[bytes_out], sizeof(uint8_t), data_bytes_per_frame, stdout);
|
||||||
bytes_out += data_bytes_per_frame;
|
bytes_out += data_bytes_per_frame;
|
||||||
burst_control = 0;
|
burst_control = 0;
|
||||||
}
|
}
|
||||||
burst_control = 2; memset(data, 0, data_bytes_per_frame);
|
burst_control = 2; memset(data, 0, data_bytes_per_frame);
|
||||||
fwrite(&burst_control, sizeof(uint8_t), data_bytes_per_frame, stdout);
|
fwrite(&burst_control, sizeof(uint8_t), 1, stdout);
|
||||||
fwrite(data, sizeof(uint8_t), data_bytes_per_frame, stdout);
|
fwrite(data, sizeof(uint8_t), data_bytes_per_frame, stdout);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
next_state = WAIT_FOR_TX_OFF;
|
next_state = WAIT_FOR_TX_OFF;
|
||||||
|
|
|
@ -123,6 +123,7 @@ int main(int argc, char **argv)
|
||||||
char ant_switch_gpio[128] = "";
|
char ant_switch_gpio[128] = "";
|
||||||
char ant_switch_gpio_path[MAX_CHAR] = "";
|
char ant_switch_gpio_path[MAX_CHAR] = "";
|
||||||
int rpitx_fsk_fifo = 0;
|
int rpitx_fsk_fifo = 0;
|
||||||
|
int packed = 0;
|
||||||
|
|
||||||
char usage[] = "usage: %s [-m fskM 2|4] [-f carrierFreqHz] [-r symbRateHz] [-s shiftHz] [-t] [-c] "
|
char usage[] = "usage: %s [-m fskM 2|4] [-f carrierFreqHz] [-r symbRateHz] [-s shiftHz] [-t] [-c] "
|
||||||
"[--testframes Nframes] InputOneBitPerCharFile\n"
|
"[--testframes Nframes] InputOneBitPerCharFile\n"
|
||||||
|
@ -135,6 +136,7 @@ int main(int argc, char **argv)
|
||||||
" --bursts B Send B bursts of N testframes (default 1)\n"
|
" --bursts B Send B bursts of N testframes (default 1)\n"
|
||||||
" --seq send packet sequence numbers (breaks testframe BER counting)\n"
|
" --seq send packet sequence numbers (breaks testframe BER counting)\n"
|
||||||
" --fifo fifoName send stats messages to fifoName\n"
|
" --fifo fifoName send stats messages to fifoName\n"
|
||||||
|
" --packed packed byte input\n"
|
||||||
"\n"
|
"\n"
|
||||||
" Example 1, send 10000 bits of (100 bit) tests frames from external test frame generator\n"
|
" Example 1, send 10000 bits of (100 bit) tests frames from external test frame generator\n"
|
||||||
" at 1000 bits/s using 2FSK:\n\n"
|
" at 1000 bits/s using 2FSK:\n\n"
|
||||||
|
@ -152,7 +154,8 @@ int main(int argc, char **argv)
|
||||||
{"bursts", required_argument, 0, 'e'},
|
{"bursts", required_argument, 0, 'e'},
|
||||||
{"seq", no_argument, 0, 'q'},
|
{"seq", no_argument, 0, 'q'},
|
||||||
{"fifo", required_argument, 0, 'i'},
|
{"fifo", required_argument, 0, 'i'},
|
||||||
{0, 0, 0, 0}
|
{"packed", no_argument, 0, 'l'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
opt = getopt_long(argc,argv,"a:bce:f:g:i:m:qr:s:tu:",long_opts,&opt_idx);
|
opt = getopt_long(argc,argv,"a:bce:f:g:i:m:qr:s:tu:",long_opts,&opt_idx);
|
||||||
|
@ -175,6 +178,9 @@ int main(int argc, char **argv)
|
||||||
case 'm':
|
case 'm':
|
||||||
m = atoi(optarg);
|
m = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
packed = 1;
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
frequency = atof(optarg);
|
frequency = atof(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -343,20 +349,29 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
uint8_t burst_control;
|
uint8_t burst_control;
|
||||||
int BytesRead;
|
int nRead;
|
||||||
|
|
||||||
if (fsk_ldpc) {
|
if (fsk_ldpc) {
|
||||||
// in fsk_ldpc mode we prepend input data with a burst control byte
|
// in fsk_ldpc mode we prepend input data with a burst control byte
|
||||||
BytesRead = fread(&burst_control, sizeof(uint8_t), 1, fin);
|
nRead = fread(&burst_control, sizeof(uint8_t), 1, fin);
|
||||||
if (BytesRead == 0) goto finished;
|
if (nRead == 0) goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
BytesRead = fread(data_bits, sizeof(uint8_t), data_bits_per_frame, fin);
|
if (packed) {
|
||||||
|
int data_bytes_per_frame = data_bits_per_frame/8;
|
||||||
fprintf(stderr, "rpitx_fsk: burst_control: %d BytesRead: %d\n", burst_control, BytesRead);
|
uint8_t data_bytes[data_bytes_per_frame];
|
||||||
|
nRead = fread(data_bytes, sizeof(uint8_t), data_bytes_per_frame, fin);
|
||||||
|
freedv_unpack(data_bits, data_bytes, data_bits_per_frame);
|
||||||
|
nRead *= 8;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nRead = fread(data_bits, sizeof(uint8_t), data_bits_per_frame, fin);
|
||||||
|
}
|
||||||
|
|
||||||
if (BytesRead != data_bits_per_frame) goto finished;
|
fprintf(stderr, "rpitx_fsk: burst_control: %d nRead: %d\n", burst_control, nRead);
|
||||||
|
|
||||||
|
if (nRead != data_bits_per_frame) goto finished;
|
||||||
|
|
||||||
if (fsk_ldpc) {
|
if (fsk_ldpc) {
|
||||||
|
|
||||||
// start of burst
|
// start of burst
|
||||||
|
@ -391,8 +406,8 @@ int main(int argc, char **argv)
|
||||||
if (*ant_switch_gpio_path) sys_gpio(ant_switch_gpio_path, "0");
|
if (*ant_switch_gpio_path) sys_gpio(ant_switch_gpio_path, "0");
|
||||||
fprintf(stderr, "rpitx_fsk: Tx off\n");
|
fprintf(stderr, "rpitx_fsk: Tx off\n");
|
||||||
char buf[256];
|
char buf[256];
|
||||||
sprintf(buf, "Tx off\n");
|
sprintf(buf, "Tx off");
|
||||||
if (write(rpitx_fsk_fifo, buf, strlen(buf)) ==-1) {
|
if (write(rpitx_fsk_fifo, buf, strlen(buf)+1) ==-1) {
|
||||||
fprintf(stderr, "rpitx_fsk: error writing to FIFO\n");
|
fprintf(stderr, "rpitx_fsk: error writing to FIFO\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue