In my app, I store the hashtable values in an SD, but this could be done very easily in code (see example). In the video, the debug output is only from event handlers.
Todo:
Add Static IP assignment, currently only DHCP
Add the ability to join unsecured networks automatically
Add the ability to join unsecured networks automatically, with an approval “I agree” page
Find work around to the module automatically rejoining a network after a Disconnect() is issued
Note:
Uses my Hashtable extension to search keys in an case insensitive manner - I included it here as well, it’s available separately here: http://www.tinyclr.com/codeshare/entry/452
Glad it works for you. Feel to modify to suit your needs.
What are you looking to do with the events?
Below are the events and some basic description.
// This is fired off when the NNTP based time is retrieved
public event TimeUpdateDelegate TimeUpdated;
// Used for detailed logging
public event LogRequestDelegate LogRequested;
// I was hoping this would have been fired even if connected, but it seems to be a limitation of the driver.
public event StrengthChangeDelegate StrengthChanged;
// this is fired when Address property changed (ie, when DHCP address is retrieved)
public event AddressChangeDelegate AddressChanged;
// when the SSID property was changed
public event WifiSSIDDelegate SSIDChanged;
// when the wifi class status is changed
public event WifiStatusDelegate StatusChanged;
I’m using your wrapper for quite a while now! I’ve implemented several events (@ mhectorgato: thx for the info) and it works almost for a 100%. Almost, because i’ve got a small issue and I don’t know if it’s the wrapper or the wifi rs21 module. When I boot up my spider for the first time it connect to the wifi network and it does a time update. So far so good. But when I restart the Spider and it tries to connect again it refuses and it give me an error that it can’t join the network. If I power of the Spider for about 30 to 45 secs and power it up again it connects without any issues.
I ran the project in VS and it worked fine. Then I disconnected the USB and stopped the VS running project. Next I reconnected the USB (not using the USB), and it started up and connected. Then I hit the restart button and it connected OK, and repeated with it connected OK again.
So far I can’t recreate the issue. If you can provide additional debug info, I would be glad to do more looking into it.
Below is my test code:
using System.Collections;
using GT = Gadgeteer;
namespace WiFiTesting
{
public partial class Program
{
// This method is run when the mainboard is powered up or reset.
void ProgramStarted()
{
GT.Timer t = new GT.Timer(500);
t.Tick += (tmr) =>
{
tmr.Stop();
rs21();
};
t.Start();
}
WiFiModule _wifi;
void rs21()
{
// wifi is the object generated by the Gadgeteer designer for the WiFi RS21
_wifi = new WiFiModule(wifi);
Hashtable creds = new Hashtable();
creds.Add("network1", "password1");
creds.Add("Network1", "Password2");
// Setup event handlers you are interested in receiving here. In the video, all debug output is only from event handlers.
ScreenDebugger.T35 = display;
_wifi.StatusChanged += new WiFiModule.WifiStatusDelegate(_wifi_StatusChanged);
_wifi.StrengthChanged += new WiFiModule.StrengthChangeDelegate(_wifi_StrengthChanged);
_wifi.TimeUpdated += new WiFiModule.TimeUpdateDelegate(_wifi_TimeUpdated);
_wifi.SSIDChanged += new WiFiModule.WifiSSIDDelegate(_wifi_SSIDChanged);
_wifi.LogRequested += new WiFiModule.LogRequestDelegate(_wifi_LogRequested);
_wifi.AddressChanged += new WiFiModule.AddressChangeDelegate(_wifi_AddressChanged);
_wifi.NetworkCredentials = creds;
_wifi.StartWiFi();
}
void _wifi_AddressChanged(object sender, WiFiModule.AddressEventArg e)
{
ScreenDebugger.AddToLog("Address = " + e.Address);
}
void _wifi_LogRequested(object sender, WiFiModule.LogRequestArgs e)
{
ScreenDebugger.AddToLog("LogEvent = " + e.LogEvent);
}
void _wifi_SSIDChanged(object sender, WiFiModule.SSIDEventArg e)
{
ScreenDebugger.AddToLog("SSID = " + e.SSID);
}
void _wifi_TimeUpdated(object sender, WiFiModule.TimeUpdatedArgs e)
{
ScreenDebugger.AddToLog("Time updated = " + e.NewTime);
}
void _wifi_StrengthChanged(object sender, WiFiModule.StrengthEventArg e)
{
ScreenDebugger.AddToLog("Strength = " + e.Strength);
}
void _wifi_StatusChanged(object sender, WiFiModule.StatusEventArg e)
{
ScreenDebugger.AddToLog("Status = " + _wifi.StatusString);
}
}
}
Thanks for your research! When I get back from work at the and of the day I’ll copy past your code and run it on my Spider. I get back to you this evening.
Triggered to find the error, I went home during lunch and copy paste your code and ran it on my spider. The first time it fired up as expected:
Using mainboard GHIElectronics-FEZSpider version 1.0
RS21 WiFi module version Number is 4.4.5
WiFi Module’s MAC Address is 03516727202234
Status = Scanning
Status = Not connected
SSID = devnet
Status = Joining
The thread ‘’ (0x3) has exited with code 0 (0x0).
Status = Connecting
The thread ‘’ (0x6) has exited with code 0 (0x0).
Address = 192.168.1.78
Strength = -56
Status = Getting time
Time updated = 08/29/2012 12:30:33
Status = Connected
The thread ‘’ (0x8) has exited with code 0 (0x0).
after that I stopped my project en rebooted the spider and it failed to join my wifi, the follow output was created:
Using mainboard GHIElectronics-FEZSpider version 1.0
RS21 WiFi module version Number is 4.4.5
WiFi Module’s MAC Address is 03516727202234
Status = Scanning
Status = Not connected
SSID = devnet
Status = Joining
#### Exception System.Exception - 0x00000000 (6) ####
#### Message:
#### GHIElectronics.NETMF.Net.RS21Driver::Join [IP: 0032] ####
#### GHIElectronics.NETMF.Net.WiFi::Join [IP: 0082] ####
#### Gadgeteer.Modules.GHIElectronics.WiFi_RS21::Join [IP: 0008] ####
#### PAVESoft.Modules.WiFiModule::doStartWifi [IP: 0092] ####
#### Exception GHIElectronics.NETMF.Net.WiFi+WiFiException - 0x00000000 (6) ####
#### Message:
#### GHIElectronics.NETMF.Net.WiFi::Join [IP: 00ce] ####
#### Gadgeteer.Modules.GHIElectronics.WiFi_RS21::Join [IP: 0008] ####
#### PAVESoft.Modules.WiFiModule::doStartWifi [IP: 0092] ####
The thread ‘’ (0x3) has exited with code 0 (0x0).
A first chance exception of type ‘GHIElectronics.NETMF.Net.WiFi.WiFiException’ occurred in GHIElectronics.NETMF.Net.dll
LogEvent = wifi start exception: Exception was thrown: GHIElectronics.NETMF.Net.WiFi+WiFiException
SSID =
Status = Failed to join
The thread ‘’ (0x6) has exited with code 0 (0x0).
If ordered a new Access Point to see its a problem of my cisco. It should be delivered this afternoon.
I’ve got a cheapo Linksys AP – figured that would have an issue before a Cisco.
Interesting … Looks like the exception is being thrown somewhere in GHI driver land - not sure if it’s in the native or managed code. I’m just calling the GHI.Gadgeteer Join method, passing in the WiFi_RS21.WiFiNetworkInfo,
You may to want to put a breakpoint on this line and verify the values are valid:
Ok, I did some testing with a different access point (a zyxell) and the system.exception doesn’t occur. I’ll pinpoint my research towards my cisco access point for now. Tomorrow I start testing the wifi class with the WiFi network at work . It is also Cisco based but with different access points.