Skip to content

Commit

Permalink
Fix MicroPico Device Controller for Pico not Pico-W boards
Browse files Browse the repository at this point in the history
Signed-off-by: paulober <[email protected]>
  • Loading branch information
paulober committed Dec 27, 2023
1 parent 61391b2 commit 93cf5d0
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 58 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -469,12 +469,12 @@
"micropico-device-controller": [
{
"id": "micropico-device-wifi",
"name": "Wifi",
"name": "Wifi (Pico-W only)",
"type": "tree"
},
{
"id": "micropico-device-packages",
"name": "Packages",
"name": "Packages (Pico-W only)",
"type": "webview"
}
]
Expand Down
114 changes: 66 additions & 48 deletions src/activitybar/deviceWifiTree.mts
Original file line number Diff line number Diff line change
Expand Up @@ -17,60 +17,72 @@ import Logger from "../logger.mjs";
import type PackagesWebviewProvider from "./packagesWebview.mjs";

const DETECT_WIFIS_SCRIPT = `
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
from ujson import dumps as __pico_dumps
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_available_networks = __pico_wlan.scan()
__pico_networks = {n[0].decode('utf-8'): n[3] for n in __pico_available_networks}
#don't deactivate cause it will disconnect from the wifi if connected
#__pico_wlan.active(False)
del __pico_wlan
del __pico_available_networks
del __pico_STA_IF
del __pico_WLAN
print(__pico_dumps(__pico_networks))
del __pico_networks
del __pico_dumps
try:
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
from ujson import dumps as __pico_dumps
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_available_networks = __pico_wlan.scan()
__pico_networks = {n[0].decode('utf-8'): n[3] for n in __pico_available_networks}
#don't deactivate cause it will disconnect from the wifi if connected
#__pico_wlan.active(False)
del __pico_wlan
del __pico_available_networks
del __pico_STA_IF
del __pico_WLAN
print(__pico_dumps(__pico_networks))
del __pico_networks
del __pico_dumps
except Exception as e:
pass
`;

const CONNECT_TO_WIFI_SCRIPT = (element: Wifi, password: string): string => `
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_wlan.connect('${element.label}', '${password}')
# check if successfully connected
__pico_connected = __pico_wlan.isconnected()
print(__pico_connected)
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
try:
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_wlan.connect('${element.label}', '${password}')
# check if successfully connected
__pico_connected = __pico_wlan.isconnected()
print(__pico_connected)
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
except Exception as e:
pass
`;

const DISCONNECT_FROM_WIFI_SCRIPT = `
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_wlan.disconnect()
__pico_wlan.active(False)
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
try:
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_wlan.disconnect()
__pico_wlan.active(False)
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
except Exception as e:
pass
`;

const CHECK_CONNECTION_SCRIPT = `
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_connected = __pico_wlan.isconnected()
if __pico_connected:
print(f'{str(__pico_connected)}_{__pico_wlan.config("ssid")}')
else:
print(__pico_connected)
del __pico_connected
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
try:
from network import WLAN as __pico_WLAN, STA_IF as __pico_STA_IF
__pico_wlan = __pico_WLAN(__pico_STA_IF)
__pico_wlan.active(True)
__pico_connected = __pico_wlan.isconnected()
if __pico_connected:
print(f'{str(__pico_connected)}_{__pico_wlan.config("ssid")}')
else:
print(__pico_connected)
del __pico_connected
del __pico_wlan
del __pico_STA_IF
del __pico_WLAN
except Exception as e:
pass
`;

export default class DeviceWifiProvider implements TreeDataProvider<Wifi> {
Expand Down Expand Up @@ -247,9 +259,15 @@ export default class DeviceWifiProvider implements TreeDataProvider<Wifi> {
const networks = await this.pyb.executeCommand(DETECT_WIFIS_SCRIPT);

if (networks.type === PyOutType.commandWithResponse) {
const wifis: { [key: string]: string } = JSON.parse(
(networks as PyOutCommandWithResponse).response
) as { [key: string]: string };
const response = (networks as PyOutCommandWithResponse).response;

if (response.trimEnd() === "") {
return [];
}

const wifis: { [key: string]: string } = JSON.parse(response) as {
[key: string]: string;
};

return Object.keys(wifis)
.map(
Expand Down
20 changes: 12 additions & 8 deletions src/activitybar/packagesWebview.mts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@ del __pico_listdir

// TODO: may also check if the library no exists in /lib
const INSTALL_PACKAGE_SCRIPT = (pkg: string): string => `
from mip import install as __pico_install
__pico_install('${pkg}')
del __pico_install
try:
from mip import install as __pico_install
__pico_install('${pkg}')
del __pico_install
except Exception as e:
pass
`;

interface WebviewMessage {
Expand Down Expand Up @@ -68,11 +71,12 @@ export default class PackagesWebviewProvider implements WebviewViewProvider {
);

if (installedPackages.type === PyOutType.commandWithResponse) {
return (
(JSON.parse(
(installedPackages as PyOutCommandWithResponse).response.trimEnd()
) as string[]) ?? []
);
const response = (installedPackages as PyOutCommandWithResponse).response;
if (response.trimEnd() === "") {
return [];
}

return (JSON.parse(response.trimEnd()) as string[]) ?? [];
}

return [];
Expand Down

0 comments on commit 93cf5d0

Please sign in to comment.