2 * radio.c from Access Point SNMP Utils for Linux
4 * Copyright (c) 2002 Roman Festchook <roma at polesye dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License Version 2 from
8 * June 1991 as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <sys/types.h>
26 #define RADIO_HELP _("[key] - power level; UIOP or LR - antenna; W - write config; Q - quit to menu")
28 #define ANTENNA _("Antenna:")
29 #define ANTENNA_LEFT _("[L] Left:")
30 #define ANTENNA_RIGHT _("[R] Right:")
32 extern WINDOW *main_sub;
37 char TestModeRadioConfiguration[] =
38 { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x01, 0x08, 0x08,
42 char operAntennaSettings[] =
43 { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x02, 0x01, 0x0C,
47 #if defined(WORDS_BIGENDIAN)
48 struct twobytes_antenna_struct {
57 struct onebyte_antenna_struct {
62 #else /* !WORDS_BIGENDIAN */
63 struct twobytes_antenna_struct {
72 struct onebyte_antenna_struct {
77 #endif /* !WORDS_BIGENDIAN */
80 struct twobytes_antenna_struct antennas_tb;
81 unsigned short antennai;
82 struct onebyte_antenna_struct antennas_ob;
88 unsigned char power[14], m_power = 0, a[] = { 0, 0 }, m_antenna = 0;
90 int i, c = 0, antenna_vlen;
92 if (ap_type == ATMEL12350) {
93 TestModeRadioConfiguration[5] = 0xE0;
94 TestModeRadioConfiguration[6] = 0x3E;
95 operAntennaSettings[5] = 0xE0;
96 operAntennaSettings[6] = 0x3E;
99 varbinds[0].oid = TestModeRadioConfiguration;
100 varbinds[0].len_oid = sizeof(TestModeRadioConfiguration);
101 varbinds[0].value = TestModeRadioConfiguration;
102 varbinds[0].len_val = 0;
103 varbinds[0].type = NULL_VALUE;
104 varbinds[1].oid = operAntennaSettings;
105 varbinds[1].value = TestModeRadioConfiguration;
106 varbinds[1].len_oid = sizeof(operAntennaSettings);
107 varbinds[1].len_val = 0;
108 varbinds[1].type = NULL_VALUE;
110 print_help(WAIT_RET);
111 if (snmp(varbinds, 2, GET) < 2) {
112 print_helperr(ERR_RET);
115 print_help(RADIO_HELP);
117 memcpy(power, varbinds[0].value, 14);
118 antenna_vlen = varbinds[1].len_val;
120 print_top(NULL, _("Radio Configuration"));
121 mvwaddstr(main_sub, 0, 1, _("Output RF signal power level (CR31 register values)"));
122 mvwaddstr(main_sub, 1, 1, "---------------------------------------------------");
123 mvwaddstr(main_sub, 2, 1, _("Key Channel Level"));
125 for (i = 0; i < 14; i++) {
126 sprintf(message, "[%X] %02u %3u", i + 1, i + 1, power[i]);
127 mvwaddstr(main_sub, i + 3, 1, message);
130 if (antenna_vlen == 2) {
131 memcpy(&antenna.antennai, varbinds[1].value, 2);
132 antenna.antennai = ntohs(antenna.antennai);
133 sprintf(message, "%s %s %3s, %s %3s",
135 ANTENNA_RX_LEFT, (antenna.antennas_tb.recv_left) ? ON : OFF,
136 ANTENNA_RX_RIGHT, (antenna.antennas_tb.recv_right) ? ON : OFF);
137 mvwaddstr(main_sub, 18, 1, message);
138 sprintf(message, "%s %s %3s, %s %3s",
140 ANTENNA_TX_LEFT, (antenna.antennas_tb.trans_left) ? ON : OFF,
141 ANTENNA_TX_RIGHT, (antenna.antennas_tb.trans_right) ? ON : OFF);
142 mvwaddstr(main_sub, 19, 1, message);
143 } else { /* antenna_vlen == 1 */
144 antenna.antennac = *varbinds[1].value;
145 sprintf(message, "%s %s %3s, %s %3s",
147 ANTENNA_LEFT, (antenna.antennas_ob.left) ? ON : OFF,
148 ANTENNA_RIGHT, (antenna.antennas_ob.right) ? ON : OFF);
149 mvwaddstr(main_sub, 18, 1, message);
177 i = strtol(a, NULL, 16);
178 get_value(message, i + 2, 14, 4, INT_STRING, 0, 255, RADIO_HELP);
179 c = atoi(message) & 0xFF;
185 if (antenna_vlen == 1)
187 i = strlen(ANTENNA_RX) + 1 +
188 strlen(ANTENNA_RX_LEFT) + 6 +
189 strlen(ANTENNA_RX_RIGHT) + 2;
190 m_antenna = on_off(18, i);
191 antenna.antennas_tb.recv_right = (m_antenna == 2) ? 0 : 1;
192 sprintf(message, "%3s", (antenna.antennas_tb.recv_right) ? ON : OFF);
193 print_menusel(18, i, NULL, message);
197 if (antenna_vlen == 1)
199 i = strlen(ANTENNA_RX) + 1 +
200 strlen(ANTENNA_RX_LEFT) + 2;
201 m_antenna = on_off(18, i);
202 antenna.antennas_tb.recv_left = (m_antenna == 2) ? 0 : 1;
203 sprintf(message, "%3s", (antenna.antennas_tb.recv_left) ? ON : OFF);
204 print_menusel(18, i, NULL, message);
208 if (antenna_vlen == 1)
210 i = strlen(ANTENNA_TX) + 1 +
211 strlen(ANTENNA_TX_LEFT) + 6 +
212 strlen(ANTENNA_TX_RIGHT) + 2;
213 m_antenna = on_off(19, i);
214 antenna.antennas_tb.trans_right = (m_antenna == 2) ? 0 : 1;
215 sprintf(message, "%3s", (antenna.antennas_tb.trans_right) ? ON : OFF);
216 print_menusel(19, i, NULL, message);
220 if (antenna_vlen == 1)
222 i = strlen(ANTENNA_TX) + 1 +
223 strlen(ANTENNA_TX_LEFT) + 2;
224 m_antenna = on_off(19, i);
225 antenna.antennas_tb.trans_left = (m_antenna == 2) ? 0 : 1;
226 sprintf(message, "%3s", (antenna.antennas_tb.trans_left) ? ON : OFF);
227 print_menusel(19, i, NULL, message);
231 if (antenna_vlen == 2)
233 i = strlen(ANTENNA) + 1 +
234 strlen(ANTENNA_LEFT) + 6 +
235 strlen(ANTENNA_RIGHT) + 2;
236 m_antenna = on_off(18, i);
237 antenna.antennas_ob.right = (m_antenna == 2) ? 0 : 1;
238 sprintf(message, "%3s", (antenna.antennas_ob.right) ? ON : OFF);
239 print_menusel(18, i, NULL, message);
243 if (antenna_vlen == 2)
245 i = strlen(ANTENNA) + 1 +
246 strlen(ANTENNA_LEFT) + 2;
247 m_antenna = on_off(18, i);
248 antenna.antennas_ob.left = (m_antenna == 2) ? 0 : 1;
249 sprintf(message, "%3s", (antenna.antennas_ob.left) ? ON : OFF);
250 print_menusel(18, i, NULL, message);
259 varbinds[i].oid = TestModeRadioConfiguration;
260 varbinds[i].len_oid = sizeof(TestModeRadioConfiguration);
261 varbinds[i].value = power;
262 varbinds[i].len_val = 14;
263 varbinds[i].type = STRING_VALUE;
268 if ( (antenna_vlen == 1 &&
269 (antenna.antennas_ob.left == 0 &&
270 antenna.antennas_ob.right == 0))
272 (antenna_vlen == 2 &&
273 ( (antenna.antennas_tb.trans_left == 0 &&
274 antenna.antennas_tb.trans_right == 0) ||
275 (antenna.antennas_tb.recv_left == 0 &&
276 antenna.antennas_tb.recv_right == 0))) ) {
279 ("You can't disable both antennas; unable to save antenna-config. Press any key."));
283 varbinds[i].oid = operAntennaSettings;
284 varbinds[i].len_oid = sizeof(operAntennaSettings);
285 if (antenna_vlen == 2) {
286 unsigned short antenna_hw = htons(antenna.antennai);
288 varbinds[i].value = (char *) &antenna_hw;
289 } else /* antenna_vlen == 1 */
290 varbinds[i].value = &antenna.antennac;
291 varbinds[i].type = INT_VALUE;
292 varbinds[i].len_val = antenna_vlen;
297 print_help(WAIT_SET);
298 if (snmp(varbinds, i, SET) <= 0) {
299 print_helperr(ERR_SET);
302 wbkgd(main_sub, A_NORMAL);
315 print_top(NULL, NULL);