/* 
	センサー制御タスク
 */
#include <tk/tkernel.h>
#include <tm/tmonitor.h>

#include "app.h"

/* 温度湿度センサー(SHT35)情報定義*/
#define	I2C_SADR	(0x45)		// I2Cターゲット・アドレス	

/* センサー制御タスク 関連情報 */
LOCAL void task_sns(INT stacd, void *exinf);	// タスク実行関数

EXPORT ID	tskid_sns;			// タスクID番号
EXPORT T_CTSK ctsk_sns = {			// タスク生成情報
	.itskpri	= 8,				// タスク実行優先度
	.stksz		= 1024,				// スタックサイズ
	.task		= task_sns,			// タスク実行関数
	.tskatr		= TA_HLNG | TA_RNG3,		// タスク属性
};

EXPORT UW	temp, humi;	// 測定データ

/* センサー制御タスク 実行関数 */
LOCAL void task_sns(INT stacd, void *exinf)
{
	ID	dd_i2c = (ID)stacd;	// I2Cデバイス・ディスクリプタ

	const UB	cmd[2] = {0x2C, 0x06}; 	// 測定コマンド
	UB		data[6];		// 測定データ
	SZ		asz;			// リードサイズ
	ER		err;			// エラーコード

	while(1) {
		/* ① 測定コマンドの送信 */
		err = tk_swri_dev(dd_i2c, I2C_SADR, cmd, sizeof(cmd), &asz);
		if(err < E_OK) {
			tm_printf((UB*)"Send err = %d\n", err);
		}
		tk_dly_tsk(10);

		/* ② データの受信 */
		err = tk_srea_dev(dd_i2c, I2C_SADR, data, sizeof(data), &asz);
		if(err < E_OK) {
			tm_printf((UB*)"Receive err = %d\n", err);
		} else {
			temp = ((((UW)data[0]<<8) | data[1]) *17500 >> 16) - 4500;
			humi = (((UW)data[3]<<8) | data[4])*10000 >> 16;
		}
		tk_dly_tsk(500);			// ⑤ タスクの実行待ち
	}
	tk_ext_tsk();
}
