#ifndef __FOUR_DIMENSION_SDK_H__ #define __FOUR_DIMENSION_SDK_H__ #ifdef SW_SDK_LIBRARY_EXPORTS #define SW_SDK_LIBRARY_API __declspec(dllexport) #else #define SW_SDK_LIBRARY_API __declspec(dllimport) #endif #include #include #include /* * ModelType是一个枚举类型, 代表工作模式类型,其中, * @PULSE_C、@PULSE_P为单场景模式; * @TTL_S、@TTL_C为多场景模式。 */ enum class ModelType : uint8_t { PULSE_C = 0, PULSE_P = 1, TTL_S = 2, TTL_C = 3 }; /* * TTL是一个枚举类型, 代表触发电平,其中, * @TTL_L为低电平触发,@TTL_H为高电平触发。 */ enum class TTL : uint8_t { TTL_L = 0, TTL_H = 1 }; /* * LightParam是一个结构体, 包含了一些用于描述分区和调光等信息的成员变量; * @zoneMode为分区方式,有效范围请参考技术文档; * @currentZone代表当前操作的分区序号,范围为1到该产品类型的最大分区数; * @brightness表示当前分区的亮度,范围为0~1024; * @colors表示当前分区的颜色,每个通道的取值的范围为0~1024。 */ struct LightParam { uint8_t zoneMode; uint8_t currentZone; uint16_t brightness; std::vector colors; }; /* * DevInfo是一个结构体, 包含了一些用于表示光源设备信息的成员变量; * @UID代表光源设备唯一标识符,该标识符大小为6-bytes; * @address为当前的光源设备地址,参数范围为1~32; * @productModel表示产品型号; * @zoneSize表示该产品型号所支持的最多分区数; * @colorSize表示该产品型号所支持的最多颜色数。 */ struct DevInfo { std::vector UID; uint8_t address; std::string productModel; uint16_t zoneSize; uint16_t colorSize; }; namespace four_d { class Op; } class SW_SDK_LIBRARY_API SW_SDK final { public: SW_SDK(); SW_SDK(const SW_SDK &) = delete; SW_SDK &operator=(const SW_SDK &) = delete; SW_SDK(SW_SDK &&) = delete; SW_SDK &operator=(SW_SDK &&) = delete; ~SW_SDK() = default; /* * init()方法主要用于连接端口,获取光源设备信息等; * @comName为待连接的端口名称,如“COM3”; * 连接成功后将花费数秒至数十秒搜索和读取所有光源设备的信息,保存在@devInfos中,耗时与光源数目有关; * 请根据获得的@devInfos的实际情况进行下一步操作。 */ bool init(const std::string &comName, std::vector &devInfos); /* * changeAddr()方法用于修改光源设备的地址; * @UID为光源设备的唯一标识符,可以参考从init()获取的devInfos,其中包含了搜索到的光源设备UID; * @addr为光源设备的新地址,范围为1~32; * 修改地址成功后,请自行更新devInfos中光源的地址信息; * 请避免将不同类型光源置于同一地址,否则可能后续的setZoneAndColors()等对不同类型光源无效。 */ bool changeAddr(const std::vector &UID, uint8_t addr); /* * setZoneAndColors()方法用于显示当前的调光效果; * @lightParam为LightParam结构体实例,需要在调用该方法之前定义并设置各成员变量的数值; * @addr为该方法作用的光源设备地址,范围为1~32; * @delayMS为该方法发送报文后的间隔时间,单位为毫秒,可自行设置,推荐使用默认值。 * 请依据具体的光源型号合理设置LightParam的各成员变量。 */ bool setZoneAndColors(const LightParam &lightParam, uint8_t addr, size_t delayMS = 10); /* * saveScene()方法用于保存场景; * @modelType代表工作模式类型,可输入参数为ModelType::PULSE_C,ModelType::PULSE_P,ModelType::TTL_S或ModelType::TTL_C; * @ttl代表触发电平类型,可输入参数为TTL::TTL_L或TTL::TTL_H; * @addr为地址,范围1~32; * @sceneNo为该场景的序号,以1为起始,范围为1~@sceneSize,在TTL_S和TTL_C工作模式下该参数有效,在Pu-C和Pu-P工作模式下置1即可; * @sceneSize为场景的总数,最多支持8个场景,在TTL_S和TTL_C工作模式下该参数有效,在Pu-C和Pu-P工作模式下置1即可; * @onDur为亮灯持续时间,单位为微秒,范围为1~65535,在Pu-P,TTL_S和TTL_C工作模式下该参数有效,在Pu-C工作模式下置1即可; * @offDur为灭灯持续时间,单位为微秒,范围为0~65535,在TTL_S和TTL_C工作模式下该参数有效,在Pu-C和Pu-P工作模式下置0即可; * @delayMS为该方法发送报文后的间隔时间,单位为毫秒,可自行设置,推荐使用默认值。 */ bool saveScene(ModelType modelType, TTL ttl, uint8_t addr, uint8_t sceneNo, uint8_t sceneSize, uint16_t onDur, uint16_t offDur, size_t delayMS = 100); /* * enterWorkModel()方法用于进入工作场景; * @modelType代表工作模式类型,可输入参数为ModelType::PULSE_C,ModelType::PULSE_P,ModelType::TTL_S或ModelType::TTL_C; * @addr为地址,范围1~32; * @delayMS为该方法发送报文后的间隔时间,单位为毫秒,可自行设置,推荐使用默认值。 * 该方法通常在成功调用saveScene()之后调用; * 当处于TTL_C工作模式下再次调用enterWorkModel(ModelType::TTL_C, addr)时,将重置为从场景1开始执行,具体请见文档。 */ bool enterWorkModel(ModelType modelType, uint8_t addr, size_t delayMS = 20); private: std::shared_ptr mOp; }; #endif