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/gencrx.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 tools/dtmf/gencrx.c (limited to 'tools/dtmf/gencrx.c') 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; +} -- cgit v1.2.3