From c8ffe71fcaaca817cfe631b58630578ed9d3fc95 Mon Sep 17 00:00:00 2001 From: Meydin87 Date: Sun, 30 Jul 2023 17:07:49 +0200 Subject: [PATCH] Final SW Version 8 --- Software/Switch/MeyCan.cpp | 17 ++++++++---- Software/Switch/MeyCan.h | 4 +-- Software/Switch/Switch.ino | 56 ++++++++++++++++++++++++++------------ 3 files changed, 52 insertions(+), 25 deletions(-) diff --git a/Software/Switch/MeyCan.cpp b/Software/Switch/MeyCan.cpp index 273aacf..a80cbe6 100644 --- a/Software/Switch/MeyCan.cpp +++ b/Software/Switch/MeyCan.cpp @@ -6,6 +6,9 @@ PinState *MeyPin = NULL; CanInterface *CanBusses = NULL; uint16_t myDeviceId; +byte _deviceTypeId = 0; +byte _majorHardwareVersion = 0; +byte _minorHardwareVersion = 0; void SetupMeyPin(PinState *state) { @@ -27,8 +30,11 @@ void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)) CanBusses->ForEachInterface(handle); } -void SetupMeyCan() +void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId) { + _majorHardwareVersion = majorHardwareVersion; + _minorHardwareVersion = minorHardwareVersion; + _deviceTypeId = deviceTypeId; CalculateMyDeviceId(); if (MeyPin != NULL); @@ -192,14 +198,13 @@ void SendVersionPackage(MCP2515 *interface) { can_frame toSend; toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); - toSend.can_dlc = 6; + toSend.can_dlc = 5; toSend.data[0] = SOFTWARE_VERSION_HIGH; toSend.data[1] = SOFTWARE_VERSION_LOW; - toSend.data[2] = HARDWARE_VERSION_HIGH; - toSend.data[3] = HARDWARE_VERSION_LOW; - toSend.data[4] = (myDeviceId >> 8) & 0xFF; - toSend.data[5] = myDeviceId & 0xFF; + toSend.data[2] = _majorHardwareVersion; + toSend.data[3] = _minorHardwareVersion; + toSend.data[4] = _deviceTypeId; DoSendCanPkg(interface, &toSend); } diff --git a/Software/Switch/MeyCan.h b/Software/Switch/MeyCan.h index 1eaa696..660af10 100644 --- a/Software/Switch/MeyCan.h +++ b/Software/Switch/MeyCan.h @@ -24,7 +24,7 @@ typedef struct CanInterface handle(this->interface, frame); if (this->next != NULL) - this->next->ForEach(handle, frame); + this->next->ForEach(handle, frame, exclude); } void AddCanInterface(CanInterface *newCanInterface) @@ -99,7 +99,7 @@ const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055; void AddCanInterface(byte pinId); void SetMeyPin(byte index, byte meyPinId, byte pinId); -void SetupMeyCan(); +void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId); void ForEachCanInterface(void (*handle)(MCP2515 *canInterace)); bool ReadPin(PinState *state); diff --git a/Software/Switch/Switch.ino b/Software/Switch/Switch.ino index 5055283..4db9770 100644 --- a/Software/Switch/Switch.ino +++ b/Software/Switch/Switch.ino @@ -3,27 +3,48 @@ #include "MeyCan.h"; #include "MeyRule.h"; +const int16_t SW_FLUR = 0XD238; +const int16_t SW_ANBAU = 0x87A9; +const int16_t SW_WOHNZIMMER = 0x87CA; + +const int16_t UP_WOHNZIMMER_TUER = 0x051F; +const int16_t UP_WOHNZIMMER_TERASSE = 0x05df; +const int16_t UP_FLUR_EINGANG = 0x0769; +const int16_t UP_BUERO = 0x1177; +const int16_t UP_FLUR_BUERO = 0x05A1; +const int16_t UP_FLUR_KUECHE = 0x01EF; +const int16_t UP_KINDERZIMMER = 0x0196; +const int16_t UP_FLUR_ELTERN = 0x0632; +const int16_t UP_KUECHE_FLUR = 0x07F5; +const int16_t UP_KUECHE_BAD = 0x0585; + struct can_frame incomingCanFrame; void setup() { SPI.begin(); + + AddToggleInverse(UP_WOHNZIMMER_TUER, 5, SW_WOHNZIMMER, 4); // Lichtschalter Wohnzimmer Licht 1 + AddToggleInverse(UP_WOHNZIMMER_TUER, 5, SW_WOHNZIMMER, 3); // Lichtschalter Wohnzimmer Licht 2 + AddToggle(UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 4); // Licht 1 von Terassenschalter + AddToggle(UP_WOHNZIMMER_TERASSE, 1, SW_WOHNZIMMER, 3); // Licht 2 von Terassenschalter + AddToggle(UP_FLUR_EINGANG, 1, SW_WOHNZIMMER, 6); // Eingangstür Flur Licht 2 + AddToggle(UP_FLUR_EINGANG, 1, SW_FLUR, 1); //Eingangstür Flur Licht 1 + AddSimple(UP_WOHNZIMMER_TUER, 3, SW_WOHNZIMMER, 1); // Licht 1 Wochzimmer Eingangstür + AddSimple(UP_WOHNZIMMER_TUER, 4, SW_WOHNZIMMER, 2); // Licht 2 Wochzimmer Eingangstür + AddToggle(UP_BUERO, 1, SW_WOHNZIMMER, 7); // Licht Papa Büro + AddToggle(UP_FLUR_BUERO, 1, SW_WOHNZIMMER, 6); // Flurlicht von Papas Büro + AddToggle(UP_FLUR_BUERO, 1, SW_FLUR, 1); // Flurlicht von Papas Büro + AddToggle(UP_FLUR_KUECHE, 1, SW_WOHNZIMMER, 6); // Flurlicht von Papas Büro + AddToggle(UP_FLUR_KUECHE, 1, SW_FLUR, 1); // Flurlicht von Papas Büro + AddToggle(UP_KINDERZIMMER, 3, SW_WOHNZIMMER, 6); // Flurlicht von Papas Büro + AddToggle(UP_KINDERZIMMER, 3, SW_FLUR, 1); // Flurlicht von Papas Büro + AddToggle(UP_FLUR_ELTERN, 1, SW_FLUR, 5); // Flurlicht von Papas Büro - AddToggleInverse(0x051F, 5, 0x3D2D, 4); // Lichtschalter Wohnzimmer Licht 1 - AddToggleInverse(0x051F, 5, 0x3D2D, 3); // Lichtschalter Wohnzimmer Licht 2 - AddToggle(0x05df, 1, 0x3D2D, 4); // Licht 1 von Terassenschalter - AddToggle(0x05df, 1, 0x3D2D, 3); // Licht 2 von Terassenschalter - AddToggle(0x0769, 1, 0x3D2D, 6); // Eingangstür Flur Licht 2 - AddToggle(0x0769, 1, 0x9829, 1); //Eingangstür Flur Licht 1 - AddSimple(0x051F, 3, 0x3D2D, 1); // Licht 1 Wochzimmer Eingangstür - AddSimple(0x051F, 4, 0x3D2D, 2); // Licht 2 Wochzimmer Eingangstür - AddToggle(0x1177, 1, 0x3D2D, 7); // Licht Papa Büro - AddToggle(0x05A1, 1, 0x3D2D, 6); // Flurlicht von Papas Büro - AddToggle(0x05A1, 1, 0x9829, 1); // Flurlicht von Papas Büro - AddToggle(0x01EF, 1, 0x3D2D, 6); // Flurlicht von Papas Büro - AddToggle(0x01EF, 1, 0x9829, 1); // Flurlicht von Papas Büro - AddToggle(0x0196, 3, 0x3D2D, 6); // Flurlicht von Papas Büro - AddToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro - AddToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro + AddToggle(UP_KUECHE_FLUR, 1, SW_ANBAU, 2); + AddToggle(UP_KUECHE_FLUR, 2, SW_ANBAU, 3); + AddToggle(UP_KUECHE_BAD, 1, SW_ANBAU, 2); + AddSimple(UP_KUECHE_BAD, 3, SW_ANBAU, 1); + _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); @@ -44,7 +65,7 @@ void setup() { AddCanInterface(PIN_PB1); - SetupMeyCan(); + SetupMeyCan(7, 0, 1); } @@ -58,5 +79,6 @@ void CheckCanInterface(MCP2515 *interface) if (interface->readMessage(&incomingCanFrame) == MCP2515::ERROR_OK) { HandleFrame(&incomingCanFrame, interface); + HandleRules(&incomingCanFrame); } }