File syn_dali.h¶
File List > proto > syn_dali.h
Go to the documentation of this file
#ifndef SYN_DALI_H
#define SYN_DALI_H
#include "../common/syn_defs.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ── DALI Constants ─────────────────────────────────────────────────────── */
#define SYN_DALI_SHORT_ADDR_UNASSIGNED 0xFFU
#define SYN_DALI_MASK_LEVEL 255U
typedef enum {
SYN_DALI_ADDR_SHORT = 0,
SYN_DALI_ADDR_GROUP,
SYN_DALI_ADDR_BROADCAST,
SYN_DALI_ADDR_SPECIAL,
} SYN_DALI_AddressType;
typedef struct {
SYN_DALI_AddressType addr_type;
uint8_t address;
bool is_direct;
uint8_t data_cmd;
uint16_t raw;
} SYN_DALI_ForwardFrame;
typedef struct {
uint8_t data;
} SYN_DALI_BackwardFrame;
typedef struct {
uint8_t short_address;
uint16_t group_mask;
uint8_t min_level;
uint8_t max_level;
uint8_t power_on_level;
uint8_t system_failure_level;
uint8_t fade_rate;
uint8_t fade_time;
} SYN_DALI_SlaveConfig;
typedef struct {
SYN_DALI_SlaveConfig cfg;
uint8_t actual_level;
uint8_t scenes[16];
uint32_t random_address;
uint32_t search_address;
bool initialise_active;
bool lamp_failure;
bool control_gear_failure;
bool lamp_on;
uint8_t dtr0;
uint8_t dtr1;
uint8_t dtr2;
bool write_mem_enabled;
bool dapc_sequence_active;
} SYN_DALI_SlaveState;
/* ── Standard DALI Command Definitions (IEC 62386-102) ─────────────────── */
#define SYN_DALI_CMD_OFF 0x00U
#define SYN_DALI_CMD_UP 0x01U
#define SYN_DALI_CMD_DOWN 0x02U
#define SYN_DALI_CMD_STEP_UP 0x03U
#define SYN_DALI_CMD_STEP_DOWN 0x04U
#define SYN_DALI_CMD_RECALL_MAX 0x05U
#define SYN_DALI_CMD_RECALL_MIN 0x06U
#define SYN_DALI_CMD_STEP_DOWN_AND_OFF 0x07U
#define SYN_DALI_CMD_ON_AND_STEP_UP 0x08U
#define SYN_DALI_CMD_ENABLE_DAPC_SEQUENCE 0x09U
#define SYN_DALI_CMD_GO_TO_SCENE_BASE 0x10U /* 0x10..0x1F */
#define SYN_DALI_CMD_RESET 0x20U
#define SYN_DALI_CMD_STORE_ACTUAL_LEVEL_IN_DTR 0x21U
#define SYN_DALI_CMD_STORE_DTR_AS_MAX_LEVEL 0x2AU
#define SYN_DALI_CMD_STORE_DTR_AS_MIN_LEVEL 0x2BU
#define SYN_DALI_CMD_STORE_DTR_AS_SYS_FAIL_LEVEL 0x2CU
#define SYN_DALI_CMD_STORE_DTR_AS_POWER_ON_LEVEL 0x2DU
#define SYN_DALI_CMD_STORE_DTR_AS_FADE_TIME 0x2EU
#define SYN_DALI_CMD_STORE_DTR_AS_FADE_RATE 0x2FU
#define SYN_DALI_CMD_STORE_DTR_AS_SCENE_BASE 0x40U /* 0x40..0x4F */
#define SYN_DALI_CMD_REMOVE_FROM_SCENE_BASE 0x50U /* 0x50..0x5F */
#define SYN_DALI_CMD_ADD_TO_GROUP_BASE 0x60U /* 0x60..0x6F */
#define SYN_DALI_CMD_REMOVE_FROM_GROUP_BASE 0x70U /* 0x70..0x7F */
#define SYN_DALI_CMD_STORE_DTR_AS_SHORT_ADDR 0x80U
#define SYN_DALI_CMD_ENABLE_WRITE_MEMORY 0x81U
#define SYN_DALI_CMD_QUERY_STATUS 0x90U
#define SYN_DALI_CMD_QUERY_CONTROL_GEAR 0x91U
#define SYN_DALI_CMD_QUERY_LAMP_FAILURE 0x92U
#define SYN_DALI_CMD_QUERY_LAMP_POWER_ON 0x93U
#define SYN_DALI_CMD_QUERY_CONTENT_DTR 0x98U
#define SYN_DALI_CMD_QUERY_DEVICE_TYPE 0x99U
#define SYN_DALI_CMD_QUERY_PHYSICAL_MIN_LEVEL 0x9AU
#define SYN_DALI_CMD_QUERY_CONTENT_DTR1 0x9CU
#define SYN_DALI_CMD_QUERY_CONTENT_DTR2 0x9DU
#define SYN_DALI_CMD_QUERY_ACTUAL_LEVEL 0xA0U
#define SYN_DALI_CMD_QUERY_MAX_LEVEL 0xA1U
#define SYN_DALI_CMD_QUERY_MIN_LEVEL 0xA2U
#define SYN_DALI_CMD_QUERY_POWER_ON_LEVEL 0xA3U
#define SYN_DALI_CMD_QUERY_SYS_FAIL_LEVEL 0xA4U
#define SYN_DALI_CMD_QUERY_GROUPS_0_7 0xC0U
#define SYN_DALI_CMD_QUERY_GROUPS_8_15 0xC1U
#define SYN_DALI_CMD_QUERY_RANDOM_ADDR_H 0xC2U
#define SYN_DALI_CMD_QUERY_RANDOM_ADDR_M 0xC3U
#define SYN_DALI_CMD_QUERY_RANDOM_ADDR_L 0xC4U
/* Special / Configuration Commands */
#define SYN_DALI_SPEC_TERMINATE 0xA1U
#define SYN_DALI_SPEC_DTR0 0xA3U
#define SYN_DALI_SPEC_INITIALISE 0xA5U
#define SYN_DALI_SPEC_RANDOMISE 0xA7U
#define SYN_DALI_SPEC_COMPARE 0xA9U
#define SYN_DALI_SPEC_WITHDRAW 0xABU
#define SYN_DALI_SPEC_SEARCHADDRH 0xB1U
#define SYN_DALI_SPEC_SEARCHADDRM 0xB3U
#define SYN_DALI_SPEC_SEARCHADDRL 0xB5U
#define SYN_DALI_SPEC_PROGRAM_SHORT_ADDR 0xB7U
#define SYN_DALI_SPEC_VERIFY_SHORT_ADDR 0xB9U
#define SYN_DALI_SPEC_QUERY_SHORT_ADDR 0xBBU
#define SYN_DALI_SPEC_DTR1 0xC3U
#define SYN_DALI_SPEC_DTR2 0xC5U
/* ── API Functions ──────────────────────────────────────────────────────── */
uint16_t syn_dali_encode_forward(uint8_t addr, uint8_t data_cmd);
bool syn_dali_decode_forward(uint16_t raw_16, SYN_DALI_ForwardFrame *frame);
uint8_t syn_dali_encode_backward(uint8_t data);
bool syn_dali_decode_backward(uint8_t raw_8, SYN_DALI_BackwardFrame *frame);
SYN_Status syn_dali_slave_init(SYN_DALI_SlaveState *slave, const SYN_DALI_SlaveConfig *cfg);
SYN_Status syn_dali_slave_process(SYN_DALI_SlaveState *slave, const SYN_DALI_ForwardFrame *req,
uint8_t *resp_data, bool *has_resp);
size_t syn_dali_manchester_encode_byte(uint8_t val, uint8_t *bit_out);
bool syn_dali_manchester_decode_byte(const uint8_t *bit_in, uint8_t *val_out);
#ifdef __cplusplus
}
#endif
#endif /* SYN_DALI_H */