Przykładowy kod:
plik SuplaConfigESP.cpp
Kod: Zaznacz cały
#include "SuplaConfigESP.h"
SuplaConfigESP::SuplaConfigESP() {
SuplaDevice.setStatusFuncImpl(&status_func);
}
void SuplaConfigESP::status_func(int status, const char *msg) {
switch (status) {
case 2:
supla_status.status_msg = "Już zainicjalizowane";
break;
case 3:
supla_status.status_msg = "Nie przypisane CB";
break;
case 4:
supla_status.status_msg = "Nieprawidłowy identyfikator GUID lub rejestracja urządzeń NIEAKTYWNA";
break;
case 5:
supla_status.status_msg = "Nieznany adres serwera";
break;
case 6:
supla_status.status_msg = "Nieznany identyfikator ID";
break;
case 7:
supla_status.status_msg = "Zainicjowany";
break;
case 8:
supla_status.status_msg = "Przekroczono limit kanału";
break;
case 9:
supla_status.status_msg = "Rozłączony";
break;
case 10:
supla_status.status_msg = "Rejestracja w toku";
break;
case 11:
supla_status.status_msg = "Błąd zmiennej";
break;
case 12:
supla_status.status_msg = "Błąd wersji protokołu";
break;
case 13:
supla_status.status_msg = "Złe poświadczenia";
break;
case 14:
supla_status.status_msg = "Tymczasowo niedostępne";
break;
case 15:
supla_status.status_msg = "Konflikt lokalizacji";
break;
case 16:
supla_status.status_msg = "Konflikt kanałów";
break;
case 17:
supla_status.status_msg = "Zarejestrowany i gotowy";
break;
case 18:
supla_status.status_msg = "Urządzenie jest rozłączone";
break;
case 19:
supla_status.status_msg = "Lokalizacja jest wyłączona";
break;
case 20:
supla_status.status_msg = "Przekroczono limit urządzeń";
}
static int lock;
if (status == 17 && configModeESP == normal) {
supla_led_blinking_stop();
lock = 0;
}
else if (status != 17 && lock == 0 && configModeESP == normal) {
supla_led_blinking(500);
lock = 1;
}
if (supla_status.old_status_msg != supla_status.status_msg) {
supla_status.old_status_msg = supla_status.status_msg;
supla_status.status = status;
}
}
Kod: Zaznacz cały
#ifndef SuplaConfigESP_h
#define SuplaConfigESP_h
typedef struct {
int status;
String status_msg;
String old_status_msg;
} _supla_status;
class SuplaConfigESP {
public:
SuplaConfigESP(void);
private:
void status_func(int status, const char *msg);
_supla_status supla_status;
};
#endif //SuplaConfigESP_h
Kod: Zaznacz cały
ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&SuplaConfigESP::status_func' [-fpermissive]
gdy zrobię tak:
SuplaDevice.setStatusFuncImpl(&SuplaConfigESP::status_func);
to dostaję błąd:
Kod: Zaznacz cały
Arduino:1.8.12 (Windows Store 1.8.33.0) (Windows 10), Płytka:"Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), Basic SSL ciphers (lower ROM use), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Higher Bandwidth, Disabled, None, Only Sketch, 256000"
sketch\SuplaConfigESP.cpp: In constructor 'SuplaConfigESP::SuplaConfigESP()':
SuplaConfigESP.cpp:25:61: error: no matching function for call to 'SuplaDeviceClass::setStatusFuncImpl(void (SuplaConfigESP::*)(int, const char*))'
SuplaDevice.setStatusFuncImpl(&SuplaConfigESP::status_func);
^
sketch\SuplaConfigESP.cpp:25:61: note: candidate is:
In file included from sketch\SuplaConfigManager.h:63:0,
from sketch\SuplaConfigESP.cpp:18:
C:\Users\kryst\Documents\Arduino\libraries\SuplaDevice/SuplaDevice.h:305:8: note: void SuplaDeviceClass::setStatusFuncImpl(_impl_arduino_status)
void setStatusFuncImpl(_impl_arduino_status impl_arduino_status);
^
C:\Users\kryst\Documents\Arduino\libraries\SuplaDevice/SuplaDevice.h:305:8: note: no known conversion for argument 1 from 'void (SuplaConfigESP::*)(int, const char*)' to '_impl_arduino_status {aka void (*)(int, const char*)}'
exit status 1
no matching function for call to 'SuplaDeviceClass::setStatusFuncImpl(void (SuplaConfigESP::*)(int, const char*))'