summaryrefslogtreecommitdiff
path: root/megawifi.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2018-01-16 09:31:00 -0800
committerMichael Pavone <pavone@retrodev.com>2018-01-16 09:31:00 -0800
commitea2646501e91437345afd1cfc85704dd1f983d66 (patch)
tree7234aff97fec4fa9c1214afdfe67aed6b0ff0313 /megawifi.c
parentd85bd0c9435bbcab8b63b07652a01e4e5a4a6eaf (diff)
Added support for MegaWiFi command IP_CURRENT
Diffstat (limited to 'megawifi.c')
-rw-r--r--megawifi.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/megawifi.c b/megawifi.c
index 17270c2..898bc8a 100644
--- a/megawifi.c
+++ b/megawifi.c
@@ -2,6 +2,7 @@
#include <stdint.h>
#include <string.h>
#include "genesis.h"
+#include "net.h"
enum {
TX_IDLE,
@@ -88,6 +89,7 @@ static void process_packet(megawifi *mw)
size = mw->transmit_bytes - 4;
}
mw->receive_read = mw->receive_bytes = 0;
+ printf("Received MegaWiFi command %s(%d) with length %X\n", cmd_names[command], command, size);
switch (command)
{
case CMD_VERSION:
@@ -142,6 +144,52 @@ static void process_packet(megawifi *mw)
mw_putc(mw, mw->channel_flags);
mw_putc(mw, 0x7E);
break;
+ case CMD_IP_CURRENT: {
+ //LSD header
+ mw_putc(mw, 0x7E);
+ mw_putc(mw, 0);
+ mw_putc(mw, 28);
+ //cmd
+ mw_putc(mw, 0);
+ mw_putc(mw, CMD_OK);
+ //length
+ mw_putc(mw, 0);
+ mw_putc(mw, 24);
+
+ iface_info i;
+ get_host_address(&i);
+ //config number and reserved bytes
+ mw_putc(mw, 0);
+ mw_putc(mw, 0);
+ mw_putc(mw, 0);
+ mw_putc(mw, 0);
+ //ip
+ mw_putc(mw, i.ip[0]);
+ mw_putc(mw, i.ip[1]);
+ mw_putc(mw, i.ip[2]);
+ mw_putc(mw, i.ip[3]);
+ //net mask
+ mw_putc(mw, i.net_mask[0]);
+ mw_putc(mw, i.net_mask[1]);
+ mw_putc(mw, i.net_mask[2]);
+ mw_putc(mw, i.net_mask[3]);
+ //gateway guess
+ mw_putc(mw, i.ip[0] & i.net_mask[0]);
+ mw_putc(mw, i.ip[1] & i.net_mask[1]);
+ mw_putc(mw, i.ip[2] & i.net_mask[2]);
+ mw_putc(mw, (i.ip[3] & i.net_mask[3]) + 1);
+ //dns
+ mw_putc(mw, 127);
+ mw_putc(mw, 0);
+ mw_putc(mw, 0);
+ mw_putc(mw, 1);
+ mw_putc(mw, 127);
+ mw_putc(mw, 0);
+ mw_putc(mw, 0);
+ mw_putc(mw, 1);
+ mw_putc(mw, 0x7E);
+ break;
+ }
default:
printf("Unhandled MegaWiFi command %s(%d) with length %X\n", cmd_names[command], command, size);
break;