База знаний / Справочник TiOS / Разработка (TiOS) / Справочник по программированию / Объекты / Объект wln. / Обзор
Запуск интерфейса Wi-Fi
Проще всего запустить интерфейс Wi-Fi, вызвав функцию wln_start() из библиотеки WLN. Это избавит вас от массы работы, честное слово!
Если вы не можете или не хотите использовать библиотеку, для запуска интерфейса Wi-Fi нужно выполнить следующие шаги:
- Настроить линии интерфейса
- Выполнить аппаратный сброс
- Выбрать домен (необязательно)
- Выбрать разрешённые диапазоны (необязательно)
- Выделить память под буфер
- Задать MAC-адрес (необязательно)
- Определить тип модуля Wi-Fi
- Загрузить оборудование
- Задать IP-адрес, IP-адрес шлюза и маску сети
Ниже приведён упрощённый пример кода, демонстрирующий этот процесс. Обычно его вызывают из обработчика события on_sys_init, но на самом деле вызвать его можно из любого места приложения. Код назван «упрощённым», потому что в нём нет проверки ошибок.
Этот код работает и с GA1000, и с WA2000, на всех платформах, поддерживающих одно из этих устройств или оба:
'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