Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <lilka.h>
- #include "ipapp.h"
- #include "servicemanager.h"
- #include "services/network.h"
- extern "C" {
- #include "lwip/etharp.h"
- #include "lwip/netif.h"
- #include "lwip/ip_addr.h"
- }
- IPApp::IPApp() : App("IP Address") {}
- void IPApp::run() {
- struct netif* netif = netif_list; // Зазвичай перший — ваш WiFi STA
- while (true) {
- String ipAddress = WiFi.localIP().toString();
- String macStr = WiFi.macAddress();
- String info = "IP: " + ipAddress + "\nMAC: " + macStr;
- // Надсилаємо ARP-запит до цільового IP
- ip4_addr_t target_ip;
- ip4addr_aton("192.168.0.105", &target_ip); // IP пристрою, якому надсилаєте ARP
- etharp_request(netif, &target_ip); // Відправка ARP-запиту
- // Чекаємо ~500 мс для отримання відповіді
- vTaskDelay(500 / portTICK_PERIOD_MS);
- // Перевіряємо ARP-кеш
- struct eth_addr *eth_ret;
- struct netif *netif_ret;
- const ip4_addr_t *ip_ret;
- String targetMacStr = "not found";
- if (etharp_find_addr(netif, (ip4_addr_t*)&target_ip, ð_ret, &ip_ret) >= 0) {
- char macbuf[18];
- snprintf(macbuf, sizeof(macbuf), "%02X:%02X:%02X:%02X:%02X:%02X",
- eth_ret->addr[0], eth_ret->addr[1], eth_ret->addr[2],
- eth_ret->addr[3], eth_ret->addr[4], eth_ret->addr[5]);
- targetMacStr = String(macbuf);
- } else {
- targetMacStr = "not found (no ARP reply)";
- }
- info += "\n\n192.168.0.105 - MAC: " + targetMacStr;
- // Використовуємо готовий UI-компонент
- lilka::Alert alert("Мережа", info);
- alert.draw(canvas);
- queueDraw();
- // Очікуємо, поки користувач не натисне кнопку для виходу
- while (!alert.isFinished()) {
- alert.update();
- vTaskDelay(LILKA_UI_UPDATE_DELAY_MS / portTICK_PERIOD_MS);
- lilka::State state = lilka::controller.getState();
- if (state.b.pressed) {
- return;
- }
- }
- // Після закриття alert — вихід з циклу (або можна зробити повторну перевірку)
- return;
- }
- }
- #ifndef IPAPP_H
- #define IPAPP_H
- #include <lilka.h>
- #include "app.h"
- #include "services/network.h"
- class IPApp : public App {
- public:
- IPApp();
- private:
- void run() override;
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement