Skip to content

Commit

Permalink
added wifiScan and wifiConnect js functions (#131)
Browse files Browse the repository at this point in the history
  • Loading branch information
eadmaster committed Sep 7, 2024
1 parent 5ae39fe commit b8cab3e
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/core/serialcmds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ bool processSerialCommand(String cmd_str) {
//Serial.print("frequency:");
//Serial.println(frequency);
String r = "";
if(cmd_str.startsWith("subghz rx_raw"))
if(cmd_str.startsWith("subghz rx_raw") || cmd_str.startsWith("subghz rx raw"))
r = RCSwitch_Read(frequency, 10, true); // true -> raw mode
else
r = RCSwitch_Read(frequency, 10, false); // false -> decoded mode
Expand Down
87 changes: 81 additions & 6 deletions src/modules/bjs_interpreter/interpreter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,85 @@ static duk_ret_t native_getBoard(duk_context *ctx) {
}

// Wifi Functions
static duk_ret_t native_wifiConnect(duk_context *ctx) {
static duk_ret_t native_wifiConnectDialog(duk_context *ctx) {
wifiConnectMenu();
return 0;
}

static duk_ret_t native_wifiConnect(duk_context *ctx) {
// usage: wifiConnect(ssid : string )
// usage: wifiConnect(ssid : string, timeout_in_seconds : number)
// usage: wifiConnect(ssid : string, timeout_in_seconds : number, pwd : string)
String ssid = duk_to_string(ctx, 0);
int timeout_in_seconds = 10;
if(duk_is_number(ctx, 1)) timeout_in_seconds = duk_to_number(ctx, 1);

bool r = false;

Serial.println("Connecting to: " + ssid);

if(duk_is_string(ctx, 2)) {
String pwd = duk_to_string(ctx, 2);
WiFi.begin(ssid, pwd);
} else {
WiFi.begin(ssid);
}

int i=0;
do {
delay(1000);
i++;
if(i>timeout_in_seconds) {
Serial.println("timeout");
break;
}
} while (WiFi.status() != WL_CONNECTED);

if(WiFi.status() == WL_CONNECTED) {
r = true;
wifiIP = WiFi.localIP().toString(); // update global var
}

duk_push_boolean(ctx, r);
return 1;
}

static duk_ret_t native_wifiScan(duk_context *ctx) {
// Example usage: `print(wifiScan()[0].SSID)`
wifiDisconnect();
WiFi.mode(WIFI_MODE_STA);
Serial.println("Scanning...");
int nets = WiFi.scanNetworks();
duk_push_array(ctx);
int arrayIndex = 0;
duk_idx_t obj_idx;
for(int i=0; i<nets; i++){
// adds all network infos into an object
obj_idx = duk_push_object(ctx);
int enctype = int(WiFi.encryptionType(i));
String e = "UNKNOWN";
if(enctype==2) e = "TKIP/WPA";
else if(enctype==5) e = "WEP";
else if(enctype==4) e = "CCMP/WPA";
else if(enctype==7) e = "NONE";
else if(enctype==8) e = "AUTO";
duk_push_string(ctx, e.c_str());
duk_put_prop_string(ctx, obj_idx, "encryptionType");
duk_push_string(ctx, WiFi.SSID(i).c_str());
duk_put_prop_string(ctx, obj_idx, "SSID");
duk_push_string(ctx, WiFi.BSSIDstr(i).c_str());
duk_put_prop_string(ctx, obj_idx, "MAC");
duk_put_prop_index(ctx, -2, arrayIndex);
arrayIndex++;
}
return 1;
}

static duk_ret_t native_wifiDisconnect(duk_context *ctx) {
wifiDisconnect();
return 0;
}

static duk_ret_t native_get(duk_context *ctx) {
duk_idx_t obj_idx;
if(WiFi.status() != WL_CONNECTED) wifiConnectMenu();
Expand Down Expand Up @@ -740,13 +811,17 @@ bool interpreter() {


// Networking
duk_push_c_function(ctx, native_wifiConnect, 0);
duk_push_c_function(ctx, native_wifiConnect, 2);
duk_put_global_string(ctx, "wifiConnect");
duk_push_c_function(ctx, native_wifiConnectDialog, 0);
duk_put_global_string(ctx, "wifiConnectDialog");
duk_push_c_function(ctx, native_wifiDisconnect, 0);
duk_put_global_string(ctx, "wifiDisconnect");
duk_put_global_string(ctx, "wifiDisconnect");
duk_push_c_function(ctx, native_wifiScan, 0);
duk_put_global_string(ctx, "wifiScan");
duk_push_c_function(ctx, native_get, 2);
duk_put_global_string(ctx, "httpGet");
// TODO: list wifi stations, get mac addresses
// TODO: get mac addresses

// Graphics
duk_push_c_function(ctx, native_color, 3);
Expand Down Expand Up @@ -844,7 +919,7 @@ bool interpreter() {
duk_put_global_string(ctx, "dialogError");
duk_push_c_function(ctx, native_dialogPickFile, 1);
duk_put_global_string(ctx, "dialogPickFile");
// TODO: dialogChoice(array)
// TODO: dialogChoice(choices: array)
duk_push_c_function(ctx, native_dialogViewFile, 1);
duk_put_global_string(ctx, "dialogViewFile");
duk_push_c_function(ctx, native_keyboard, 3);
Expand All @@ -859,7 +934,7 @@ bool interpreter() {

// TODO: match flipper syntax https://github.com/jamisonderek/flipper-zero-tutorials/wiki/JavaScript
// https://github.com/jamisonderek/flipper-zero-tutorials/wiki/JavaScript
// MEMO: API https://github.com/joeqread/arduino-duktape/blob/main/src/duktape.h
// MEMO: API https://duktape.org/api.html https://github.com/joeqread/arduino-duktape/blob/main/src/duktape.h

bool r;

Expand Down

0 comments on commit b8cab3e

Please sign in to comment.