⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leddim.c

📁 用keil C 写的读写CS5460及校准的程式
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************************  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 + -