Zmian jest niewiele:
- wsparcie dla Wyzwalaczy akcji na linuxie (więcej na ten temat tutaj: viewtopic.php?t=12584 )
- usprawnione dodawanie innych interfejsów GPIO (np. przez ekspandery)
Większość klas pracujących na GPIO dostała możliwość podania wskaźnika na "interfejs", który steruje GPIO.
Do tej pory aby dodać np. ekspander portów, trzeba było dodać własną instancje klasy dziedziącą po Supla::Io. Trzeba było nadpisać metody zaczynające się do "custom" i jakoś to działało. Rozróżnienie między GPIO np. ESP8266 a ekspandera było robione poprzez dodanie jakiegoś offsetu do numeru GPIO. Np. zakładaliśmy, że GPIO od 0 do 49 to "ESP", od 50 do 99, to ekspander 1, itd.
Miało to swoje ograniczenia - np. ilość dostępnych w ten sposób GPIO była ograniczona do 255. Do tego dodawanie kilku ekspanderów było trudniejsze, bo wszystko trzeba było upchać w jedną klasę (a co jeśli ktoś chce użyć trzech ekspanderów, każdy innego typu?)
W nowym podejściu możemy utworzyć osobną klasę interfejsu GPIO dla każdego ekspandera. Numeracja GPIO dla każdego z nich leci normalnie od 0 w górę. Każdy ekspander działa niezależnie, co pozwala na mniej sztucznych ograniczeń w kodzie.
Ogólna koncepcja wylgąda tak:
Code: Select all
...
#include <supla/io.h>
...
class ExpanderTheFirst : public Supla::Io {
ExpanderTheFirst(...) : Supla::Io(false) { // to jest bardzo ważne, aby przekazać "false" do konstruktora klasy bazowej
...
}
// następnie nadpisujemy metody "custom..."
...
};
// w setup
auto exp1 = new ExpanderTheFirst(...);
auto relay1 = new Supla::Control::Relay(exp1, GPIO_4, ...);
auto relay2 = new Supla::Control::Relay(GPIO_4, ...);