1213 lines
42 KiB
C++
1213 lines
42 KiB
C++
#include "hardware/spi.h"
|
|
#include "hardware/sync.h"
|
|
#include "pico/binary_info.h"
|
|
|
|
#include "libraries/pico_wireless/pico_wireless.hpp"
|
|
|
|
using namespace pimoroni;
|
|
|
|
PicoWireless *wireless = nullptr;
|
|
|
|
|
|
extern "C" {
|
|
#include "pico_wireless.h"
|
|
|
|
#define NOT_INITIALISED_MSG "Cannot call this function, as picowireless is not initialised. Call picowireless.init() first."
|
|
|
|
static void mp_obj_to_string(const mp_obj_t &obj, std::string &string_out) {
|
|
if(mp_obj_is_str_or_bytes(obj)) {
|
|
GET_STR_DATA_LEN(obj, str, str_len);
|
|
string_out = std::string((const char*)str);
|
|
}
|
|
else if(mp_obj_is_float(obj))
|
|
mp_raise_TypeError("can't convert 'float' object to str implicitly");
|
|
else if(mp_obj_is_int(obj))
|
|
mp_raise_TypeError("can't convert 'int' object to str implicitly");
|
|
else if(mp_obj_is_bool(obj))
|
|
mp_raise_TypeError("can't convert 'bool' object to str implicitly");
|
|
else
|
|
mp_raise_TypeError("can't convert object to str implicitly");
|
|
}
|
|
|
|
uint32_t mp_obj_to_ip(mp_obj_t obj) {
|
|
uint len;
|
|
mp_obj_t *items;
|
|
mp_obj_tuple_get(obj, &len, &items);
|
|
uint a = mp_obj_get_int(items[0]) & 0xff;
|
|
uint b = mp_obj_get_int(items[1]) & 0xff;
|
|
uint c = mp_obj_get_int(items[2]) & 0xff;
|
|
uint d = mp_obj_get_int(items[3]) & 0xff;
|
|
return (d << 24) | (c << 16) | (b << 8) | a;
|
|
}
|
|
|
|
mp_obj_t mp_ip_to_obj(IPAddress ip) {
|
|
mp_obj_t tuple[4];
|
|
tuple[0] = mp_obj_new_int(ip[0]);
|
|
tuple[1] = mp_obj_new_int(ip[1]);
|
|
tuple[2] = mp_obj_new_int(ip[2]);
|
|
tuple[3] = mp_obj_new_int(ip[3]);
|
|
return mp_obj_new_tuple(4, tuple);
|
|
}
|
|
|
|
mp_obj_t picowireless_init() {
|
|
if(wireless == nullptr)
|
|
wireless = new PicoWireless();
|
|
wireless->init();
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_network_data() {
|
|
if(wireless != nullptr) {
|
|
uint8_t *ip = nullptr;
|
|
uint8_t *mask = nullptr;
|
|
uint8_t *gwip = nullptr;
|
|
wireless->get_network_data(ip, mask, gwip);
|
|
|
|
mp_obj_t tuple[3];
|
|
tuple[0] = mp_obj_new_bytes(ip, WL_IPV4_LENGTH);
|
|
tuple[1] = mp_obj_new_bytes(mask, WL_IPV4_LENGTH);
|
|
tuple[2] = mp_obj_new_bytes(gwip, WL_IPV4_LENGTH);
|
|
return mp_obj_new_tuple(3, tuple);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_remote_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t *ip = nullptr;
|
|
uint8_t *port = nullptr;
|
|
wireless->get_remote_data(args[ARG_sock].u_int, ip, port);
|
|
|
|
mp_obj_t tuple[2];
|
|
tuple[0] = mp_obj_new_bytes(ip, WL_IPV4_LENGTH);
|
|
tuple[1] = mp_obj_new_int((uint16_t)port[0] << 8 | (uint16_t)port[1]); //TODO verify size and ordering of port
|
|
return mp_obj_new_tuple(2, tuple);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_network(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ssid, ARG_passphrase };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string ssid;
|
|
mp_obj_to_string(args[ARG_ssid].u_obj, ssid);
|
|
return mp_obj_new_int(wireless->wifi_set_network(ssid));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_passphrase(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ssid, ARG_passphrase };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_passphrase, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string ssid, passphrase;
|
|
mp_obj_to_string(args[ARG_ssid].u_obj, ssid);
|
|
mp_obj_to_string(args[ARG_passphrase].u_obj, passphrase);
|
|
return mp_obj_new_int(wireless->wifi_set_passphrase(ssid, passphrase));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_key(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ssid, ARG_key_idx, ARG_passphrase };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_key_idx, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_passphrase, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t key_idx = args[ARG_key_idx].u_int;
|
|
|
|
std::string ssid, passphrase;
|
|
mp_obj_to_string(args[ARG_ssid].u_obj, ssid);
|
|
mp_obj_to_string(args[ARG_passphrase].u_obj, passphrase);
|
|
return mp_obj_new_int(wireless->wifi_set_key(ssid, key_idx, passphrase));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_config(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_valid_params, ARG_local_ip, ARG_gateway, ARG_subnet };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_valid_params, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_local_ip, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_gateway, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_subnet, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t valid_params = args[ARG_valid_params].u_int;
|
|
uint32_t local_ip = mp_obj_to_ip(args[ARG_local_ip].u_obj);
|
|
uint32_t gateway = mp_obj_to_ip(args[ARG_gateway].u_obj);
|
|
uint32_t subnet = mp_obj_to_ip(args[ARG_subnet].u_obj);
|
|
wireless->config(valid_params, local_ip, gateway, subnet);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_set_dns(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_dns_server1, ARG_dns_server2 };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_dns_server1, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_dns_server2 | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t valid_params = n_args;
|
|
uint32_t dns_server1 = mp_obj_to_ip(args[ARG_dns_server1].u_obj);
|
|
uint32_t dns_server2 = n_args == 1 ? 0 : mp_obj_to_ip(args[ARG_dns_server2].u_obj);
|
|
wireless->set_dns(valid_params, dns_server1, dns_server2);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_set_hostname(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_hostname };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_hostname, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string hostname;
|
|
mp_obj_to_string(args[ARG_hostname].u_obj, hostname);
|
|
wireless->set_hostname(hostname);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_disconnect() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->disconnect());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_connection_status() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_connection_status());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_mac_address() {
|
|
if(wireless != nullptr) {
|
|
uint8_t* mac = wireless->get_mac_address();
|
|
return mp_obj_new_bytes(mac, WL_MAC_ADDR_LENGTH);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_ip_address() {
|
|
if(wireless != nullptr) {
|
|
IPAddress ip;
|
|
wireless->get_ip_address(ip);
|
|
return mp_ip_to_obj(ip);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_subnet_mask() {
|
|
if(wireless != nullptr) {
|
|
IPAddress mask;
|
|
wireless->get_subnet_mask(mask);
|
|
return mp_ip_to_obj(mask);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_gateway_ip() {
|
|
if(wireless != nullptr) {
|
|
IPAddress mask;
|
|
wireless->get_gateway_ip(mask);
|
|
return mp_ip_to_obj(mask);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_current_ssid() {
|
|
if(wireless != nullptr) {
|
|
std::string ssid = wireless->get_current_ssid();
|
|
return mp_obj_new_str(ssid.c_str(), ssid.length());
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_current_bssid() {
|
|
if(wireless != nullptr) {
|
|
uint8_t* bssid = wireless->get_current_bssid();
|
|
return mp_obj_new_bytes(bssid, WL_MAC_ADDR_LENGTH);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_current_rssi() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_current_rssi());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_current_encryption_type() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_current_encryption_type());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_start_scan_networks() {
|
|
// This doesn't actually *do* anything, so might as well save a few instructions!
|
|
|
|
return mp_const_true;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_scan_networks() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_scan_networks());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_ssid_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_network_item };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_network_item, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t network_item = args[ARG_network_item].u_int;
|
|
const char* ssid = wireless->get_ssid_networks(network_item);
|
|
if(ssid != nullptr) {
|
|
return mp_obj_new_str(ssid, strnlen(ssid, WL_SSID_MAX_LENGTH));
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_enc_type_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_network_item };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_network_item, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t network_item = args[ARG_network_item].u_int;
|
|
return mp_obj_new_int(wireless->get_enc_type_networks(network_item));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_bssid_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_network_item };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_network_item, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t network_item = args[ARG_network_item].u_int;
|
|
uint8_t* bssid = nullptr;
|
|
wireless->get_bssid_networks(network_item, bssid);
|
|
if(bssid != nullptr) {
|
|
return mp_obj_new_bytes(bssid, WL_MAC_ADDR_LENGTH);
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_channel_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_network_item };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_network_item, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t network_item = args[ARG_network_item].u_int;
|
|
return mp_obj_new_int(wireless->get_channel_networks(network_item));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_rssi_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_network_item };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_network_item, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t network_item = args[ARG_network_item].u_int;
|
|
return mp_obj_new_int(wireless->get_rssi_networks(network_item));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_req_host_by_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_hostname };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_hostname, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string hostname;
|
|
mp_obj_to_string(args[ARG_hostname].u_obj, hostname);
|
|
|
|
return mp_obj_new_bool(wireless->req_host_by_name(hostname));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_false;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_host_by_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
if(n_args == 0) {
|
|
IPAddress ip;
|
|
if(wireless->get_host_by_name(ip)) {
|
|
return mp_ip_to_obj(ip);
|
|
}
|
|
}
|
|
else {
|
|
enum { ARG_hostname };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_hostname, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string hostname;
|
|
mp_obj_to_string(args[ARG_hostname].u_obj, hostname);
|
|
|
|
IPAddress ip;
|
|
if(wireless->get_host_by_name(hostname, ip)) {
|
|
return mp_ip_to_obj(ip);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_fw_version() {
|
|
if(wireless != nullptr) {
|
|
const char* fw_ver = wireless->get_fw_version();
|
|
return mp_obj_new_str(fw_ver, strnlen(fw_ver, WL_FW_VER_LENGTH));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_time() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_time());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_set_power_mode(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t mode = args[ARG_mode].u_int;
|
|
wireless->set_power_mode(mode);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ap_network(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ssid, ARG_channel };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_channel, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string ssid;
|
|
mp_obj_to_string(args[ARG_ssid].u_obj, ssid);
|
|
|
|
uint8_t channel = args[ARG_channel].u_int;
|
|
return mp_obj_new_int(wireless->wifi_set_ap_network(ssid, channel));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ap_passphrase(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ssid, ARG_passphrase, ARG_channel };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_passphrase, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_channel, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string ssid, passphrase;
|
|
mp_obj_to_string(args[ARG_ssid].u_obj, ssid);
|
|
mp_obj_to_string(args[ARG_passphrase].u_obj, passphrase);
|
|
|
|
uint8_t channel = args[ARG_channel].u_int;
|
|
return mp_obj_new_int(wireless->wifi_set_ap_passphrase(ssid, passphrase, channel));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_ping(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_ip_address, ARG_ttl };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ip_address, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_ttl, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint32_t ip_address = mp_obj_to_ip(args[ARG_ip_address].u_obj);
|
|
uint8_t ttl = args[ARG_ttl].u_int;
|
|
return mp_obj_new_int(wireless->ping(ip_address, ttl));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_debug(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_on };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_on, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t on = args[ARG_on].u_int;
|
|
wireless->debug(on);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_temperature() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_float(wireless->get_temperature());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_pin_mode(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_pin, ARG_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
uint8_t mode = args[ARG_mode].u_int;
|
|
wireless->pin_mode(pin, mode);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_digital_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_pin, ARG_value };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_value, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
uint8_t value = args[ARG_value].u_int;
|
|
wireless->digital_write(pin, value);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_analog_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_pin, ARG_value };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_value, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
uint8_t value = args[ARG_value].u_int;
|
|
wireless->analog_write(pin, value);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_digital_read(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_pin, ARG_value };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
return mp_obj_new_bool(wireless->digital_read(pin));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_analog_read(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
if(n_args == 1) {
|
|
enum { ARG_pin };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
return mp_obj_new_int(wireless->analog_read(pin) * 16); //Returns a 16 bit-ish* number as per CircuitPython
|
|
}
|
|
else {
|
|
enum { ARG_pin, ARG_atten };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_esp_pin, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_atten, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t pin = args[ARG_pin].u_int;
|
|
uint8_t atten = args[ARG_atten].u_int;
|
|
return mp_obj_new_int(wireless->analog_read(pin, atten) * 16); //Returns a 16 bit-ish* number as per CircuitPython
|
|
}
|
|
//NOTE *better way would be to mult by 65535 then div by 4095
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_server_start(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
if(n_args == 3) {
|
|
enum { ARG_port, ARG_sock, ARG_protocol_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_prt, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_protocol_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint16_t port = args[ARG_port].u_int;
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
uint8_t protocol_mode = args[ARG_protocol_mode].u_int;
|
|
wireless->start_server(port, sock, protocol_mode);
|
|
}
|
|
else {
|
|
enum { ARG_ip_address, ARG_port, ARG_sock, ARG_protocol_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ip_address, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_prt, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_protocol_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint32_t ip_address = mp_obj_to_ip(args[ARG_ip_address].u_obj);
|
|
uint16_t port = args[ARG_port].u_int;
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
uint8_t protocol_mode = args[ARG_protocol_mode].u_int;
|
|
wireless->start_server(ip_address, port, sock, protocol_mode);
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_client_start(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
if(n_args == 4) {
|
|
enum { ARG_ip_address, ARG_port, ARG_sock, ARG_protocol_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_ip_address, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_prt, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_protocol_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
|
|
uint32_t ip_address = mp_obj_to_ip(args[ARG_ip_address].u_obj);
|
|
uint16_t port = args[ARG_port].u_int;
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
uint8_t protocol_mode = args[ARG_protocol_mode].u_int;
|
|
wireless->start_client(ip_address, port, sock, protocol_mode);
|
|
}
|
|
else {
|
|
enum { ARG_hostname, ARG_ip_address, ARG_port, ARG_sock, ARG_protocol_mode };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_hostname, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_ip_address, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
{ MP_QSTR_prt, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_protocol_mode, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string hostname;
|
|
mp_obj_to_string(args[ARG_hostname].u_obj, hostname);
|
|
|
|
uint32_t ip_address = mp_obj_to_ip(args[ARG_ip_address].u_obj);
|
|
uint16_t port = args[ARG_port].u_int;
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
uint8_t protocol_mode = args[ARG_protocol_mode].u_int;
|
|
wireless->start_client(hostname, ip_address, port, sock, protocol_mode);
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_client_stop(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
wireless->stop_client(sock);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_server_state(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
return mp_obj_new_int(wireless->get_server_state(sock));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_client_state(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
return mp_obj_new_int(wireless->get_client_state(sock));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_avail_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
return mp_obj_new_int(wireless->avail_data(sock));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_avail_server(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
return mp_obj_new_int(wireless->avail_server(sock));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock, ARG_peek };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_peek, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t *data = nullptr;
|
|
if(wireless->get_data(args[ARG_sock].u_int, data, args[ARG_peek].u_int)) {
|
|
return mp_obj_new_int(*data);
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_data_buf(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t *data = (uint8_t *)malloc(512);
|
|
uint16_t data_len = 512;
|
|
if(wireless->get_data_buf(args[ARG_sock].u_int, data, &data_len)) {
|
|
mp_obj_t response = mp_obj_new_bytes(data, data_len);
|
|
free(data);
|
|
return response;
|
|
}
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_insert_data_buf(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock, ARG_data};
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
mp_buffer_info_t bufinfo;
|
|
mp_get_buffer_raise(args[ARG_data].u_obj, &bufinfo, MP_BUFFER_READ);
|
|
|
|
return mp_obj_new_bool(wireless->insert_data_buf(args[ARG_sock].u_int, (uint8_t *)bufinfo.buf, bufinfo.len));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_send_udp_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
uint8_t sock = args[ARG_sock].u_int;
|
|
return mp_obj_new_bool(wireless->send_udp_data(sock));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_send_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock, ARG_data};
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
mp_buffer_info_t bufinfo;
|
|
mp_get_buffer_raise(args[ARG_data].u_obj, &bufinfo, MP_BUFFER_READ);
|
|
|
|
return mp_obj_new_int(wireless->send_data(args[ARG_sock].u_int, (uint8_t *)bufinfo.buf, bufinfo.len));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_check_data_sent(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_sock };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_sock, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
return mp_obj_new_int(wireless->check_data_sent(args[ARG_sock].u_int));
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_get_socket() {
|
|
if(wireless != nullptr)
|
|
return mp_obj_new_int(wireless->get_socket());
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ent_identity(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_identity };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_identity, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string identity;
|
|
mp_obj_to_string(args[ARG_identity].u_obj, identity);
|
|
wireless->wifi_set_ent_identity(identity);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ent_username(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_username };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_username, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string username;
|
|
mp_obj_to_string(args[ARG_username].u_obj, username);
|
|
wireless->wifi_set_ent_username(username);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ent_password(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_password };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_password, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
std::string password;
|
|
mp_obj_to_string(args[ARG_password].u_obj, password);
|
|
wireless->wifi_set_ent_password(password);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_wifi_set_ent_enable() {
|
|
if(wireless != nullptr)
|
|
wireless->wifi_set_ent_enable();
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_set_led(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
|
if(wireless != nullptr) {
|
|
enum { ARG_r, ARG_g, ARG_b };
|
|
static const mp_arg_t allowed_args[] = {
|
|
{ MP_QSTR_r, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_g, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
{ MP_QSTR_b, MP_ARG_REQUIRED | MP_ARG_INT },
|
|
};
|
|
|
|
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
|
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
|
|
|
int r = args[ARG_r].u_int;
|
|
int g = args[ARG_g].u_int;
|
|
int b = args[ARG_b].u_int;
|
|
|
|
if(r < 0 || r > 255)
|
|
mp_raise_ValueError("r out of range. Expected 0 to 255");
|
|
else if(g < 0 || g > 255)
|
|
mp_raise_ValueError("g out of range. Expected 0 to 255");
|
|
else if(b < 0 || b > 255)
|
|
mp_raise_ValueError("b out of range. Expected 0 to 255");
|
|
else
|
|
wireless->set_led(r, g, b);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return mp_const_none;
|
|
}
|
|
|
|
mp_obj_t picowireless_is_pressed() {
|
|
bool pressed = false;
|
|
|
|
if(wireless != nullptr) {
|
|
pressed = wireless->is_pressed(PicoWireless::A);
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return pressed ? mp_const_true : mp_const_false;
|
|
}
|
|
|
|
mp_obj_t picowireless_is_sdcard_detected() {
|
|
bool detected = false;
|
|
|
|
if(wireless != nullptr) {
|
|
detected = wireless->is_sdcard_detected();
|
|
}
|
|
else
|
|
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
|
|
|
|
return detected ? mp_const_true : mp_const_false;
|
|
}
|
|
} |