/* Public Functions */ int MqttClientNet_Init(MqttNet* net) { #ifdef USE_WINDOWS_API WSADATA wsd; WSAStartup(0x0002, &wsd); #endif #ifdef MICROCHIP_MPLAB_HARMONY static IPV4_ADDR dwLastIP[2] = { {-1}, {-1} }; IPV4_ADDR ipAddr; int Dummy; int nNets; int i; SYS_STATUS stat; TCPIP_NET_HANDLE netH; stat = TCPIP_STACK_Status(sysObj.tcpip); if (stat < 0) { return MQTT_CODE_CONTINUE; } nNets = TCPIP_STACK_NumberOfNetworksGet(); for (i = 0; i < nNets; i++) { netH = TCPIP_STACK_IndexToNet(i); ipAddr.Val = TCPIP_STACK_NetAddress(netH); if (ipAddr.v[0] == 0) { return MQTT_CODE_CONTINUE; } if (dwLastIP[i].Val != ipAddr.Val) { dwLastIP[i].Val = ipAddr.Val; PRINTF("%s", TCPIP_STACK_NetNameGet(netH)); PRINTF(" IP Address: "); PRINTF("%d.%d.%d.%d\n", ipAddr.v[0], ipAddr.v[1], ipAddr.v[2], ipAddr.v[3]); } } #endif /* MICROCHIP_MPLAB_HARMONY */ if (net) { XMEMSET(net, 0, sizeof(MqttNet)); net->connect = NetConnect; net->read = NetRead; net->write = NetWrite; net->disconnect = NetDisconnect; net->context = (SocketContext *)WOLFMQTT_MALLOC(sizeof(SocketContext)); if (net->context == NULL) { return MQTT_CODE_ERROR_MEMORY; } XMEMSET(net->context, 0, sizeof(SocketContext)); ((SocketContext*)(net->context))->stat = SOCK_BEGIN; } return MQTT_CODE_SUCCESS; }
void APP_Tasks ( void ) { SYS_STATUS tcpipStat; const char *netName, *netBiosName; static IPV4_ADDR dwLastIP[2] = { {-1}, {-1} }; IPV4_ADDR ipAddr; TCPIP_NET_HANDLE netH; int i, nNets; PubnubStaticDemoProcess(); /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { tcpipStat = TCPIP_STACK_Status(sysObj.tcpip); if(tcpipStat < 0) { // some error occurred SYS_CONSOLE_MESSAGE(" APP: TCP/IP stack initialization failed!\r\n"); appData.state = APP_TCPIP_ERROR; } else if(tcpipStat == SYS_STATUS_READY) { // now that the stack is ready we can check the // available interfaces nNets = TCPIP_STACK_NumberOfNetworksGet(); for(i = 0; i < nNets; i++) { netH = TCPIP_STACK_IndexToNet(i); netName = TCPIP_STACK_NetNameGet(netH); netBiosName = TCPIP_STACK_NetBIOSName(netH); #if defined(TCPIP_STACK_USE_NBNS) SYS_CONSOLE_PRINT(" Interface %s on host %s - NBNS enabled\r\n", netName, netBiosName); #else SYS_CONSOLE_PRINT(" Interface %s on host %s - NBNS disabled\r\n", netName, netBiosName); #endif // defined(TCPIP_STACK_USE_NBNS) } appData.state = APP_TCPIP_WAIT_FOR_IP; } break; } case APP_TCPIP_WAIT_FOR_IP: // if the IP address of an interface has changed // display the new value on the system console nNets = TCPIP_STACK_NumberOfNetworksGet(); for (i = 0; i < nNets; i++) { netH = TCPIP_STACK_IndexToNet(i); ipAddr.Val = TCPIP_STACK_NetAddress(netH); if(dwLastIP[i].Val != ipAddr.Val) { dwLastIP[i].Val = ipAddr.Val; SYS_CONSOLE_MESSAGE(TCPIP_STACK_NetNameGet(netH)); SYS_CONSOLE_MESSAGE(" IP Address: "); SYS_CONSOLE_PRINT("%d.%d.%d.%d \r\n", ipAddr.v[0], ipAddr.v[1], ipAddr.v[2], ipAddr.v[3]); if (ipAddr.v[0] != 0 && ipAddr.v[0] != 169) // Wait for a Valid IP { appData.state = APP_TCPIP_WAITING_FOR_INIT; } } } break; case APP_TCPIP_WAITING_FOR_INIT: { PubnubStaticDemoInit(); appData.state = APP_TCPIP_PUBNUB; } break; default: { break; } } }
void APP_Tasks ( void ) { SYS_STATUS tcpipStat; const char *netName, *netBiosName; static IPV4_ADDR dwLastIP[2] = { {-1}, {-1} }; IPV4_ADDR ipAddr; TCPIP_NET_HANDLE netH; int i, nNets; /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { tcpipStat = TCPIP_STACK_Status(sysObj.tcpip); if(tcpipStat < 0) { // some error occurred SYS_CONSOLE_MESSAGE(" APP: TCP/IP stack initialization failed!\r\n"); appData.state = APP_DONE; } else if(tcpipStat == SYS_STATUS_READY) { // now that the stack is ready we can check the // available interfaces nNets = TCPIP_STACK_NumberOfNetworksGet(); for(i = 0; i < nNets; i++) { netH = TCPIP_STACK_IndexToNet(i); netName = TCPIP_STACK_NetNameGet(netH); netBiosName = TCPIP_STACK_NetBIOSName(netH); #if defined(TCPIP_STACK_USE_NBNS) SYS_CONSOLE_PRINT(" Interface %s on host %s - NBNS enabled\r\n", netName, netBiosName); #else SYS_CONSOLE_PRINT(" Interface %s on host %s - NBNS disabled\r\n", netName, netBiosName); #endif // defined(TCPIP_STACK_USE_NBNS) } appData.state = APP_TCPIP_WAIT_FOR_IP; } break; } case APP_TCPIP_WAIT_FOR_IP: // if the IP address of an interface has changed // display the new value on the system console nNets = TCPIP_STACK_NumberOfNetworksGet(); for (i = 0; i < nNets; i++) { netH = TCPIP_STACK_IndexToNet(i); ipAddr.Val = TCPIP_STACK_NetAddress(netH); if(dwLastIP[i].Val != ipAddr.Val) { dwLastIP[i].Val = ipAddr.Val; SYS_CONSOLE_MESSAGE(TCPIP_STACK_NetNameGet(netH)); SYS_CONSOLE_MESSAGE(" IP Address: "); SYS_CONSOLE_PRINT("%d.%d.%d.%d \r\n", ipAddr.v[0], ipAddr.v[1], ipAddr.v[2], ipAddr.v[3]); if (ipAddr.v[0] != 0 && ipAddr.v[0] != 169) // Wait for a Valid IP { appData.state = APP_START_LISTENING; } } } break; case APP_START_LISTENING: { SYS_CONSOLE_PRINT("Starting listening on port 8000\r\n"); struct mg_connection *nc = mg_bind(&mgr, "8000", ev_handler); // Create listening connection and add it to the event manager if (nc == NULL) { SYS_CONSOLE_PRINT("Failed to create listener\n\r"); appData.state = APP_DONE; break; } mg_set_protocol_http_websocket(nc); SYS_CONSOLE_PRINT("Listener started\r\n"); appData.state = APP_POLL; break; } case APP_POLL: { mg_mgr_poll(&mgr, 1000); break; } case APP_DONE: { SYS_CONSOLE_PRINT("Server stopped\n\r"); appData.state = APP_EMPTY; break; } case APP_EMPTY: { break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } }