/** * \file model_state_handler_pl.c * * */ /* * Copyright (C) 2013. Mindtree Limited. * All rights reserved. */ /* --------------------------------------------- Header File Inclusion */ #include "model_state_handler_pl.h" #include "led_light.h" /* --------------------------------------------- External Global Variables */ /* --------------------------------------------- Exported Global Variables */ /* --------------------------------------------- Static Global Variables */ /* --------------------------------------------- Functions */ void mesh_model_platform_init_pl(void) { /* Map Platform related initializations of GPIOs/LEDs etc here */ } void mesh_model_device_bootup_ind_pl(void) { /* LED ON/OFF for BOOT UP Indication to be mapped here */ } void mesh_model_device_provisioned_ind_pl(void) { /* LED ON/OFF for Provisioning Indication to be mapped here */ } void generic_onoff_set_pl (UINT8 state) { /* LED ON/OFF for GENERIC ONOFF to be mapped here */ if (state) { light_ctrl(LIGHT_RED , LIGHT_TOP_VALUE-1); light_ctrl(LIGHT_GREEN , LIGHT_TOP_VALUE-1); light_ctrl(LIGHT_BLUE , LIGHT_TOP_VALUE-1); } else { light_ctrl(LIGHT_RED , 0); light_ctrl(LIGHT_GREEN , 0); light_ctrl(LIGHT_BLUE , 0); } } void vendor_mode_mainlight_onoff_set_pl (UINT8 state) { /* LED ON/OFF for vendor model mainlight ONOFF to be mapped here */ if (state) { light_ctrl(LIGHT_GREEN , LIGHT_TOP_VALUE-1); } else { light_ctrl(LIGHT_GREEN , 0); } } void vendor_mode_backlight_onoff_set_pl (UINT8 state) { /* LED ON/OFF for vendor model backlight ONOFF to be mapped here */ if (state) { light_ctrl(LIGHT_RED , LIGHT_TOP_VALUE-1); } else { light_ctrl(LIGHT_RED , 0); } } void light_lightness_set_pl (uint16_t ligtnessValue) { light_ctrl(LIGHT_RED , ligtnessValue>>10); light_ctrl(LIGHT_GREEN , ligtnessValue>>10); light_ctrl(LIGHT_BLUE , ligtnessValue>>10); } void light_ctl_set_pl (uint16_t ctlValue,uint16_t dltUV) { if(ctlValue<6600) { light_ctrl(LIGHT_RED , 255); } else { light_ctrl(LIGHT_RED , 255-(ctlValue-6600)*(255-160)/(20000-6600)); } if(ctlValue<6600) { light_ctrl(LIGHT_GREEN , 50+200*(6600-ctlValue)/6600); } else { light_ctrl(LIGHT_GREEN , 255-(ctlValue-6600)*(255-190)/(20000-6600)); } if(ctlValue<2000) { light_ctrl(LIGHT_BLUE , 0); } else if(ctlValue<6500) { light_ctrl(LIGHT_BLUE , 255*(6600-ctlValue)/(6500-2000)); } else { light_ctrl(LIGHT_BLUE , 255); } } static float Hue_2_RGB( float v1, float v2, float vH ) //Function Hue_2_RGB { if ( vH < 0 ) vH += 1; if ( vH > 1 ) vH -= 1; if (( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH ); if (( 2 * vH ) < 1 ) return ( v2 ); if (( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2/3.0 ) - vH ) * 6 ); return ( v1 ); } void light_hsl_set_pl (uint16_t H_int,uint16_t S_int,uint16_t L_int) { float H = (float)H_int / 65535.0; float S = (float)S_int / 65535.0; float L = (float)L_int / 65535.0; float R,G,B,var_1,var_2; if ( S == 0 ) { R = L; G = L; B = L; } else { if ( L < 0.5 ) var_2 = L * ( 1 + S ); else var_2 = ( L + S ) - ( S * L ); var_1 = 2 * L - var_2; R = Hue_2_RGB( var_1, var_2, H + ( 1/3.0 )); G = Hue_2_RGB( var_1, var_2, H ); B = Hue_2_RGB( var_1, var_2, H - ( 1/3.0 )); } uint16_t R_int = (uint16_t)(R*LIGHT_TURN_ON); uint16_t G_int = (uint16_t)(G*LIGHT_TURN_ON); uint16_t B_int = (uint16_t)(B*LIGHT_TURN_ON); // printf("[HSL_f] %f %f %f\n",R,G,B); // printf("[HSL_I] %02x %02x %02x\n",R_int,G_int,B_int); light_ctrl(LIGHT_RED, R_int); light_ctrl(LIGHT_GREEN, G_int); light_ctrl(LIGHT_BLUE, B_int); } // light_hsl_set_pl(0x5555,0xffff,0x8000); // 0x00 0xFF 0x00 Green // light_hsl_set_pl(0xaaaa,0xffff,0x8000); // 0x00 0x00 0xFF Blue // light_hsl_set_pl(0x0000,0xffff,0x8000);// 0xFF 0x00 0x00 Red //