Jump to content

    

Метценгерштейн

Свой
  • Content Count

    1502
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Метценгерштейн

  • Rank
    Профессионал
  • Birthday 05/07/1978

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

5237 profile views
  1. отвечаю себе же. poligon- repour Помогла перезаливка
  2. как-то я отправил на печать нечто подобное, получил проводник. Лучше избавиться от этих тянучек. Как-то было у меня такое- не помню просто как вылечил.
  3. Подскажите, при заливке полигона, есть красные границы, проходящие через проводники другие. Как избавиться?
  4. Очень смешно. Все веселимся от души) Я знаю что такое синглтон. Всем спасибо за консультации, просто линкус и С++- не мое, я там не писатель. Вынужденно этим занимаюсь. На ++ не писал никогда.
  5. Была ф-ей, работало, наверное. Метод класса- не хочет. Вывод- нельзя так делать. Получается, вот ответ. Функцию можно так передавать, а метод класса (ту же ф-ю, но в составе класса) уже нет. Я действительно, не знал этого. Хорошо, а если этот метод сделать статическим- так можно тогда?
  6. Проект устроен так (удаленное устройство), что из отладки у меня только логи возможны. Вот мой метод WiFiEvent Смысла это много не дает. Не компилится он всё равно. void WiFiClient::WiFiEvent(WiFiEvent_t event) { Serial.printf("[WiFi-event] event: %d\n", event); switch (event) { case SYSTEM_EVENT_WIFI_READY: Serial.println("WiFi interface ready"); break; case SYSTEM_EVENT_SCAN_DONE: Serial.println("Completed scan for access points"); break; case SYSTEM_EVENT_STA_START: Serial.println("WiFi client started"); break; case SYSTEM_EVENT_STA_STOP: Serial.println("WiFi clients stopped"); break; case SYSTEM_EVENT_STA_CONNECTED: Serial.println("Connected to access point"); break; case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("Disconnected from WiFi access point"); break; case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: Serial.println("Authentication mode of access point has changed"); break; case SYSTEM_EVENT_STA_GOT_IP: Serial.print("Obtained IP address: "); Serial.println(WiFi.localIP()); break; case SYSTEM_EVENT_STA_LOST_IP: Serial.println("Lost IP address and IP address is reset to 0"); break; case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: Serial.println("WiFi Protected Setup (WPS): succeeded in enrollee mode"); break; case SYSTEM_EVENT_STA_WPS_ER_FAILED: Serial.println("WiFi Protected Setup (WPS): failed in enrollee mode"); break; case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT: Serial.println("WiFi Protected Setup (WPS): timeout in enrollee mode"); break; case SYSTEM_EVENT_STA_WPS_ER_PIN: Serial.println("WiFi Protected Setup (WPS): pin code in enrollee mode"); break; case SYSTEM_EVENT_AP_START: Serial.println("WiFi access point started"); break; case SYSTEM_EVENT_AP_STOP: Serial.println("WiFi access point stopped"); break; case SYSTEM_EVENT_AP_STACONNECTED: Serial.println("Client connected"); break; case SYSTEM_EVENT_AP_STADISCONNECTED: Serial.println("Client disconnected"); break; case SYSTEM_EVENT_AP_STAIPASSIGNED: Serial.println("Assigned IP address to client"); break; case SYSTEM_EVENT_AP_PROBEREQRECVED: Serial.println("Received probe request"); break; case SYSTEM_EVENT_GOT_IP6: Serial.println("IPv6 is preferred"); break; case SYSTEM_EVENT_ETH_START: Serial.println("Ethernet started"); break; case SYSTEM_EVENT_ETH_STOP: Serial.println("Ethernet stopped"); break; case SYSTEM_EVENT_ETH_CONNECTED: Serial.println("Ethernet connected"); break; case SYSTEM_EVENT_ETH_DISCONNECTED: Serial.println("Ethernet disconnected"); break; case SYSTEM_EVENT_ETH_GOT_IP: Serial.println("Obtained IP address"); break; default: break; } } WiFi.h #ifndef WiFi_h #define WiFi_h #include <stdint.h> #include "Print.h" #include "IPAddress.h" #include "IPv6Address.h" #include "WiFiType.h" #include "WiFiSTA.h" #include "WiFiAP.h" #include "WiFiScan.h" #include "WiFiGeneric.h" #include "WiFiClient.h" #include "WiFiServer.h" #include "WiFiUdp.h" class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass { public: using WiFiGenericClass::channel; using WiFiSTAClass::SSID; using WiFiSTAClass::RSSI; using WiFiSTAClass::BSSID; using WiFiSTAClass::BSSIDstr; using WiFiScanClass::SSID; using WiFiScanClass::encryptionType; using WiFiScanClass::RSSI; using WiFiScanClass::BSSID; using WiFiScanClass::BSSIDstr; using WiFiScanClass::channel; public: void printDiag(Print& dest); friend class WiFiClient; friend class WiFiServer; friend class WiFiUDP; }; extern WiFiClass WiFi; #endif WiFi.cpp #include "WiFi.h" extern "C" { #include <stdint.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <inttypes.h> #include <string.h> #include <esp_err.h> #include <esp_wifi.h> #include <esp_event_loop.h> } // ----------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------- Debug ------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------------- /** * Output WiFi settings to an object derived from Print interface (like Serial). * @param p Print interface */ void WiFiClass::printDiag(Print& p) { const char* modes[] = { "NULL", "STA", "AP", "STA+AP" }; wifi_mode_t mode; esp_wifi_get_mode(&mode); uint8_t primaryChan; wifi_second_chan_t secondChan; esp_wifi_get_channel(&primaryChan, &secondChan); p.print("Mode: "); p.println(modes[mode]); p.print("Channel: "); p.println(primaryChan); /* p.print("AP id: "); p.println(wifi_station_get_current_ap_id()); p.print("Status: "); p.println(wifi_station_get_connect_status()); */ wifi_config_t conf; esp_wifi_get_config(WIFI_IF_STA, &conf); const char* ssid = reinterpret_cast<const char*>(conf.sta.ssid); p.print("SSID ("); p.print(strlen(ssid)); p.print("): "); p.println(ssid); const char* passphrase = reinterpret_cast<const char*>(conf.sta.password); p.print("Passphrase ("); p.print(strlen(passphrase)); p.print("): "); p.println(passphrase); p.print("BSSID set: "); p.println(conf.sta.bssid_set); } WiFiClass WiFi; Я его привел для примера из общего примера. Понятно, что не использую его в чистом виде. Но сам метод и его передача в ф-ю не проходят. WiFiClass wifi; Вернее, я не наследовался от него. Этот класс, это имел ввиду, сам наследник кучи всего: class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass Невозможно весь проект в одном посте описать. Говорите, какие куски кода привести, и чего забыл указать? Я дополню. Вот тут я не понимаю что происходит из этого у меня.
  7. Я прекрасно знаю, что статический метод может вызываться без объявления объекта. Сразу его можно вызвать. Я более того, знаю, что для всех объектов этого класса со статическим методом, он всегда будет один, и поменяв значение в одном объекте, оно изменится во всех. Но, давайте честно, разве речь в теме про это? Я разве имею проблемы со статическим методом и непониманием его? НЕТ. Нету здесь статического метода. да, я и привел официальный пример. Полагаю, что он работает. Но не в моем случае. И , как мне кажется, на ровном месте ошибка.
  8. Пожалуйста, из этой книги, приведите мне абзац, где есть ответ на мой вопрос- почему ошибка. Иначе- это просто с понтом дела пост был. Что по факту и есть. Проект сложный. Сложный не в коде, а в подходе к написанию. Линукс, отладки нет никакой, еще и с компиляцией проблемы. Потому и вопросы такие. И во всех своих темах я даю много информации по мере поступления вопросов. Всё сразу сказать невозможно. Согласен. Путаницу внес. Имеем вот что- пример от производителя: WiFi.onEvent(WiFiEvent); WiFi.begin(ssid, password); где WiFi - это .... в файле WiFi.h описан класс WiFiClass и в .cpp сразу сделан его объект WiFiClass WiFi; в файле WiFi.h extern WiFiClass WiFi; поэтому в примере данном, обращение WiFi.onEvent(WiFiEvent); к объекту класса вполне валидное. Но так у меня тоже не работает. Если я делаю такое же обращение - передаю адрес ф-ии как параметр. У меня же определен свой объект этого класса. WiFiClass wifi; (всё маленькими wifi) И работает wifi и подключение и прочее. Вызываются методы класса Например, wifi.begin(i_ssid, i_password); Всё компилится, все работает. С объектом класса нет проблем. Начал развивать проект, и не могу передать wifi.onEvent(WiFiEvent); ошибка
  9. Уже не первая тема от меня с текущим проектом, но надо продолжать. Модуль ESP32, надо сделать обработку эвентов при коннектах и подключениях. Вот что дает в качестве примера производитель нам. /* * This sketch shows the WiFi event usage * */ /* * WiFi Events SYSTEM_EVENT_WIFI_READY < ESP32 WiFi ready SYSTEM_EVENT_SCAN_DONE < ESP32 finish scanning AP SYSTEM_EVENT_STA_START < ESP32 station start SYSTEM_EVENT_STA_STOP < ESP32 station stop SYSTEM_EVENT_STA_CONNECTED < ESP32 station connected to AP SYSTEM_EVENT_STA_DISCONNECTED < ESP32 station disconnected from AP SYSTEM_EVENT_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed SYSTEM_EVENT_STA_GOT_IP < ESP32 station got IP from connected AP SYSTEM_EVENT_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0 SYSTEM_EVENT_STA_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode SYSTEM_EVENT_STA_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode SYSTEM_EVENT_STA_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode SYSTEM_EVENT_STA_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode SYSTEM_EVENT_AP_START < ESP32 soft-AP start SYSTEM_EVENT_AP_STOP < ESP32 soft-AP stop SYSTEM_EVENT_AP_STACONNECTED < a station connected to ESP32 soft-AP SYSTEM_EVENT_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP SYSTEM_EVENT_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface SYSTEM_EVENT_GOT_IP6 < ESP32 station or ap or ethernet interface v6IP addr is preferred SYSTEM_EVENT_ETH_START < ESP32 ethernet start SYSTEM_EVENT_ETH_STOP < ESP32 ethernet stop SYSTEM_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up SYSTEM_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down SYSTEM_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP SYSTEM_EVENT_MAX */ #include <WiFi.h> const char* ssid = "your-ssid"; const char* password = "your-password"; void WiFiEvent(WiFiEvent_t event) { Serial.printf("[WiFi-event] event: %d\n", event); switch (event) { case SYSTEM_EVENT_STA_GOT_IP: Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); break; case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("WiFi lost connection"); break; } } void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info) { Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(IPAddress(info.got_ip.ip_info.ip.addr)); } void setup() { Serial.begin(115200); // delete old config WiFi.disconnect(true); delay(1000); // Examples of diffrent ways to register wifi events WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiGotIP, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info){ Serial.print("WiFi lost connection. Reason: "); Serial.println(info.disconnected.reason); }, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED); // Remove WiFi event Serial.print("WiFi Event ID: "); Serial.println(eventID); // WiFi.removeEvent(eventID); WiFi.begin(ssid, password); Serial.println(); Serial.println(); Serial.println("Wait for WiFi... "); } void loop() { delay(1000); } Есть ф-я void WiFiEvent(WiFiEvent_t event) и передаем ее при инициализации: WiFi.onEvent(WiFiEvent); WiFi- это класс, что в хидере. Я в своем проекте делаю почти тоже самое, только класс wifi- отнаследован от WiFi. wifi.onEvent(WiFiEvent); и компилятор выдает ошибку: ...t.cpp:48:27: error: invalid use of non-static member function wifi.onEvent(WiFiEvent);
  10. Да прочитано много книжек. Не первый же год я в программировании) Тут жопа полная, а не проект
  11. template<typename P> P GetPointer(voffset_t field) { auto field_offset = GetOptionalFieldOffset(field); auto p = data_ + field_offset; return field_offset ? reinterpret_cast<P>(p + ReadScalar<uoffset_t>(p)) : nullptr; } может и да, 4- это что вернуло как значение из таблицы. Но я ведь могу поменять значение. Проверю. смущает что код const char * tst_vers3 = device_firmware->md5_checksum()->c_str(); без проблем отрабатывает и возвращает и корректный адрес указателя и значение- саму строку. вот полностью кусок файла- чтобы была картина более полная struct DeviceFirmware FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_VERSION = 4, VT_TYPE = 6, VT_RELEASE_TIMESTAMP = 8, VT_FIRMWARE = 10, VT_MD5_CHECKSUM = 12, VT_CHUNK_NUMBER = 14, VT_LAST_CHUNK = 16, VT_LAST_TRANSFER = 18 }; const flatbuffers::String *version() const { return GetPointer<const flatbuffers::String *>(VT_VERSION); } flatbuffers::String *mutable_version() { return GetPointer<flatbuffers::String *>(VT_VERSION); } DataSchema::FirmwareType type() const { return static_cast<DataSchema::FirmwareType>(GetField<int8_t>(VT_TYPE, 0)); } bool mutate_type(DataSchema::FirmwareType _type) { return SetField<int8_t>(VT_TYPE, static_cast<int8_t>(_type), 0); } uint32_t release_timestamp() const { return GetField<uint32_t>(VT_RELEASE_TIMESTAMP, 0); } bool mutate_release_timestamp(uint32_t _release_timestamp) { return SetField<uint32_t>(VT_RELEASE_TIMESTAMP, _release_timestamp, 0); } const flatbuffers::Vector<int8_t> *firmware() const { return GetPointer<const flatbuffers::Vector<int8_t> *>(VT_FIRMWARE); } flatbuffers::Vector<int8_t> *mutable_firmware() { return GetPointer<flatbuffers::Vector<int8_t> *>(VT_FIRMWARE); } const flatbuffers::String *md5_checksum() const { return GetPointer<const flatbuffers::String *>(VT_MD5_CHECKSUM); } Я про md5_checksum- там тот же GetPointer этот все равно возврат tst_vers2 = 0x4 хотя 5 было указано. Так что просто совпадение
  12. немного полнее - это структура struct DeviceFirmware FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_VERSION = 4, VT_TYPE = 6, VT_RELEASE_TIMESTAMP = 8, VT_FIRMWARE = 10, VT_MD5_CHECKSUM = 12, VT_CHUNK_NUMBER = 14, VT_LAST_CHUNK = 16, VT_LAST_TRANSFER = 18 }; const flatbuffers::String *version() const { return GetPointer<const flatbuffers::String *>(VT_VERSION); } значит, можно как-то вызвать device_firmware->version() так? так упал проект. Т.е. вернуло что-то опять не то.
  13. static char ms1[1000]; const char *p_ms1 = &ms1[0]; p_ms1 = device_firmware->version()->c_str(); ESP_LOGI(TAG, "az p_ms1 = %p", p_ms1); const добавил- ругалось вывод: az p_ms1 = 0x4 Т.е. ничего не поменялось. По мне- и не должно было. Т.к. оно таким уже приходит к нам сюда.
  14. Тяжелый синтаксис тут. путь следования до device_firmware->version()->c_str() Вот файл с вызовом const flatbuffers::String *version() const { return GetPointer<const flatbuffers::String *>(VT_VERSION); } идем в другой файл struct String : public Vector<char> { const char *c_str() const { return reinterpret_cast<const char *>(Data()); } std::string str() const { return std::string(c_str(), size()); } // clang-format off #ifdef FLATBUFFERS_HAS_STRING_VIEW flatbuffers::string_view string_view() const { return flatbuffers::string_view(c_str(), size()); } #endif // FLATBUFFERS_HAS_STRING_VIEW // clang-format on bool operator<(const String &o) const { return StringLessThan(this->data(), this->size(), o.data(), o.size()); } }; мне это проделать? Не понял