FreeCalypso > hg > freecalypso-sw
annotate rvinterf/asyncshell/tchcmd.c @ 1026:f511bbac0efa
fc-shell: beginning of TCH code expansion
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 30 May 2016 22:45:48 +0000 |
parents | 9ced8e13cf91 |
children | 1178befeda76 |
rev | line source |
---|---|
1014
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * Commands for manipulating the experimental TCH rerouting feature |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * of FreeCalypso GSM firmware |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 */ |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include <sys/types.h> |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include <stdio.h> |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <string.h> |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include <strings.h> |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include <stdlib.h> |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include "pktmux.h" |
1026
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
12 #include "limits.h" |
1014
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "tch_feature.h" |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 |
1026
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
15 extern u_char rvi_msg[]; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
16 extern int rvi_msg_len; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
17 |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
18 static int tch_rawdump_mode; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
19 |
1014
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 send_tch_config_req(config) |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 { |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 u_char sendpkt[3]; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 sendpkt[0] = RVT_TCH_HEADER; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 sendpkt[1] = TCH_CONFIG_REQ; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 sendpkt[2] = config; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 /* send it! */ |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 send_pkt_to_target(sendpkt, 3); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 return(0); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 } |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 cmd_tchdl_common(argc, argv) |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 char **argv; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 { |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 int config; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 |
1015
9ced8e13cf91
fc-shell tch-dl command implementation: brown paper bag
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
1014
diff
changeset
|
37 if (!strcmp(argv[0], "enable") || !strcmp(argv[0], "on") || |
9ced8e13cf91
fc-shell tch-dl command implementation: brown paper bag
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
1014
diff
changeset
|
38 !strcmp(argv[0], "1")) |
1014
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 config = 1; |
1015
9ced8e13cf91
fc-shell tch-dl command implementation: brown paper bag
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
1014
diff
changeset
|
40 else if (!strcmp(argv[0], "disable") || !strcmp(argv[0], "off") || |
9ced8e13cf91
fc-shell tch-dl command implementation: brown paper bag
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
1014
diff
changeset
|
41 !strcmp(argv[0], "0")) |
1014
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 config = 0; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 else { |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 printf("error: boolean argument required\n"); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 return(1); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 } |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 return send_tch_config_req(config); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 } |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 void |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 cmd_tchdl_interactive(argstr) |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 char *argstr; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 { |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 char *argv[2]; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 int argc, rc; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 rc = parse_interactive_command_into_argv(argstr, argv, 1, 1, &argc); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 if (rc < 0) |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 return; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 tch_rx_control(1); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 cmd_tchdl_common(argc, argv); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 } |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 cmd_tchdl_oneshot(argc, argv) |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 char **argv; |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 { |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 return cmd_tchdl_common(argc - 1, argv + 1); |
0511507bf6e7
fc-shell: tch-dl control command implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 } |
1026
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
69 |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
70 static void |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
71 tch_rawdump() |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
72 { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
73 char buf[MAX_PKT_FROM_TARGET*3+5], *dp; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
74 u_char *cp, *endp; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
75 |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
76 cp = rvi_msg + 2; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
77 endp = rvi_msg + rvi_msg_len; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
78 strcpy(buf, "TCH:"); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
79 dp = buf + 4; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
80 while (cp < endp) { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
81 sprintf(dp, " %02X", *cp++); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
82 dp += 3; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
83 } |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
84 *dp = '\0'; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
85 async_msg_output(buf); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
86 } |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
87 |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
88 void |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
89 tch_packet_rx() |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
90 { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
91 char buf[128]; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
92 |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
93 if (tch_rawdump_mode) { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
94 tch_rawdump(); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
95 return; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
96 } |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
97 if (rvi_msg_len < 3) { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
98 inv: async_msg_output("Error: invalid TCH packet received"); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
99 return; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
100 } |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
101 switch (rvi_msg[2]) { |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
102 case TCH_CONFIG_CONF: |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
103 if (rvi_msg_len != 4) |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
104 goto inv; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
105 if (rvi_msg[3] & 0xFE) |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
106 goto inv; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
107 sprintf(buf, "TCH_CONFIG_CONF: DL forwarding is %s", |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
108 rvi_msg[3] ? "enabled" : "disabled"); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
109 async_msg_output(buf); |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
110 return; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
111 case TCH_ULBITS_CONF: |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
112 /* TCH UL play code will hook in here */ |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
113 return; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
114 case TCH_DLBITS_IND: |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
115 /* TCH DL record code will hook in here */ |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
116 return; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
117 default: |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
118 goto inv; |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
119 } |
f511bbac0efa
fc-shell: beginning of TCH code expansion
Mychaela Falconia <falcon@freecalypso.org>
parents:
1015
diff
changeset
|
120 } |