/**
 * @file   MKY39.c
 * @author StepTechnica
 * @date   Feb. 26, 2026
 * 
 * @brief Evaluation Board 用ソースファイル「MKY39依存部分」
 * 
 * @copyright (C) 2022- StepTechnica Co.,Ltd.
 * 
 * このソフトウェアは、コピー利用、配布、変更の追加、変更を加えたもの再配布、商用利用、有料販売など、どなたも自由にお使いいただくことができます。
 * このソフトウェアには保証はついていません。
 * このソフトウェアを利用したことで問題が起きた際に、ソフトウェアの製作者は一切の責任を負いません。
 * 
 */

/* -----------------------------------------------------------------------------
 * #include
 */

#include "IO\IB39config.h"
#include "IO\Utility.h"
#include "MKY39\MKY39.h"
#include "MKY39\qspiIO.h"

#include <memory.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>

/* -----------------------------------------------------------------------------
 * #defineマクロ定義
 */
#define	CNT_RESET	100	// Reset Cycle count

/* -----------------------------------------------------------------------------
 * 変数定義
 */
char strPROMPT[16];
char gDeviceType;

#ifdef DEBUG
char strPROMPT[16] = {"MKY39_D>"};
#else
char strPROMPT[16] = {"MKY39>"};
#endif


/* -----------------------------------------------------------------------------
 * 関数プロトタイプ宣言
 */

int MKY_Initialize(void);


/**
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * @brief：MKYデバイス初期化
 * 
 * @note： 基板の設定を読み込み、初期値を格納する
 * 
 * @param  none
 * @retval true : 正常終了
 * 
 */
int MKY_Initialize(void)
{
	char	strCCR[16];

	// Init SPI interface
	QSPI_Initialize();

	// Reset MKY39 (Low -> High)
	drvMKYRESET(false);
	delay_ms(1);
	drvMKYRESET(true);
	delay_ms(10);

	// check Device Type
	gDeviceType = MKY39_x;
	// Read CCR of MKY39-1
	MKY_ReadBlock(OFS_regT1CCR, strCCR, 16);
	if (strncmp(strCCR, VAL_T1CCR, 8) == 0)
	{
		gDeviceType = MKY39_1;
#ifdef DEBUG
		strcpy(strPROMPT, "MKY39-1_D>");
#else
		strcpy(strPROMPT, "MKY39-1>");
#endif
		return(true);
	}

	// Read CCR of MKY39-2
	MKY_ReadBlock(OFS_regT2CCR, strCCR, 16);
	if (strncmp(strCCR, VAL_T2CCR, 8) == 0)
	{
		gDeviceType = MKY39_2;
#ifdef DEBUG
		strcpy(strPROMPT, "MKY39-2_D>");
#else
		strcpy(strPROMPT, "MKY39-2>");
#endif
		return(true);
	}
	else
	{
		return(false);
	}

}
