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 9 10 #define RK28_SEC3_RESERVED_LEN 419 11 #define RKANDROID_SEC3_RESERVED_LEN 419 12 13 #define RK28_SEC2_RESERVED_LEN 473 14 #define RKANDROID_SEC2_RESERVED_LEN 473 15 16 17 #define RKDEVICE_CUSTOMDATA_LEN 512 18 #define RKDEVICE_SN_LEN 30 19 #define RKDEVICE_UID_LEN 30 20 #define RKDEVICE_MAC_LEN 6 21 #define RKDEVICE_BT_LEN 6 22 #define RKDEVICE_IMEI_LEN 15 23 24 #define SECTOR_SIZE 512 25 #define SPARE_SIZE 16 26 #define IDB_BLOCKS 5 27 #define CHIPINFO_LEN 16 28 #define IDBLOCK_TOP 50 29 #define WBBUFFER_BOTTOM 5 30 #define WBBUFFER_TOP 10 31 #define CALC_UNIT(a, b) ((a>0)?((a-1)/b+1):(a)) 32 #define BYTE2SECTOR(x) (CALC_UNIT(x, SECTOR_SIZE)) 33 #define PAGEALIGN(x) (CALC_UNIT(x, 4)) 34 //#define MAX_TEST_BLOCKS 512 35 //#define MAX_ERASE_BLOCKS 128 36 #define MAX_WRITE_SECTOR 16 37 #define IOCTL_TRANSFER_SIZE 4096 38 39 #define CRC_TAG "CRC" 40 #pragma pack(1) 41 typedef struct _STRUCT_FLASH_INFO 42 { 43 tchar szManufacturerName[16]; 44 UINT uiFlashSize; //MB 45 USHORT usBlockSize;//KB 46 UINT uiPageSize; //KB 47 UINT uiSectorPerBlock; 48 BYTE blockState[IDBLOCK_TOP]; 49 UINT uiBlockNum; 50 BYTE bECCBits; 51 BYTE bAccessTime; //���η���Flash�ļ��ʱ�� 52 BYTE bFlashCS; // FlashƬѡ(FlashƬѡ������1��������0) 53 USHORT usValidSecPerBlock;//ÿ�����ʹ�õ�������=���С/ҳ��С*4 54 USHORT usPhyBlokcPerIDB;//ÿ��IDBlockռ�õ���������� 55 UINT uiSecNumPerIDB;//ÿ��IDBlockռ�õ������� 56 } STRUCT_FLASH_INFO, *PSTRUCT_FLASH_INFO; 57 typedef struct _STRUCT_FLASHINFO_CMD 58 { 59 UINT uiFlashSize; // Flash��С����SectorΪ��λ�� 60 USHORT usBlockSize; // �����Block��С����SectorΪ��λ�� 61 BYTE bPageSize; // �����Page��С����SectorΪ��λ�� 62 BYTE bECCBits; // 8/14 63 BYTE bAccessTime; // ���η���Flash�ļ��ʱ�� 64 BYTE bManufCode; // ����ʶ���� 65 BYTE bFlashCS; // FlashƬѡ(��FlashƬѡ���ڣ�����Ӧ��Bit��1��������0) 66 BYTE reserved[501]; 67 } STRUCT_FLASHINFO_CMD, *PSTRUCT_FLASHINFO_CMD; 68 typedef struct 69 { 70 BYTE bFlashCS; 71 UINT uiBlockNum; 72 USHORT usBlockStateSize; 73 PBYTE pBlockStateData; 74 } STRUCT_BLOCK_STATE, *PSTRUCT_BLOCK_STATE; 75 #pragma pack() 76 typedef struct 77 { 78 USHORT usVid; 79 USHORT usPid; 80 } STRUCT_DEVICE_PROP; 81 typedef vector<STRUCT_DEVICE_PROP> DEVICE_PROP_SET; 82 83 class CRKDevice 84 { 85 public: 86 87 ENUM_OS_TYPE GetOsType(); 88 void SetOsType(ENUM_OS_TYPE value); 89 property<CRKDevice, ENUM_OS_TYPE, READ_WRITE> OsType; 90 91 void SetUid(PBYTE value); 92 property<CRKDevice, PBYTE, WRITE_ONLY> Uid; 93 94 void SetPrepareEraseFlag(bool value); 95 property<CRKDevice, bool, WRITE_ONLY> PrepareEraseFlag; 96 97 void SetWorkFlow(UINT value); 98 property<CRKDevice, UINT, WRITE_ONLY> WorkFlow; 99 100 void SetMiscModifyFlag(ENUM_MISC_MODIFY_FLAG value); 101 property<CRKDevice, ENUM_MISC_MODIFY_FLAG, WRITE_ONLY> MiscModifyFlag; 102 103 CRKLog *GetLogObjectPointer(); 104 property<CRKDevice, CRKLog *, READ_ONLY> LogObjectPointer; 105 106 CRKComm *GetCommObjectPointer(); 107 property<CRKDevice, CRKComm *, READ_ONLY> CommObjectPointer; 108 109 virtual int DownloadIDBlock() = 0; 110 virtual int DownloadImage() = 0; 111 virtual int PrepareIDB() = 0; 112 virtual bool BufferWriteBack() = 0; 113 114 115 bool CheckChip(); 116 bool GetFlashInfo(); 117 virtual int EraseIDB() = 0; 118 virtual int EraseAllBlocks() = 0; 119 bool SetObject(CRKImage *pImage, CRKComm *pComm, CRKLog *pLog); 120 CRKDevice(STRUCT_RKDEVICE_DESC &device); 121 virtual ~CRKDevice(); 122 protected: 123 STRUCT_FLASH_INFO m_flashInfo; 124 PBYTE m_pFlashInfoData; 125 USHORT m_usFlashInfoDataOffset; 126 USHORT m_usFlashInfoDataLen; 127 DWORD m_idBlockOffset[IDB_BLOCKS]; 128 PBYTE m_chipData; 129 CRKImage *m_pImage; 130 CRKComm *m_pComm; 131 CRKLog *m_pLog; 132 PBYTE m_customData; 133 USHORT m_customDataSize; 134 USHORT m_customDataOffset; 135 PBYTE m_sn; 136 BYTE m_snSize; 137 PBYTE m_mac; 138 PBYTE m_blueTooth; 139 PBYTE m_uid; 140 PBYTE m_imei; 141 USHORT m_sysDiskSize; 142 USHORT m_cfgDiskSize; 143 bool m_bGetNewDiskSizeFlag; 144 bool m_bExistSector3Crc; 145 USHORT m_usSector3Crc; 146 USHORT m_usWriteBackCrc; 147 USHORT m_usWriteBackCustomDataOffset; 148 USHORT m_usWriteBackCustomDataSize; 149 PSTRUCT_BLOCK_STATE m_pBlockState; 150 BYTE m_backupBuffer[SECTOR_SIZE + SPARE_SIZE]; 151 bool m_bWriteBack; 152 UINT m_uiWorkFlow; 153 bool m_bEraseInPrepare; 154 bool m_bUidUseFlag; 155 bool m_bUidWriteOK; 156 bool m_remallocDisk; 157 bool m_bEmmc; 158 bool GptFlag; 159 bool DirectLBA; 160 bool First4Access; 161 ENUM_MISC_MODIFY_FLAG m_emMiscModifyFlag; 162 bool m_bQuickCheckMode; 163 bool BuildBlockStateMap(BYTE bFlashCS); 164 int ReadMutilSector(DWORD dwPos, DWORD dwCount, PBYTE lpBuffer); 165 bool EraseMutilBlock(BYTE bFlashCS, DWORD dwPos, DWORD dwCount, bool bForce); 166 CHAR FindValidBlocks(char bBegin, char bLen); 167 BYTE RandomByte(BYTE bLowLimit, BYTE bHighLimit); 168 bool CheckCrc16(PBYTE pCheckData, USHORT usDataLength, USHORT usOldCrc); 169 bool CheckUid(BYTE uidSize, BYTE *pUid); 170 bool GetWriteBackData(UINT uiIDBCount, PBYTE lpBuf); 171 bool GetIDBData(UINT uiIDBCount, PBYTE lpBuf, UINT uiSecCount); 172 int EraseEmmcBlock(UCHAR ucFlashCS, DWORD dwPos, DWORD dwCount); 173 virtual bool FindBackupBuffer() = 0; 174 virtual char FindAllIDB() = 0; 175 virtual CHAR FindIDBlock(char pos, char &IDBlockPos) = 0; 176 virtual bool ReserveIDBlock(char iBlockIndex = 0, char iIdblockPos = 0) = 0; 177 virtual bool OffsetIDBlock(char pos) = 0; 178 virtual bool MakeSector0(PBYTE pSector) = 0; 179 virtual void MakeSector1(PBYTE pSector) = 0; 180 virtual bool MakeSector2(PBYTE pSector) = 0; 181 virtual bool MakeSector3(PBYTE pSector) = 0; 182 virtual int MakeIDBlockData(PBYTE lpIDBlock) = 0; 183 virtual bool MakeSpareData(PBYTE lpIDBlock, DWORD dwSectorNum, PBYTE lpSpareBuffer) = 0; 184 virtual int WriteIDBlock(PBYTE lpIDBlock, DWORD dwSectorNum, bool bErase) = 0; 185 186 private: 187 ENUM_RKDEVICE_TYPE m_device; 188 ENUM_OS_TYPE m_os; 189 ENUM_RKUSB_TYPE m_usb; 190 USHORT m_bcdUsb; 191 }; 192 193 USHORT UshortToBCD(USHORT num); 194 BYTE ByteToBCD(BYTE num); 195 extern USHORT CRC_16(BYTE *aData, UINT aSize); 196 extern UINT CRC_32(PBYTE pData, UINT ulSize, UINT uiPreviousValue = 0); 197 extern void P_RC4(BYTE *buf, USHORT len); 198 extern void bch_encode(BYTE *encode_in, BYTE *encode_out); 199 extern USHORT CRC_CCITT(UCHAR *p, UINT CalculateNumber); 200 extern void generate_gf(); 201 extern void gen_poly(); 202 #endif 203