Replace raw uint8_t constants with enum class types, move internal constants to cpp

This commit is contained in:
Ian Gulliver
2026-04-05 08:18:28 +09:00
parent 8a48c58a0b
commit 0b81ca6139
2 changed files with 113 additions and 62 deletions

View File

@@ -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<uint8_t>(pack_info::none);
constexpr uint8_t PACK_FIRST = static_cast<uint8_t>(pack_info::first);
constexpr uint8_t PACK_REMAINED = static_cast<uint8_t>(pack_info::remained);
constexpr uint8_t PACK_COMPLETED = static_cast<uint8_t>(pack_info::completed);
constexpr uint8_t PACK_IPv6 = static_cast<uint8_t>(pack_info::ipv6);
constexpr uint8_t SOCK_IO_BLOCK = static_cast<uint8_t>(sock_io_mode::block);
constexpr uint8_t SOCK_IO_NONBLOCK = static_cast<uint8_t>(sock_io_mode::nonblock);
constexpr uint8_t TCPSOCK_MODE = static_cast<uint8_t>(tcp_sock_info::mode);
constexpr uint8_t TCPSOCK_OP = static_cast<uint8_t>(tcp_sock_info::op);
constexpr uint8_t TCPSOCK_SIP = static_cast<uint8_t>(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<addrlen; i++) ipzero += (uint16_t)addr[i]; if(ipzero == 0) return SOCKERR_IPINVALID; } while(0)
int8_t open_socket(socket_id sid, uint8_t protocol, port_num port, uint8_t flag) {
int8_t open_socket(socket_id sid, protocol proto, port_num port, sock_flag flag) {
uint8_t sn = static_cast<uint8_t>(sid);
uint16_t p = static_cast<uint16_t>(port);
uint8_t pr = static_cast<uint8_t>(proto);
uint8_t fl = static_cast<uint8_t>(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<uint8_t>(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<uint8_t>(pack_info::completed);
while (getSn_SR(sn) == SOCK_CLOSED);
return (int8_t)sn;
}