comparison rvinterf/tmsh/l1resp.c @ 134:4c78649101f1

fc-tmsh: l1tm stats response display
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 20 Feb 2017 01:30:10 +0000
parents 4aa1c18c7a2f
children 40807eb35ffe
comparison
equal deleted inserted replaced
133:4aa1c18c7a2f 134:4c78649101f1
2 * Handling of TM3 responses from L1TM 2 * Handling of TM3 responses from L1TM
3 */ 3 */
4 4
5 #include <sys/types.h> 5 #include <sys/types.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #include "l1tm.h"
7 8
8 extern u_char rvi_msg[]; 9 extern u_char rvi_msg[];
9 extern int rvi_msg_len; 10 extern int rvi_msg_len;
10 11
11 void 12 void
18 sprintf(buf, "%s response wrong length", op); 19 sprintf(buf, "%s response wrong length", op);
19 print_etm_pkt_raw(buf); 20 print_etm_pkt_raw(buf);
20 return; 21 return;
21 } 22 }
22 if (rvi_msg[3]) 23 if (rvi_msg[3])
23 sprintf(buf, "%s error %u (0x%x)", op, rvi_msg[3], rvi_msg[3]); 24 sprintf(buf, "%s error %u (0x%02X)", op,
25 rvi_msg[3], rvi_msg[3]);
24 else 26 else
25 sprintf(buf, "%s OK", op); 27 sprintf(buf, "%s OK", op);
26 async_msg_output(buf); 28 async_msg_output(buf);
27 } 29 }
28 30
96 return; 98 return;
97 case 1: 99 case 1:
98 async_msg_output("RF operation finished"); 100 async_msg_output("RF operation finished");
99 return; 101 return;
100 default: 102 default:
101 sprintf(buf, "rfe error %u (0x%x)", rvi_msg[3], rvi_msg[3]); 103 sprintf(buf, "rfe error %u (0x%02X)", rvi_msg[3], rvi_msg[3]);
102 async_msg_output(buf); 104 async_msg_output(buf);
103 return; 105 return;
104 } 106 }
105 } 107 }
108
109 void
110 l1tm_stats_response()
111 {
112 char buf[80];
113 unsigned type, bitmask, val, offset;
114 int expect_len;
115
116 if (rvi_msg_len < 5) {
117 wrong_len: print_etm_pkt_raw("STATS_READ response wrong length");
118 return;
119 }
120 if (rvi_msg[3]) {
121 if (rvi_msg_len != 5)
122 goto wrong_len;
123 sprintf(buf, "sr error %u (0x%02X)", rvi_msg[3], rvi_msg[3]);
124 async_msg_output(buf);
125 return;
126 }
127 if (rvi_msg_len < 9)
128 goto wrong_len;
129 type = rvi_msg[4] | (rvi_msg[5] << 8);
130 bitmask = rvi_msg[6] | (rvi_msg[7] << 8);
131 if (type < 1 || type > 2 || (bitmask & 0x0300)) {
132 print_etm_pkt_raw("STATS_READ response unable to parse");
133 return;
134 }
135 expect_len = 9;
136 if (bitmask & RSSI)
137 expect_len += 2;
138 if (bitmask & DSP_PM)
139 expect_len += 2;
140 if (bitmask & ANGLE_MEAN)
141 expect_len += 4;
142 if (bitmask & ANGLE_VAR)
143 expect_len += 4;
144 if (bitmask & ANGLE_MIN)
145 expect_len += 4;
146 if (bitmask & ANGLE_MAX)
147 expect_len += 4;
148 if (bitmask & SNR_MEAN)
149 expect_len += 4;
150 if (bitmask & SNR_VAR)
151 expect_len += 4;
152 if (bitmask & TOA_MEAN)
153 expect_len += 4;
154 if (bitmask & TOA_VAR)
155 expect_len += 4;
156 if (bitmask & FRAME_NUMBER)
157 expect_len += 4;
158 if (bitmask & RUNS)
159 expect_len += 4;
160 if (bitmask & SUCCESSES)
161 expect_len += 4;
162 if (bitmask & BSIC)
163 expect_len += 2;
164 if (rvi_msg_len != expect_len)
165 goto wrong_len;
166 sprintf(buf, "Stats type %u bitmask %04X:", type, bitmask);
167 async_msg_output(buf);
168 offset = 8;
169 if (bitmask & RSSI) {
170 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8);
171 offset += 2;
172 sprintf(buf, "RSSI: %u (0x%04X)", val, val);
173 async_msg_output(buf);
174 }
175 if (bitmask & DSP_PM) {
176 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8);
177 offset += 2;
178 sprintf(buf, "DSP_PM: %u (0x%04X)", val, val);
179 async_msg_output(buf);
180 }
181 if (bitmask & ANGLE_MEAN) {
182 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
183 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
184 offset += 4;
185 sprintf(buf, "ANGLE_MEAN: %d (0x%08X)", val, val);
186 async_msg_output(buf);
187 }
188 if (bitmask & ANGLE_VAR) {
189 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
190 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
191 offset += 4;
192 sprintf(buf, "ANGLE_VAR: %u (0x%08X)", val, val);
193 async_msg_output(buf);
194 }
195 if (bitmask & ANGLE_MIN) {
196 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
197 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
198 offset += 4;
199 sprintf(buf, "ANGLE_MIN: %d (0x%08X)", val, val);
200 async_msg_output(buf);
201 }
202 if (bitmask & ANGLE_MAX) {
203 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
204 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
205 offset += 4;
206 sprintf(buf, "ANGLE_MAX: %d (0x%08X)", val, val);
207 async_msg_output(buf);
208 }
209 if (bitmask & SNR_MEAN) {
210 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
211 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
212 offset += 4;
213 sprintf(buf, "SNR_MEAN: %u (0x%08X)", val, val);
214 async_msg_output(buf);
215 }
216 if (bitmask & SNR_VAR) {
217 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
218 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
219 offset += 4;
220 sprintf(buf, "SNR_VAR: %u (0x%08X)", val, val);
221 async_msg_output(buf);
222 }
223 if (bitmask & TOA_MEAN) {
224 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
225 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
226 offset += 4;
227 sprintf(buf, "TOA_MEAN: %u (0x%08X)", val, val);
228 async_msg_output(buf);
229 }
230 if (bitmask & TOA_VAR) {
231 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
232 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
233 offset += 4;
234 sprintf(buf, "TOA_VAR: %u (0x%08X)", val, val);
235 async_msg_output(buf);
236 }
237 if (bitmask & FRAME_NUMBER) {
238 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
239 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
240 offset += 4;
241 sprintf(buf, "FRAME_NUMBER: %u (0x%08X)", val, val);
242 async_msg_output(buf);
243 }
244 if (bitmask & RUNS) {
245 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
246 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
247 offset += 4;
248 sprintf(buf, "RUNS: %u (0x%08X)", val, val);
249 async_msg_output(buf);
250 }
251 if (bitmask & SUCCESSES) {
252 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8) |
253 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24);
254 offset += 4;
255 sprintf(buf, "SUCCESSES: %u (0x%08X)", val, val);
256 async_msg_output(buf);
257 }
258 if (bitmask & BSIC) {
259 val = rvi_msg[offset] | (rvi_msg[offset+1] << 8);
260 offset += 2;
261 sprintf(buf, "BSIC: %u (0x%04X)", val, val);
262 async_msg_output(buf);
263 }
264 }