123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /******************************************************************************
- * Copyright 2013-2014 Espressif Systems (Wuxi)
- *
- * FileName: user_devicefind.c
- *
- * Description: Find your hardware's information while working any mode.
- *
- * Modification history:
- * 2014/3/12, v1.0 create this file.
- *******************************************************************************/
- #include "ets_sys.h"
- #include "os_type.h"
- #include "osapi.h"
- #include "mem.h"
- #include "user_interface.h"
- #include "espconn.h"
- #include "user_json.h"
- #include "user_devicefind.h"
- const char *device_find_request = "Are You Espressif IOT Smart Device?";
- #if PLUG_DEVICE
- const char *device_find_response_ok = "I'm Plug.";
- #elif LIGHT_DEVICE
- const char *device_find_response_ok = "I'm Light.";
- #elif SENSOR_DEVICE
- #if HUMITURE_SUB_DEVICE
- const char *device_find_response_ok = "I'm Humiture.";
- #elif FLAMMABLE_GAS_SUB_DEVICE
- const char *device_find_response_ok = "I'm Flammable Gas.";
- #endif
- #endif
- /*---------------------------------------------------------------------------*/
- LOCAL struct espconn ptrespconn;
- /******************************************************************************
- * FunctionName : user_devicefind_recv
- * Description : Processing the received data from the host
- * Parameters : arg -- Additional argument to pass to the callback function
- * pusrdata -- The received data (or NULL when the connection has been closed!)
- * length -- The length of received data
- * Returns : none
- *******************************************************************************/
- LOCAL void ICACHE_FLASH_ATTR
- user_devicefind_recv(void *arg, char *pusrdata, unsigned short length)
- {
- char DeviceBuffer[40] = {0};
- char Device_mac_buffer[60] = {0};
- char hwaddr[6];
- remot_info *premot = NULL;
- struct ip_info ipconfig;
- if (wifi_get_opmode() != STATION_MODE) {
- wifi_get_ip_info(SOFTAP_IF, &ipconfig);
- wifi_get_macaddr(SOFTAP_IF, hwaddr);
- if (!ip_addr_netcmp((struct ip_addr *)ptrespconn.proto.udp->remote_ip, &ipconfig.ip, &ipconfig.netmask)) {
- wifi_get_ip_info(STATION_IF, &ipconfig);
- wifi_get_macaddr(STATION_IF, hwaddr);
- }
- } else {
- wifi_get_ip_info(STATION_IF, &ipconfig);
- wifi_get_macaddr(STATION_IF, hwaddr);
- }
- if (pusrdata == NULL) {
- return;
- }
- if (length == os_strlen(device_find_request) &&
- os_strncmp(pusrdata, device_find_request, os_strlen(device_find_request)) == 0) {
- os_sprintf(DeviceBuffer, "%s" MACSTR " " IPSTR, device_find_response_ok,
- MAC2STR(hwaddr), IP2STR(&ipconfig.ip));
- os_printf("%s\n", DeviceBuffer);
- length = os_strlen(DeviceBuffer);
- if (espconn_get_connection_info(&ptrespconn, &premot, 0) != ESPCONN_OK)
- return;
- os_memcpy(ptrespconn.proto.udp->remote_ip, premot->remote_ip, 4);
- ptrespconn.proto.udp->remote_port = premot->remote_port;
- espconn_sent(&ptrespconn, DeviceBuffer, length);
- } else if (length == (os_strlen(device_find_request) + 18)) {
- os_sprintf(Device_mac_buffer, "%s " MACSTR , device_find_request, MAC2STR(hwaddr));
- os_printf("%s", Device_mac_buffer);
- if (os_strncmp(Device_mac_buffer, pusrdata, os_strlen(device_find_request) + 18) == 0) {
- //os_printf("%s\n", Device_mac_buffer);
- length = os_strlen(DeviceBuffer);
- os_sprintf(DeviceBuffer, "%s" MACSTR " " IPSTR, device_find_response_ok,
- MAC2STR(hwaddr), IP2STR(&ipconfig.ip));
- os_printf("%s\n", DeviceBuffer);
- length = os_strlen(DeviceBuffer);
- if (espconn_get_connection_info(&ptrespconn, &premot, 0) != ESPCONN_OK)
- return;
- os_memcpy(ptrespconn.proto.udp->remote_ip, premot->remote_ip, 4);
- ptrespconn.proto.udp->remote_port = premot->remote_port;
- espconn_sent(&ptrespconn, DeviceBuffer, length);
- } else {
- return;
- }
- }
- }
- /******************************************************************************
- * FunctionName : user_devicefind_init
- * Description : the espconn struct parame init
- * Parameters : none
- * Returns : none
- *******************************************************************************/
- void ICACHE_FLASH_ATTR
- user_devicefind_init(void)
- {
- ptrespconn.type = ESPCONN_UDP;
- ptrespconn.proto.udp = (esp_udp *)os_zalloc(sizeof(esp_udp));
- ptrespconn.proto.udp->local_port = 1025;
- espconn_regist_recvcb(&ptrespconn, user_devicefind_recv);
- espconn_create(&ptrespconn);
- }
|