Skip to content

Commit

Permalink
adds user interface with IF_REQ_DRIVER_SPECIFIC if_request
Browse files Browse the repository at this point in the history
  • Loading branch information
technobly committed Feb 2, 2023
1 parent 65b6d73 commit c88f874
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
18 changes: 17 additions & 1 deletion hal/network/api/ifapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,25 @@ typedef struct if_event_power_state if_req_power;
typedef enum if_req_t {
IF_REQ_NONE = 0,
IF_REQ_POWER_STATE = 1,
IF_REQ_DHCP_STATE = 2
IF_REQ_DHCP_STATE = 2,
IF_REQ_DRIVER_SPECIFIC = 3,
} if_req_t;

typedef struct if_req_driver_specific {
uint32_t type;
} if_req_driver_specific;

typedef enum if_wiznet_driver_specific {
IF_WIZNET_DRIVER_SPECIFIC_PIN_REMAP = 1,
} if_wiznet_driver_specific;

typedef struct if_wiznet_pin_remap {
if_req_driver_specific base;
uint16_t cs_pin;
uint16_t reset_pin;
uint16_t int_pin;
} if_wiznet_pin_remap;

int if_init(void);
int if_init_platform(void*);

Expand Down
31 changes: 30 additions & 1 deletion hal/network/lwip/ifapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ extern "C" {
#include "basenetif.h"
#include "check.h"

#include "wiznet/wiznetif_config.h"

using namespace particle::net;

namespace {
Expand Down Expand Up @@ -1153,11 +1155,38 @@ int if_event_handler_del(if_event_handler_cookie_t cookie) {
int if_request(if_t iface, int type, void* req, size_t reqsize, void* reserved) {
LwipTcpIpCoreLock lk;

if (!netif_validate(iface)) {
// XXX: Skipping iface validate/lookup for IF_REQ_DRIVER_SPECIFIC because sometimes we might need to
// remap the pins for an interface that's not available, because it's pin configuration is wrong.
if (type != IF_REQ_DRIVER_SPECIFIC && !netif_validate(iface)) {
return -1;
}

switch (type) {
case IF_REQ_DRIVER_SPECIFIC: {
// XXX: This is what we might normally do,
// but it wasn't working when the iface in question is not found.
// ---
// auto dsreq = (if_req_driver_specific*)req;
// auto bnetif = getBaseNetif(iface);
// CHECK_TRUE(bnetif, -1);
// bnetif->request(dsreq, sizeof(dsreq));
if (reqsize != sizeof(if_wiznet_pin_remap)) {
return -1;
}

if_wiznet_pin_remap* wzpr = (if_wiznet_pin_remap*)req;
if (wzpr->base.type == IF_WIZNET_DRIVER_SPECIFIC_PIN_REMAP) {
// LOG(INFO, "IF_REQUEST cs_pin: %u, reset_pin: %u, int_pin: %u",
// wzpr->cs_pin, wzpr->reset_pin, wzpr->int_pin);
WizNetifConfigData wizNetifConfigData;
wizNetifConfigData.size = sizeof(WizNetifConfigData);
wizNetifConfigData.cs_pin = wzpr->cs_pin;
wizNetifConfigData.reset_pin = wzpr->reset_pin;
wizNetifConfigData.int_pin = wzpr->int_pin;
WizNetifConfig::instance()->setConfigData(&wizNetifConfigData);
}
break;
}
case IF_REQ_POWER_STATE: {
if (reqsize != sizeof(if_req_power)) {
return -1;
Expand Down

0 comments on commit c88f874

Please sign in to comment.