view pcm-br/xconn.c @ 40:e1eabf554a75

libhr: small subset of WIP libgsmhr1
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 30 Aug 2024 16:41:56 +0000
parents 499d065ee591
children
line wrap: on
line source

/*
 * 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;
}