Experimental: LTE module bindings.

feature/lte
Phil Howard 2024-03-11 23:21:03 +00:00
rodzic 6eb0f90e53
commit a92e497954
11 zmienionych plików z 301 dodań i 0 usunięć

Wyświetl plik

@ -20,6 +20,8 @@ jobs:
board: RPI_PICO
- name: picow
board: RPI_PICO_W
- name: pico_lte
board: RPI_PICO_LTE
- name: tiny2040
board: PIMORONI_TINY2040
- name: picolipo_4mb

Wyświetl plik

@ -0,0 +1,20 @@
{
"deploy": [
"../deploy.md"
],
"docs": "",
"features": [
"Breadboard friendly",
"Castellated Pads",
"Micro USB"
],
"id": "rp2-pico",
"images": [
"rp2-pico.jpg"
],
"mcu": "rp2040",
"product": "Pico",
"thumbnail": "",
"url": "https://www.raspberrypi.com/products/raspberry-pi-pico/",
"vendor": "Raspberry Pi"
}

Wyświetl plik

@ -0,0 +1,3 @@
include("$(PORT_DIR)/boards/manifest.py")
include("../manifest_pico.py")

Wyświetl plik

@ -0,0 +1,7 @@
# cmake file for Raspberry Pi Pico
set(PICO_BOARD "pico")
# Board specific version of the frozen manifest
set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py)
set(MICROPY_C_HEAP_SIZE 4096)

Wyświetl plik

@ -0,0 +1,13 @@
// Board and hardware specific configuration
#define MICROPY_HW_BOARD_NAME "Raspberry Pi Pico"
#define MICROPY_HW_FLASH_STORAGE_BYTES (1408 * 1024)
// Enable networking.
#define MICROPY_PY_NETWORK 1
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "Pico"
extern const struct _mp_obj_type_t mod_network_nic_type_lte;
#define MICROPY_HW_NIC_LTE { MP_ROM_QSTR(MP_QSTR_LTE), MP_ROM_PTR(&mod_network_nic_type_lte) },
#define MICROPY_BOARD_NETWORK_INTERFACES \
MICROPY_HW_NIC_LTE

Wyświetl plik

@ -0,0 +1,28 @@
GP0,GPIO0
GP1,GPIO1
GP2,GPIO2
GP3,GPIO3
GP4,GPIO4
GP5,GPIO5
GP6,GPIO6
GP7,GPIO7
GP8,GPIO8
GP9,GPIO9
GP10,GPIO10
GP11,GPIO11
GP12,GPIO12
GP13,GPIO13
GP14,GPIO14
GP15,GPIO15
GP16,GPIO16
GP17,GPIO17
GP18,GPIO18
GP19,GPIO19
GP20,GPIO20
GP21,GPIO21
GP22,GPIO22
GP25,GPIO25
GP26,GPIO26
GP27,GPIO27
GP28,GPIO28
LED,GPIO25
1 GP0 GPIO0
2 GP1 GPIO1
3 GP2 GPIO2
4 GP3 GPIO3
5 GP4 GPIO4
6 GP5 GPIO5
7 GP6 GPIO6
8 GP7 GPIO7
9 GP8 GPIO8
10 GP9 GPIO9
11 GP10 GPIO10
12 GP11 GPIO11
13 GP12 GPIO12
14 GP13 GPIO13
15 GP14 GPIO14
16 GP15 GPIO15
17 GP16 GPIO16
18 GP17 GPIO17
19 GP18 GPIO18
20 GP19 GPIO19
21 GP20 GPIO20
22 GP21 GPIO21
23 GP22 GPIO22
24 GP25 GPIO25
25 GP26 GPIO26
26 GP27 GPIO27
27 GP28 GPIO28
28 LED GPIO25

Wyświetl plik

@ -0,0 +1,49 @@
#include "lte.h"
static const mod_network_nic_protocol_t mod_network_nic_protocol_lte = {
.gethostbyname = network_lte_gethostbyname,
.deinit = network_lte_deinit,
.socket = network_lte_socket_socket,
.close = network_lte_socket_close,
.bind = network_lte_socket_bind,
.listen = network_lte_socket_listen,
.accept = network_lte_socket_accept,
.connect = network_lte_socket_connect,
.send = network_lte_socket_send,
.recv = network_lte_socket_recv,
.sendto = network_lte_socket_sendto,
.recvfrom = network_lte_socket_recvfrom,
.setsockopt = network_lte_socket_setsockopt,
.settimeout = network_lte_socket_settimeout,
.ioctl = network_lte_socket_ioctl,
};
static const mp_rom_map_elem_t lte_locals_dict_table[] = {
};
static MP_DEFINE_CONST_DICT(lte_locals_dict, lte_locals_dict_table);
MP_DEFINE_CONST_OBJ_TYPE(
mod_network_nic_type_lte,
MP_QSTR_lte,
MP_TYPE_FLAG_NONE,
make_new, network_lte_make_new,
locals_dict, &lte_locals_dict,
protocol, &mod_network_nic_protocol_lte
);
#ifdef NETWORK_LTE_MODULE
static const mp_map_elem_t lte_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_lte) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_LTE), (mp_obj_t)&mod_network_nic_type_lte },
};
static MP_DEFINE_CONST_DICT(mp_module_lte_globals, lte_globals_table);
const mp_obj_module_t lte_user_cmodule = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&mp_module_lte_globals,
};
MP_REGISTER_MODULE(MP_QSTR_lte, lte_user_cmodule);
#endif

Wyświetl plik

@ -0,0 +1,122 @@
#include <cstdio>
#define debug_printf(...) mp_printf(&mp_plat_print, __VA_ARGS__)
extern "C" {
#include "lte.h"
#include "py/builtin.h"
#include "py/mperrno.h"
#include "extmod/modnetwork.h"
typedef struct _lte_obj_t {
mp_obj_base_t base;
} lte_obj_t;
mp_obj_t network_lte_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
_lte_obj_t *self = nullptr;
enum {
ARG_dummy
};
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_dummy, MP_ARG_INT },
};
// Parse args.
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
self = m_new_obj_with_finaliser(_lte_obj_t);
self->base.type = &mod_network_nic_type_lte;
// Register with network module
mod_network_register_nic(MP_OBJ_FROM_PTR(self));
return MP_OBJ_FROM_PTR(self);
}
int network_lte_gethostbyname(mp_obj_t nic, const char *name, mp_uint_t len, uint8_t *out_ip) {
debug_printf("gethostbyname(%s)\n", name);
return -1;
}
void network_lte_deinit(void) {
}
int network_lte_socket_socket(mod_network_socket_obj_t *socket, int *_errno) {
debug_printf("socket_socket(%d %d %d)\n", socket->domain, socket->type, socket->proto);
*_errno = MP_EINVAL;
return -1;
}
void network_lte_socket_close(mod_network_socket_obj_t *socket) {
debug_printf("socket_close(%d)\n", socket->fileno);
};
int network_lte_socket_bind(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
debug_printf("socket_bind(%d, %d)\n", socket->fileno, port);
*_errno = MP_EINVAL;
return -1;
};
int network_lte_socket_listen(mod_network_socket_obj_t *socket, mp_int_t backlog, int *_errno) {
debug_printf("socket_listen(%d, %d)\n", socket->fileno, backlog);
*_errno = MP_EINVAL;
return -1;
};
int network_lte_socket_accept(mod_network_socket_obj_t *socket, mod_network_socket_obj_t *socket2, byte *ip, mp_uint_t *port, int *_errno) {
debug_printf("socket_accept(%d)\n", socket->fileno);
*_errno = MP_EINVAL;
return -1;
};
int network_lte_socket_connect(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
*_errno = MP_EINVAL;
return -1;
};
mp_uint_t network_lte_socket_send(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, int *_errno) {
debug_printf("socket_send(%d, %d)\n", socket->fileno, len);
*_errno = MP_EINVAL;
return 0;;
};
mp_uint_t network_lte_socket_recv(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, int *_errno) {
debug_printf("socket_recv(%d)\n", socket->fileno);
*_errno = MP_EINVAL;
return 0;
};
mp_uint_t network_lte_socket_sendto(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, byte *ip, mp_uint_t port, int *_errno) {
debug_printf("socket_sendto(%d)\n", socket->fileno);
*_errno = MP_EINVAL;
return 0;
};
mp_uint_t network_lte_socket_recvfrom(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, byte *ip, mp_uint_t *port, int *_errno) {
debug_printf("socket_recvfrom(%d)\n", socket->fileno);
*_errno = MP_EINVAL;
return 0;
};
int network_lte_socket_setsockopt(mod_network_socket_obj_t *socket, mp_uint_t level, mp_uint_t opt, const void *optval, mp_uint_t optlen, int *_errno) {
debug_printf("socket_setsockopt(%d, %d)\n", socket->fileno, opt);
*_errno = MP_EINVAL;
return -1;
};
int network_lte_socket_settimeout(mod_network_socket_obj_t *socket, mp_uint_t timeout_ms, int *_errno) {
debug_printf("socket_settimeout(%d, %d)\n", socket->fileno, timeout_ms);
*_errno = MP_EINVAL;
return -1;
};
int network_lte_socket_ioctl(mod_network_socket_obj_t *socket, mp_uint_t request, mp_uint_t arg, int *_errno) {
debug_printf("socket_ioctl(%d, %d)\n", socket->fileno, request);
*_errno = MP_EINVAL;
return -1;
};
}

Wyświetl plik

@ -0,0 +1,25 @@
// Include MicroPython API.
#include "py/runtime.h"
#include "py/objstr.h"
#include "extmod/modnetwork.h"
extern const mp_obj_type_t mod_network_nic_type_lte;
extern mp_obj_t network_lte_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args);
extern int network_lte_gethostbyname(mp_obj_t nic, const char *name, mp_uint_t len, uint8_t *out_ip);
extern void network_lte_deinit(void);
extern int network_lte_socket_socket(mod_network_socket_obj_t *socket, int *_errno);
extern void network_lte_socket_close(mod_network_socket_obj_t *socket);
extern int network_lte_socket_bind(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno);
extern int network_lte_socket_listen(mod_network_socket_obj_t *socket, mp_int_t backlog, int *_errno);
extern int network_lte_socket_accept(mod_network_socket_obj_t *socket, mod_network_socket_obj_t *socket2, byte *ip, mp_uint_t *port, int *_errno);
extern int network_lte_socket_connect(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno);
extern mp_uint_t network_lte_socket_send(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, int *_errno);
extern mp_uint_t network_lte_socket_recv(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, int *_errno);
extern mp_uint_t network_lte_socket_sendto(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, byte *ip, mp_uint_t port, int *_errno);
extern mp_uint_t network_lte_socket_recvfrom(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, byte *ip, mp_uint_t *port, int *_errno);
extern int network_lte_socket_setsockopt(mod_network_socket_obj_t *socket, mp_uint_t level, mp_uint_t opt, const void *optval, mp_uint_t optlen, int *_errno);
extern int network_lte_socket_settimeout(mod_network_socket_obj_t *socket, mp_uint_t timeout_ms, int *_errno);
extern int network_lte_socket_ioctl(mod_network_socket_obj_t *socket, mp_uint_t request, mp_uint_t arg, int *_errno);

Wyświetl plik

@ -0,0 +1,18 @@
set(MOD_NAME lte)
string(TOUPPER ${MOD_NAME} MOD_NAME_UPPER)
add_library(usermod_${MOD_NAME} INTERFACE)
target_sources(usermod_${MOD_NAME} INTERFACE
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.c
${CMAKE_CURRENT_LIST_DIR}/${MOD_NAME}.cpp
)
target_include_directories(usermod_${MOD_NAME} INTERFACE
${CMAKE_CURRENT_LIST_DIR}
)
target_compile_definitions(usermod_${MOD_NAME} INTERFACE
MODULE_LTE_ENABLED=1
)
target_link_libraries(usermod INTERFACE usermod_${MOD_NAME})

Wyświetl plik

@ -0,0 +1,14 @@
include_directories(${CMAKE_CURRENT_LIST_DIR}/../../)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../")
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
include(micropython-common)
include(lte/micropython)
# C++ Magic Memory
include(cppmem/micropython)