Friday, August 03, 2007

Wifi again ?

Timide reprise de mon dévelopement homebrew ce matin ... j'ai mis en oeuvre la technique de "non-blocking IO" pour le projet "runME" (en fait, plutôt showME, pour l'instant) pour tester le transfer de fichiers par Wifi ...
Et comme je reviens à peine de vacances, je n'ai pas remis la main sur mon stick-lecteur-SD du bureau (oui, celui qui est tout pourri et qui a besoin d'une cale en papier pour permettre les transfers) donc je bosse à grand coup de DSFTP (qui marche une fois sur deux avec mon programme de 200K >_<)

int i=1
int tsock=socket(AF_INET,SOCK_STREAM,0);
ioctl(tsock,FIONBIO,&i); // set the socket non-blocking ...

struct sockaddr_in taddr = {
sin_family : AF_INET,
sin_port: htons(ports[id]),
};
taddr.sin_addr.s_addr=addr[id];

if (connect(tsock,(struct sockaddr*)&taddr,sizeof(taddr))==0) {
transfer->start(tsock);
iprintf("started transfer over socket %i\n",tsock);
} else {
iprintf("failed to connect (errcode=%i)\n",errno);
return;
}


Au vu du code dans sgIP_TCP_Connect, je serais bien tenté d'écrire un petit widget qui suivrait la machine d'état de TCP (port local défini, SYN émis, connecté ...).

Slowly restarting my DS/WiFi experiments ... I now implemented non-blocking I/O mechanisms that allow me to keep track of transfer progress with the GUI and interrupt transfer at anytime (rather than letting the thing stalls as with DSFTP :P)
Being back from holiday, i didn't have my card readers at hand for the first tests, and so i was forced to use DSFTP for updates -- which fails roughly every two uploads with my 200KB 'runME.nds' file.

Then my brother pointed me to Ds Slurper -- a tool that downloads file from a webserver on the DS flash card. It is an extremely simplified solution to the problem, e.g. it doesn't allow Access Point selection in case the firmware don't know your surroundings, nor does it allow you to pick anything that the URL stored in a config file on the flash card, but it works almost flawlessly with my SuperCard/SD cartridge. Huzzah.

I can already start dreaming of integrating EyeballKid's software into my stuff under the form of a "upgrade software via Wifi" button ^_^

edit+: petit test avec dslurper, comme prévu. Ca marche pas trop mal, même si le soft est simplifié à l'extrême ... pas de reboot software, pas de démarrage automatique du code obtenu. Et il sera nécessaire de transférer au préalable une URL sur la carte mémoire (c'est déjà mieux qu'un fichier complet, mais bon).
Bref, pris tout seul, l'intérêt est limité, mais avec les composants que j'ai déjà, ça devrait permettre un truc du genre "update homebrew software via WiFi", en particulier pour runME et les autres pour lesquels j'ai déjà presque tout ce qu'il faut ^_^

3 comments:

Anonymous said...

tu as testé ces 2 softs déjà ?
WiFi Transfer : Permet d'envoyer directement des fichiers sur la carte mémoire de votre supercard ou autres cartouches du genre.

DS Slupper : Permet de télécharger via http.

PypeBros said...

Je viens de réessayer wifitransfer, mais je n'ai apparemment pas la bonne version de Java :(

Je vais tenter DS Slurper ce midi, mais de nouveau, l'utilisation sera limitée à Montef puisqu'il se contente de lire les réglages Wifi stockés par un jeu commercial.

Enfin, on verra. Ce serait déjà plus simple que de se taper les 6 lignes de commandes FTP à chaque transfer ^_^

PypeBros said...

http://forum.gbadev.org/viewtopic.php?t=13143
HTTPEXEC ... encore un autre ;)