diff options
Diffstat (limited to 'fw')
| -rw-r--r-- | fw/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | fw/prj.conf | 1 | ||||
| -rw-r--r-- | fw/src/mac.c | 56 | 
3 files changed, 58 insertions, 0 deletions
diff --git a/fw/CMakeLists.txt b/fw/CMakeLists.txt index 522a4dd..32a4571 100644 --- a/fw/CMakeLists.txt +++ b/fw/CMakeLists.txt @@ -21,4 +21,5 @@ target_sources(app  	PRIVATE  		"${CMAKE_CURRENT_SOURCE_DIR}/src/main.c"  		"${CMAKE_CURRENT_SOURCE_DIR}/src/syslog.c" +		"${CMAKE_CURRENT_SOURCE_DIR}/src/mac.c"  ) diff --git a/fw/prj.conf b/fw/prj.conf index b074671..405e696 100644 --- a/fw/prj.conf +++ b/fw/prj.conf @@ -9,6 +9,7 @@ CONFIG_NETWORKING=y  CONFIG_NET_SHELL=y  CONFIG_NET_SOCKETS=y  CONFIG_NET_CONNECTION_MANAGER=y +CONFIG_NET_L2_ETHERNET_MGMT=y  CONFIG_LOG=y  CONFIG_LOG_BACKEND_NET=y diff --git a/fw/src/mac.c b/fw/src/mac.c new file mode 100644 index 0000000..e34fa0d --- /dev/null +++ b/fw/src/mac.c @@ -0,0 +1,56 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + + +#include <stdint.h> +#include <string.h> + +#include <zephyr/init.h> +#include <zephyr/logging/log.h> +#include <zephyr/net/net_if.h> +#include <zephyr/net/net_linkaddr.h> +#include <zephyr/net/net_mgmt.h> +#include <zephyr/net/ethernet.h> +#include <zephyr/net/ethernet_mgmt.h> +#include <zephyr/sys/util.h> + + +LOG_MODULE_REGISTER(mac); + + +/* will be read from an EEPROM chip in the future */ +static const uint8_t mac_address[NET_ETH_ADDR_LEN] = {0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}; + +int init_mac_address(void) +{ +	LOG_DBG("Setting custom MAC address"); + +	struct net_if *interface = net_if_get_default(); + +	int ret = net_if_down(interface); +	if (ret < 0) { +		LOG_ERR("Failed to set interface down to set MAC address (%d)", ret); +		return ret; +	} + +	struct ethernet_req_params params = {0}; +	memcpy(params.mac_address.addr, mac_address, 6); +	ret = net_mgmt(NET_REQUEST_ETHERNET_SET_MAC_ADDRESS, interface, ¶ms, sizeof(params)); +	if (ret < 0) { +		LOG_ERR("Failed to set MAC address (%d)", ret); +		return ret; +	} + +	ret = net_if_up(interface); +	if (ret < 0) { +		LOG_ERR("Failed to set interface up after setting MAC address (%d)", ret); +		return ret; +	} + +	LOG_INF("Successfully set MAC address"); +	return 0; +} +SYS_INIT(init_mac_address, APPLICATION, 0);  | 
