comparison rvinterf/tmsh/l1resp.c @ 135:40807eb35ffe

fc-tmsh: rftr response handling implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 20 Feb 2017 02:04:27 +0000
parents 4c78649101f1
children da4d4af80fdd
comparison
equal deleted inserted replaced
134:4c78649101f1 135:40807eb35ffe
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 <string.h>
8 #include <strings.h>
7 #include "l1tm.h" 9 #include "l1tm.h"
8 10
9 extern u_char rvi_msg[]; 11 extern u_char rvi_msg[];
10 extern int rvi_msg_len; 12 extern int rvi_msg_len;
13
14 unsigned rftr_table_index, rftr_table_size;
15 u_char rftr_table_data[MAX_RF_TABLE_SIZE];
11 16
12 void 17 void
13 l1tm_response_nodata(op) 18 l1tm_response_nodata(op)
14 char *op; 19 char *op;
15 { 20 {
260 offset += 2; 265 offset += 2;
261 sprintf(buf, "BSIC: %u (0x%04X)", val, val); 266 sprintf(buf, "BSIC: %u (0x%04X)", val, val);
262 async_msg_output(buf); 267 async_msg_output(buf);
263 } 268 }
264 } 269 }
270
271 void
272 l1tm_rftr_response()
273 {
274 char buf[80], *dp;
275 unsigned i, j, l;
276
277 if (rvi_msg[3]) {
278 if (rvi_msg_len == 5) {
279 sprintf(buf, "rftr error %u (0x%02X)",
280 rvi_msg[3], rvi_msg[3]);
281 async_msg_output(buf);
282 } else
283 print_etm_pkt_raw("rftr long error response");
284 return;
285 }
286 if (rvi_msg_len < 7 || rvi_msg_len > MAX_RF_TABLE_SIZE + 6) {
287 print_etm_pkt_raw("rftr response wrong length");
288 return;
289 }
290 rftr_table_index = rvi_msg[4];
291 rftr_table_size = rvi_msg_len - 6;
292 bcopy(rvi_msg + 5, rftr_table_data, rftr_table_size);
293 sprintf(buf, "rftr index %u (0x%02X): %u bytes",
294 rftr_table_index, rftr_table_index, rftr_table_size);
295 async_msg_output(buf);
296 for (i = 0; i < rftr_table_size; ) {
297 l = rftr_table_size - i;
298 if (l > 16)
299 l = 16;
300 sprintf(buf, "offset %02X:", i);
301 dp = index(buf, '\0');
302 for (j = 0; j < l; j++) {
303 if (j == 0 || j == 8)
304 *dp++ = ' ';
305 sprintf(dp, " %02X", rftr_table_data[i++]);
306 }
307 async_msg_output(buf);
308 }
309 }