Hola.
Despues de bastante trabajo con la libreria WIFI y de algo de investigacion, he conseguido hacer un cargador que se antojaba MUY necesario y que evita el estar constantemente grabando en la memoria flash ejecutables cuando estamos desarrollando.
Como Funciona el Programa
El programa se divide en dos partes, un ejecutable que he compilado bajo MinGW (el entorno que utilizamos para compilar en la DS) que hace las veces de server.
Cuando ejecutamos Wifiloader.exe, de inmediato nos aparece una ventana de seleccion de ficheros en la que tendremos que seleccionar el ejecutable en formato .nds o .ds.gba que queramos subir.
El servidor utiliza el puerto 9999 y está a la escucha de cualquier IP que acceda a ese puerto, asi que en principio, no deberia haber problemas de conexion (salvo que tengais ese puerto capado o esteis utilizandolo en otra aplicacion)
El protocolo utilizado, es TCP/IP, con lo cual se asegura de que los datos suban de forma fiable.
Es conveniente ejecutar primero el server del PC antes de ejecutar la aplicacion de la DS.
En la DS, tendreis que ejecutar el fichero 0wifiloader.nds o el *.ds.gba (los que usais SuperCard, podeis renombrar este fichero a *.sc.nds y teoricamente, deberia de ir)
El programa recupera de la flash la primera configuracion guardada (ya sabeis que necesitais un juego que acceda a internet grabe dicha configuracion) asi que no tendreis que meter la IP de forma manual.
Cuando lo ejecutais, aparece un mensaje en pantalla como este: "Connecting via WFC data"
Si veis que tarda rato en salir el el mensaje ""Connected successfully!", seguramente se haya quedado flipada la aplicacion, por lo que recomiendo pulsar el boton A para que se recargue desde la ROM
Una vez que se conecta al server, se procede a cargar a aplicacion, mostrandose en la parte inferior el numero de KB subidos.
La aplicacion es capaz de cargar ficheros .nds, .sc.nds y .ds.gba, aunque en realidad, se salta el cargador de las ultimas versiones y utiliza la cabecera de fichero .nds de dichos ejecutables (hace un scaneo para detectar una cadena de texto que sirve de referencia)
Tiene una capacidad para cargar ficheros en RAM de 2MB, aunque no debeis de olvidar que este fichero no se puede leer como ROM,por lo que si quereis utilizar un filesystem, deberiais buscar vuestros datos en la RAM.
Cuando los datos son cargados, la aplicacion de la DS envia un comando al server para que cierre la aplicacion, asi que no os extrañeis por ello.
El cargador esta pensado para que reinicie registros claves, como WIFI, contadores, dma's , caches, etc, con el fin de evitar al maximo lincompatibilidades. El codigo de ARM7 debe ser cargado en su memoria exclusiva, sin utilizar la memoria de 4MB compartida (tal y como se compila de forma estandar, vamos) ya que esa memoria está en uso por el cargador en el momento de proceder a la carga el ejecutable de ARM7 y el resultado podria ser impredecible.
De momento, no se dispone de la posibilidad de poder resetear la aplicacion mediante una combinacion de botones o algo asi (para no tener que apagar la consola y proceder a cargar la aplicacion desde el browser de nuestro aparatejo) , cosa que se podria hacer mediante una librería de carga en el futuro.
El codigo fuente, lo publicaré cuando complete el trabajo, pues aqui hay muchas cosas implicadas (modificaciones en la libreria de RPC. Multithread, eSound, WIFI,... documentacion..., vamos que hay tela de trabajo)
En fin, aqui os dejo el enlace para que podais probar la beta
:
EDITADO BETA 1.5:
Añadido soporte WEP de 128 bits y algun cambio menor
Explicacion de lo nuevo aqui:
http://www.elotrolado.net/showthread.php?s=&postid=1705912181#post1705912181
o leete el readme
BETA 1.5
OLD 0.1 Beta
OLD 1.0 Beta
OLD 1.1 Beta
OLD 1.2