From 0b81ca6139161e870e335b736c9194c8f85178b9 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 5 Apr 2026 08:18:28 +0900 Subject: [PATCH] Replace raw uint8_t constants with enum class types, move internal constants to cpp --- w6300/w6300.cpp | 60 ++++++++++++++++++++----- w6300/w6300.h | 115 +++++++++++++++++++++++++++--------------------- 2 files changed, 113 insertions(+), 62 deletions(-) diff --git a/w6300/w6300.cpp b/w6300/w6300.cpp index 8ba4b9f..e6075a9 100644 --- a/w6300/w6300.cpp +++ b/w6300/w6300.cpp @@ -225,6 +225,9 @@ void wizchip_pio_write(uint8_t opcode, uint16_t addr, uint8_t* buf, uint16_t len pio_sm_set_enabled(state.pio, state.pio_sm, false); } +using iodata_t = uint8_t; +using datasize_t = int16_t; + constexpr int _WIZCHIP_ = 6300; constexpr uint8_t _WIZCHIP_QSPI_MODE_ = 0x02 << 6; constexpr int _SOCK_COUNT_ = SOCK_COUNT; @@ -233,6 +236,37 @@ constexpr uint16_t _PHY_IO_MODE_PHYCR_ = 0x0000; constexpr uint16_t _PHY_IO_MODE_MII_ = 0x0010; constexpr uint16_t _PHY_IO_MODE_ = _PHY_IO_MODE_MII_; +constexpr uint8_t SYS_CHIP_LOCK = (1 << 2); +constexpr uint8_t SYS_NET_LOCK = (1 << 1); +constexpr uint8_t SYS_PHY_LOCK = (1 << 0); + +constexpr uint8_t PHY_MODE_MANUAL = 0; +constexpr uint8_t PHY_MODE_AUTONEGO = 1; +constexpr uint8_t PHY_MODE_TE = 2; +constexpr uint8_t PHY_CONFBY_HW = 0; +constexpr uint8_t PHY_CONFBY_SW = 1; +constexpr uint8_t PHY_SPEED_10 = 0; +constexpr uint8_t PHY_SPEED_100 = 1; +constexpr uint8_t PHY_DUPLEX_HALF = 0; +constexpr uint8_t PHY_DUPLEX_FULL = 1; +constexpr uint8_t PHY_LINK_OFF = 0; +constexpr uint8_t PHY_LINK_ON = 1; +constexpr uint8_t PHY_POWER_NORM = 0; +constexpr uint8_t PHY_POWER_DOWN = 1; + +constexpr uint8_t PACK_NONE = static_cast(pack_info::none); +constexpr uint8_t PACK_FIRST = static_cast(pack_info::first); +constexpr uint8_t PACK_REMAINED = static_cast(pack_info::remained); +constexpr uint8_t PACK_COMPLETED = static_cast(pack_info::completed); +constexpr uint8_t PACK_IPv6 = static_cast(pack_info::ipv6); + +constexpr uint8_t SOCK_IO_BLOCK = static_cast(sock_io_mode::block); +constexpr uint8_t SOCK_IO_NONBLOCK = static_cast(sock_io_mode::nonblock); + +constexpr uint8_t TCPSOCK_MODE = static_cast(tcp_sock_info::mode); +constexpr uint8_t TCPSOCK_OP = static_cast(tcp_sock_info::op); +constexpr uint8_t TCPSOCK_SIP = static_cast(tcp_sock_info::sip); + constexpr uint8_t W6300_SPI_READ = (0x00 << 5); constexpr uint8_t W6300_SPI_WRITE = (0x01 << 5); @@ -1261,12 +1295,14 @@ uint8_t sock_pack_info[_SOCK_COUNT_] = {0,}; #define CHECK_SOCKDATA() do { if(len == 0) return SOCKERR_DATALEN; } while(0) #define CHECK_IPZERO(addr, addrlen) do { uint16_t ipzero=0; for(uint8_t i=0; i(sid); uint16_t p = static_cast(port); + uint8_t pr = static_cast(proto); + uint8_t fl = static_cast(flag); uint8_t taddr[16]; CHECK_SOCKNUM(); - switch (protocol & 0x0F) { + switch (pr & 0x0F) { case Sn_MR_TCP4: getSIPR(taddr); CHECK_IPZERO(taddr, 4); @@ -1291,29 +1327,29 @@ int8_t open_socket(socket_id sid, uint8_t protocol, port_num port, uint8_t flag) default: return SOCKERR_SOCKMODE; } - if ((flag & 0x04) != 0) return SOCKERR_SOCKFLAG; + if ((fl & 0x04) != 0) return SOCKERR_SOCKFLAG; - if (flag != 0) { - switch (protocol) { + if (fl != 0) { + switch (pr) { case Sn_MR_MACRAW: - if ((flag & (SF_DHA_MANUAL | SF_FORCE_ARP)) != 0) return SOCKERR_SOCKFLAG; + if ((fl & (Sn_MR2_DHAM | Sn_MR2_FARP)) != 0) return SOCKERR_SOCKFLAG; break; case Sn_MR_TCP4: case Sn_MR_TCP6: case Sn_MR_TCPD: - if ((flag & (SF_MULTI_ENABLE | SF_UNI_BLOCK)) != 0) return SOCKERR_SOCKFLAG; + if ((fl & (Sn_MR_MULTI | Sn_MR_UNIB)) != 0) return SOCKERR_SOCKFLAG; break; case Sn_MR_IPRAW4: case Sn_MR_IPRAW6: - if (flag != 0) return SOCKERR_SOCKFLAG; + if (fl != 0) return SOCKERR_SOCKFLAG; break; default: break; } } close(sid); - setSn_MR(sn, (protocol | (flag & 0xF0))); - setSn_MR2(sn, flag & 0x03); + setSn_MR(sn, (pr | (fl & 0xF0))); + setSn_MR2(sn, fl & 0x03); if (!p) { p = sock_any_port++; if (sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; @@ -1322,10 +1358,10 @@ int8_t open_socket(socket_id sid, uint8_t protocol, port_num port, uint8_t flag) setSn_CR(sn, Sn_CR_OPEN); while (getSn_CR(sn)); sock_io_mode &= ~(1 << sn); - sock_io_mode |= ((flag & (SF_IO_NONBLOCK >> 3)) << sn); + sock_io_mode |= ((fl & (static_cast(sock_flag::io_nonblock) >> 3)) << sn); sock_is_sending &= ~(1 << sn); sock_remained_size[sn] = 0; - sock_pack_info[sn] = PACK_COMPLETED; + sock_pack_info[sn] = static_cast(pack_info::completed); while (getSn_SR(sn) == SOCK_CLOSED); return (int8_t)sn; } diff --git a/w6300/w6300.h b/w6300/w6300.h index 4daccf5..913bd02 100644 --- a/w6300/w6300.h +++ b/w6300/w6300.h @@ -39,23 +39,6 @@ enum intr_kind : uint32_t { IK_INT_ALL = 0x00FFFF97 }; -constexpr uint8_t SYS_CHIP_LOCK = (1 << 2); -constexpr uint8_t SYS_NET_LOCK = (1 << 1); -constexpr uint8_t SYS_PHY_LOCK = (1 << 0); - -constexpr uint8_t PHY_MODE_MANUAL = 0; -constexpr uint8_t PHY_MODE_AUTONEGO = 1; -constexpr uint8_t PHY_MODE_TE = 2; -constexpr uint8_t PHY_CONFBY_HW = 0; -constexpr uint8_t PHY_CONFBY_SW = 1; -constexpr uint8_t PHY_SPEED_10 = 0; -constexpr uint8_t PHY_SPEED_100 = 1; -constexpr uint8_t PHY_DUPLEX_HALF = 0; -constexpr uint8_t PHY_DUPLEX_FULL = 1; -constexpr uint8_t PHY_LINK_OFF = 0; -constexpr uint8_t PHY_LINK_ON = 1; -constexpr uint8_t PHY_POWER_NORM = 0; -constexpr uint8_t PHY_POWER_DOWN = 1; struct phy_conf { uint8_t by; @@ -169,9 +152,6 @@ void init(); bool check(); void init_net(net_info info); -using iodata_t = uint8_t; -using datasize_t = int16_t; - constexpr int16_t SOCK_OK = 1; constexpr int16_t SOCK_BUSY = 0; constexpr int16_t SOCK_FATAL = -1000; @@ -191,41 +171,76 @@ constexpr int16_t SOCKERR_DATALEN = SOCK_ERROR - 14; constexpr int16_t SOCKERR_BUFFER = SOCK_ERROR - 15; constexpr int16_t SOCKFATAL_PACKLEN = SOCK_FATAL - 1; -constexpr uint8_t SF_MULTI_ENABLE = 1 << 7; -constexpr uint8_t SF_ETHER_OWN = 1 << 7; -constexpr uint8_t SF_BROAD_BLOCK = 1 << 6; -constexpr uint8_t SF_TCP_FPSH = 1 << 6; -constexpr uint8_t SF_TCP_NODELAY = 1 << 5; -constexpr uint8_t SF_IGMP_VER2 = 1 << 5; -constexpr uint8_t SF_SOLICIT_BLOCK = 1 << 5; -constexpr uint8_t SF_ETHER_MULTI4B = 1 << 5; -constexpr uint8_t SF_UNI_BLOCK = 1 << 4; -constexpr uint8_t SF_ETHER_MULIT6B = 1 << 4; -constexpr uint8_t SF_FORCE_ARP = 1 << 0; -constexpr uint8_t SF_DHA_MANUAL = 1 << 1; -constexpr uint8_t SF_IO_NONBLOCK = 1 << 3; +enum class protocol : uint8_t { + tcp = 0x01, + udp = 0x02, + ipraw = 0x03, + macraw = 0x07, + tcp6 = 0x09, + udp6 = 0x0A, + ipraw6 = 0x0B, + tcp_dual = 0x0D, + udp_dual = 0x0E, +}; -constexpr uint8_t PACK_IPv6 = 1 << 7; -constexpr uint8_t PACK_IPV6_ALLNODE = PACK_IPv6 | (1 << 6); -constexpr uint8_t PACK_IPV6_MULTI = PACK_IPv6 | (1 << 5); -constexpr uint8_t PACK_IPV6_LLA = PACK_IPv6 | (1 << 4); -constexpr uint8_t PACK_COMPLETED = 1 << 3; -constexpr uint8_t PACK_REMAINED = 1 << 2; -constexpr uint8_t PACK_FIRST = 1 << 1; -constexpr uint8_t PACK_NONE = 0x00; +enum class sock_flag : uint8_t { + none = 0, + multi_enable = 1 << 7, + ether_own = 1 << 7, + broad_block = 1 << 6, + tcp_fpsh = 1 << 6, + tcp_nodelay = 1 << 5, + igmp_ver2 = 1 << 5, + solicit_block = 1 << 5, + ether_multi4b = 1 << 5, + uni_block = 1 << 4, + ether_multi6b = 1 << 4, + force_arp = 1 << 0, + dha_manual = 1 << 1, + io_nonblock = 1 << 3, +}; +constexpr sock_flag operator|(sock_flag a, sock_flag b) { + return static_cast(static_cast(a) | static_cast(b)); +} +constexpr uint8_t operator&(sock_flag a, sock_flag b) { + return static_cast(a) & static_cast(b); +} -constexpr uint8_t SRCV6_PREFER_AUTO = 0x00; -constexpr uint8_t SRCV6_PREFER_LLA = 0x02; -constexpr uint8_t SRCV6_PREFER_GUA = 0x03; +enum class pack_info : uint8_t { + none = 0x00, + first = 1 << 1, + remained = 1 << 2, + completed = 1 << 3, + ipv6_lla = (1 << 7) | (1 << 4), + ipv6_multi = (1 << 7) | (1 << 5), + ipv6_allnode = (1 << 7) | (1 << 6), + ipv6 = 1 << 7, +}; +constexpr pack_info operator|(pack_info a, pack_info b) { + return static_cast(static_cast(a) | static_cast(b)); +} +constexpr uint8_t operator&(pack_info a, pack_info b) { + return static_cast(a) & static_cast(b); +} -constexpr uint8_t TCPSOCK_MODE = 1 << 2; -constexpr uint8_t TCPSOCK_OP = 1 << 1; -constexpr uint8_t TCPSOCK_SIP = 1 << 0; +enum class srcv6_prefer : uint8_t { + auto_select = 0x00, + lla = 0x02, + gua = 0x03, +}; -constexpr uint8_t SOCK_IO_BLOCK = 0; -constexpr uint8_t SOCK_IO_NONBLOCK = 1; +enum class tcp_sock_info : uint8_t { + mode = 1 << 2, + op = 1 << 1, + sip = 1 << 0, +}; -int8_t open_socket(socket_id sn, uint8_t protocol, port_num port, uint8_t flag); +enum class sock_io_mode : uint8_t { + block = 0, + nonblock = 1, +}; + +int8_t open_socket(socket_id sn, protocol proto, port_num port, sock_flag flag); int8_t close(socket_id sn); int8_t listen(socket_id sn); int8_t disconnect(socket_id sn);