122 lines
5.3 KiB
C++
122 lines
5.3 KiB
C++
/********************************************************************
|
|
* Light_state class - abstract light state
|
|
*
|
|
* Handles all states and events for a virtual light.
|
|
* Can be eventually subclassed to handle a physical light.
|
|
*
|
|
*******************************************************************/
|
|
#ifdef USE_LIGHT
|
|
|
|
#include "be_constobj.h"
|
|
#include "be_mapping.h"
|
|
|
|
#ifndef ARRAY_SIZE
|
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
|
#endif
|
|
|
|
extern void * ls_init(int32_t type); BE_FUNC_CTYPE_DECLARE(ls_init, "+_p", "i")
|
|
extern void ls_set_rgb(class LightStateClass* l, int32_t r, int32_t g, int32_t b); BE_FUNC_CTYPE_DECLARE(ls_set_rgb, "", ".iii")
|
|
extern void ls_set_huesat(class LightStateClass* l, int32_t hue, int32_t sat); BE_FUNC_CTYPE_DECLARE(ls_set_huesat, "", ".ii")
|
|
extern void ls_set_hue16sat(class LightStateClass* l, int32_t hue16, int32_t sat); BE_FUNC_CTYPE_DECLARE(ls_set_hue16sat, "", ".ii")
|
|
extern void ls_set_ct(class LightStateClass* l, int32_t ct); BE_FUNC_CTYPE_DECLARE(ls_set_ct, "", ".i")
|
|
extern void ls_set_bri(class LightStateClass* l, int32_t bri); BE_FUNC_CTYPE_DECLARE(ls_set_bri, "", ".i")
|
|
extern void ls_set_xy(class LightStateClass* l, float x, float y); BE_FUNC_CTYPE_DECLARE(ls_set_xy, "", ".ff")
|
|
extern int32_t ls_r(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_r, "i");
|
|
extern int32_t ls_g(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_g, "i");
|
|
extern int32_t ls_b(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_b, "i");
|
|
extern float ls_x(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_x, "f");
|
|
extern float ls_y(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_y, "f");
|
|
extern int32_t ls_hue(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_hue, "i");
|
|
extern int32_t ls_hue16(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_hue16, "i");
|
|
extern int32_t ls_sat(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_sat, "i");
|
|
extern int32_t ls_bri(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_bri, "i");
|
|
extern int32_t ls_ct(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_ct, "i");
|
|
extern int32_t ls_type(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_type, "i");
|
|
|
|
extern int32_t ls_mode_rgb(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_mode_rgb, "b");
|
|
extern int32_t ls_mode_ct(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_mode_ct, "b");
|
|
extern void ls_set_mode_rgb(class LightStateClass* l); BE_FUNC_CTYPE_DECLARE(ls_set_mode_rgb, "", ".");
|
|
extern void ls_set_mode_ct(class LightStateClass* l); BE_FUNC_CTYPE_DECLARE(ls_set_mode_ct, "", ".");
|
|
extern int32_t ls_get_power(class LightStateClass* l); BE_VAR_CTYPE_DECLARE(ls_get_power, "b");
|
|
extern void ls_set_power(class LightStateClass* l, int32_t pow); BE_FUNC_CTYPE_DECLARE(ls_set_power, "", ".b");
|
|
extern int32_t ls_reachable(class LightStateClass* p); BE_VAR_CTYPE_DECLARE(ls_reachable, "b");
|
|
extern void ls_set_reachable(class LightStateClass* l, int32_t pow); BE_FUNC_CTYPE_DECLARE(ls_set_reachable, "", ".b");
|
|
|
|
extern void ls_signal_change(void) {} BE_FUNC_CTYPE_DECLARE(ls_signal_change, "", ".");
|
|
|
|
extern int32_t ls_gamma8(int32_t val); BE_FUNC_CTYPE_DECLARE(ls_gamma8, "i", "i")
|
|
extern int32_t ls_gamma10(int32_t val); BE_FUNC_CTYPE_DECLARE(ls_gamma10, "i", "i")
|
|
extern int32_t ls_rev_gamma10(int32_t val); BE_FUNC_CTYPE_DECLARE(ls_rev_gamma10, "i", "i")
|
|
|
|
// moved to constants array
|
|
const be_const_member_t light_state_members[] = {
|
|
{ ">b", be_ctype(ls_b) },
|
|
{ ">bri", be_ctype(ls_bri) },
|
|
{ ">ct", be_ctype(ls_ct) },
|
|
{ ">g", be_ctype(ls_g) },
|
|
{ ">hue", be_ctype(ls_hue) },
|
|
{ ">hue16", be_ctype(ls_hue16) },
|
|
{ ">mode_ct", be_ctype(ls_mode_ct) },
|
|
{ ">mode_rgb", be_ctype(ls_mode_rgb) },
|
|
{ ">power", be_ctype(ls_get_power) },
|
|
{ ">r", be_ctype(ls_r) },
|
|
{ ">reachable", be_ctype(ls_reachable) },
|
|
{ ">sat", be_ctype(ls_sat) },
|
|
{ ">type", be_ctype(ls_type) },
|
|
{ ">x", be_ctype(ls_x) },
|
|
{ ">y", be_ctype(ls_y) },
|
|
};
|
|
|
|
extern "C" int light_state_get(bvm *vm);
|
|
|
|
static int light_state_member(bvm *vm) {
|
|
be_const_class_member_raise(vm, light_state_members, ARRAY_SIZE(light_state_members));
|
|
be_return(vm);
|
|
}
|
|
|
|
#include "be_fixed_be_class_light_state.h"
|
|
|
|
extern "C" void be_load_light_state_class(bvm *vm) {
|
|
be_pushntvclass(vm, &be_class_light_state);
|
|
be_setglobal(vm, "light_state");
|
|
be_pop(vm, 1);
|
|
}
|
|
|
|
/* @const_object_info_begin
|
|
class be_class_light_state (scope: global, name: light_state) {
|
|
RELAY, int(0)
|
|
DIMMER, int(1)
|
|
CT, int(2)
|
|
RGB, int(3)
|
|
RGBW, int(4)
|
|
RGBCT, int(5)
|
|
|
|
_p, var
|
|
init, ctype_func(ls_init)
|
|
|
|
member, func(light_state_member)
|
|
|
|
set_rgb, ctype_func(ls_set_rgb)
|
|
set_huesat, ctype_func(ls_set_huesat)
|
|
set_hue16sat, ctype_func(ls_set_hue16sat)
|
|
set_xy, ctype_func(ls_set_xy)
|
|
set_ct, ctype_func(ls_set_ct)
|
|
set_bri, ctype_func(ls_set_bri)
|
|
|
|
set_mode_rgb, ctype_func(ls_set_mode_rgb)
|
|
set_mode_ct, ctype_func(ls_set_mode_ct)
|
|
set_power, ctype_func(ls_set_power)
|
|
set_reachable, ctype_func(ls_set_reachable)
|
|
|
|
get, func(light_state_get)
|
|
|
|
signal_change, ctype_func(ls_signal_change)
|
|
|
|
gamma8, static_ctype_func(ls_gamma8)
|
|
gamma10, static_ctype_func(ls_gamma10)
|
|
reverse_gamma10, static_ctype_func(ls_rev_gamma10)
|
|
}
|
|
@const_object_info_end */
|
|
|
|
#endif // USE_LIGHT
|