/* 
	ディスプレイ制御タスク
 */
#include <tk/tkernel.h>
#include <tm/tmonitor.h>

#include <stdio.h>

#include "oled_disp.h"
#include "app.h"

/* ディスプレイ制御タスク 関連情報 */
LOCAL void task_dsp(INT stacd, void *exinf);	// タスク実行関数

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

/* ディスプレイ制御タスク 実行関数 */
LOCAL void task_dsp(INT stacd, void *exinf)
{
	ID	dd_i2c = (ID)stacd;	// I2Cデバイス・ディスクリプタ
	ER	err;

	/* ① ディスプレイの初期化 */
	err = oled_init(dd_i2c);				// SH1107 初期化
	if(err < E_OK) tm_printf((UB*)"oled_init error %d\n", err);
	oled_onoff(dd_i2c, 1);					// OLED表示オン
	err = oled_fill_screen(dd_i2c, 0x00);	// 画面消去
	if(err < E_OK) tm_printf((UB*)"fill error%d\n", err);

	while(1) {
		static UB	str[128];
		INT		work;

		/* ② 温度の表示 */
		work = temp /100;
		sprintf((char*)str, "%2d.%2d", work, (int)(temp - work*100)); // 文字列に変換
		oled_fnt24_prints(dd_i2c, 0, 0, (UB*)"TEMP");
		oled_fnt24_prints(dd_i2c, 0, 1, str);

		/* ③ 湿度の表示 */
		work = humi /100;
		sprintf((char*)str, "%2d.%2d", work, (int)(humi - work*100));	// 文字列に変換
		oled_fnt24_prints(dd_i2c, 0, 2, (UB*)"HUMI");
		oled_fnt24_prints(dd_i2c, 0, 3, str);

		/* A/Dコンバータ値の表示 */
		sprintf((char*)str, "%5ld", adc_val);
		oled_fnt24_prints(dd_i2c, 0, 4, str);
		
		tk_dly_tsk(500);			// ④ タスクの実行待ち
	}
	tk_ext_tsk();
}