#include "system.h"
#include "app_host.h"
#include "hal_ble_client.h"
#include "hal_ble_host.h"
#include "bsp_time.h"
#include "hal_led.h"
#include "ble_gap.h"
#include "hal_battery.h"
#include "app_flash.h"
#include "ble_comm.h"
#include "app_client.h"

/************************ 定义 ***************************/
static uint8_t  vol_R    = 0;	//右鞋电量
static uint8_t  temp_R   = 0;	//右鞋温度
static uint32_t press_R  = 0;	//右鞋压力
static int16_t  volADC_R = 0;	//右鞋电池ADC

uint8_t app_host_GetVol_R(void){ return vol_R; }
int16_t app_host_GetVolAdc_R(void){ return volADC_R; }
uint8_t app_host_GetTemp_R(void){ return temp_R; }
uint32_t app_host_GetPress_R(void){ return press_R; }

/***************************** 主动获取从机信息 ******************************/
static BLE_Host_Tx_t mBLE_Host_T_UPDATE_INFO_R = {
	.n = 10,
	.t = 1000,
	.cb = 0,
};

void app_host_GetClientInfo(void)
{//AA 06 F9 A1 00 4A
	static uint8_t buf=BLE_UPDATE_BASEINFO;
	BLE_Host_Tx_Send(&mBLE_Host_T_UPDATE_INFO_R,BLE_UPDATE,&buf,1);
}

static BLE_Host_Tx_t mBLE_Host_T_UPDATE_DATA_R = {
	.n = 0,
	.t = 500,
	.cb = 0,
};

void app_host_GetClientData(uint8_t temp)
{//AA 06 F9 A1 01 4B
	static uint8_t buf=BLE_UPDATE_DATA;
	BLE_Host_Tx_Send(0,BLE_UPDATE,&buf,1);
	if(0 == mBLE_Host_T_UPDATE_DATA_R.n && temp >=2){
		mBLE_Host_T_UPDATE_DATA_R.n = temp;
		BLE_Host_Tx_Send(&mBLE_Host_T_UPDATE_DATA_R,BLE_UPDATE,&buf,1);
	}
}

 //>> 0xA1: 查询
void cb_BLE_Host_R_UPDATE(void* handle)
{
	if(!mFlash.isHost)return;
	
	BLE_Host_Rx_t *target = handle;
	uint8_t _cmd = target->pDat[0];
	switch(_cmd){
		case BLE_UPDATE_BASEINFO:{
			//<< 0(子命令): 设备型号(64)+左鞋蓝牙地址(6)+硬件版本(2)+软件版本(2)+右鞋蓝牙地址(6)+硬件版本(6)+软件版本(2)
			for(int i=0;i<6;i++) mFlash.mClient.macAddr[i] = target->pDat[i+1+SHOES_NAME_LEN];
//			DEBUG_LOG("mFlash.mClient.macAddr:%02X %02X %02X %02X %02X %02X\n",mFlash.mClient.macAddr[0],mFlash.mClient.macAddr[1],mFlash.mClient.macAddr[2],mFlash.mClient.macAddr[3],mFlash.mClient.macAddr[4],mFlash.mClient.macAddr[5]);
			uint8_t L = SHOES_NAME_LEN+7;
			mFlash.mClient.hardVersion = ((uint32_t)target->pDat[L]<<24)  |((uint32_t)target->pDat[L+1]<<16) |((uint32_t)target->pDat[L+2]<<8) |((uint32_t)target->pDat[L+3]);
			mFlash.mClient.sotfVersion = ((uint16_t)target->pDat[L+4]<<8 | (uint16_t)target->pDat[L+5]);
//			DEBUG_LOG("BLE_Host_R_UPDATE_BASEINFO:"); for(int i=64;i<(28+64);i++){DEBUG_LOG("%02X ",target->pDat[i]);} DEBUG_LOG("\r\n");
//			DEBUG_LOG("sotfVersion,hardVersion:%x,%x\n",mFlash.mClient.sotfVersion,mFlash.mClient.hardVersion);
			app_client_infomation_Send();
			break;}
		case BLE_UPDATE_DATA:{
			//<< 1(子命令): 左鞋电量(1)+左鞋温度(1)+左鞋压力(4)+左鞋步数(4)+右鞋电量(1)+右鞋温度(1)+右鞋压力(4)+右鞋步数(4)
			vol_R = target->pDat[1];
			temp_R = target->pDat[2];
			press_R = ((uint32_t)target->pDat[3]<<24)|((uint32_t)target->pDat[4]<<16)|((uint32_t)target->pDat[5]<<8)|((uint32_t)target->pDat[6]<<0);
			mFlash.mStep.stepCur[1]  = ((uint32_t)target->pDat[7]<<24)|((uint32_t)target->pDat[8]<<16)|((uint32_t)target->pDat[9]<<8)|((uint32_t)target->pDat[10]<<0);
			
			if(target->datLen >= 25)volADC_R = ((target->pDat[21]<<8)+target->pDat[22]);
			
			mBLE_Host_T_UPDATE_DATA_R.n = 0;
			app_client_DataUpdate_Send();
//			DEBUG_LOG("right step:%d\n",mFlash.mStep.stepCur[1]);
			break;}
	default:break;
	}
}


void app_host_Initialize(void)
{
		BLE_Host_Rx_Regist(BLE_UPDATE,cb_BLE_Host_R_UPDATE);
}

