FreeCalypso > hg > ice1-trau-tester
diff pcm-br/xconn.c @ 35:499d065ee591
new program itt-pcm-br (PCM bridge)
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 28 Aug 2024 05:00:38 +0000 |
parents | pcm/read_ts.c@ca351324187a |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pcm-br/xconn.c Wed Aug 28 05:00:38 2024 +0000 @@ -0,0 +1,52 @@ +/* + * The two functions in this module get called from Osmocom select loop + * whenever each timeslot data socket to osmo-e1d is ready for reading; + * the cross-connect of the two timeslots is implemented here. + */ + +#include <stdint.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <osmocom/core/select.h> + +#include "globals.h" + +uint8_t readbuf_a[160], readbuf_b[160]; +FILE *rec_file_a, *rec_file_b; + +int tsa_fd_cb(struct osmo_fd *ofd, unsigned int what) +{ + int rc; + + rc = read(tsa_fd, readbuf_a, 160); + if (rc != 160) { + fprintf(stderr, + "error: read from ts A returned %d instead of 160\n", + rc); + exit(1); + } + if (rec_file_a) + fwrite(readbuf_a, 1, 160, rec_file_a); + write(tsb_fd, readbuf_a, 160); + return 0; +} + +int tsb_fd_cb(struct osmo_fd *ofd, unsigned int what) +{ + int rc; + + rc = read(tsb_fd, readbuf_b, 160); + if (rc != 160) { + fprintf(stderr, + "error: read from ts B returned %d instead of 160\n", + rc); + exit(1); + } + if (rec_file_b) + fwrite(readbuf_b, 1, 160, rec_file_b); + write(tsa_fd, readbuf_b, 160); + return 0; +}