xref: /rkdeveloptool/RKDevice.h (revision 081d237ad5bf8f03170c9d60bd94ceefa0352aaf)
176af099aSliuyi #ifndef RKDEVICE_HEADER
276af099aSliuyi #define RKDEVICE_HEADER
376af099aSliuyi #include "RKImage.h"
476af099aSliuyi #include "RKComm.h"
576af099aSliuyi #include "RKLog.h"
676af099aSliuyi #include "DefineHeader.h"
776af099aSliuyi 
876af099aSliuyi #define SECTOR_SIZE 512
976af099aSliuyi #define PAGE_SIZE 2048
1076af099aSliuyi #define SPARE_SIZE 16
1176af099aSliuyi #define CHIPINFO_LEN 16
1276af099aSliuyi #define IDBLOCK_TOP 50
1376af099aSliuyi 
1476af099aSliuyi #define CALC_UNIT(a, b)		((a > 0) ? ((a - 1) / b + 1) : (a))
1576af099aSliuyi #define BYTE2SECTOR(x)		(CALC_UNIT(x, SECTOR_SIZE))
1676af099aSliuyi #define PAGEALIGN(x)		(CALC_UNIT(x, 4))
1776af099aSliuyi 
1876af099aSliuyi #pragma pack(1)
1976af099aSliuyi typedef struct _STRUCT_FLASH_INFO {
2076af099aSliuyi 	char	szManufacturerName[16];
2176af099aSliuyi 	UINT	uiFlashSize;
2276af099aSliuyi 	USHORT	usBlockSize;
2376af099aSliuyi 	UINT	uiPageSize;
2476af099aSliuyi 	UINT	uiSectorPerBlock;
2576af099aSliuyi 	BYTE	blockState[IDBLOCK_TOP];
2676af099aSliuyi 	UINT	uiBlockNum;
2776af099aSliuyi 	BYTE	bECCBits;
2876af099aSliuyi 	BYTE	bAccessTime;
2976af099aSliuyi 	BYTE	bFlashCS;
3076af099aSliuyi 	USHORT  usValidSecPerBlock;
3176af099aSliuyi 	USHORT  usPhyBlokcPerIDB;
3276af099aSliuyi 	UINT    uiSecNumPerIDB;
3376af099aSliuyi } STRUCT_FLASH_INFO, *PSTRUCT_FLASH_INFO;
3476af099aSliuyi typedef struct _STRUCT_FLASHINFO_CMD {
3576af099aSliuyi 	UINT	uiFlashSize;
3676af099aSliuyi 	USHORT	usBlockSize;
3776af099aSliuyi 	BYTE	bPageSize;
3876af099aSliuyi 	BYTE	bECCBits;
3976af099aSliuyi 	BYTE	bAccessTime;
4076af099aSliuyi 	BYTE	bManufCode;
4176af099aSliuyi 	BYTE	bFlashCS;
4276af099aSliuyi 	BYTE	reserved[501];
4376af099aSliuyi } STRUCT_FLASHINFO_CMD, *PSTRUCT_FLASHINFO_CMD;
4476af099aSliuyi #pragma pack()
4576af099aSliuyi 
4676af099aSliuyi class CRKDevice
4776af099aSliuyi {
4876af099aSliuyi public:
4976af099aSliuyi 	USHORT GetVendorID();
5076af099aSliuyi 	void SetVendorID(USHORT value);
5176af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> VendorID;
5276af099aSliuyi 
5376af099aSliuyi 	USHORT GetProductID();
5476af099aSliuyi 	void SetProductID(USHORT value);
5576af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> ProductID;
5676af099aSliuyi 
5776af099aSliuyi 	ENUM_RKDEVICE_TYPE GetDeviceType();
5876af099aSliuyi 	void SetDeviceType(ENUM_RKDEVICE_TYPE value);
5976af099aSliuyi  	property<CRKDevice, ENUM_RKDEVICE_TYPE, READ_WRITE> DeviceType;
6076af099aSliuyi 
6176af099aSliuyi 	ENUM_RKUSB_TYPE GetUsbType();
6276af099aSliuyi 	void SetUsbType(ENUM_RKUSB_TYPE value);
6376af099aSliuyi  	property<CRKDevice, ENUM_RKUSB_TYPE, READ_WRITE> UsbType;
6476af099aSliuyi 
6576af099aSliuyi 	char *GetLayerName();
6676af099aSliuyi 	void SetLayerName(char *value);
6776af099aSliuyi  	property<CRKDevice, char *, READ_WRITE> LayerName;
6876af099aSliuyi 
6976af099aSliuyi 	DWORD GetLocationID();
7076af099aSliuyi 	void SetLocationID(DWORD value);
7176af099aSliuyi  	property<CRKDevice, DWORD, READ_WRITE> LocationID;
7276af099aSliuyi 
7376af099aSliuyi 	USHORT GetBcdUsb();
7476af099aSliuyi 	void SetBcdUsb(USHORT value);
7576af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> BcdUsb;
7676af099aSliuyi 
7776af099aSliuyi 	ENUM_OS_TYPE GetOsType();
7876af099aSliuyi 	void SetOsType(ENUM_OS_TYPE value);
7976af099aSliuyi  	property<CRKDevice, ENUM_OS_TYPE, READ_WRITE> OsType;
8076af099aSliuyi 
8176af099aSliuyi 	CRKLog *GetLogObjectPointer();
8276af099aSliuyi  	property<CRKDevice, CRKLog *, READ_ONLY> LogObjectPointer;
8376af099aSliuyi 
8476af099aSliuyi 	CRKComm *GetCommObjectPointer();
8576af099aSliuyi  	property<CRKDevice, CRKComm *, READ_ONLY> CommObjectPointer;
8676af099aSliuyi 
8776af099aSliuyi 	void SetCallBackPointer(ProgressPromptCB value);
8876af099aSliuyi  	property<CRKDevice, ProgressPromptCB, WRITE_ONLY> CallBackPointer;
8976af099aSliuyi 
9076af099aSliuyi 	int DownloadBoot();
9176af099aSliuyi 	bool TestDevice();
9276af099aSliuyi 	bool ResetDevice();
9376af099aSliuyi 	bool PowerOffDevice();
9476af099aSliuyi 	bool CheckChip();
9576af099aSliuyi 	bool GetFlashInfo();
9676af099aSliuyi 	int EraseAllBlocks();
9776af099aSliuyi 	bool SetObject(CRKImage *pImage, CRKComm *pComm, CRKLog *pLog);
9876af099aSliuyi 	string GetLayerString(DWORD dwLocationID);
9976af099aSliuyi 	CRKDevice(STRUCT_RKDEVICE_DESC &device);
10076af099aSliuyi 	~CRKDevice();
10176af099aSliuyi protected:
10276af099aSliuyi 	STRUCT_FLASH_INFO m_flashInfo;
10376af099aSliuyi 	PBYTE	m_pFlashInfoData;
10476af099aSliuyi 	USHORT	m_usFlashInfoDataOffset;
10576af099aSliuyi 	USHORT  m_usFlashInfoDataLen;
10676af099aSliuyi 	PBYTE  m_chipData;
10776af099aSliuyi 	CRKImage *m_pImage;
10876af099aSliuyi 	CRKComm  *m_pComm;
10976af099aSliuyi 	CRKLog   *m_pLog;
11076af099aSliuyi 	ProgressPromptCB m_callBackProc;
11176af099aSliuyi 	bool m_bEmmc;
112*081d237aSliuyi 	bool m_bDirectLba;
113*081d237aSliuyi 	bool m_bFirst4mAccess;
11476af099aSliuyi 	int EraseEmmcBlock(UCHAR ucFlashCS, DWORD dwPos, DWORD dwCount);
11576af099aSliuyi 	int EraseEmmcByWriteLBA(DWORD dwSectorPos, DWORD dwCount);
11676af099aSliuyi 	bool EraseEmmc();
11776af099aSliuyi 	bool Boot_VendorRequest(DWORD requestCode, PBYTE pBuffer, DWORD dwDataSize);
118*081d237aSliuyi 	bool ReadCapability();
11976af099aSliuyi private:
12076af099aSliuyi 	USHORT m_vid;
12176af099aSliuyi 	USHORT m_pid;
12276af099aSliuyi 	ENUM_RKDEVICE_TYPE m_device;
12376af099aSliuyi 	ENUM_OS_TYPE m_os;
12476af099aSliuyi 	ENUM_RKUSB_TYPE m_usb;
12576af099aSliuyi 	UINT m_locationID;
12676af099aSliuyi 	USHORT m_bcdUsb;
12776af099aSliuyi protected:
12876af099aSliuyi 	char  m_layerName[32];
12976af099aSliuyi };
13076af099aSliuyi 
13176af099aSliuyi #endif