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(); 96e541b7bbSliuyi int EraseAllBlocks(bool force_block_erase=false); 9776af099aSliuyi bool SetObject(CRKImage *pImage, CRKComm *pComm, CRKLog *pLog); 98*21b25fd4SDave Murphy string GetLayerString(UINT 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; 112081d237aSliuyi bool m_bDirectLba; 113081d237aSliuyi 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); 118081d237aSliuyi 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 132