1
2
3
4
5
6
7
8
9 struct rln_mm_cmd {
10 u_int8_t cmd_letter;
11 u_int8_t cmd_seq;
12 #define RLN_MAXSEQ 0x7c
13 u_int8_t cmd_fn;
14 u_int8_t cmd_error;
15 };
16 #define RLN_MM_CMD(l,n) ((((unsigned int)l)<<8) | ((unsigned int)n))
17 #define RLN_MM_CMD_LETTER(cmd) ((unsigned char)(((cmd) & 0xff00)>>8))
18 #define RLN_MM_CMD_FUNCTION(cmd) ((unsigned char)((cmd) & 0xff))
19 #define RLN_CMDCODE(letter, num) ((((letter) & 0xff) << 8) | ((num) & 0xff))
20
21
22 struct rln_mm_init {
23 struct rln_mm_cmd mm_cmd;
24 #define RLN_MM_INIT { 'A', 0, 0, 0 }
25 u_int8_t enaddr[6];
26 u_int8_t opmode;
27 #define RLN_MM_INIT_OPMODE_NORMAL 0
28 #define RLN_MM_INIT_OPMODE_PROMISC 1
29 #define RLN_MM_INIT_OPMODE_PROTOCOL 2
30 u_int8_t stationtype;
31 u_int8_t hop_period;
32 u_int8_t bfreq;
33 u_int8_t sfreq;
34 u_char channel : 4;
35 u_char subchannel : 4;
36 char mastername[11];
37 u_char sec1 : 4;
38 u_char domain : 4;
39 u_int8_t sec2;
40 u_int8_t sec3;
41 u_int8_t sync_to;
42 u_int8_t xxx_pad;
43 char syncname[11];
44 };
45
46
47 struct rln_mm_initted {
48 struct rln_mm_cmd mm_cmd;
49 #define RLN_MM_INITTED { 'a', 0, 0, 0 }
50 u_int8_t xxx;
51 };
52
53
54 struct rln_mm_search {
55 struct rln_mm_cmd mm_cmd;
56 #define RLN_MM_SEARCH { 'A', 0, 1, 0 }
57 u_int8_t xxx1[23];
58 u_char xxx2 : 4;
59 u_char domain : 4;
60 u_int8_t roaming;
61 u_int8_t xxx3;
62 u_int8_t xxx4;
63 u_int8_t xxx5;
64 u_int8_t xxx6[11];
65 };
66
67
68 struct rln_mm_searching {
69 struct rln_mm_cmd mm_cmd;
70 #define RLN_MM_SEARCHING { 'a', 0, 1, 0 }
71 u_int8_t xxx;
72 };
73
74
75 #define RLN_MM_ABORTSEARCH { 'A', 0, 3, 0 }
76
77
78 struct rln_mm_synchronised {
79 struct rln_mm_cmd mm_cmd;
80 #define RLN_MM_SYNCHRONISED { 'a', 0, 4, 0 }
81 u_char channel : 4;
82 u_char subchannel : 4;
83 char mastername[11];
84 u_int8_t enaddr[6];
85 };
86
87
88 #define RLN_MM_UNSYNCHRONISED { 'a', 0, 5, 0 }
89
90
91 struct rln_mm_standby {
92 struct rln_mm_cmd mm_cmd;
93 #define RLN_MM_STANDBY { 'A', 0, 6, 0 }
94 u_int8_t xxx;
95 };
96
97
98 struct rln_mm_setito {
99 struct rln_mm_cmd mm_cmd;
100 #define RLN_MM_SETITO { 'A', 0, 7, 0 }
101 u_int8_t xxx;
102 u_int8_t timeout;
103 u_char bd_wakeup : 1;
104 u_char pm_sync : 7;
105 u_int8_t sniff_time;
106 };
107
108
109 #define RLN_MM_GOTITO { 'a', 0, 7, 0 }
110
111
112 #define RLN_MM_SENDKEEPALIVE { 'A', 0, 8, 0 }
113
114
115 struct rln_mm_multicast {
116 struct rln_mm_cmd mm_cmd;
117 #define RLN_MM_MULTICAST { 'A', 0, 9, 0 }
118 u_int8_t enable;
119 };
120
121
122 #define RLN_MM_MULTICASTING { 'a', 0, 9, 0 }
123
124
125 #define RLN_MM_GETSTATS { 'A', 0, 11, 0 }
126
127
128 #define RLN_MM_GOTSTATS { 'a', 0, 11, 0 }
129
130
131 struct rln_mm_setsecurity {
132 struct rln_mm_cmd mm_cmd;
133 #define RLN_MM_SETSECURITY { 'A', 0, 12, 0 }
134 u_int8_t sec1;
135 u_int8_t sec2;
136 u_int8_t sec3;
137 };
138
139
140 #define RLN_MM_GOTSECURITY { 'a', 0, 12, 0 }
141
142
143 #define RLN_MM_GETPROMVERSION { 'A', 0, 13, 0 }
144
145
146 struct rln_mm_gotpromversion {
147 struct rln_mm_cmd mm_cmd;
148 #define RLN_MM_GOTPROMVERSION { 'a', 0, 13, 0 }
149 u_int8_t xxx;
150 char version[7];
151 };
152
153
154 #define RLN_MM_GETENADDR { 'A', 0, 14, 0 }
155
156
157 struct rln_mm_gotenaddr {
158 struct rln_mm_cmd mm_cmd;
159 #define RLN_MM_GOTENADDR { 'a', 0, 14, 0 }
160 u_int8_t xxx;
161 u_int8_t enaddr[6];
162 };
163
164
165 struct rln_mm_setmagic {
166 struct rln_mm_cmd mm_cmd;
167 #define RLN_MM_SETMAGIC { 'A', 0, 16, 0 }
168 u_char fairness_slot : 3;
169 u_char deferral_slot : 5;
170 u_int8_t regular_mac_retry;
171 u_int8_t frag_mac_retry;
172 u_int8_t regular_mac_qfsk;
173 u_int8_t frag_mac_qfsk;
174 u_int8_t xxx1;
175 u_int8_t xxx2;
176 u_int8_t xxx3;
177 u_int8_t xxx4;
178 };
179
180
181 #define RLN_MM_GOTMAGIC { 'a', 0, 16, 0 }
182
183
184 struct rln_mm_setroaming {
185 struct rln_mm_cmd mm_cmd;
186 #define RLN_MM_SETROAMING { 'A', 0, 17, 0 }
187 u_int8_t sync_alarm;
188 u_int8_t retry_thresh;
189 u_int8_t rssi_threshold;
190 u_int8_t xxx1;
191 u_int8_t sync_rssi_threshold;
192 u_int8_t xxx2;
193 u_int8_t missed_sync;
194 };
195
196
197 #define RLN_MM_GOTROAMING { 'a', 0, 17, 0 }
198
199 #define RLN_MM_ROAMING { 'a', 0, 18, 0 }
200 #define RLN_MM_ROAM { 'A', 0, 19, 0 }
201
202
203 #define RLN_MM_FAULT { 'a', 0, 20, 0 }
204
205 #define RLN_MM_EEPROM_PROTECT { 'A', 0, 23, 0 }
206 #define RLN_MM_EEPROM_PROTECTED { 'a', 0, 23, 0 }
207 #define RLN_MM_EEPROM_UNPROTECT { 'A', 0, 24, 0 }
208 #define RLN_MM_EEPROM_UNPROTECTED { 'a', 0, 24, 0 }
209
210
211 #define RLN_MM_HOP_STATISTICS { 'a', 0, 35, 0 }
212
213
214 struct rln_mm_sendpacket {
215 struct rln_mm_cmd mm_cmd;
216 #define RLN_MM_SENDPACKET { 'B', 0, 0, 0 }
217 u_int8_t mode;
218 #define RLN_MM_SENDPACKET_MODE_BIT7 0x80
219 #define RLN_MM_SENDPACKET_MODE_ZFIRST 0x20
220 #define RLN_MM_SENDPACKET_MODE_QFSK 0x03
221 u_int8_t power;
222 u_int8_t length_lo;
223 u_int8_t length_hi;
224 u_int8_t xxx1;
225 u_int8_t xxx2;
226 u_int8_t sequence;
227 u_int8_t xxx3;
228 };
229
230
231 #define RLN_MM_SENTPACKET { 'b', 0, 0, 0 }
232
233
234 struct rln_mm_recvpacket {
235 struct rln_mm_cmd mm_cmd;
236 #define RLN_MM_RECVPACKET { 'b', 0, 1, 0 }
237 u_int8_t xxx[8];
238 };
239
240
241 struct rln_mm_disablehopping {
242 struct rln_mm_cmd mm_cmd;
243 #define RLN_MM_DISABLEHOPPING { 'C', 0, 9, 0 }
244 u_int8_t hopflag;
245 #define RLN_MM_DISABLEHOPPING_HOPFLAG_DISABLE 0x52
246 };
247