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