Files
picomap/w6300/socket.h

119 lines
4.5 KiB
C
Raw Normal View History

#pragma once
#include "wizchip_conf.h"
using SOCKET = uint8_t;
constexpr int16_t SOCK_OK = 1;
constexpr int16_t SOCK_BUSY = 0;
constexpr int16_t SOCK_FATAL = -1000;
constexpr int16_t SOCK_ERROR = 0;
constexpr int16_t SOCKERR_SOCKNUM = SOCK_ERROR - 1;
constexpr int16_t SOCKERR_SOCKOPT = SOCK_ERROR - 2;
constexpr int16_t SOCKERR_SOCKINIT = SOCK_ERROR - 3;
constexpr int16_t SOCKERR_SOCKCLOSED = SOCK_ERROR - 4;
constexpr int16_t SOCKERR_SOCKMODE = SOCK_ERROR - 5;
constexpr int16_t SOCKERR_SOCKFLAG = SOCK_ERROR - 6;
constexpr int16_t SOCKERR_SOCKSTATUS = SOCK_ERROR - 7;
constexpr int16_t SOCKERR_ARG = SOCK_ERROR - 10;
constexpr int16_t SOCKERR_PORTZERO = SOCK_ERROR - 11;
constexpr int16_t SOCKERR_IPINVALID = SOCK_ERROR - 12;
constexpr int16_t SOCKERR_TIMEOUT = SOCK_ERROR - 13;
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 = Sn_MR_MULTI;
constexpr uint8_t SF_ETHER_OWN = Sn_MR_MF;
constexpr uint8_t SF_BROAD_BLOCK = Sn_MR_BRDB;
constexpr uint8_t SF_TCP_FPSH = Sn_MR_FPSH;
constexpr uint8_t SF_TCP_NODELAY = Sn_MR_ND;
constexpr uint8_t SF_IGMP_VER2 = Sn_MR_MC;
constexpr uint8_t SF_SOLICIT_BLOCK = Sn_MR_SMB;
constexpr uint8_t SF_ETHER_MULTI4B = Sn_MR_MMB4;
constexpr uint8_t SF_UNI_BLOCK = Sn_MR_UNIB;
constexpr uint8_t SF_ETHER_MULIT6B = Sn_MR_MMB6;
constexpr uint8_t SF_FORCE_ARP = Sn_MR2_FARP;
constexpr uint8_t SF_DHA_MANUAL = Sn_MR2_DHAM;
constexpr uint8_t SF_IO_NONBLOCK = 0x01 << 3;
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;
constexpr uint8_t SRCV6_PREFER_AUTO = PSR_AUTO;
constexpr uint8_t SRCV6_PREFER_LLA = PSR_LLA;
constexpr uint8_t SRCV6_PREFER_GUA = PSR_GUA;
constexpr uint8_t TCPSOCK_MODE = Sn_ESR_TCPM;
constexpr uint8_t TCPSOCK_OP = Sn_ESR_TCPOP;
constexpr uint8_t TCPSOCK_SIP = Sn_ESR_IP6T;
constexpr uint8_t SOCK_IO_BLOCK = 0;
constexpr uint8_t SOCK_IO_NONBLOCK = 1;
int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag);
int8_t close(uint8_t sn);
int8_t listen(uint8_t sn);
int8_t disconnect(uint8_t sn);
int32_t send(uint8_t sn, uint8_t * buf, uint16_t len);
int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len);
typedef enum {
SIK_CONNECTED = (1 << 0),
SIK_DISCONNECTED = (1 << 1),
SIK_RECEIVED = (1 << 2),
SIK_TIMEOUT = (1 << 3),
SIK_SENT = (1 << 4),
SIK_ALL = 0x1F
} sockint_kind;
typedef enum {
CS_SET_IOMODE,
CS_GET_IOMODE,
CS_GET_MAXTXBUF,
CS_GET_MAXRXBUF,
CS_CLR_INTERRUPT,
CS_GET_INTERRUPT,
CS_SET_PREFER,
CS_GET_PREFER,
CS_SET_INTMASK,
CS_GET_INTMASK
} ctlsock_type;
typedef enum {
SO_FLAG,
SO_TTL,
SO_TOS,
SO_MSS,
SO_DESTIP,
SO_DESTPORT,
SO_KEEPALIVESEND,
SO_KEEPALIVEAUTO,
SO_SENDBUF,
SO_RECVBUF,
SO_STATUS,
SO_EXTSTATUS,
SO_MODE,
SO_REMAINSIZE,
SO_PACKINFO
} sockopt_type;
int8_t ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg);
int8_t setsockopt(uint8_t sn, sockopt_type sotype, void* arg);
int8_t getsockopt(uint8_t sn, sockopt_type sotype, void* arg);
int16_t peeksockmsg(uint8_t sn, uint8_t* submsg, uint16_t subsize);
int8_t connect_W6x00(uint8_t sn, uint8_t * addr, uint16_t port, uint8_t addrlen);
int32_t sendto_W6x00(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port, uint8_t addrlen);
int32_t recvfrom_W6x00(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port, uint8_t *addrlen);
inline int8_t connect(uint8_t sn, uint8_t* addr, uint16_t port, uint8_t addrlen) { return connect_W6x00(sn, addr, port, addrlen); }
inline int32_t sendto(uint8_t sn, uint8_t* buf, uint16_t len, uint8_t* addr, uint16_t port, uint8_t addrlen) { return sendto_W6x00(sn, buf, len, addr, port, addrlen); }
inline int32_t recvfrom(uint8_t sn, uint8_t* buf, uint16_t len, uint8_t* addr, uint16_t* port, uint8_t* addrlen) { return recvfrom_W6x00(sn, buf, len, addr, port, addrlen); }