/********************************************************************************
 * File Name  : net_eth_win.h
 * Description: Windows平台ETH网络层专属头文件(网络函数统一声明)
 * Author     : 芯祥联科技
 * Company    : 芯祥联科技
 * Date       : 2026-01-12
 * Version    : V1.0.0
 * Note       : 1. 存放Windows平台所有UDP/TCP网络函数的统一声明，杜绝函数声明与实现类型不一致问题
 *              2. 解决C2371重定义编译错误，统一函数签名基准
 *              3. 平台层(platform_win32.c)无任何网络相关代码，网络能力完全归属本层
 *              4. 与net_eth_win.c配套使用，所有声明的函数均在该文件中实现
 ********************************************************************************/
#ifndef __NET_ETH_WIN_H__
#define __NET_ETH_WIN_H__
#ifdef WIN32

#include "type.h"
#include "platform.h"
#include "net_interface.h"


#ifdef __cplusplus
extern "C" {
#endif

// ==============================================
// Windows平台 网络层函数 统一声明 (UDP+TCP+通用)
// 所有函数声明唯一入口，杜绝重定义/类型不一致问题
// ==============================================
// UDP 相关声明
PlatformSocket net_udp_socket_create_win32(void);
bool_xxl           net_udp_bind_win32(PlatformSocket sock, uint16_xxl port);
int32_xxl        net_udp_sendto_win32(PlatformSocket sock, const char* ip, uint16_xxl port, const uint8_xxl* data, uint32_xxl len);
int32_xxl        platform_udp_recvfrom_win32(PlatformSocket sock, uint8_xxl* buf, uint32_xxl max_len, char* src_ip, uint16_xxl* src_port, uint32_xxl timeout_ms);

// TCP 相关声明
PlatformSocket net_tcp_socket_create_win32(void);
bool_xxl           net_tcp_connect_win32(PlatformSocket sock, const char* ip, uint16_xxl port);
int32_xxl        net_tcp_send_win32(PlatformSocket sock, const uint8_xxl* data, uint32_xxl len);
int32_xxl        net_tcp_recv_win32(PlatformSocket sock, uint8_xxl* buf, uint32_xxl len, uint32_xxl timeout_ms);

// 通用网络函数声明
void           net_socket_close_win32(PlatformSocket sock);
bool_xxl           platform_check_port_in_use_win32(uint16_xxl port);

// ETH适配层对外接口声明
NetErr         net_eth_win_init(void);
void           eth_set_mqtt_tcp_socket(PlatformSocket tcp_sock);
void           eth_socket_set_init(void);
void           eth_socket_set_add(int32_xxl sock_fd);
void           eth_socket_set_remove(int32_xxl sock_fd);
bool_xxl net_udp_bind(PlatformSocket sock, uint16_xxl port);

#ifdef __cplusplus
}
#endif
#endif
#endif // __NET_ETH_WIN_H__
