knxdisplay/displayprodLinux/SmartHomeDisplay.h
2026-02-09 10:42:25 +01:00

215 lines
11 KiB
C

#pragma once
#define paramDelay(time) (uint32_t)( \
(time & 0xC000) == 0xC000 ? (time & 0x3FFF) * 100 : \
(time & 0xC000) == 0x0000 ? (time & 0x3FFF) * 1000 : \
(time & 0xC000) == 0x4000 ? (time & 0x3FFF) * 60000 : \
(time & 0xC000) == 0x8000 ? ((time & 0x3FFF) > 1000 ? 3600000 : \
(time & 0x3FFF) * 3600000 ) : 0 )
#define MAIN_FirmwareName "SmartHomeDisplay"
#define MAIN_OpenKnxId 0xAB
#define MAIN_ApplicationNumber 206
#define MAIN_ApplicationVersion 4
#define MAIN_ApplicationEncoding iso-8859-15
#define MAIN_ParameterSize 2
#define MAIN_MaxKoNumber 1020
#define MAIN_OrderNumber "IA4313"
// Parameter with single occurrence
#define SC_Section_Count 0 // uint8_t
// Anzahl Bereiche
#define ParamSC_Section_Count (knx.paramByte(SC_Section_Count))
#define SC_ChannelCount 1
// Parameter per channel
#define SC_ParamBlockOffset 1
#define SC_ParamBlockSize 1
#define SC_ParamCalcIndex(index) (index + SC_ParamBlockOffset + _channelIndex * SC_ParamBlockSize)
#define SC_fAFunctionType 0 // 1 Bit, Bit 7
#define SC_fAFunctionTypeMask 0x80
#define SC_fAFunctionTypeShift 7
#define SC_fAOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fBFunctionType 0 // 1 Bit, Bit 7
#define SC_fBFunctionTypeMask 0x80
#define SC_fBFunctionTypeShift 7
#define SC_fBOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fCFunctionType 0 // 1 Bit, Bit 7
#define SC_fCFunctionTypeMask 0x80
#define SC_fCFunctionTypeShift 7
#define SC_fCOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fDFunctionType 0 // 1 Bit, Bit 7
#define SC_fDFunctionTypeMask 0x80
#define SC_fDFunctionTypeShift 7
#define SC_fDOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fEFunctionType 0 // 1 Bit, Bit 7
#define SC_fEFunctionTypeMask 0x80
#define SC_fEFunctionTypeShift 7
#define SC_fEOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fFFunctionType 0 // 1 Bit, Bit 7
#define SC_fFFunctionTypeMask 0x80
#define SC_fFFunctionTypeShift 7
#define SC_fFOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fGFunctionType 0 // 1 Bit, Bit 7
#define SC_fGFunctionTypeMask 0x80
#define SC_fGFunctionTypeShift 7
#define SC_fGOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fHFunctionType 0 // 1 Bit, Bit 7
#define SC_fHFunctionTypeMask 0x80
#define SC_fHFunctionTypeShift 7
#define SC_fHOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fIFunctionType 0 // 1 Bit, Bit 7
#define SC_fIFunctionTypeMask 0x80
#define SC_fIFunctionTypeShift 7
#define SC_fIOOnKODpt 1 // 8 Bits, Bit 7-0
#define SC_fJFunctionType 0 // 1 Bit, Bit 7
#define SC_fJFunctionTypeMask 0x80
#define SC_fJFunctionTypeShift 7
#define SC_fJOOnKODpt 1 // 8 Bits, Bit 7-0
// Funktionstyp
#define ParamSC_fAFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fAFunctionType)) & SC_fAFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fAOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fAOOnKODpt)))
// Funktionstyp
#define ParamSC_fBFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fBFunctionType)) & SC_fBFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fBOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fBOOnKODpt)))
// Funktionstyp
#define ParamSC_fCFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fCFunctionType)) & SC_fCFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fCOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fCOOnKODpt)))
// Funktionstyp
#define ParamSC_fDFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fDFunctionType)) & SC_fDFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fDOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fDOOnKODpt)))
// Funktionstyp
#define ParamSC_fEFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fEFunctionType)) & SC_fEFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fEOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fEOOnKODpt)))
// Funktionstyp
#define ParamSC_fFFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fFFunctionType)) & SC_fFFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fFOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fFOOnKODpt)))
// Funktionstyp
#define ParamSC_fGFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fGFunctionType)) & SC_fGFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fGOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fGOOnKODpt)))
// Funktionstyp
#define ParamSC_fHFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fHFunctionType)) & SC_fHFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fHOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fHOOnKODpt)))
// Funktionstyp
#define ParamSC_fIFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fIFunctionType)) & SC_fIFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fIOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fIOOnKODpt)))
// Funktionstyp
#define ParamSC_fJFunctionType ((bool)(knx.paramByte(SC_ParamCalcIndex(SC_fJFunctionType)) & SC_fJFunctionTypeMask))
// DPT des Kommunikationsobjekts
#define ParamSC_fJOOnKODpt (knx.paramByte(SC_ParamCalcIndex(SC_fJOOnKODpt)))
// deprecated
#define SC_KoOffset 20
// Communication objects per channel (multiple occurrence)
#define SC_KoBlockOffset 20
#define SC_KoBlockSize 20
#define SC_KoCalcNumber(index) (index + SC_KoBlockOffset + _channelIndex * SC_KoBlockSize)
#define SC_KoCalcIndex(number) ((number >= SC_KoCalcNumber(0) && number < SC_KoCalcNumber(SC_KoBlockSize)) ? (number - SC_KoBlockOffset) % SC_KoBlockSize : -1)
#define SC_KoCalcChannel(number) ((number >= SC_KoBlockOffset && number < SC_KoBlockOffset + SC_ChannelCount * SC_KoBlockSize) ? (number - SC_KoBlockOffset) / SC_KoBlockSize : -1)
#define SC_KoKOf-%TT%%CC%100__ %CC%001
#define SC_KoKOf-%TT%%CC%101__ %CC%002
#define SC_KoKOf-%TT%%CC%200__ %CC%003
#define SC_KoKOf-%TT%%CC%201__ %CC%004
#define SC_KoKOf-%TT%%CC%300__ %CC%005
#define SC_KoKOf-%TT%%CC%301__ %CC%006
#define SC_KoKOf-%TT%%CC%400__ %CC%007
#define SC_KoKOf-%TT%%CC%401__ %CC%008
#define SC_KoKOf-%TT%%CC%500__ %CC%009
#define SC_KoKOf-%TT%%CC%501__ %CC%010
#define SC_KoKOf-%TT%%CC%600__ %CC%011
#define SC_KoKOf-%TT%%CC%601__ %CC%012
#define SC_KoKOf-%TT%%CC%700__ %CC%013
#define SC_KoKOf-%TT%%CC%701__ %CC%014
#define SC_KoKOf-%TT%%CC%800__ %CC%015
#define SC_KoKOf-%TT%%CC%801__ %CC%016
#define SC_KoKOf-%TT%%CC%900__ %CC%017
#define SC_KoKOf-%TT%%CC%901__ %CC%018
#define SC_KoKOf-%TT%%CC%1000__ %CC%019
#define SC_KoKOf-%TT%%CC%1001__ %CC%020
// Eingang %CC%001
#define KoSC_KOf-%TT%%CC%100__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%100__)))
// Ausgang %CC%002
#define KoSC_KOf-%TT%%CC%101__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%101__)))
// Eingang %CC%003
#define KoSC_KOf-%TT%%CC%200__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%200__)))
// Ausgang %CC%004
#define KoSC_KOf-%TT%%CC%201__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%201__)))
// Eingang %CC%005
#define KoSC_KOf-%TT%%CC%300__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%300__)))
// Ausgang %CC%006
#define KoSC_KOf-%TT%%CC%301__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%301__)))
// Eingang %CC%007
#define KoSC_KOf-%TT%%CC%400__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%400__)))
// Ausgang %CC%008
#define KoSC_KOf-%TT%%CC%401__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%401__)))
// Eingang %CC%009
#define KoSC_KOf-%TT%%CC%500__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%500__)))
// Ausgang %CC%010
#define KoSC_KOf-%TT%%CC%501__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%501__)))
// Eingang %CC%011
#define KoSC_KOf-%TT%%CC%600__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%600__)))
// Ausgang %CC%012
#define KoSC_KOf-%TT%%CC%601__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%601__)))
// Eingang %CC%013
#define KoSC_KOf-%TT%%CC%700__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%700__)))
// Ausgang %CC%014
#define KoSC_KOf-%TT%%CC%701__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%701__)))
// Eingang %CC%015
#define KoSC_KOf-%TT%%CC%800__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%800__)))
// Ausgang %CC%016
#define KoSC_KOf-%TT%%CC%801__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%801__)))
// Eingang %CC%017
#define KoSC_KOf-%TT%%CC%900__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%900__)))
// Ausgang %CC%018
#define KoSC_KOf-%TT%%CC%901__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%901__)))
// Eingang %CC%019
#define KoSC_KOf-%TT%%CC%1000__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%1000__)))
// Ausgang %CC%020
#define KoSC_KOf-%TT%%CC%1001__ (knx.getGroupObject(SC_KoCalcNumber(SC_KoKOf-%TT%%CC%1001__)))
#define BASE_KoTime 1
#define BASE_KoDate 2
#define BASE_KoDateTime 3
#define BASE_KoNight/Day 4
// Uhrzeit
#define KoBASE_Time (knx.getGroupObject(BASE_KoTime))
// Datum
#define KoBASE_Date (knx.getGroupObject(BASE_KoDate))
// Uhrzeit/Datum
#define KoBASE_DateTime (knx.getGroupObject(BASE_KoDateTime))
// Nacht/Tag
#define KoBASE_Night/Day (knx.getGroupObject(BASE_KoNight/Day))
#ifdef MAIN_FirmwareRevision
#ifndef FIRMWARE_REVISION
#define FIRMWARE_REVISION MAIN_FirmwareRevision
#endif
#endif
#ifdef MAIN_FirmwareName
#ifndef FIRMWARE_NAME
#define FIRMWARE_NAME MAIN_FirmwareName
#endif
#endif