comparison megawifi.c @ 1514:4f94e0f90c83

Added support for MegaWiFi command IP_CURRENT
author Michael Pavone <pavone@retrodev.com>
date Tue, 16 Jan 2018 09:31:00 -0800
parents 8f3b6a64b658
children 3fc129eb0653
comparison
equal deleted inserted replaced
1513:8f3b6a64b658 1514:4f94e0f90c83
1 #include <stdlib.h> 1 #include <stdlib.h>
2 #include <stdint.h> 2 #include <stdint.h>
3 #include <string.h> 3 #include <string.h>
4 #include "genesis.h" 4 #include "genesis.h"
5 #include "net.h"
5 6
6 enum { 7 enum {
7 TX_IDLE, 8 TX_IDLE,
8 TX_LEN1, 9 TX_LEN1,
9 TX_LEN2, 10 TX_LEN2,
86 uint32_t size = mw->transmit_buffer[2] << 8 | mw->transmit_buffer[3]; 87 uint32_t size = mw->transmit_buffer[2] << 8 | mw->transmit_buffer[3];
87 if (size > mw->transmit_bytes - 4) { 88 if (size > mw->transmit_bytes - 4) {
88 size = mw->transmit_bytes - 4; 89 size = mw->transmit_bytes - 4;
89 } 90 }
90 mw->receive_read = mw->receive_bytes = 0; 91 mw->receive_read = mw->receive_bytes = 0;
92 printf("Received MegaWiFi command %s(%d) with length %X\n", cmd_names[command], command, size);
91 switch (command) 93 switch (command)
92 { 94 {
93 case CMD_VERSION: 95 case CMD_VERSION:
94 //LSD header 96 //LSD header
95 mw_putc(mw, 0x7E); 97 mw_putc(mw, 0x7E);
140 mw_putc(mw, mw->flags); 142 mw_putc(mw, mw->flags);
141 mw_putc(mw, mw->channel_flags >> 8); 143 mw_putc(mw, mw->channel_flags >> 8);
142 mw_putc(mw, mw->channel_flags); 144 mw_putc(mw, mw->channel_flags);
143 mw_putc(mw, 0x7E); 145 mw_putc(mw, 0x7E);
144 break; 146 break;
147 case CMD_IP_CURRENT: {
148 //LSD header
149 mw_putc(mw, 0x7E);
150 mw_putc(mw, 0);
151 mw_putc(mw, 28);
152 //cmd
153 mw_putc(mw, 0);
154 mw_putc(mw, CMD_OK);
155 //length
156 mw_putc(mw, 0);
157 mw_putc(mw, 24);
158
159 iface_info i;
160 get_host_address(&i);
161 //config number and reserved bytes
162 mw_putc(mw, 0);
163 mw_putc(mw, 0);
164 mw_putc(mw, 0);
165 mw_putc(mw, 0);
166 //ip
167 mw_putc(mw, i.ip[0]);
168 mw_putc(mw, i.ip[1]);
169 mw_putc(mw, i.ip[2]);
170 mw_putc(mw, i.ip[3]);
171 //net mask
172 mw_putc(mw, i.net_mask[0]);
173 mw_putc(mw, i.net_mask[1]);
174 mw_putc(mw, i.net_mask[2]);
175 mw_putc(mw, i.net_mask[3]);
176 //gateway guess
177 mw_putc(mw, i.ip[0] & i.net_mask[0]);
178 mw_putc(mw, i.ip[1] & i.net_mask[1]);
179 mw_putc(mw, i.ip[2] & i.net_mask[2]);
180 mw_putc(mw, (i.ip[3] & i.net_mask[3]) + 1);
181 //dns
182 mw_putc(mw, 127);
183 mw_putc(mw, 0);
184 mw_putc(mw, 0);
185 mw_putc(mw, 1);
186 mw_putc(mw, 127);
187 mw_putc(mw, 0);
188 mw_putc(mw, 0);
189 mw_putc(mw, 1);
190 mw_putc(mw, 0x7E);
191 break;
192 }
145 default: 193 default:
146 printf("Unhandled MegaWiFi command %s(%d) with length %X\n", cmd_names[command], command, size); 194 printf("Unhandled MegaWiFi command %s(%d) with length %X\n", cmd_names[command], command, size);
147 break; 195 break;
148 } 196 }
149 } else { 197 } else {