From 3670bbb712acbb0972461edcbfc202090e495445 Mon Sep 17 00:00:00 2001 From: Christopher Roy Bratusek Date: Wed, 29 Aug 2012 22:57:53 +0200 Subject: [PATCH] added basic support for WifiGecko --- installer/wad/0001000154484246.tmd | Bin 592 -> 592 bytes main/source/Menus/menu_main.cpp | 14 ++++ main/source/Network/wifi_gecko.c | 113 +++++++++++++++++++++++++++++ main/source/Network/wifi_gecko.h | 42 +++++++++++ updates | 4 + 5 files changed, 173 insertions(+) create mode 100644 main/source/Network/wifi_gecko.c create mode 100644 main/source/Network/wifi_gecko.h diff --git a/installer/wad/0001000154484246.tmd b/installer/wad/0001000154484246.tmd index 6202fc991bf857778f8437d02283806dcacf178a..f3ae67f27e87fad5b24d3deb780fd06e928b2b93 100644 GIT binary patch delta 34 scmV+-0Nwx41kePq76KORV9m4EB4(a4JfxEUAKCl19j3Dc!;>rmBo*5ay#N3J delta 34 qcmcb>a)D)o7?aquhF*>D=FEqKoQoP-&*gULGIUxw|Cp@9qyhl+5e; +#include +#include +#include +#include +#include + +#define DESTINATION_IP "10.0.0.6" +#define DESTINATION_PORT 4405 + +static int connection = -1; + +void WifiGecko_Close() +{ + if(connection >= 0) + net_close(connection); + + connection = -1; +} + +int WifiGecko_Connect() +{ + if(connection >= 0) + return connection; + + connection = net_socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (connection < 0) + return connection; + + struct sockaddr_in connect_addr; + memset(&connect_addr, 0, sizeof(connect_addr)); + connect_addr.sin_family = AF_INET; + connect_addr.sin_port = htons(DESTINATION_PORT); + inet_aton(DESTINATION_IP, &connect_addr.sin_addr); + + if(net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0) + { + WifiGecko_Close(); + return -1; + } + + return connection; +} + +int WifiGecko_Send(const char * data, int datasize) +{ + if(WifiGecko_Connect() < 0) + return connection; + + int ret = 0, done = 0, blocksize = 1024; + + while (done < datasize) + { + if(blocksize > datasize-done) + blocksize = datasize-done; + + ret = net_send(connection, data+done, blocksize, 0); + if (ret < 0) + { + WifiGecko_Close(); + return ret; + } + else if(ret == 0) + { + break; + } + + done += ret; + usleep (1000); + } + + return ret; +} + +void wifi_printf(const char * format, ...) +{ + char * tmp = NULL; + va_list va; + va_start(va, format); + if((vasprintf(&tmp, format, va) >= 0) && tmp) + { + WifiGecko_Send(tmp, strlen(tmp)); + } + va_end(va); + + if(tmp) + free(tmp); +} diff --git a/main/source/Network/wifi_gecko.h b/main/source/Network/wifi_gecko.h new file mode 100644 index 0000000..ef97e47 --- /dev/null +++ b/main/source/Network/wifi_gecko.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * Copyright (C) 2010 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + * for WiiXplorer 2010 + ***************************************************************************/ +#ifndef WIFI_GECKO_H_ +#define WIFI_GECKO_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int WifiGecko_Connect(); +void WifiGecko_Close(); +int WifiGecko_Send(const char * data, int datasize); +void wifi_printf(const char * format, ...); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/updates b/updates index 2aafa93..bca9224 100644 --- a/updates +++ b/updates @@ -1,5 +1,9 @@ //rev41: - fixed auto-connecting Internet via WiFi +- basic support for WifiGecko + * only connection message is shown currently + * no option yet to change IP and Port + * also works via LAN //rev40: - new icon (JoostinOnline)