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);