main.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Unlicense OR CC0-1.0
  5. */
  6. #include <stdio.h>
  7. #include "esp_log.h"
  8. #include "freertos/FreeRTOS.h"
  9. #include "freertos/task.h"
  10. #include "esp_console.h"
  11. #include "mdns.h"
  12. #include "mdns_console.h"
  13. static const char *TAG = "mdns-test";
  14. static void mdns_test_app(esp_netif_t *interface);
  15. #ifdef CONFIG_TEST_CONSOLE
  16. static EventGroupHandle_t s_exit_signal = NULL;
  17. static int exit_console(int argc, char **argv)
  18. {
  19. xEventGroupSetBits(s_exit_signal, 1);
  20. return 0;
  21. }
  22. #else
  23. static void query_mdns_host(const char *host_name)
  24. {
  25. ESP_LOGI(TAG, "Query A: %s.local", host_name);
  26. struct esp_ip4_addr addr;
  27. addr.addr = 0;
  28. esp_err_t err = mdns_query_a(host_name, 2000, &addr);
  29. if (err) {
  30. if (err == ESP_ERR_NOT_FOUND) {
  31. ESP_LOGW(TAG, "%x: Host was not found!", (err));
  32. return;
  33. }
  34. ESP_LOGE(TAG, "Query Failed: %x", (err));
  35. return;
  36. }
  37. ESP_LOGI(TAG, "Query A: %s.local resolved to: " IPSTR, host_name, IP2STR(&addr));
  38. }
  39. #endif // TEST_CONSOLE
  40. #ifndef CONFIG_IDF_TARGET_LINUX
  41. #include "protocol_examples_common.h"
  42. #include "esp_event.h"
  43. #include "nvs_flash.h"
  44. /**
  45. * @brief This is an entry point for the real target device,
  46. * need to init few components and connect to a network interface
  47. */
  48. void app_main(void)
  49. {
  50. ESP_ERROR_CHECK(nvs_flash_init());
  51. ESP_ERROR_CHECK(esp_netif_init());
  52. ESP_ERROR_CHECK(esp_event_loop_create_default());
  53. ESP_ERROR_CHECK(example_connect());
  54. mdns_test_app(EXAMPLE_INTERFACE);
  55. ESP_ERROR_CHECK(example_disconnect());
  56. }
  57. #else
  58. /**
  59. * @brief This is an entry point for the linux target (simulator on host)
  60. * need to create a dummy WiFi station and use it as mdns network interface
  61. */
  62. int main(int argc, char *argv[])
  63. {
  64. setvbuf(stdout, NULL, _IONBF, 0);
  65. const esp_netif_inherent_config_t base_cg = { .if_key = "WIFI_STA_DEF", .if_desc = CONFIG_TEST_NETIF_NAME };
  66. esp_netif_config_t cfg = { .base = &base_cg };
  67. esp_netif_t *sta = esp_netif_new(&cfg);
  68. mdns_test_app(sta);
  69. esp_netif_destroy(sta);
  70. return 0;
  71. }
  72. #endif
  73. static void mdns_test_app(esp_netif_t *interface)
  74. {
  75. ESP_ERROR_CHECK(mdns_init());
  76. ESP_ERROR_CHECK(mdns_hostname_set(CONFIG_TEST_HOSTNAME));
  77. ESP_LOGI(TAG, "mdns hostname set to: [%s]", CONFIG_TEST_HOSTNAME);
  78. ESP_ERROR_CHECK(mdns_register_netif(interface));
  79. ESP_ERROR_CHECK(mdns_netif_action(interface, MDNS_EVENT_ENABLE_IP4 /*| MDNS_EVENT_ENABLE_IP6 */ | MDNS_EVENT_IP4_REVERSE_LOOKUP | MDNS_EVENT_IP6_REVERSE_LOOKUP));
  80. #ifdef CONFIG_TEST_CONSOLE
  81. esp_console_repl_t *repl = NULL;
  82. esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
  83. esp_console_dev_uart_config_t uart_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
  84. s_exit_signal = xEventGroupCreate();
  85. repl_config.prompt = "mdns>";
  86. // init console REPL environment
  87. ESP_ERROR_CHECK(esp_console_new_repl_uart(&uart_config, &repl_config, &repl));
  88. const esp_console_cmd_t cmd_exit = {
  89. .command = "exit",
  90. .help = "exit mDNS console application",
  91. .hint = NULL,
  92. .func = exit_console,
  93. .argtable = NULL
  94. };
  95. ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_exit) );
  96. mdns_console_register();
  97. ESP_ERROR_CHECK(esp_console_start_repl(repl));
  98. xEventGroupWaitBits(s_exit_signal, 1, pdTRUE, pdFALSE, portMAX_DELAY);
  99. repl->del(repl);
  100. #else
  101. vTaskDelay(pdMS_TO_TICKS(10000));
  102. query_mdns_host("david-work");
  103. vTaskDelay(pdMS_TO_TICKS(1000));
  104. #endif
  105. mdns_free();
  106. ESP_LOGI(TAG, "Exit");
  107. }