📄 leddim.c
字号:
/******************************** LEDDIM.C ********************************
* #######
* ## ##
* # ## #### ##### ##### ## ## #####
* ## ## ## ## ## ## ## ## ##
* ## # ###### ## ## #### ## ## ####
* ## ## ## ## ## ## ##### ##
* ####### #### ## ## ##### ## #####
* #####
* Z-Wave, the wireless language.
*
* Copyright (c) 2001
* Zensys A/S
* Denmark
*
* All Rights Reserved
*
* This source file is subject to the terms and conditions of the
* Zensys Software License Agreement which restricts the manner
* in which it may be used.
*
*---------------------------------------------------------------------------
* Copyright Zensys A/S, 2001
*
* Description: Slave application for evaluation kit LED dimmer
*
* Author: Peter Shorty
*
* Last Changed By: $Author: psh $
* Revision: $Revision: 13464 $
* Last Changed: $Date: 2009-03-12 11:08:46 +0100 (Thu, 12 Mar 2009) $
*
****************************************************************************/
/****************************************************************************/
/* INCLUDE FILES */
/****************************************************************************/
#ifdef ZW_CONTROLLER
#include <ZW_controller_api.h>
#else
#include <ZW_slave_api.h>
#endif
#include <ZW_pindefs.h>
#include <ZW_evaldefs.h>
#include <ZW_debug_api.h>
#include <LEDdim.h>
#include <eeprom.h>
#include <slave_learn.h>
#include <one_button.h>
#include <ZW_uart_api.h>
static void TimerPollCancel( void ) ;
/****************************************************************************/
/* PRIVATE TYPES and DEFINITIONS */
/****************************************************************************/
#define LED_DIM_VERSION 2
#define LED_DIM_REVISION 90
#define C_Cycle_Count_Addr 0x05 // 0b00101
#define C_Vgn_Addr 0x04 // 0b00100
#define C_CMD_Calibration 0xDE // 1101 1110
#define CMD_Start_ADC 0xE8 // 0B11101000
#define CMD_Read_Config_DRDY 0x1E // 0B00011110
#define CMD_Write_Config_DRDY 0x5E // 0B01011110
#define C_Bit_DRDY 0x80 //0b10000000
#define Command_Write_Confgig_R 0x40
#define Command_Read_Power 0x14 // 0b000010010 Power=0b01001
#define Command_ReadCalib_Lgn 0x04 // 0b00000100 Lgn =0b00010
#define Command_ReadCalib_Vgn 0x08 // 0b00001000 Vgn =0b00100
#define Command_WriteCalib_Lgn 0x44 // 0b0100 0100
#define Command_WriteCalib_Vgn 0x48 // 0b0100 1000
#define C_Standard_Powr 1350 // 1650
void F_WriteCS5460(BYTE Command,BYTE Data_H,BYTE Data_M,BYTE Data_L);
void F_ReadCS5460(BYTE Command,BYTE_P Data_H,BYTE_P Data_M,BYTE_P Data_L);
void F_Write_CMD_CS5460(BYTE Command);
void CLK_UPandDown();
void CLK_DownandUP();
void DELAY_US();
void User_Send_PowerValue();
void User_Load_CS5460_Configraiton() ;
BYTE User_Read_Power_Value() ;
void Write8BitData(BYTE WrDataBuff);
void delay(BYTE count);
void User_RF_Send_ZW_Data(DWORD Dword_Data);
static void BlinkLEDPoll ( void );
BYTE Test_Mode();
void F_Enter_Calibrate_Task();
extern void WakeupNotification( void );
void User_WakeupNotification() ;
void LongDelay();
BYTE Wait_DRDY_High();
void F_SYNC_COMMAND();
void User_Calibration_Read_Save_IgnVgn();
BYTE F_Read_Calibration_Power();
void F_Calculate_KW_NOT_H_Power();
void F_Calculate_KWH_Power();
void User_Heguijin_SEND(BYTE_P str,BYTE_P Num,BYTE NumLen);
void CS5460_Reset();
void User_Ign_Vgn_ReloadFromandRewriteToCS5460();
/* SetLightLevel() command defines */
enum
{
CURRENT_LEVEL = 0,
TOGGLE,
ON,
OFF,
LEVEL
};
/* SetLightLevel level defines */
#define LEVEL_DONTCARE 0 /* Level is don't care - the command says it all */
/* Poll function button state defines */
#define POLLIDLE 0
#define POLLDIMMING 1 /* we are dimming dimming */
#define POLLLEARNMODE 3 /* We're in learnmode */
#define User_Calibration_Mode 4
/* Debounce count on button press detection. How many times must we see button */
#define DEBOUNCECOUNT 100
/* Timer repeat define */
#define FOREVER TIMER_FOREVER
#define ONE_SHOT TIMER_ONE_TIME
/* DIM direction defines */
#define DIM_TOGGLE 0xFF
/* DIM defines */
#define LEVEL_MAX 99 /* Maximum light level */
#define LEVEL_MIN 1 /* Minimum light level */
#if defined(ZW020x) || defined(ZW030x)
#define DIM_SPEED 3 /* DIM timer routine inc/dec with this value */
#endif /* defined(ZW010x) || defined(ZW020x) */
#define DIM_TIMER_FREQ 10 /* DIM timer routine is called every 100ms */
#define DIM_DIRECTION_DOWN 0
#define DIM_DIRECTION_UP 1
/* Define for setting the time which button must be pressed before starting DIM */
/* and when in childprotect mode its the max time between button presses */
#define DIM_PROTECT 50 /* 1/2 second */
#define CHILD_PROTECT 50 /* max 500ms between button presses */
#define CHILD_PROTECT_COUNT 3 /* number of button press before toggle */
/* when in childprotect mode */
#define LIGHTIDLE 0x00
#define LIGHTTOGGLE 0x01
#define LIGHTDIM 0x02
#define LIGHTNOP 0x04
#ifdef APPL_PROD_TEST
/* Productiontest pin definition */
#ifdef ZW020x
/* SSNJ pin now input */
#define SET_PRODUCTIONTEST_PIN PIN_IN(SSN, 0)
#define IN_PRODUCTIONTEST (!PIN_GET(SSN))
#endif /* ZW020x */
#ifdef ZW030x
/* SSNJ pin now input */
#define SET_PRODUCTIONTEST_PIN PIN_IN(SSN, 0)
#define IN_PRODUCTIONTEST (!PIN_GET(SSN))
#endif /* ZW030x */
#endif /* APPL_PROD_TEST */
/****************************************************************************/
/* PRIVATE DATA */
/****************************************************************************/
/* node status */
volatile t_nodeStatus dimmerNodeStatus;
/* A list of the known command classes. Except the basic class which allways */
/* should be supported. Used when node info is send */
t_nodeInfo nodeInfo = {COMMAND_CLASS_SWITCH_MULTILEVEL,
COMMAND_CLASS_SWITCH_ALL,
COMMAND_CLASS_MANUFACTURER_SPECIFIC,
COMMAND_CLASS_VERSION,
COMMAND_CLASS_POWERLEVEL};
BYTE timerDimHandle = 0;
BYTE timerPollHandle = 0;
BYTE LedTimerPollHandle = 0;
BYTE pollState = POLLIDLE;
BYTE pollDimProtect = FALSE;
BYTE toggleDone = 0;
BYTE buttonPress = 0;
ZW_APPLICATION_TX_BUFFER txBuf;
BYTE ignoreAllOnOff = SWITCH_ALL_ENABLE_ON_OFF; /* Default we do allow ALL ON/OFF */
static BYTE blinkLED;
static BYTE statusLED;
static BYTE G_10_Second_Cnt=0;
BYTE T_Calibration_Cnt=0;
/* commands to be executed */
/* ignoreAllOnOff = SWITCH_ALL_EXCLUDE_ON_OFF - Ignore CMD_ALL_ON/CMD_ALL_OFF */
/* ignoreAllOnOff = SWITCH_ALL_EXCLUDE_ONLY_ON - Ignore CMD_ALL_ON */
/* ignoreAllOnOff = SWITCH_ALL_EXCLUDE_ONLY_OFF - Ignore CMD_ALL_OFF */
/* ignoreAllOnOff = SWITCH_ALL_ENABLE_ON_OFF - Accept CMD_ALL_ON/CMD_ALL_OFF */
BYTE txOption;
#if defined(ZW020x) || defined(ZW030x)
BYTE timerPowerLevelHandle = 0;
BYTE timerPowerLevelSec = 0;
IBYTE testNodeID = ZW_TEST_NOT_A_NODEID;
IBYTE testSourceNodeID;
IBYTE testPowerLevel;
IWORD testFrameCount;
IWORD testFrameSuccessCount;
IBYTE testState = 0;
IBYTE currentPower = normalPower;
#endif
#ifdef METADATA_DUT
IWORD metaframecount = 0;
IWORD metaframerecount = 0;
IWORD timestamp = 0;
IWORD timespan = 0;
BOOL metarecount = FALSE;
BOOL metadocount = FALSE;
BYTE metaDataReportNode;
#endif
BYTE bNWIStartup;
BYTE bMyNodeID;
DWORD G_Calibration_max_Value=0;
WORD G_Calibration_Min_Value=0;
double G_KWH_Power =0; // DWORD ReadPower=0;
double G_SUM_KWH_Power =0;
DWORD G_Last_Power_Value=0 ;
DWORD G_Calibration_Max_Power=(double)0x26ff85;
DWORD G_Calibration_Max_Ign;
DWORD G_Calibration_Max_Vgn;
BYTE G_Enter_Calibration_Mode ;
BYTE Calibration_Task_Mode=0;
DWORD DWORD_Temp;
// #define C_FlashAddr_Calibration_Power EEOFFSET_LEVEL + 4
// #define C_FlashAddr_Calibration_Ign C_FlashAddr_Calibration_Power + 4
// #define C_FlashAddr_Calibration_Vgn C_FlashAddr_Calibration_Ign + 4
// ZW_MEM_PUT_BYTE(C_FlashAddr_Calibration_Power, LEVEL_MAX); /* Full light */
// ZW_MEM_PUT_BYTE(C_FlashAddr_Calibration_Ign, 0); /* Switch OFF */
// ZW_MEM_PUT_BYTE(C_FlashAddr_Calibration_Vgn, SWITCH_ALL_ENABLE_ON_OFF);
/*void F_Strore_Calibration_Value()
{
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
}
void F_Load_Calibration_Value()
{
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
}
*/
BYTE protected_On_Off = PROTECTION_OFF; /* 0 means not protected and 1 child protected */
/****************************************************************************/
/* EXPORTED DATA */
/****************************************************************************/
/****************************************************************************/
/* PRIVATE FUNCTIONS */
/****************************************************************************/
static void DIMStop(BYTE saveInE2PROM);
/*============================= LEDallON ===============================
** Turn all LED ON
**
** Side effects :
**
**--------------------------------------------------------------------------*/
static void /*RET Nothing */
LEDallON ( void ) /* IN Nothing */
{
// LED_ON(1);
LED_ON(2);
Relay_1;
// LED_ON(3);
}
/*============================= LEDallOFF ==============================
** Turn all LED OFF
**
** Side effects :
**
**--------------------------------------------------------------------------*/
static void /*RET Nothing */
LEDallOFF( void ) /* IN Nothing */
{
LED_OFF(2);
// Relay_0;
}
/*============================== LEDUpdate ==============================
** Update LEDs according to current level
**
** Side effects :
**
**--------------------------------------------------------------------------*/
static void /*RET Nothing */
LEDUpdate( void ) /* IN Nothing */
{
if (dimmerNodeStatus.status & M_DS_ON_OFF)
{
BYTE n;
#if defined(ZW020x) || defined(ZW030x)
n = dimmerNodeStatus.level / (100 / 4);
#endif /* defined(ZW020x) || defined(ZW030x) */
switch (n)
{
#if defined(ZW020x) || defined(ZW030x)
case 0:
LED_OFF(2);
// Relay_0;
break;
case 1:
// LED_ON(1);
LED_ON(2);
Relay_1;
// LED_OFF(3);
break;
case 2:
// LED_ON(1);
LED_ON(2);
Relay_1;
// LED_ON(3);
break;
default:
LEDallON();
break;
#endif /* defined(ZW020x) || defined(ZW030x) */
}
}
else
{
// LEDallOFF();
}
}
/*=========================== ValidateLevel =============================
** Validate current level value
**
** Side effects
**
**--------------------------------------------------------------------------*/
static void /*RET Nothing */
ValidateLevel( void ) /* IN Nothing */
{
if (dimmerNodeStatus.level > LEVEL_MAX)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -