summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authoriabdalkader <i.abdalkader@gmail.com>2022-02-10 22:30:01 +0200
committerDamien George <damien@micropython.org>2022-02-18 14:35:26 +1100
commit465b74e78daf50f5bd92625ba57bf2f5597cb712 (patch)
tree493ecad0a8d54b5f0c601508ba72cc7c79ff72b9 /drivers
parent5d6408f8f914f46f3c067fc59f5f31001b988fbc (diff)
drivers/ninaw10: Add NIC-level ioctl function.
This commit adds support in the driver for irregular commands. It currently supports setting GPIO pin mode, and GPIO pin read/write value.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ninaw10/nina_wifi_drv.c27
-rw-r--r--drivers/ninaw10/nina_wifi_drv.h1
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/ninaw10/nina_wifi_drv.c b/drivers/ninaw10/nina_wifi_drv.c
index cf0971169..1ad77218b 100644
--- a/drivers/ninaw10/nina_wifi_drv.c
+++ b/drivers/ninaw10/nina_wifi_drv.c
@@ -701,6 +701,33 @@ int nina_gethostbyname(const char *name, uint8_t *out_ip) {
return 0;
}
+int nina_ioctl(uint32_t cmd, size_t len, uint8_t *buf, uint32_t iface) {
+ switch (cmd) {
+ case NINA_CMD_SET_PIN_MODE:
+ if (len != 2 || nina_send_command_read_ack(NINA_CMD_SET_PIN_MODE,
+ 2, ARG_8BITS, NINA_ARGS(ARG_BYTE(buf[0]), ARG_BYTE(buf[1]))) != SPI_ACK) {
+ return -1;
+ }
+ break;
+ case NINA_CMD_SET_DIGITAL_WRITE:
+ if (len != 2 || nina_send_command_read_ack(NINA_CMD_SET_DIGITAL_WRITE,
+ 2, ARG_8BITS, NINA_ARGS(ARG_BYTE(buf[0]), ARG_BYTE(buf[1]))) != SPI_ACK) {
+ return -1;
+ }
+ break;
+ case NINA_CMD_GET_DIGITAL_READ:
+ if (len != 1 || nina_send_command_read_vals(NINA_CMD_GET_DIGITAL_READ,
+ 1, ARG_8BITS, NINA_ARGS(ARG_BYTE(buf[0])),
+ 1, ARG_8BITS, NINA_VALS({(uint16_t *)&len, buf})) != 0) {
+ return -1;
+ }
+ break;
+ default:
+ return 0;
+ }
+ return 0;
+}
+
int nina_socket_socket(uint8_t type) {
uint16_t size = 1;
uint8_t sock = 0;
diff --git a/drivers/ninaw10/nina_wifi_drv.h b/drivers/ninaw10/nina_wifi_drv.h
index b990476b6..4fe701eba 100644
--- a/drivers/ninaw10/nina_wifi_drv.h
+++ b/drivers/ninaw10/nina_wifi_drv.h
@@ -100,6 +100,7 @@ int nina_get_rssi(void);
int nina_fw_version(uint8_t *fw_ver);
int nina_set_hostname(const char *name);
int nina_gethostbyname(const char *name, uint8_t *out_ip);
+int nina_ioctl(uint32_t cmd, size_t len, uint8_t *buf, uint32_t iface);
int nina_socket_socket(uint8_t type);
int nina_socket_close(int fd);
int nina_socket_bind(int fd, uint8_t *ip, uint16_t port, int type);