I am working on a project where I need the Wifi status (connected or disconnected) for further Operations. I made a class for the wifi with some basic function:
using Toybox.Communications as Comm;
using Toybox.System as Sys;
class wifiScan {
var wifiStatus = false;
var errorCode;
function initialize() {
System.println("initialize() called: wifiStatus=" + wifiStatus);
}
function getStatus(){
System.println("getStatus() called: Returning wifiStatus=" + wifiStatus);
return wifiStatus;
}
function getError(){
return errorCode;
}
function checkWifiConnection() {
Comm.checkWifiConnection(method(:onWifiConnectionStatus));
System.println("checkWifiConnection() called");
}
// Callback method for checkWifiConnection
function onWifiConnectionStatus(result) {
wifiStatus = result[:wifiAvailable];
errorCode = result[:errorCode];
System.println("onWifiConnectionStatus() called: wifiAvailable=" + wifiStatus);
}
}
The problem is that if I want to use the getStatus() function in another file but I get the wrong result (false) because it runs quicker than onWifiConnectionStatus. The result in the console is as follows:
using Toybox.Communications as Comm;
using Toybox.System as Sys;
class wifiScan {
var wifiStatus = false;
var errorCode;
var callbackMethod;
function initialize() {
System.println("initialize() called: wifiStatus=" + wifiStatus);
}
function getStatus(){
System.println("getStatus() called: Returning wifiStatus=" + wifiStatus);
return wifiStatus;
//System.println("Wifi connection unavailable");
}
function getError(){
return errorCode;
//System.println("Error: " + errorCode);
}
function checkWifiConnection(methodObj) {
callbackMethod = methodObj; // Store the Method object
Comm.checkWifiConnection(method(:onWifiConnectionStatus));
System.println("checkWifiConnection() called");
}
// Callback method for checkWifiConnection
function onWifiConnectionStatus(result) {
wifiStatus = result[:wifiAvailable];
errorCode = result[:errorCode];
System.println("onWifiConnectionStatus() called: wifiAvailable=" + wifiStatus);
// Invoke the callback, if it exists
if (callbackMethod != null) {
callbackMethod.invoke(); // Invoke the callback method
}
}
}var result = gps.method(:getStatus); var wifi = new wifiScan(result);