xref: /rkdeveloptool/RKDevice.h (revision 76af099afcbcafd97801028de2ba3421d3c12865)
1*76af099aSliuyi #ifndef RKDEVICE_HEADER
2*76af099aSliuyi #define RKDEVICE_HEADER
3*76af099aSliuyi #include "RKImage.h"
4*76af099aSliuyi #include "RKComm.h"
5*76af099aSliuyi #include "RKLog.h"
6*76af099aSliuyi #include "DefineHeader.h"
7*76af099aSliuyi 
8*76af099aSliuyi #define SECTOR_SIZE 512
9*76af099aSliuyi #define PAGE_SIZE 2048
10*76af099aSliuyi #define SPARE_SIZE 16
11*76af099aSliuyi #define CHIPINFO_LEN 16
12*76af099aSliuyi #define IDBLOCK_TOP 50
13*76af099aSliuyi 
14*76af099aSliuyi #define CALC_UNIT(a, b)		((a > 0) ? ((a - 1) / b + 1) : (a))
15*76af099aSliuyi #define BYTE2SECTOR(x)		(CALC_UNIT(x, SECTOR_SIZE))
16*76af099aSliuyi #define PAGEALIGN(x)		(CALC_UNIT(x, 4))
17*76af099aSliuyi 
18*76af099aSliuyi #pragma pack(1)
19*76af099aSliuyi typedef struct _STRUCT_FLASH_INFO {
20*76af099aSliuyi 	char	szManufacturerName[16];
21*76af099aSliuyi 	UINT	uiFlashSize;
22*76af099aSliuyi 	USHORT	usBlockSize;
23*76af099aSliuyi 	UINT	uiPageSize;
24*76af099aSliuyi 	UINT	uiSectorPerBlock;
25*76af099aSliuyi 	BYTE	blockState[IDBLOCK_TOP];
26*76af099aSliuyi 	UINT	uiBlockNum;
27*76af099aSliuyi 	BYTE	bECCBits;
28*76af099aSliuyi 	BYTE	bAccessTime;
29*76af099aSliuyi 	BYTE	bFlashCS;
30*76af099aSliuyi 	USHORT  usValidSecPerBlock;
31*76af099aSliuyi 	USHORT  usPhyBlokcPerIDB;
32*76af099aSliuyi 	UINT    uiSecNumPerIDB;
33*76af099aSliuyi } STRUCT_FLASH_INFO, *PSTRUCT_FLASH_INFO;
34*76af099aSliuyi typedef struct _STRUCT_FLASHINFO_CMD {
35*76af099aSliuyi 	UINT	uiFlashSize;
36*76af099aSliuyi 	USHORT	usBlockSize;
37*76af099aSliuyi 	BYTE	bPageSize;
38*76af099aSliuyi 	BYTE	bECCBits;
39*76af099aSliuyi 	BYTE	bAccessTime;
40*76af099aSliuyi 	BYTE	bManufCode;
41*76af099aSliuyi 	BYTE	bFlashCS;
42*76af099aSliuyi 	BYTE	reserved[501];
43*76af099aSliuyi } STRUCT_FLASHINFO_CMD, *PSTRUCT_FLASHINFO_CMD;
44*76af099aSliuyi #pragma pack()
45*76af099aSliuyi 
46*76af099aSliuyi class CRKDevice
47*76af099aSliuyi {
48*76af099aSliuyi public:
49*76af099aSliuyi 	USHORT GetVendorID();
50*76af099aSliuyi 	void SetVendorID(USHORT value);
51*76af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> VendorID;
52*76af099aSliuyi 
53*76af099aSliuyi 	USHORT GetProductID();
54*76af099aSliuyi 	void SetProductID(USHORT value);
55*76af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> ProductID;
56*76af099aSliuyi 
57*76af099aSliuyi 	ENUM_RKDEVICE_TYPE GetDeviceType();
58*76af099aSliuyi 	void SetDeviceType(ENUM_RKDEVICE_TYPE value);
59*76af099aSliuyi  	property<CRKDevice, ENUM_RKDEVICE_TYPE, READ_WRITE> DeviceType;
60*76af099aSliuyi 
61*76af099aSliuyi 	ENUM_RKUSB_TYPE GetUsbType();
62*76af099aSliuyi 	void SetUsbType(ENUM_RKUSB_TYPE value);
63*76af099aSliuyi  	property<CRKDevice, ENUM_RKUSB_TYPE, READ_WRITE> UsbType;
64*76af099aSliuyi 
65*76af099aSliuyi 	char *GetLayerName();
66*76af099aSliuyi 	void SetLayerName(char *value);
67*76af099aSliuyi  	property<CRKDevice, char *, READ_WRITE> LayerName;
68*76af099aSliuyi 
69*76af099aSliuyi 	DWORD GetLocationID();
70*76af099aSliuyi 	void SetLocationID(DWORD value);
71*76af099aSliuyi  	property<CRKDevice, DWORD, READ_WRITE> LocationID;
72*76af099aSliuyi 
73*76af099aSliuyi 	USHORT GetBcdUsb();
74*76af099aSliuyi 	void SetBcdUsb(USHORT value);
75*76af099aSliuyi  	property<CRKDevice, USHORT, READ_WRITE> BcdUsb;
76*76af099aSliuyi 
77*76af099aSliuyi 	ENUM_OS_TYPE GetOsType();
78*76af099aSliuyi 	void SetOsType(ENUM_OS_TYPE value);
79*76af099aSliuyi  	property<CRKDevice, ENUM_OS_TYPE, READ_WRITE> OsType;
80*76af099aSliuyi 
81*76af099aSliuyi 	CRKLog *GetLogObjectPointer();
82*76af099aSliuyi  	property<CRKDevice, CRKLog *, READ_ONLY> LogObjectPointer;
83*76af099aSliuyi 
84*76af099aSliuyi 	CRKComm *GetCommObjectPointer();
85*76af099aSliuyi  	property<CRKDevice, CRKComm *, READ_ONLY> CommObjectPointer;
86*76af099aSliuyi 
87*76af099aSliuyi 	void SetCallBackPointer(ProgressPromptCB value);
88*76af099aSliuyi  	property<CRKDevice, ProgressPromptCB, WRITE_ONLY> CallBackPointer;
89*76af099aSliuyi 
90*76af099aSliuyi 	int DownloadBoot();
91*76af099aSliuyi 	bool TestDevice();
92*76af099aSliuyi 	bool ResetDevice();
93*76af099aSliuyi 	bool PowerOffDevice();
94*76af099aSliuyi 	bool CheckChip();
95*76af099aSliuyi 	bool GetFlashInfo();
96*76af099aSliuyi 	int EraseAllBlocks();
97*76af099aSliuyi 	bool SetObject(CRKImage *pImage, CRKComm *pComm, CRKLog *pLog);
98*76af099aSliuyi 	string GetLayerString(DWORD dwLocationID);
99*76af099aSliuyi 	CRKDevice(STRUCT_RKDEVICE_DESC &device);
100*76af099aSliuyi 	~CRKDevice();
101*76af099aSliuyi protected:
102*76af099aSliuyi 	STRUCT_FLASH_INFO m_flashInfo;
103*76af099aSliuyi 	PBYTE	m_pFlashInfoData;
104*76af099aSliuyi 	USHORT	m_usFlashInfoDataOffset;
105*76af099aSliuyi 	USHORT  m_usFlashInfoDataLen;
106*76af099aSliuyi 	PBYTE  m_chipData;
107*76af099aSliuyi 	CRKImage *m_pImage;
108*76af099aSliuyi 	CRKComm  *m_pComm;
109*76af099aSliuyi 	CRKLog   *m_pLog;
110*76af099aSliuyi 	ProgressPromptCB m_callBackProc;
111*76af099aSliuyi 	bool m_bEmmc;
112*76af099aSliuyi 	int EraseEmmcBlock(UCHAR ucFlashCS, DWORD dwPos, DWORD dwCount);
113*76af099aSliuyi 	int EraseEmmcByWriteLBA(DWORD dwSectorPos, DWORD dwCount);
114*76af099aSliuyi 	bool EraseEmmc();
115*76af099aSliuyi 	bool Boot_VendorRequest(DWORD requestCode, PBYTE pBuffer, DWORD dwDataSize);
116*76af099aSliuyi private:
117*76af099aSliuyi 	USHORT m_vid;
118*76af099aSliuyi 	USHORT m_pid;
119*76af099aSliuyi 	ENUM_RKDEVICE_TYPE m_device;
120*76af099aSliuyi 	ENUM_OS_TYPE m_os;
121*76af099aSliuyi 	ENUM_RKUSB_TYPE m_usb;
122*76af099aSliuyi 	UINT m_locationID;
123*76af099aSliuyi 	USHORT m_bcdUsb;
124*76af099aSliuyi protected:
125*76af099aSliuyi 	char  m_layerName[32];
126*76af099aSliuyi };
127*76af099aSliuyi 
128*76af099aSliuyi #endif