Finished micropython bindings for current C++ class implementation

pull/126/head
ZodiusInfuser 2021-04-12 18:03:56 +01:00 zatwierdzone przez Phil Howard
rodzic d1b3e4d768
commit 971ac565dd
8 zmienionych plików z 357 dodań i 146 usunięć

Wyświetl plik

@ -579,20 +579,20 @@ namespace pimoroni {
return network_rssi;
}
uint8_t Esp32Spi::req_host_by_name(const char* hostname) {
bool Esp32Spi::req_host_by_name(const std::string hostname) {
driver.wait_for_esp_select();
// Send Command
driver.send_cmd(REQ_HOST_BY_NAME, SpiDrv::PARAM_NUMS_1);
driver.send_param((uint8_t*)hostname, strlen(hostname), SpiDrv::LAST_PARAM);
driver.pad_to_multiple_of_4(5 + strlen(hostname));
driver.send_param((uint8_t*)hostname.data(), hostname.length(), SpiDrv::LAST_PARAM);
driver.pad_to_multiple_of_4(5 + hostname.length());
driver.esp_deselect();
driver.wait_for_esp_select();
// Wait for reply
uint8_t data = 0, data_len = 0;
uint8_t result = driver.wait_response_cmd(REQ_HOST_BY_NAME, SpiDrv::PARAM_NUMS_1, &data, &data_len);
bool result = driver.wait_response_cmd(REQ_HOST_BY_NAME, SpiDrv::PARAM_NUMS_1, &data, &data_len);
driver.esp_deselect();
if(result) {
@ -602,9 +602,9 @@ namespace pimoroni {
return result;
}
int Esp32Spi::get_host_by_name(IPAddress& ip_out) {
bool Esp32Spi::get_host_by_name(IPAddress& ip_out) {
IPAddress dummy(0xFF,0xFF,0xFF,0xFF);
int result = 0;
bool result = false;
driver.wait_for_esp_select();
@ -629,12 +629,12 @@ namespace pimoroni {
return result;
}
int Esp32Spi::get_host_by_name(const char* hostname, IPAddress& ip_out) {
bool Esp32Spi::get_host_by_name(const std::string hostname, IPAddress& ip_out) {
if(req_host_by_name(hostname)) {
return get_host_by_name(ip_out);
}
else {
return 0;
return false;
}
}

Wyświetl plik

@ -117,7 +117,7 @@ namespace pimoroni {
uint8_t subnet_mask[WL_IPV4_LENGTH];
uint8_t gateway_ip[WL_IPV4_LENGTH];
public:
//PicoWireless();
//Esp32Spi();
//--------------------------------------------------
@ -164,9 +164,9 @@ namespace pimoroni {
uint8_t get_channel_networks(uint8_t network_item);
int32_t get_rssi_networks(uint8_t network_item);
uint8_t req_host_by_name(const char* hostname);
int get_host_by_name(IPAddress& ip_out);
int get_host_by_name(const char* hostname, IPAddress& ip_out);
bool req_host_by_name(const std::string hostname);
bool get_host_by_name(IPAddress& ip_out);
bool get_host_by_name(const std::string hostname, IPAddress& ip_out);
const char* get_fw_version();
uint32_t get_time();

Wyświetl plik

@ -6,12 +6,6 @@ namespace pimoroni {
addr.dword = 0;
}
std::string IPAddress::to_string() {
char buf[16] = {0};
snprintf(buf, 16, "%d.%d.%d.%d", addr.bytes[0], addr.bytes[1], addr.bytes[2], addr.bytes[3]);
return std::string(buf, 16);
}
IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) {
addr.bytes[0] = first_octet;
addr.bytes[1] = second_octet;
@ -54,4 +48,15 @@ namespace pimoroni {
IPAddress::operator uint32_t() const {
return addr.dword;
}
std::string IPAddress::to_string() const {
char buf[16] = {0};
snprintf(buf, 16, "%d.%d.%d.%d", addr.bytes[0], addr.bytes[1], addr.bytes[2], addr.bytes[3]);
return std::string(buf, 16);
}
const uint8_t* IPAddress::to_bytes() const {
return addr.bytes;
}
}

Wyświetl plik

@ -2,6 +2,7 @@
#include "pico/stdlib.h"
#include <string>
#include "spi_drv.hpp"
namespace pimoroni {
@ -11,7 +12,7 @@ namespace pimoroni {
//--------------------------------------------------
private:
union {
uint8_t bytes[4];
uint8_t bytes[WL_IPV4_LENGTH];
uint32_t dword;
} addr;
@ -36,7 +37,8 @@ namespace pimoroni {
uint8_t& operator[](int index);
IPAddress& operator=(uint32_t address);
operator uint32_t() const;
std::string to_string();
std::string to_string() const;
const uint8_t* to_bytes() const;
};
}

Wyświetl plik

@ -12,7 +12,7 @@
#define WL_WEP_KEY_MAX_LENGTH 13
// Size of a MAC-address or BSSID
#define WL_MAC_ADDR_LENGTH 6
// Size of a MAC-address or BSSID
// Size of a IP address
#define WL_IPV4_LENGTH 4
// Maximum size of a SSID list
#define WL_NETWORKS_LIST_MAXNUM 10

Wyświetl plik

@ -6,8 +6,8 @@
/***** Module Functions *****/
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_init_obj, picowireless_init);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_get_network_data_obj, picowireless_get_network_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_get_remote_data_obj, picowireless_get_remote_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_network_data_obj, picowireless_get_network_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_remote_data_obj, 1, picowireless_get_remote_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_wifi_set_network_obj, 1, picowireless_wifi_set_network);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_wifi_set_passphrase_obj, 2, picowireless_wifi_set_passphrase);
@ -22,9 +22,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_disconnect_obj, picowireless_disco
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_connection_status_obj, picowireless_get_connection_status);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_mac_address_obj, picowireless_get_mac_address);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(picowireless_get_ip_address_obj, picowireless_get_ip_address);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(picowireless_get_subnet_mask_obj, picowireless_get_subnet_mask);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(picowireless_get_gateway_ip_obj, picowireless_get_gateway_ip);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_ip_address_obj, picowireless_get_ip_address);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_subnet_mask_obj, picowireless_get_subnet_mask);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_gateway_ip_obj, picowireless_get_gateway_ip);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_current_ssid_obj, picowireless_get_current_ssid);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_current_bssid_obj, picowireless_get_current_bssid);
@ -33,15 +33,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_current_encryption_type_obj, p
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_start_scan_networks_obj, picowireless_start_scan_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_scan_networks_obj, picowireless_get_scan_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(picowireless_get_ssid_networks_obj, picowireless_get_ssid_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_ssid_networks_obj, 1, picowireless_get_ssid_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_enc_type_networks_obj, 1, picowireless_get_enc_type_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_2(picowireless_get_bssid_networks_obj, picowireless_get_bssid_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_bssid_networks_obj, 1, picowireless_get_bssid_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_channel_networks_obj, 1, picowireless_get_channel_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_rssi_networks_obj, 1, picowireless_get_rssi_networks);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(picowireless_req_host_by_name_obj, picowireless_req_host_by_name);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(picowireless_get_host_by_name_obj, 1, 2, picowireless_get_host_by_name);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_req_host_by_name_obj, 1, picowireless_req_host_by_name);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_host_by_name_obj, 0, picowireless_get_host_by_name);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_fw_version_obj, picowireless_get_fw_version);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_time_obj, picowireless_get_time);
@ -59,8 +59,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_pin_mode_obj, 2, picowireless_pin
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_digital_write_obj, 2, picowireless_digital_write);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_analog_write_obj, 2, picowireless_analog_write);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(picowireless_server_start_obj, 3, 4, picowireless_server_start);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(picowireless_client_start_obj, 4, 5, picowireless_client_start);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_server_start_obj, 3, picowireless_server_start);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_client_start_obj, 4, picowireless_client_start);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_client_stop_obj, 1, picowireless_client_stop);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_server_state_obj, 1, picowireless_get_server_state);
@ -68,12 +68,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_client_state_obj, 1, picowire
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_avail_data_obj, 1, picowireless_avail_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_avail_server_obj, 1, picowireless_avail_server);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_get_data_obj, picowireless_get_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_get_data_buf_obj, picowireless_get_data_buf);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_insert_data_buf_obj, picowireless_insert_data_buf);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_data_obj, 2, picowireless_get_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_get_data_buf_obj, 1, picowireless_get_data_buf);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_insert_data_buf_obj, 2, picowireless_insert_data_buf);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_send_udp_data_obj, 1, picowireless_send_udp_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(picowireless_send_data_obj, picowireless_send_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_send_data_obj, 2, picowireless_send_data);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(picowireless_check_data_sent_obj, 1, picowireless_check_data_sent);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(picowireless_get_socket_obj, picowireless_get_socket);

Wyświetl plik

@ -36,20 +36,44 @@ mp_obj_t picowireless_init() {
return mp_const_none;
}
mp_obj_t picowireless_get_network_data(mp_obj_t ip_out, mp_obj_t mask_out, mp_obj_t gwip_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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(mp_obj_t sock, mp_obj_t ip_out, mp_obj_t port_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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);
@ -210,39 +234,46 @@ mp_obj_t picowireless_get_connection_status() {
}
mp_obj_t picowireless_get_mac_address() {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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(mp_obj_t ip_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
mp_obj_t picowireless_get_ip_address() {
if(wireless != nullptr) {
IPAddress ip;
wireless->get_ip_address(ip);
return mp_obj_new_bytes(ip.to_bytes(), WL_IPV4_LENGTH);
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
return mp_const_none;
}
mp_obj_t picowireless_get_subnet_mask(mp_obj_t mask_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
mp_obj_t picowireless_get_subnet_mask() {
if(wireless != nullptr) {
IPAddress mask;
wireless->get_subnet_mask(mask);
return mp_obj_new_bytes(mask.to_bytes(), WL_IPV4_LENGTH);
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
return mp_const_none;
}
mp_obj_t picowireless_get_gateway_ip(mp_obj_t ip_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
mp_obj_t picowireless_get_gateway_ip() {
if(wireless != nullptr) {
IPAddress mask;
wireless->get_gateway_ip(mask);
return mp_obj_new_bytes(mask.to_bytes(), WL_IPV4_LENGTH);
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
@ -250,9 +281,10 @@ mp_obj_t picowireless_get_gateway_ip(mp_obj_t ip_out) {
}
mp_obj_t picowireless_get_current_ssid() {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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);
@ -260,9 +292,10 @@ mp_obj_t picowireless_get_current_ssid() {
}
mp_obj_t picowireless_get_current_bssid() {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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);
@ -305,17 +338,30 @@ mp_obj_t picowireless_get_scan_networks() {
return mp_const_none;
}
mp_obj_t picowireless_get_ssid_networks(mp_obj_t network_item) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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) {
std::string str_ssid(ssid, WL_SSID_MAX_LENGTH);
return mp_obj_new_str(str_ssid.c_str(), str_ssid.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) {
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[] = {
@ -334,17 +380,30 @@ mp_obj_t picowireless_get_enc_type_networks(size_t n_args, const mp_obj_t *pos_a
return mp_const_none;
}
mp_obj_t picowireless_get_bssid_networks(mp_obj_t network_item, mp_obj_t bssid_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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) {
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[] = {
@ -363,7 +422,7 @@ mp_obj_t picowireless_get_channel_networks(size_t n_args, const mp_obj_t *pos_ar
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) {
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[] = {
@ -382,22 +441,53 @@ mp_obj_t picowireless_get_rssi_networks(size_t n_args, const mp_obj_t *pos_args,
return mp_const_none;
}
mp_obj_t picowireless_req_host_by_name(mp_obj_t hostname) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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_none;
return mp_const_false;
}
mp_obj_t picowireless_get_host_by_name(mp_uint_t n_args, const mp_obj_t *args) {
//mp_obj_t picowireless_get_host_by_name(mp_obj_t ip_out) {
//mp_obj_t picowireless_get_host_by_name(mp_obj_t hostname, mp_obj_t ip_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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_obj_new_bytes(ip.to_bytes(), WL_IPV4_LENGTH);
}
}
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_obj_new_bytes(ip.to_bytes(), WL_IPV4_LENGTH);
}
}
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
@ -405,9 +495,11 @@ mp_obj_t picowireless_get_host_by_name(mp_uint_t n_args, const mp_obj_t *args) {
}
mp_obj_t picowireless_get_fw_version() {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
if(wireless != nullptr) {
const char* fw_ver = wireless->get_fw_version();
std::string str_fw_ver(fw_ver, WL_FW_VER_LENGTH);
return mp_obj_new_str(str_fw_ver.c_str(), str_fw_ver.length());
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
@ -490,7 +582,7 @@ mp_obj_t picowireless_wifi_set_ap_passphrase(size_t n_args, const mp_obj_t *pos_
return mp_const_none;
}
mp_obj_t picowireless_ping(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
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[] = {
@ -602,31 +694,99 @@ mp_obj_t picowireless_analog_write(size_t n_args, const mp_obj_t *pos_args, mp_m
return mp_const_none;
}
mp_obj_t picowireless_server_start(mp_uint_t n_args, const mp_obj_t *args) {
//mp_obj_t picowireless_start_server(mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/) {
//mp_obj_t picowireless_start_server(mp_uint_t n_args, const mp_obj_t *args) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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_INT },
{ 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 = args[ARG_ip_address].u_int;
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(mp_uint_t n_args, const mp_obj_t *args) {
//(mp_obj_t ip_address, mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/)
//(mp_obj_t host, mp_obj_t ip_address, mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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_INT },
{ 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 = args[ARG_ip_address].u_int;
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_INT },
{ 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 = args[ARG_ip_address].u_int;
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) {
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[] = {
@ -645,7 +805,7 @@ mp_obj_t picowireless_client_stop(size_t n_args, const mp_obj_t *pos_args, mp_ma
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) {
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[] = {
@ -664,7 +824,7 @@ mp_obj_t picowireless_get_server_state(size_t n_args, const mp_obj_t *pos_args,
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) {
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[] = {
@ -683,7 +843,7 @@ mp_obj_t picowireless_get_client_state(size_t n_args, const mp_obj_t *pos_args,
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) {
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[] = {
@ -702,7 +862,7 @@ mp_obj_t picowireless_avail_data(size_t n_args, const mp_obj_t *pos_args, mp_map
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) {
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[] = {
@ -721,37 +881,73 @@ mp_obj_t picowireless_avail_server(size_t n_args, const mp_obj_t *pos_args, mp_m
return mp_const_none;
}
mp_obj_t picowireless_get_data(mp_obj_t sock, mp_obj_t data_out, mp_obj_t peek) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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(mp_obj_t sock, mp_obj_t data_out, mp_obj_t data_len_out) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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 = nullptr;
uint16_t *data_len = nullptr;
if(wireless->get_data_buf(args[ARG_sock].u_int, data, data_len)) {
return mp_obj_new_bytes(data, *data_len);
}
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
return mp_const_none;
}
mp_obj_t picowireless_insert_data_buf(mp_obj_t sock, mp_obj_t data_in, mp_obj_t len) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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) {
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[] = {
@ -770,17 +966,29 @@ mp_obj_t picowireless_send_udp_data(size_t n_args, const mp_obj_t *pos_args, mp_
return mp_const_none;
}
mp_obj_t picowireless_send_data(mp_obj_t sock, mp_obj_t data_in, mp_obj_t len) {
if(wireless != nullptr)
//TODO implement
mp_raise_NotImplementedError("Please avoid using this function for now");
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) {
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[] = {
@ -790,8 +998,7 @@ mp_obj_t picowireless_check_data_sent(size_t n_args, const mp_obj_t *pos_args, m
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->check_data_sent(sock));
return mp_obj_new_int(wireless->check_data_sent(args[ARG_sock].u_int));
}
else
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);

Wyświetl plik

@ -4,8 +4,8 @@
// Declare the functions we'll make available in Python
extern mp_obj_t picowireless_init();
extern mp_obj_t picowireless_get_network_data(mp_obj_t ip_out, mp_obj_t mask_out, mp_obj_t gwip_out);
extern mp_obj_t picowireless_get_remote_data(mp_obj_t sock, mp_obj_t ip_out, mp_obj_t port_out);
extern mp_obj_t picowireless_get_network_data();
extern mp_obj_t picowireless_get_remote_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_wifi_set_network(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_wifi_set_passphrase(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
@ -20,9 +20,9 @@ extern mp_obj_t picowireless_disconnect();
extern mp_obj_t picowireless_get_connection_status();
extern mp_obj_t picowireless_get_mac_address();
extern mp_obj_t picowireless_get_ip_address(mp_obj_t ip_out);
extern mp_obj_t picowireless_get_subnet_mask(mp_obj_t mask_out);
extern mp_obj_t picowireless_get_gateway_ip(mp_obj_t ip_out);
extern mp_obj_t picowireless_get_ip_address();
extern mp_obj_t picowireless_get_subnet_mask();
extern mp_obj_t picowireless_get_gateway_ip();
extern mp_obj_t picowireless_get_current_ssid();
extern mp_obj_t picowireless_get_current_bssid();
@ -31,16 +31,15 @@ extern mp_obj_t picowireless_get_current_encryption_type();
extern mp_obj_t picowireless_start_scan_networks();
extern mp_obj_t picowireless_get_scan_networks();
extern mp_obj_t picowireless_get_ssid_networks(mp_obj_t network_item);
extern mp_obj_t picowireless_get_ssid_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_enc_type_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_bssid_networks(mp_obj_t network_item, mp_obj_t bssid_out);
extern mp_obj_t picowireless_get_bssid_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_channel_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_rssi_networks(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_req_host_by_name(mp_obj_t hostname);
extern mp_obj_t picowireless_get_host_by_name(mp_uint_t n_args, const mp_obj_t *args);//(mp_obj_t ip_out);
//extern mp_obj_t picowireless_get_host_by_name(mp_obj_t hostname, mp_obj_t ip_out);
extern mp_obj_t picowireless_req_host_by_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_host_by_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_fw_version();
extern mp_obj_t picowireless_get_time();
@ -58,10 +57,8 @@ extern mp_obj_t picowireless_pin_mode(size_t n_args, const mp_obj_t *pos_args, m
extern mp_obj_t picowireless_digital_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_analog_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
//extern mp_obj_t picowireless_start_server(mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/);
extern mp_obj_t picowireless_server_start(mp_uint_t n_args, const mp_obj_t *args);//(mp_obj_t ip_address, mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/);
extern mp_obj_t picowireless_client_start(mp_uint_t n_args, const mp_obj_t *args);//(mp_obj_t ip_address, mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/);
//extern mp_obj_t picowireless_start_client(mp_uint_t n_args, const mp_obj_t *args);//(mp_obj_t host, mp_obj_t ip_address, mp_obj_t port, mp_obj_t sock, mp_obj_t protocol_mode/*=TCP_MODE*/);
extern mp_obj_t picowireless_server_start(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_client_start(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_client_stop(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_server_state(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
@ -69,11 +66,11 @@ extern mp_obj_t picowireless_get_client_state(size_t n_args, const mp_obj_t *pos
extern mp_obj_t picowireless_avail_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_avail_server(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_data(mp_obj_t sock, mp_obj_t data_out, mp_obj_t peek);
extern mp_obj_t picowireless_get_data_buf(mp_obj_t sock, mp_obj_t data_out, mp_obj_t data_len_out);
extern mp_obj_t picowireless_insert_data_buf(mp_obj_t sock, mp_obj_t data_in, mp_obj_t len);
extern mp_obj_t picowireless_get_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_data_buf(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_insert_data_buf(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_send_udp_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_send_data(mp_obj_t sock, mp_obj_t data_in, mp_obj_t len);
extern mp_obj_t picowireless_send_data(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_check_data_sent(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t picowireless_get_socket();