kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Experimental: LTE module bindings.
rodzic
6eb0f90e53
commit
a92e497954
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
include("$(PORT_DIR)/boards/manifest.py")
|
||||
|
||||
include("../manifest_pico.py")
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
|
@ -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, <e_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
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
|
@ -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);
|
|
@ -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})
|
|
@ -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)
|
Ładowanie…
Reference in New Issue