在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → Zigbee 3.0 Light Bulbs Dynamic

Zigbee 3.0 Light Bulbs Dynamic

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:55.24M
  • 下载次数:0
  • 浏览次数:26
  • 发布时间:2024-06-13
  • 实例类别:嵌入式开发
  • 发 布 人:jackysway
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Dynamic zigbee LBS 3.0 AMI

实例介绍

【实例简介】
Zigbee 3.0 Light Bulbs Dynamic

【实例截图】

from clipboard

【核心代码】

tsZLO_ColourTemperatureLightDevice sLight;
tsIdentifyWhite sIdEffect;
tsCLD_ZllDeviceTable sDeviceTable = { ZLO_NUMBER_DEVICES,
                                      {
                                          { 0,
                                            HA_PROFILE_ID,
                                            ZLO_COLOUR_TEMPERATURE_LIGHT_DEVICE_ID,
                                            COLORTEMPERATURELIGHT_LIGHT_ENDPOINT,
                                            APPLICATION_DEVICE_VERSION,
                                            0,
                                            0}
                                      }
};

/* define the default reports */
tsReports asDefaultReports[ZLO_NUMBER_OF_REPORTS] =
{
    {GENERAL_CLUSTER_ID_ONOFF,           {0, E_ZCL_BOOL,     E_CLD_ONOFF_ATTR_ID_ONOFF,                         ZLO_MIN_REPORT_INTERVAL,ZLO_MAX_REPORT_INTERVAL,0,{0}}},
    {GENERAL_CLUSTER_ID_LEVEL_CONTROL,   {0, E_ZCL_UINT8,    E_CLD_LEVELCONTROL_ATTR_ID_CURRENT_LEVEL,          ZLO_MIN_REPORT_INTERVAL,ZLO_MAX_REPORT_INTERVAL,0,{10}}},
    {LIGHTING_CLUSTER_ID_COLOUR_CONTROL, {0, E_ZCL_UINT16, E_CLD_COLOURCONTROL_ATTR_COLOUR_TEMPERATURE_MIRED, ZLO_MIN_REPORT_INTERVAL,ZLO_MAX_REPORT_INTERVAL,0,{10}}}
};

/*
 * If overriding the ZLL Master Key in the appilation,
 * define BDB_APPLICATION_DEFINED_TL_MASTER_KEY in bdb_options.h
 * otherwize the key defined in BDB\Source\touchlink\bdb_tl_common.c will be used.
 */
#ifdef BDB_APPLICATION_DEFINED_TL_MASTER_KEY
PUBLIC tsReg128 sTLMasterKey = {0x11223344, 0x55667788, 0x99aabbcc, 0xddeeff00 };
#endif

/****************************************************************************/
/***        Local Variables                                               ***/
/****************************************************************************/
PRIVATE bool bAllowInterPanEp(uint8 u8Ep, uint16 u16ProfileId);

/****************************************************************************/
/***        Exported Functions                                            ***/
/****************************************************************************/

/****************************************************************************
 *
 * NAME: eApp_ZLO_RegisterEndpoint
 *
 * DESCRIPTION:
 * Register ZLO endpoints
 *
 * PARAMETER
 * Type                        Name                    Description
 * tfpZCL_ZCLCallBackFunction  fptr                    Pointer to ZCL Callback function
 * t
 *
 * RETURNS:
 * teZCL_Status
 *
 ****************************************************************************/
PUBLIC teZCL_Status eApp_ZLO_RegisterEndpoint(tfpZCL_ZCLCallBackFunction fptr)
{

    zps_vSetIgnoreProfileCheck();
    ZPS_vAplZdoRegisterInterPanFilter( bAllowInterPanEp);

    return eZLO_RegisterColourTemperatureLightEndPoint(COLORTEMPERATURELIGHT_LIGHT_ENDPOINT,
                                                      fptr,
                                                      &sLight);
}

/****************************************************************************
*
* NAME: bAllowInterPanEp
*
* DESCRIPTION: Allows the application to decide which end point receive
* inter pan messages
*
*
* PARAMETER: the end point receiving the inter pan
*
* RETURNS: void
*
****************************************************************************/
PRIVATE bool bAllowInterPanEp(uint8 u8Ep, uint16 u16ProfileId) {

    if ( (u8Ep == COLORTEMPERATURELIGHT_LIGHT_ENDPOINT) &&
          ( u16ProfileId == ZLL_PROFILE_ID))
    {
        return TRUE;
    }
    return FALSE;
}

#if(!defined DR1221) && (!defined DR1221_Dimic)
/****************************************************************************
 *
 * NAME: vApp_eCLD_ColourControl_GetRGB
 *
 * DESCRIPTION:
 * To get RGB value
 *
 * PARAMETER
 * Type         Name               Descirption
 * uint8 *      pu8Red             Pointer to Red in RGB value
 * uint8 *      pu8Green           Pointer to Green in RGB value
 * uint8 *      pu8Blue            Pointer to Blue in RGB value
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PUBLIC void vApp_eCLD_ColourControl_GetRGB(uint8 *pu8Red,uint8 *pu8Green,uint8 *pu8Blue)
{
    eCLD_ColourControl_GetRGB( COLORTEMPERATURELIGHT_LIGHT_ENDPOINT,
                              pu8Red,
                               pu8Green,
                              pu8Blue);
}
#endif

/****************************************************************************
 *
 * NAME: vAPP_ZCL_DeviceSpecific_Init
 *
 * DESCRIPTION:
 * ZLO Device Specific initialization
 *
 * PARAMETER: void
 *
 * RETURNS: void
 *
 ****************************************************************************/
PUBLIC void vAPP_ZCL_DeviceSpecific_Init(void)
{
    /* Initialise the strings in Basic */
    uint8    au8PCode[CLD_BAS_PCODE_SIZE] = BAS_PCODE_STRING;
    memcpy(sLight.sBasicServerCluster.au8ManufacturerName, BAS_MANUF_NAME_STRING, CLD_BAS_MANUF_NAME_SIZE);
    memcpy(sLight.sBasicServerCluster.au8ModelIdentifier, BAS_MODEL_ID_STRING, CLD_BAS_MODEL_ID_SIZE);
    memcpy(sLight.sBasicServerCluster.au8DateCode, BAS_DATE_STRING, CLD_BAS_DATE_SIZE);
    memcpy(sLight.sBasicServerCluster.au8SWBuildID, BAS_SW_BUILD_STRING, CLD_BAS_SW_BUILD_SIZE);
    memcpy(sLight.sBasicServerCluster.au8ProductURL, BAS_URL_STRING, CLD_BAS_URL_SIZE);
    memcpy(sLight.sBasicServerCluster.au8ProductCode, au8PCode, CLD_BAS_PCODE_SIZE);

    sIdEffect.u8Effect = E_CLD_IDENTIFY_EFFECT_STOP_EFFECT;
    sIdEffect.u8Tick = 0;

    /* Set the initial value to 4000 Kelvin */
    sLight.sColourControlServerCluster.u16ColourTemperatureMired = (1E6/4000);

#if (defined DR1221) || (defined DR1221_Dimic)  || (defined OM15045)
    {
        uint16 u16PhyMax;
        uint16 u16PhyMin;

        DriverBulb_vGetColourTempPhyMinMax(&u16PhyMin,&u16PhyMax);
        sLight.sColourControlServerCluster.u16ColourTemperatureMiredPhyMin = u16PhyMin;
        sLight.sColourControlServerCluster.u16ColourTemperatureMiredPhyMax = u16PhyMax;
    }
#endif


}

/****************************************************************************
 *
 * NAME: app_u8GetDeviceEndpoint
 *
 * DESCRIPTION:
 * Return the application endpoint
 *
 * PARAMETER: void
 *
 * RETURNS: uint8
 *
 ****************************************************************************/
PUBLIC uint8 app_u8GetDeviceEndpoint( void)
{
    return COLORTEMPERATURELIGHT_LIGHT_ENDPOINT;
}

/****************************************************************************
 *
 * NAME: vUpdateBulbFromZCL
 *
 * DESCRIPTION:
 * Copys the ZCL bulb state to the bulb driver
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PUBLIC void vApp_ZCL_ResetDeviceStructure(void)
{
    memset(&sLight,0,sizeof(tsZLO_ColourTemperatureLightDevice));
}

/****************************************************************************
 *
 * NAME: vUpdateBulbFromZCL
 *
 * DESCRIPTION:
 * Copys the ZCL bulb state to the bulb driver
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PUBLIC void vUpdateBulbFromZCL(bool_t bResetInterpolation)
{
#if (defined OM15081)

    uint8 u8Red, u8Green, u8Blue;

    vApp_eCLD_ColourControl_GetRGB(&u8Red, &u8Green, &u8Blue);
    if (bResetInterpolation)
    {
        vLI_SetCurrentValues(sLight.sLevelControlServerCluster.u8CurrentLevel,
                            u8Red, u8Green, u8Blue, 4000);
    }

#if TRACE_LIGHT_TASK

    DBG_vPrintf(TRACE_LIGHT_TASK, "\nR %d G %d B %d L %d ",
                          u8Red, u8Green, u8Blue, sLight.sLevelControlServerCluster.u8CurrentLevel);

    DBG_vPrintf(TRACE_LIGHT_TASK, "X %d Y %d ",
                          sLight.sColourControlServerCluster.u16CurrentX,
                          sLight.sColourControlServerCluster.u16CurrentY);


    DBG_vPrintf(TRACE_LIGHT_TASK, "T %dK ",
                         1000000 / sLight.sColourControlServerCluster.u16ColourTemperatureMired);

    DBG_vPrintf(TRACE_LIGHT_TASK, "M %d On %d OnTime %d OffTime %d",
                        sLight.sColourControlServerCluster.u8ColourMode,
                        sLight.sOnOffServerCluster.bOnOff,
                        sLight.sOnOffServerCluster.u16OnTime,
                        sLight.sOnOffServerCluster.u16OffWaitTime);
#endif

    vRGBLight_SetLevels(sLight.sOnOffServerCluster.bOnOff,
                        sLight.sLevelControlServerCluster.u8CurrentLevel,
                        u8Red,
                        u8Green,
                        u8Blue);

#elif (defined CCTW_HW)
    /* controllable colour temperature tunable white (CCT TW) bulbs */
    DBG_vPrintf(TRACE_LIGHT_TASK,"\nCU:On %d, L:%d  T:%dK",sLight.sOnOffServerCluster.bOnOff,
                                                        sLight.sLevelControlServerCluster.u8CurrentLevel,
                                                        (1000000 / sLight.sColourControlServerCluster.u16ColourTemperatureMired));
    if (bResetInterpolation)
    {
        vLI_SetCurrentValues(sLight.sLevelControlServerCluster.u8CurrentLevel,
                            0, 0, 0, (1E6/sLight.sColourControlServerCluster.u16ColourTemperatureMired) );
    }
    vTunableWhiteLightSetLevels(sLight.sOnOffServerCluster.bOnOff,
                                sLight.sLevelControlServerCluster.u8CurrentLevel,
                                sLight.sColourControlServerCluster.u16ColourTemperatureMired);

#endif
    u8StateChangeTick = BULB_SAVE_DELAY_SEC;
}

/****************************************************************************
 *
 * NAME: APP_vHandleIdentify
 *
 * DESCRIPTION:
 * ZLO Device Specific identify
 *
 * PARAMETER: the identify time
 *
 * RETURNS: void
 *
 ****************************************************************************/
PUBLIC void APP_vHandleIdentify(uint16 u16Time)
{
    static bool bActive = FALSE;

#if (defined OM15081)
    uint8 u8Red, u8Green, u8Blue;
    vApp_eCLD_ColourControl_GetRGB(&u8Red, &u8Green, &u8Blue);
#endif

    if (sIdEffect.u8Effect < E_CLD_IDENTIFY_EFFECT_STOP_EFFECT) {
        /* do nothing */
    }
    else if (u16Time == 0)
    {
        /*
         * Restore to off/off state
         */

        #if (defined CCTW_HW) /* Restore the CCT TW bulb to pre-identify state */


        vTunableWhiteLightSetLevels(sLight.sOnOffServerCluster.bOnOff,
                                    sLight.sLevelControlServerCluster.u8CurrentLevel,
                                    sLight.sColourControlServerCluster.u16ColourTemperatureMired);

        #else /* Restore CCT RGB bulb to pre-identify State */
        vRGBLight_SetLevels(sLight.sOnOffServerCluster.bOnOff,
                            sLight.sLevelControlServerCluster.u8CurrentLevel,
                            u8Red,
                            u8Green,
                            u8Blue);
        #endif
        bActive = FALSE;
    }
    else
    {
        /* Set the Identify levels */
        if (!bActive) {
            bActive = TRUE;
            sIdEffect.u8Level = 250;
            sIdEffect.u8Count = 5;
            #if (defined CCTW_HW) /* Restore the CCT TW bulb to pre-identify state */
            vTunableWhiteLightSetLevels(TRUE,
                                        CLD_LEVELCONTROL_MAX_LEVEL,
                                        sLight.sColourControlServerCluster.u16ColourTemperatureMired);

            #else /* Restore CCT RGB bulb to pre-identify State */
            vRGBLight_SetLevels(TRUE,
                                CLD_LEVELCONTROL_MAX_LEVEL,
                                u8Red,
                                u8Green,
                                u8Blue);
            #endif
        }
    }
}

/****************************************************************************


标签: Dynamic zigbee LBS 3.0 AMI

实例下载地址

Zigbee 3.0 Light Bulbs Dynamic

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警