FreeCalypso > hg > freecalypso-tools
view rvinterf/asyncshell/tchrec.c @ 988:5a6019ed7e72
pln-ppb-test: implement read-id
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 03 Dec 2023 00:04:18 +0000 |
parents | 2e6764022292 |
children |
line wrap: on
line source
/* * TCH downlink recording functionality */ #include <sys/types.h> #include <stdio.h> #include <string.h> #include <strings.h> #include <stdlib.h> #include "pktmux.h" #include "tch_feature.h" extern u_char rvi_msg[]; extern int rvi_msg_len; static FILE *record_file; static u_long frame_count; void tch_dlbits_old_handler() { u_char *ptr; int i; if (!record_file) return; /* DSP status words */ ptr = rvi_msg + 3; for (i = 0; i < 3; i++) { fprintf(record_file, "%02X%02X ", ptr[0], ptr[1]); ptr += 2; } /* frame bits */ for (i = 0; i < 33; i++) { fprintf(record_file, "%02X", *ptr); ptr++; } putc('\n', record_file); frame_count++; } void tch_dlbits_new_handler(mode_kw, databytes) char *mode_kw; { u_char *ptr; int i; if (!record_file) return; /* channel mode */ fprintf(record_file, "%s ", mode_kw); /* DSP status words */ ptr = rvi_msg + 5; for (i = 0; i < 3; i++) { fprintf(record_file, "%02X%02X ", ptr[0], ptr[1]); ptr += 2; } /* frame bits */ for (i = 0; i < databytes; i++) { fprintf(record_file, "%02X", *ptr); ptr++; } /* frame number modulo 104 */ fprintf(record_file, " %u\n", rvi_msg[4]); frame_count++; } static void cmd_tch_record_start(filename) char *filename; { if (record_file) { printf("error: tch record session already in progress\n"); return; } record_file = fopen(filename, "w"); if (!record_file) { perror(filename); return; } printf("Starting TCH DL recording\n"); tch_rx_control(1); send_tch_config_req(1); frame_count = 0; } static void cmd_tch_record_stop() { if (!record_file) { printf("error: no tch record session in progress\n"); return; } fclose(record_file); record_file = 0; printf("TCH DL recording stopped, captured %lu speech frames\n", frame_count); send_tch_config_req(0); } void cmd_tch_record(argc, argv) char **argv; { if (argc < 2) { printf("error: too few arguments\n"); return; } if (strcmp(argv[1], "stop")) cmd_tch_record_start(argv[1]); else cmd_tch_record_stop(); } void show_tch_record_status() { printf("TCH DL recording: %s\n", record_file ? "RUNNING" : "not running"); }