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