#include #include #include #include #include #include #include #include #include wiz_NetInfo netInfo = { .mac = { 0xa0, 0x57, 0x62, 0x01, 0x02, 0x03 }, .dhcp = NETINFO_DHCP }; #define DHCP_BUFFER_SIZE 1024 static uint8_t dhcpBuffer[DHCP_BUFFER_SIZE]; const uint8_t DHCP_SOCK = 6; void wiz_cs_select(void) { HAL_GPIO_WritePin(ETHER_CS_GPIO_Port, ETHER_CS_Pin, GPIO_PIN_RESET); } void wiz_cs_deselect(void) { HAL_GPIO_WritePin(ETHER_CS_GPIO_Port, ETHER_CS_Pin, GPIO_PIN_SET); } uint8_t wiz_spi_readbyte(void) { uint8_t rbuf; HAL_SPI_Receive(ðerSpi, &rbuf, 1, HAL_MAX_DELAY); return rbuf; } void wiz_spi_writebyte(uint8_t wb) { HAL_SPI_Transmit(ðerSpi, &wb, 1, HAL_MAX_DELAY); } void wiz_spi_readburst(uint8_t* pBuf, uint16_t len) { } void wiz_spi_writeburst(uint8_t* pBuf, uint16_t len) { } static void wizReset(bool b) { HAL_GPIO_WritePin(ETHER_RES_GPIO_Port, ETHER_RES_Pin, b ? GPIO_PIN_RESET : GPIO_PIN_SET); } static void wizDHCPHandler(void *handle) { static uint8_t lastStablePhyLink = 255; uint8_t phyLink = 0; int8_t res = ctlwizchip(CW_GET_PHYLINK, (void*) &phyLink); if (lastStablePhyLink != phyLink) { coloredMsg(LOG_RED, "wizdh, ctlwizchip returns %d, phy link changed to %d", res, phyLink); lastStablePhyLink = phyLink; } if (phyLink == PHY_LINK_ON) { static uint8_t lastRes = 255; uint8_t res = DHCP_run(); if (lastRes != res) { coloredMsg(LOG_RED, "wizdh, dhcp state has changed: %d", res); lastRes = res; } } } static void wizDHCPAssign() { coloredMsg(LOG_RED, "wizda"); } static void wizDHCPUpdate() { coloredMsg(LOG_RED, "wizdu"); } int wizInit() { coloredMsg(LOG_RED, "wizI, resetting Ethernet module"); wizReset(true); activeDelay(2); wizReset(false); activeDelay(2); coloredMsg(LOG_RED, "wizI, registering callbacks"); reg_wizchip_cs_cbfunc(wiz_cs_select, wiz_cs_deselect); coloredMsg(LOG_GREEN, "wizI, cs funcs registed"); reg_wizchip_spi_cbfunc(wiz_spi_readbyte, wiz_spi_writebyte); coloredMsg(LOG_GREEN, "wizI, spi funcs registed"); // reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len)); coloredMsg(LOG_RED, "wizI, initializing Ethernet module"); int8_t res = wizchip_init(NULL, NULL); coloredMsg(LOG_RED, "wizI, module driver returned %d", res); wizchip_setnetinfo(&netInfo); coloredMsg(LOG_RED, "wizI, netinfo set to Ethernet module"); memset(dhcpBuffer, 0, DHCP_BUFFER_SIZE); reg_dhcp_cbfunc(wizDHCPAssign, wizDHCPUpdate, NULL); DHCP_init(DHCP_SOCK, dhcpBuffer); coloredMsg(LOG_RED, "wizI, DHCP initialized"); schAdd(wizDHCPHandler, NULL, 0, 1000); coloredMsg(LOG_RED, "wizI, DHCP handler scheduled"); return 0; }