FreeCalypso > hg > fc-rfcal-tools
comparison autocal/l1meas.c @ 48:201f27bd8dca
autocal/l1meas.c: implemented reading of auto-stats
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 27 May 2017 07:03:08 +0000 |
| parents | 98abe6bd2042 |
| children | 1a0dbc746d57 |
comparison
equal
deleted
inserted
replaced
| 47:e86779d5445c | 48:201f27bd8dca |
|---|---|
| 8 #include <stdlib.h> | 8 #include <stdlib.h> |
| 9 #include <rvinterf/pktmux.h> | 9 #include <rvinterf/pktmux.h> |
| 10 #include <rvinterf/tm3.h> | 10 #include <rvinterf/tm3.h> |
| 11 #include <rvinterf/l1tm.h> | 11 #include <rvinterf/l1tm.h> |
| 12 #include <rvinterf/exitcodes.h> | 12 #include <rvinterf/exitcodes.h> |
| 13 #include "l1stats.h" | |
| 13 | 14 |
| 14 extern u_char rvi_msg[]; | 15 extern u_char rvi_msg[]; |
| 15 extern int rvi_msg_len; | 16 extern int rvi_msg_len; |
| 16 | 17 |
| 17 do_scw(index, value) | 18 do_scw(index, value) |
| 37 fprintf(stderr, "DUT error: scw response wrong index\n"); | 38 fprintf(stderr, "DUT error: scw response wrong index\n"); |
| 38 exit(ERROR_TARGET); | 39 exit(ERROR_TARGET); |
| 39 } | 40 } |
| 40 return(0); | 41 return(0); |
| 41 } | 42 } |
| 43 | |
| 44 collect_auto_stats(sb) | |
| 45 struct l1stats *sb; | |
| 46 { | |
| 47 unsigned type, bitmask, offset; | |
| 48 int expect_len; | |
| 49 | |
| 50 collect_extra_pkt_from_target(); | |
| 51 l1tm_resp_sanity_check(STATS_READ); | |
| 52 if (rvi_msg[3]) { | |
| 53 fprintf(stderr, "DUT error %u in auto-stats message\n", | |
| 54 rvi_msg[3]); | |
| 55 exit(ERROR_TARGET); | |
| 56 } | |
| 57 if (rvi_msg_len < 9) { | |
| 58 fprintf(stderr, "DUT error: auto-stats msg too short\n"); | |
| 59 exit(ERROR_TARGET); | |
| 60 } | |
| 61 type = rvi_msg[4] | (rvi_msg[5] << 8); | |
| 62 bitmask = rvi_msg[6] | (rvi_msg[7] << 8); | |
| 63 if (type < 1 || type > 2) { | |
| 64 fprintf(stderr, "DUT error: invalid type in auto-stats msg\n"); | |
| 65 exit(ERROR_TARGET); | |
| 66 } | |
| 67 if (bitmask & 0x0300) { | |
| 68 fprintf(stderr, | |
| 69 "DUT error: invalid bitmask in auto-stats msg\n"); | |
| 70 exit(ERROR_TARGET); | |
| 71 } | |
| 72 expect_len = 9; | |
| 73 if (bitmask & RSSI) | |
| 74 expect_len += 2; | |
| 75 if (bitmask & DSP_PM) | |
| 76 expect_len += 2; | |
| 77 if (bitmask & ANGLE_MEAN) | |
| 78 expect_len += 4; | |
| 79 if (bitmask & ANGLE_VAR) | |
| 80 expect_len += 4; | |
| 81 if (bitmask & ANGLE_MIN) | |
| 82 expect_len += 4; | |
| 83 if (bitmask & ANGLE_MAX) | |
| 84 expect_len += 4; | |
| 85 if (bitmask & SNR_MEAN) | |
| 86 expect_len += 4; | |
| 87 if (bitmask & SNR_VAR) | |
| 88 expect_len += 4; | |
| 89 if (bitmask & TOA_MEAN) | |
| 90 expect_len += 4; | |
| 91 if (bitmask & TOA_VAR) | |
| 92 expect_len += 4; | |
| 93 if (bitmask & FRAME_NUMBER) | |
| 94 expect_len += 4; | |
| 95 if (bitmask & RUNS) | |
| 96 expect_len += 4; | |
| 97 if (bitmask & SUCCESSES) | |
| 98 expect_len += 4; | |
| 99 if (bitmask & BSIC) | |
| 100 expect_len += 2; | |
| 101 if (rvi_msg_len != expect_len) { | |
| 102 fprintf(stderr, "DUT error: auto-stats msg wrong length\n"); | |
| 103 exit(ERROR_TARGET); | |
| 104 } | |
| 105 sb->type = type; | |
| 106 sb->bitmask = bitmask; | |
| 107 offset = 8; | |
| 108 if (bitmask & RSSI) { | |
| 109 sb->rssi = rvi_msg[offset] | (rvi_msg[offset+1] << 8); | |
| 110 offset += 2; | |
| 111 } | |
| 112 if (bitmask & DSP_PM) { | |
| 113 sb->dsp_pm = rvi_msg[offset] | (rvi_msg[offset+1] << 8); | |
| 114 offset += 2; | |
| 115 } | |
| 116 if (bitmask & ANGLE_MEAN) { | |
| 117 sb->angle_mean = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 118 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 119 offset += 4; | |
| 120 } | |
| 121 if (bitmask & ANGLE_VAR) { | |
| 122 sb->angle_var = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 123 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 124 offset += 4; | |
| 125 } | |
| 126 if (bitmask & ANGLE_MIN) { | |
| 127 sb->angle_min = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 128 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 129 offset += 4; | |
| 130 } | |
| 131 if (bitmask & ANGLE_MAX) { | |
| 132 sb->angle_max = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 133 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 134 offset += 4; | |
| 135 } | |
| 136 if (bitmask & SNR_MEAN) { | |
| 137 sb->snr_mean = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 138 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 139 offset += 4; | |
| 140 } | |
| 141 if (bitmask & SNR_VAR) { | |
| 142 sb->snr_var = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 143 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 144 offset += 4; | |
| 145 } | |
| 146 if (bitmask & TOA_MEAN) { | |
| 147 sb->toa_mean = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 148 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 149 offset += 4; | |
| 150 } | |
| 151 if (bitmask & TOA_VAR) { | |
| 152 sb->toa_var = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 153 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 154 offset += 4; | |
| 155 } | |
| 156 if (bitmask & FRAME_NUMBER) { | |
| 157 sb->frame_number = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 158 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 159 offset += 4; | |
| 160 } | |
| 161 if (bitmask & RUNS) { | |
| 162 sb->runs = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 163 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 164 offset += 4; | |
| 165 } | |
| 166 if (bitmask & SUCCESSES) { | |
| 167 sb->successes = rvi_msg[offset] | (rvi_msg[offset+1] << 8) | | |
| 168 (rvi_msg[offset+2] << 16) | (rvi_msg[offset+3] << 24); | |
| 169 offset += 4; | |
| 170 } | |
| 171 if (bitmask & BSIC) { | |
| 172 sb->bsic = rvi_msg[offset] | (rvi_msg[offset+1] << 8); | |
| 173 offset += 2; | |
| 174 } | |
| 175 return(0); | |
| 176 } |
