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