#ifndef MEYCAN_H #define MEYCAN_H #include #include #include "driver/twai.h" typedef struct PinState { int pin_id; bool pin_state; bool is_input; byte meyPinId; PinState *next = NULL; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; this->pin_state = true; this->is_input = true; this->meyPinId = meyPinId; } void AddPinState(PinState *nextPinState) { if (next == NULL) { this->next = nextPinState; nextPinState->next = NULL; } else { next->AddPinState(nextPinState); } } PinState* Find(byte meyPinId) { if (this->meyPinId == meyPinId) return this; if (this->next != NULL) return this->next->Find(meyPinId); return NULL; } void ForEach(void (*handle)(PinState *theState)) { handle(this); if (this->next != NULL) this->next->ForEach(handle); } }; const byte SOFTWARE_VERSION_HIGH = 6; const byte SOFTWARE_VERSION_LOW = 0; const byte HARDWARE_VERSION_HIGH = 8; const byte HARDWARE_VERSION_LOW = 1; const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL; const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050; const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055; void SetupMeyCan(byte majorHardwareVersion, byte minorHardwareVersion, byte deviceTypeId); uint32_t CreateCanId(uint16_t commandId); void SetDevicedId(byte high, byte low); void SetMeyPin(byte meyPinId, byte pinId); uint16_t GetDeviceId(uint32_t canFrameId); uint16_t GetPackageType(uint32_t canFrameId); void SendSwitchedTriggeredCanPackage(byte pinId, int state); void HandleFrame(twai_message_t *frame); void CheckPinStatus(PinState *state); void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */ void DoSendCanPkg(twai_message_t *frame) ; #endif