Bringing Up Wi-Fi Interface

Top  Previous  Next

The easiest way to make the Wi-Fi interface work is by calling the wln_start() function of the WLN library. This will save you a ton of effort, seriously!

If you can't or won't use the library, here is the sequence of steps that you have to take in order to bring up the Wi-Fi interface:

Configure interface lines

Apply hardware reset

Select the domain (optional)

Select allowed bands (optional)

Allocate buffer memory

Set MAC address (optional)

Determinie Wi-Fi Module Type

Boot up the hardware

Set the IP, gateway IP, and netmask

 

The following is a simplified sample code that demonstrates the process. Typically, it would be called from the on_sys_init event handler, but you can actually call it from anywhere in your application. We call the code "simplified" because it does not check for any error conditions.

This code will work both for the GA1000 or WA2000 device and on all platforms that support one or both of these devices:  

 

 
'BRINGING UP THE WI-FI MODULE (SIMPLIFIED)
 
#If PLATFORM_ID=EM500W
  #define WLN_RESET_MODE 1 'reset is controlled by the combination of CS and CLK
  'there is no need to map CS, DI, DO, and CLK lines because they are fixed
#elif PLATFORM_ID=EM1206W
  #define WLN_RESET_MODE 0 'there is a dedicated reset line
  #define WLN_RST PL_IO_NUM_11
  #define WLN_CS PL_IO_NUM_15
  #define WLN_DI PL_IO_NUM_12
  #define WLN_DO PL_IO_NUM_13
  #define WLN_CLK PL_IO_NUM_14
#else
  #define WLN_RESET_MODE 0 'there is a dedicated reset line
  #define WLN_RST PL_IO_NUM_51
  #define WLN_CS PL_IO_NUM_49
  #define WLN_DI PL_IO_NUM_52
  #define WLN_DO PL_IO_NUM_50
  #define WLN_CLK PL_IO_NUM_53
#endif
 
'----------------------------------------------------------------------------
sub on_sys_init  
  '----- configure interface lines -----
  '(on platforms with fixed mapping this will have no effect)
  wln.csmap=WLN_CS
  io.num=WLN_CS
  io.enabled=YES
  wln.dimap=WLN_DI
  wln.domap=WLN_DO
  io.num=WLN_DO
  io.enabled=YES
  wln.clkmap=WLN_CLK
  io.num=WLN_CLK
  io.enabled=YES
  io.num=WLN_RST
  io.enabled=YES
 
  '----- reset Wi-Fi module -----
  #If WLN_RESET_MODE
    'reset is controlled by the combination of CS and CLK      
     io.lineset(wln.csmap,HIGH)
     io.lineset(wln.clkmap,LOW)
     io.lineset(wln.clkmap,HIGH)
  #Else  
    'there is a dedicated reset line      
     io.num=WLN_RST
     io.state=LOW
        'The WA2000 requires a longer reset pulse (1ms), and the GA1000 will not mind it
        '32-bit platforms offers a convenient sys.timercountms method
        'Since the WA2000 only works on 32-bit platforms, let's write the code like this:
        #if PLATFORM_TYPE_32
           sys.timercountms=0
          while sys.timercountms<1
          wend
        #endif
     io.state=HIGH
  #endif
 
  'in case we called wln_init() after it has already been up and running
  While wln.enabled=YES
  Wend
 
  '----- set the domain -----
  wln.domain=PL_WLN_DOMAIN_FCC 'for illustrative purpose only, this is the default value
 
  '----- set allowed bands -----
  wln.band=WIFI_PHY_11ABGN_MIXED 'for illustrative purpose only, this is the default value
 
  '----- allocate the buffer -----
  wln.buffrq(5)
  sys.buffalloc
 
  '----- set MAC address (optional) -----
  wln.mac="0.100.110.120.130.140" '
 
  '----- detect the module type
 
  dim module_type as pl_wln_module_types=wln.getmoduletype
 
 
  '----- boot up the module -----
  if module_type=PL_WLN_MODULE_TYPE_GA1000 then
     romfile.open("ga1000fw.bin")
     wln.boot(romfile.offset) 'supply the pointer to the GA1000 firmware file
  else
     wln.boot(0) 'no need to upload the WA2000 firmware every time
  end if
 
  '----- setup the IP, gateway, netmask -----
  wln.ip="192.168.1.86" 'can be delegated to our DHCP library
  wln.gatewayip="192.168.1.1" 'optional
  wln.netmask="255.255.255.0" 'optional
end sub