#include PLATFORM_HEADER
#include "stack/include/ember.h"
#include "app/framework/util/common.h"
#include "app/util/zigbee-framework/zigbee-device-common.h"
#include "app/framework/include/af.h"
#include "SHT1x_PortConfig.h"
#include "SHT1x_DriverConfig.h"
#include "SHT1x_TransPort.h"
#define SHT1x_DRIVER_SET
#include "SHT1x_Driver_User.h"
#undef SHT1x_DRIVER_SET
static boolean inMeasure;
static boolean isGetTemp;
static int16u tempLocal;
static int16u humiLocal;
static int8u crc;
static int8u status;
static boolean dataFrash;
static void SHT1xGetDataCmd( void)
{
int8u cmd = (isGetTemp) ? TEMP_GET_CMD : HUMI_GET_CMD;
SHT1x_Trans_Start();
SHT1xSendCmd(cmd);
SHT1x_DATA_IN();
}
void SHT1xSetStatus( int8u sta)
{
SHT1x_Trans_Start();
SHT1xSendCmd(STATUS_SET_CMD);
SHT1x_Send_Byte(sta);
}
void SHT1xInit( void)
{
int8u sta = 0;//LOW_DEF_MASK | OTP_NOLOAD_MASK;
SHT1x_SCK_OUT();
SHT1xSetStatus( sta );
}
void SHT1xStartMeasure( void)
{
if(inMeasure || dataFrash)return;
inMeasure = TRUE;
isGetTemp = TRUE;
SHT1xGetDataCmd();
}
void SHT1xGetData( void)
{
int16u temp16 = 0;
if(!inMeasure)return;
if(SHT1x_DATA_GET())return;
temp16 = SHT1x_Receive_Byte(ACK);
temp16 <<= 8;
temp16 += SHT1x_Receive_Byte(ACK);
crc = SHT1x_Receive_Byte(NACK);
if(isGetTemp)
{
isGetTemp = FALSE;
tempLocal = temp16;
SHT1xGetDataCmd();
}
else
{
inMeasure = FALSE;
humiLocal = temp16;
dataFrash = TRUE;
}
}
void SHT1xGetStatus( void)
{
SHT1x_Trans_Start();
SHT1xSendCmd(STATUS_GET_CMD);
status = SHT1x_Receive_Byte(ACK);
crc = SHT1x_Receive_Byte(NACK);
}
void SHT1xReset(void)
{
SHT1x_Trans_Reset();
SHT1xSendCmd(SOFT_RESET_CMD);
}
boolean SHT1xDataTrans( void )
{
if((!inMeasure)&&(dataFrash))
{
int16u temp16 = (int16u)(C1 + C2*humiLocal + C3*humiLocal*humiLocal);
SHT1_Data.temp = (int16s)(D1 + tempLocal*D2);
SHT1_Data.humi = (SHT1_Data.temp - 2500)*(T1 + T2*humiLocal) + temp16;
if(SHT1_Data.humi > 10000)SHT1_Data.humi = 10000;
dataFrash = FALSE;
return TRUE;
}
return FALSE;
}