Make_ A R M7
One-sentence summary of this page.
Take this 2 files on the Devkitpro site.
- dswifi-src-x.x.xx
- default_arm7-src-x.x.xx
(where x.x.xx is the last version number)
- Extract dswifi-src-x.x.xx in your devkitpro folder in:
- for windows -> c:\devkitpro\libwifi\
- for linux -> ~/devkitpro/libwifi/
- Go to this folder and search for this file :
libwifi/.../arm9/source/wifi_arm9.c
- In this file found the function :
int Wifi_RawTxFrame(u16 datalen, u16 rate, u16 * data)
int Wifi_RawTxFrame(u16 datalen, u16 rate, u16 data) }}}
- In this function replace all the line by :
int base,framelen, hdrlen, writelen;
int copytotal, copyexpect;
u16 framehdr[6 + 12 + 2];
framelen=datalen + 8 + (WifiData->wepmode7 ? 4 : 0);
if(framelen + 40>Wifi_TxBufferWordsAvailable()*2) { // error, can't send this much!
SGIP_DEBUG_MESSAGE(("Transmit:err_space"));
return -1; //?
}
framehdr[0]=0;
framehdr[1]=0;
framehdr[2]=0;
framehdr[3]=0;
framehdr[4]=0; // rate, will be filled in by the arm7.
hdrlen=18;
framehdr[6]=0x0208;
framehdr[7]=0;
// MACs.
memset(framehdr + 8, 0xFF, 18);
if(WifiData->wepmode7)
{
framehdr[6] |=0x4000;
hdrlen=20;
}
framehdr[17] = 0;
framehdr[18] = 0; // wep IV, will be filled in if needed on the arm7 side.
framehdr[19] = 0;
framehdr[5]=framelen+hdrlen * 2 - 12 + 4;
copyexpect= ((framelen+hdrlen * 2 - 12 + 4) + 12 - 4 + 1)/2;
copytotal=0;
WifiData->stats[WSTAT_TXQUEUEDPACKETS]++;
WifiData->stats[WSTAT_TXQUEUEDBYTES] += framelen + hdrlen * 2;
base = WifiData->txbufOut;
Wifi_TxBufferWrite(base,hdrlen,framehdr);
base += hdrlen;
copytotal += hdrlen;
if(base >= (WIFI_TXBUFFER_SIZE / 2)) base -= WIFI_TXBUFFER_SIZE / 2;
// add LLC header
framehdr[0]=0xAAAA;
framehdr[1]=0x0003;
framehdr[2]=0x0000;
unsigned short protocol = 0x08FE;
framehdr[3] = ((protocol >> 8) & 0xFF) | ((protocol << 8) & 0xFF00);
Wifi_TxBufferWrite(base, 4, framehdr);
base += 4;
copytotal += 4;
if(base>=(WIFI_TXBUFFER_SIZE/2)) base -= WIFI_TXBUFFER_SIZE/2;
writelen = datalen;
if(writelen) {
Wifi_TxBufferWrite(base,(writelen+1)/2,data);
base += (writelen + 1) / 2;
copytotal += (writelen + 1) / 2;
if(base>=(WIFI_TXBUFFER_SIZE/2)) base -= WIFI_TXBUFFER_SIZE/2;
}
if(WifiData->wepmode7)
{ // add required extra bytes
base += 2;
copytotal += 2;
if(base >= (WIFI_TXBUFFER_SIZE / 2)) base -= WIFI_TXBUFFER_SIZE / 2;
}
WifiData->txbufOut = base; // update fifo out pos, done sending packet.
if(copytotal!=copyexpect)
{
SGIP_DEBUG_MESSAGE(("Tx exp:%i que:%i",copyexpect,copytotal));
}
if(synchandler) synchandler();
return 0;
int base,framelen, hdrlen, writelen;
int copytotal, copyexpect;u16 framehdr[6 + 12 + 2];framelen=datalen + 8 + (WifiData->wepmode7 ? 4 : 0);
if(framelen + 40>Wifi_TxBufferWordsAvailable()*2) { // error, can't send this much!SGIP_DEBUG_MESSAGE(("Transmit:err_space"));return -1; //?}framehdr[0]=0;framehdr[1]=0;framehdr[2]=0;framehdr[3]=0;framehdr[4]=0; // rate, will be filled in by the arm7.hdrlen=18;framehdr[6]=0x0208;framehdr[7]=0;
// MACs.memset(framehdr + 8, 0xFF, 18);
if(WifiData->wepmode7){framehdr[6] |=0x4000;hdrlen=20;}framehdr[17] = 0;framehdr[18] = 0; // wep IV, will be filled in if needed on the arm7 side.framehdr[19] = 0;
framehdr[5]=framelen+hdrlen * 2 - 12 + 4;copyexpect= ((framelen+hdrlen * 2 - 12 + 4) + 12 - 4 + 1)/2;copytotal=0;
WifiData->statsWSTAT_TXQUEUEDPACKETS++;WifiData->statsWSTAT_TXQUEUEDBYTES += framelen + hdrlen * 2;
base = WifiData->txbufOut;Wifi_TxBufferWrite(base,hdrlen,framehdr);base += hdrlen;copytotal += hdrlen;if(base >= (WIFI_TXBUFFER_SIZE / 2)) base -= WIFI_TXBUFFER_SIZE / 2;
// add LLC headerframehdr[0]=0xAAAA;framehdr[1]=0x0003;framehdr[2]=0x0000;unsigned short protocol = 0x08FE;framehdr[3] = ((protocol >> 8) & 0xFF) | ((protocol << 8) & 0xFF00);
Wifi_TxBufferWrite(base, 4, framehdr);base += 4;copytotal += 4;if(base>=(WIFI_TXBUFFER_SIZE/2)) base -= WIFI_TXBUFFER_SIZE/2;
writelen = datalen;if(writelen) {Wifi_TxBufferWrite(base,(writelen+1)/2,data);base += (writelen + 1) / 2;copytotal += (writelen + 1) / 2;if(base>=(WIFI_TXBUFFER_SIZE/2)) base -= WIFI_TXBUFFER_SIZE/2;}if(WifiData->wepmode7){ // add required extra bytesbase += 2;copytotal += 2;if(base >= (WIFI_TXBUFFER_SIZE / 2)) base -= WIFI_TXBUFFER_SIZE / 2;}WifiData->txbufOut = base; // update fifo out pos, done sending packet.
if(copytotal!=copyexpect){SGIP_DEBUG_MESSAGE(("Tx exp:%i que:%i",copyexpect,copytotal));}if(synchandler) synchandler();return 0;}}}
- Save the file
- Open a command Line
- got to the folder : devkitpro/libwifi/dswifi-src-x.x.xx/
- type make
It will create a new folder named lib
- Extract default_arm7-src-x.x.xx in devkitpro/libnds folder
- Copy all 4 devkitpro/libwifi/dswifi-src-x.x.xx/libs/libdswifi
*
*
.a in devkitpro/libnds/lib/ - Open a command line
- Go to devkitpro/libnds/ folder
- type make
It will replace default.arm7 and default.elf
Now you can compile microlua normaly.
This guide was found on GreenAcorn