/* * mur.sat * * Somewhen in the year 20xx, 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; }