| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #include <stdio.h>
- #include <iostream>
- #include <iomanip>
- #include <cstdint>
- #include <cstdio>
- #include <functional>
- #include <map>
- #include "cStruct.h"
- #include "vector"
- // https://stackoverflow.com/questions/34863373/how-to-use-stdbind-with-lambda
- /*
- * https://shaharmike.com/cpp/lambdas-and-functions/
- * https://shaharmike.com/cpp/naive-std-function/
- * https://stackoverflow.com/questions/11372855/stdbind-to-stdfunction
- * https://oopscenities.net/2012/02/24/c11-stdfunction-and-stdbind/
- * http://www.gockelhut.com/cpp-pirate/lambda-vs-bind.html
- * https://thispointer.com/c11-lambda-how-to-capture-local-variables-inside-lambda/
- * http://www.randomprogramming.com/2014/06/stdbind-and-lambda-functions-2/
- * https://blog.mbedded.ninja/programming/languages/c-plus-plus/callbacks/
- *
- * https://stackoverflow.com/questions/17363003/why-use-stdbind-over-lambdas-in-c14
- * auto f = std::bind(&Foo::func, this, input); f();
- * https://stackoverflow.com/questions/9186510/how-can-i-store-a-lambda-expression-as-a-field-of-a-class-in-c11
- * https://stackoverflow.com/questions/35398298/c14-generic-lambdas-in-header-file
- *
- */
- #define TFTC_DISABLE_LIGHT 0xC618
- #define TFTC_DISABLE_MED 0x7BCF
- #define TFTC_DISABLE_DARK 0x3186
- /*
- Checkbox class
- */
- typedef struct cCheckBox_t
- {
- uint8_t CHECKBOX_SIZE = 20;
- uint8_t TFT_DEBOUNCE = 100; // debounce delay to minimize screen repress
- uint16_t C_DISABLE_LIGHT = TFTC_DISABLE_LIGHT;
- uint16_t C_DISABLE_MED = TFTC_DISABLE_MED;
- uint16_t C_DISABLE_DARK = TFTC_DISABLE_DARK;
- } cCheckBox_param;
- enum RETVAL
- {
- CONT = false,
- BREAK = true
- };
- enum EV_TYPE
- {
- EV_CHECKBUTTON_COORDINATES = 0,
- EV_ENTRY,
- EV_LONGPRESSED,
- EV_EXIT
- };
- struct myData {
- int myAge = 55;
- const char* pchar = "myData struct";
- enum en_sex { MALE, FEMALE, DIVERS } sex = MALE;
- };
- struct myOtherData : myData {
- int myOtherAge = 35;
- };
- struct Foo {
- typedef std::function<RETVAL()> _cb_;
- int register_cb(EV_TYPE type, _cb_ func)
- {
- std::map<EV_TYPE, _cb_ >::iterator it = callmap.begin();
- if (callmap.find(type) != callmap.end()) {
- std::cout << "Overwrite - Index found " << type << std::endl;
- }
- callmap[type] = func;
- return 1;
- }
- RETVAL call_cb(EV_TYPE type) {
- std::map<EV_TYPE, _cb_ >::iterator it = callmap.begin();
- if (callmap.find(type) == callmap.end()) {
- std::cout << "Index not found: " << type << std::endl;
- return BREAK;
- }
- std::cout << "Callmap type: " << type << std::endl;
- return callmap[type]();
- }
- private:
- std::map<EV_TYPE, _cb_ > callmap;
- };
- RETVAL hello(const std::string& name) {
- std::cout << "Hello " << name << "!" << std::endl;
- return CONT;
- }
- RETVAL test(myData* p, myOtherData* q) {
- std::cout << "Test " << "!" << std::endl;
- return CONT;
- }
- int main() {
- Foo f;
- myData mydata;
- myOtherData myotherdata;
- int i = 0, j = 1;
- auto arr2d = new struct sLampInterfaceLong[8][8];
- std::map<std::string, std::map<std::string, struct sLampInterfaceLong>> m_Presets;
- std::vector<std::vector<struct sLampInterfaceLong> > varr(8, std::vector<struct sLampInterfaceLong>(8));
- std::cout << " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " << std::endl;
- /*
- for (auto& element : varr) {
- std::cout << "Element: " << element.at(1).btnName << std::endl;
- }
- auto elementsa = varr.at(1).at(1);
- std::cout << "Element: " << elementsa << std::endl;
- */
- strcpy_s(m_Presets["P1"]["L1"].btnName, "A");
- strcpy_s(m_Presets["P1"]["L1"].MAC_Address, "12:34:24:36:48:60");
- m_Presets["P1"]["L1"].rcolor = 0xFC;
- m_Presets["P1"]["L1"].gcolor = 0xFD;
- m_Presets["P1"]["L1"].bcolor = 0xFF;
- m_Presets["P1"]["L1"].cwhite = 0x01;
- m_Presets["P1"]["L1"].wwhite = 0x02;
- m_Presets["P1"]["L1"].bright = 0x03;
- m_Presets["P1"]["L1"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L1"] << std::endl;
- strcpy_s(m_Presets["P1"]["L2"].btnName, "B");
- strcpy_s(m_Presets["P1"]["L2"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L2"].rcolor = 0xFC;
- m_Presets["P1"]["L2"].gcolor = 0xFD;
- m_Presets["P1"]["L2"].bcolor = 0xFF;
- m_Presets["P1"]["L2"].cwhite = 0x01;
- m_Presets["P1"]["L2"].wwhite = 0x02;
- m_Presets["P1"]["L2"].bright = 0x03;
- m_Presets["P1"]["L2"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L2"] << std::endl;
- strcpy_s(m_Presets["P1"]["L3"].btnName, "C");
- strcpy_s(m_Presets["P1"]["L3"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L3"].rcolor = 0xFC;
- m_Presets["P1"]["L3"].gcolor = 0xFD;
- m_Presets["P1"]["L3"].bcolor = 0xFF;
- m_Presets["P1"]["L3"].cwhite = 0x01;
- m_Presets["P1"]["L3"].wwhite = 0x02;
- m_Presets["P1"]["L3"].bright = 0x03;
- m_Presets["P1"]["L3"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L3"] << std::endl;
- strcpy_s(m_Presets["P1"]["L4"].btnName, "D");
- strcpy_s(m_Presets["P1"]["L4"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L4"].rcolor = 0xFC;
- m_Presets["P1"]["L4"].gcolor = 0xFD;
- m_Presets["P1"]["L4"].bcolor = 0xFF;
- m_Presets["P1"]["L4"].cwhite = 0x01;
- m_Presets["P1"]["L4"].wwhite = 0x02;
- m_Presets["P1"]["L4"].bright = 0x03;
- m_Presets["P1"]["L4"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L4"] << std::endl;
- strcpy_s(m_Presets["P1"]["L5"].btnName, "Garten");
- strcpy_s(m_Presets["P1"]["L5"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L5"].rcolor = 0xFC;
- m_Presets["P1"]["L5"].gcolor = 0xFD;
- m_Presets["P1"]["L5"].bcolor = 0xFF;
- m_Presets["P1"]["L5"].cwhite = 0x01;
- m_Presets["P1"]["L5"].wwhite = 0x02;
- m_Presets["P1"]["L5"].bright = 0x03;
- m_Presets["P1"]["L5"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L5"] << std::endl;
- strcpy_s(m_Presets["P1"]["L6"].btnName, "Essen");
- strcpy_s(m_Presets["P1"]["L6"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L6"].rcolor = 0xFC;
- m_Presets["P1"]["L6"].gcolor = 0xFD;
- m_Presets["P1"]["L6"].bcolor = 0xFF;
- m_Presets["P1"]["L6"].cwhite = 0x01;
- m_Presets["P1"]["L6"].wwhite = 0x02;
- m_Presets["P1"]["L6"].bright = 0x03;
- m_Presets["P1"]["L6"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L6"] << std::endl;
- strcpy_s(m_Presets["P1"]["L7"].btnName, "Bad");
- strcpy_s(m_Presets["P1"]["L7"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L7"].rcolor = 0xFC;
- m_Presets["P1"]["L7"].gcolor = 0xFD;
- m_Presets["P1"]["L7"].bcolor = 0xFF;
- m_Presets["P1"]["L7"].cwhite = 0x01;
- m_Presets["P1"]["L7"].wwhite = 0x02;
- m_Presets["P1"]["L7"].bright = 0x03;
- m_Presets["P1"]["L7"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L7"] << std::endl;
- strcpy_s(m_Presets["P1"]["L8"].btnName, "Kueche");
- strcpy_s(m_Presets["P1"]["L8"].MAC_Address, "00:12:24:36:48:60");
- m_Presets["P1"]["L8"].rcolor = 0xFC;
- m_Presets["P1"]["L8"].gcolor = 0xFD;
- m_Presets["P1"]["L8"].bcolor = 0xFF;
- m_Presets["P1"]["L8"].cwhite = 0x01;
- m_Presets["P1"]["L8"].wwhite = 0x02;
- m_Presets["P1"]["L8"].bright = 0x03;
- m_Presets["P1"]["L8"].OffOn = ON;
- std::cout << "[INFO] cLampsInterface P1: " << m_Presets["P1"]["L8"] << std::endl;
- for (int i = 0; i < 8; i++) {
- std::cout << varr[0][i] << std::endl ;
- }
- std::function<RETVAL(int, int)> foo = [](int a, int b) {
- std::cout << "LAMBDA foo " << "!" << std::endl;
- return CONT; };
- f.register_cb(EV_ENTRY, std::bind(foo, 2, 2));
- if (BREAK == f.call_cb(EV_ENTRY)) return 0;
- std::function<RETVAL(myData*, myOtherData*)> foo_c = [](myData* a, myOtherData* b) {
- std::cout << "LAMBDA foo_c " << "!" << std::endl;
- return CONT; };
- f.register_cb(EV_ENTRY, std::bind(foo_c, &mydata, &myotherdata));
- if (BREAK == f.call_cb(EV_ENTRY)) return 0;
- f.register_cb(EV_ENTRY, std::bind(hello, "John"));
- if (BREAK == f.call_cb(EV_ENTRY)) return 0;
- f.register_cb(EV_ENTRY, std::bind(test, &mydata, &myotherdata));
- if ( BREAK == f.call_cb(EV_ENTRY)) return 0;
- if ( BREAK == f.call_cb(EV_ENTRY)) return 0;
- return 1;
- }
|