From a54ea9d0d64abcc4a81b685c0e3d8161f98b0c88 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 8 Nov 2011 21:30:47 +0000 Subject: gencrx and gst-dtmf commands git-svn-id: https://svn.spreadspace.org/mur.sat@186 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- tools/dtmf/Makefile | 21 ++++----- tools/dtmf/gencrx.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ tools/dtmf/gst-dtmf.c | 2 +- 3 files changed, 128 insertions(+), 11 deletions(-) create mode 100755 tools/dtmf/gencrx.c (limited to 'tools/dtmf') diff --git a/tools/dtmf/Makefile b/tools/dtmf/Makefile index c85dae8..9c98516 100644 --- a/tools/dtmf/Makefile +++ b/tools/dtmf/Makefile @@ -36,15 +36,16 @@ CFLAGS := -g -O2 $(GST_CFLAGS) LDFLAGS := -g -Wall -O2 $(GST_LDFLAGS) STRIP := strip -EXECUTABLE := gst-dtmf +EXECUTABLES := gst-dtmf gencrx -C_OBJS := gst-dtmf.o +GST_DTMF_OBJS := gst-dtmf.o +GENCRX_OBJS := gencrx.o -C_SRCS := $(C_OBJS:%.o=%.c) +C_SRCS := $(GST_DTMF_OBJS:%.o=%.c) $(GENCRX_OBJS:%.o=%.c) .PHONY: clean -all: $(EXECUTABLE) +all: $(EXECUTABLES) %.d: %.c @set -e; rm -f $@; \ @@ -56,17 +57,17 @@ ifneq ($(MAKECMDGOALS),distclean) -include $(C_SRCS:%.c=%.d) endif -$(EXECUTABLE): $(C_OBJS) - $(CC) $(C_OBJS) -o $@ $(LDFLAGS) +gst-dtmf: $(GST_DTMF_OBJS) + $(CC) $(GST_DTMF_OBJS) -o $@ $(LDFLAGS) + +gencrx: $(GENCRX_OBJS) + $(CC) $(GENCRX_OBJS) -o $@ $(LDFLAGS) %.o: %.c $(CC) $(CFLAGS) -c $< -strip: $(EXECUTABLE) - $(STRIP) -s $(EXECUTABLE) - clean: rm -f *.o rm -f *.d rm -f *.d.* - rm -f $(EXECUTABLE) + rm -f $(EXECUTABLES) diff --git a/tools/dtmf/gencrx.c b/tools/dtmf/gencrx.c new file mode 100755 index 0000000..1c1f47f --- /dev/null +++ b/tools/dtmf/gencrx.c @@ -0,0 +1,116 @@ +/* + * mur.sat + * + * Somewhen in the year 2011, mur.at will have a nano satellite launched + * into a low earth orbit (310 km above the surface of our planet). The + * satellite itself is a TubeSat personal satellite kit, developed and + * launched by interorbital systems. mur.sat is a joint venture of mur.at, + * ESC im Labor and realraum. + * + * Please visit the project hompage at sat.mur.at for further information. + * + * + * Copyright (C) 2011 Christian Pointner + * + * This file is part of mur.sat. + * + * mur.sat is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * mur.sat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with mur.sat. If not, see . + */ + +#include +#include +#include +#include + +char sign2bin(c) +{ + switch(c) { + case 'D': return 0; + case '1': return 1; + case '2': return 2; + case '3': return 3; + case '4': return 4; + case '5': return 5; + case '6': return 6; + case '7': return 7; + case '8': return 8; + case '9': return 9; + case '0': return 10; + case '*': return 11; + case '#': return 12; + case 'A': return 13; + case 'B': return 14; + case 'C': return 15; + } + return 0; +} + +char bin2sign(c) +{ + switch(c) { + case 0: return 'D'; + case 1: return '1'; + case 2: return '2'; + case 3: return '3'; + case 4: return '4'; + case 5: return '5'; + case 6: return '6'; + case 7: return '7'; + case 8: return '8'; + case 9: return '9'; + case 10: return '0'; + case 11: return '*'; + case 12: return '#'; + case 13: return 'A'; + case 14: return 'B'; + case 15: return 'C'; + } + return 0; +} + +void send_crx_string(c) +{ + c = toupper(c); + if(c == '#' || c == '*' || + (c >= '0' && c <= '9') || + (c >= 'A' && c <= 'D') ) { + char cs = bin2sign(0x0A ^ sign2bin(c)); + int ret = write(1, &"#42", 3); + ret = write(1, &c, 1); + ret = write(1, &cs, 1); + ret = write(1, &" ", 1); + } +} + +int main (int argc, char *argv[]) +{ + struct termios T; + tcgetattr(0, &T); + T.c_lflag &= ~ECHO; + T.c_lflag &= ~ICANON; + tcsetattr(0, TCSANOW, &T); + + char c; + for(;;) { + int ret = read(0, &c, 1); + if(!ret) break; + if(ret == 1) send_crx_string(c); + else { + perror("read error: "); + return 1; + } + } + + return 0; +} diff --git a/tools/dtmf/gst-dtmf.c b/tools/dtmf/gst-dtmf.c index 11ff679..97d832f 100644 --- a/tools/dtmf/gst-dtmf.c +++ b/tools/dtmf/gst-dtmf.c @@ -177,7 +177,7 @@ int main (int argc, char *argv[]) loop = g_main_loop_new (NULL, FALSE); /* Create gstreamer elements */ - pipeline = gst_pipeline_new ("dtmftest"); + pipeline = gst_pipeline_new ("gst-dtmf"); source = gst_element_factory_make ("dtmfsrc", "source"); sink = gst_element_factory_make ("autoaudiosink", "output"); -- cgit v1.2.3