FreeCalypso > hg > freecalypso-sw
comparison rvinterf/etm/abb.c @ 198:c9ea2f7441a5
fc-tmsh: abb[rw] commands implemented
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
|---|---|
| date | Sun, 15 Dec 2013 08:48:52 +0000 |
| parents | |
| children | 2f285f20d617 |
comparison
equal
deleted
inserted
replaced
| 197:fa7174faa9aa | 198:c9ea2f7441a5 |
|---|---|
| 1 /* | |
| 2 * In this module we are going to implement commands dealing with the ABB. | |
| 3 */ | |
| 4 | |
| 5 #include <sys/types.h> | |
| 6 #include <stdio.h> | |
| 7 #include <string.h> | |
| 8 #include <strings.h> | |
| 9 #include <stdlib.h> | |
| 10 #include "../pktmux.h" | |
| 11 #include "../limits.h" | |
| 12 #include "localtypes.h" | |
| 13 #include "etm.h" | |
| 14 | |
| 15 extern u_char rvi_msg[]; | |
| 16 extern int rvi_msg_len; | |
| 17 | |
| 18 void | |
| 19 cmd_abbr(argc, argv) | |
| 20 char **argv; | |
| 21 { | |
| 22 u32 page, reg; | |
| 23 u_char cmdpkt[5]; | |
| 24 | |
| 25 page = strtoul(argv[1], 0, 0); | |
| 26 reg = strtoul(argv[2], 0, 0); | |
| 27 if (page > 1 || reg > 31) { | |
| 28 printf("error: argument(s) out of range\n"); | |
| 29 return; | |
| 30 } | |
| 31 cmdpkt[1] = ETM_CORE; | |
| 32 cmdpkt[2] = TMCORE_OPC_CODEC_RD; | |
| 33 cmdpkt[3] = page << 5 | reg; | |
| 34 send_etm_cmd(cmdpkt, 3); | |
| 35 } | |
| 36 | |
| 37 void | |
| 38 abbr_response() | |
| 39 { | |
| 40 unsigned pg, reg, val; | |
| 41 char buf[80]; | |
| 42 | |
| 43 if (rvi_msg[3]) { | |
| 44 print_etm_pkt_raw("abbr error"); | |
| 45 return; | |
| 46 } | |
| 47 if (rvi_msg_len != 9) { | |
| 48 print_etm_pkt_raw("abbr malformed resp"); | |
| 49 return; | |
| 50 } | |
| 51 pg = rvi_msg[5] >> 5; | |
| 52 reg = rvi_msg[5] & 0x1F; | |
| 53 val = rvi_msg[6] | rvi_msg[7] << 8; | |
| 54 sprintf(buf, "abbr %u %u: %03X", pg, reg, val); | |
| 55 async_msg_output(buf); | |
| 56 } | |
| 57 | |
| 58 void | |
| 59 cmd_abbw(argc, argv) | |
| 60 char **argv; | |
| 61 { | |
| 62 u32 page, reg, val; | |
| 63 u_char cmdpkt[7]; | |
| 64 | |
| 65 page = strtoul(argv[1], 0, 0); | |
| 66 reg = strtoul(argv[2], 0, 0); | |
| 67 val = strtoul(argv[3], 0, 16); | |
| 68 if (page > 1 || reg > 31 || val > 0x3FF) { | |
| 69 printf("error: argument(s) out of range\n"); | |
| 70 return; | |
| 71 } | |
| 72 cmdpkt[1] = ETM_CORE; | |
| 73 cmdpkt[2] = TMCORE_OPC_CODEC_WR; | |
| 74 cmdpkt[3] = page << 5 | reg; | |
| 75 cmdpkt[4] = val; | |
| 76 cmdpkt[5] = val >> 8; | |
| 77 send_etm_cmd(cmdpkt, 5); | |
| 78 } | |
| 79 | |
| 80 void | |
| 81 abbw_response() | |
| 82 { | |
| 83 unsigned pg, reg; | |
| 84 char buf[80]; | |
| 85 | |
| 86 if (rvi_msg[3]) { | |
| 87 print_etm_pkt_raw("abbw error"); | |
| 88 return; | |
| 89 } | |
| 90 if (rvi_msg_len != 7) { | |
| 91 print_etm_pkt_raw("abbw malformed resp"); | |
| 92 return; | |
| 93 } | |
| 94 pg = rvi_msg[5] >> 5; | |
| 95 reg = rvi_msg[5] & 0x1F; | |
| 96 sprintf(buf, "abbw %u %u OK", pg, reg); | |
| 97 async_msg_output(buf); | |
| 98 } |
