Make_ A R M7

One-sentence summary of this page.

How to compile the ARM7 for use Nifi

1. Download sources

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)

2. Make dswifi lib

  1. Extract dswifi-src-x.x.xx in your devkitpro folder in:
    • for windows -> c:\devkitpro\libwifi\
    • for linux -> ~/devkitpro/libwifi/
  2. Go to this folder and search for this file :
libwifi/.../arm9/source/wifi_arm9.c
  1. In this file found the function : int Wifi_RawTxFrame(u16 datalen, u16 rate, u16 * data) int Wifi_RawTxFrame(u16 datalen, u16 rate, u16 data) }}}
    1. 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;}}}
    1. Save the file
    2. 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

    3. Make default ARM7

    1. Extract default_arm7-src-x.x.xx in devkitpro/libnds folder
    2. Copy all 4 devkitpro/libwifi/dswifi-src-x.x.xx/libs/libdswifi**.a in devkitpro/libnds/lib/
    3. Open a command line
      • Go to devkitpro/libnds/ folder
      • type make
    It will replace default.arm7 and default.elf

    Ok it's ready

    Now you can compile microlua normaly.
    This guide was found on GreenAcorn