1 #ifndef DEFINE_HEADER 2 #define DEFINE_HEADER 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <stdarg.h> 6 #include <string.h> 7 #include <sys/stat.h> 8 #include <dirent.h> 9 #include <time.h> 10 #include <unistd.h> 11 #include <iconv.h> 12 #include <wchar.h> 13 #include <errno.h> 14 #include <pthread.h> 15 #include <libusb.h> 16 17 #include "Property.hpp" 18 #include <list> 19 #include <vector> 20 #include <set> 21 #include <string> 22 #include <sstream> 23 #include <algorithm> 24 using namespace std; 25 typedef unsigned char BYTE, *PBYTE; 26 typedef unsigned char UCHAR; 27 typedef unsigned short WCHAR; 28 typedef unsigned short USHORT; 29 typedef unsigned int UINT; 30 typedef unsigned int DWORD; 31 #define ALIGN(x, a) __ALIGN_MASK((x), (a) - 1) 32 #define __ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask)) 33 #define RK28_SEC2_RESERVED_LEN 473 34 #define CHIPINFO_LEN 16 35 #define RK28_SEC3_RESERVED_LEN 382 36 #define RKDEVICE_SN_LEN 60 37 #define RKDEVICE_UID_LEN 30 38 #define RKDEVICE_MAC_LEN 6 39 #define RKDEVICE_WIFI_LEN 6 40 #define RKDEVICE_BT_LEN 6 41 #define RKDEVICE_IMEI_LEN 15 42 typedef enum{ 43 RKNONE_DEVICE = 0, 44 RK27_DEVICE = 0x10, 45 RKCAYMAN_DEVICE, 46 RK28_DEVICE = 0x20, 47 RK281X_DEVICE, 48 RKPANDA_DEVICE, 49 RKNANO_DEVICE = 0x30, 50 RKSMART_DEVICE, 51 RKCROWN_DEVICE = 0x40, 52 RK29_DEVICE = 0x50, 53 RK292X_DEVICE, 54 RK30_DEVICE = 0x60, 55 RK30B_DEVICE, 56 RK31_DEVICE = 0x70, 57 RK32_DEVICE = 0x80 58 } ENUM_RKDEVICE_TYPE; 59 typedef enum{ 60 RK_OS = 0, 61 ANDROID_OS = 0x1 62 } ENUM_OS_TYPE; 63 64 typedef enum{ 65 RKUSB_NONE = 0x0, 66 RKUSB_MASKROM = 0x01, 67 RKUSB_LOADER = 0x02, 68 RKUSB_MSC = 0x04 69 } ENUM_RKUSB_TYPE; 70 typedef enum{ 71 ENTRY471 = 1, 72 ENTRY472 = 2, 73 ENTRYLOADER = 4 74 } ENUM_RKBOOTENTRY; 75 76 #pragma pack(1) 77 typedef struct{ 78 USHORT usYear; 79 BYTE ucMonth; 80 BYTE ucDay; 81 BYTE ucHour; 82 BYTE ucMinute; 83 BYTE ucSecond; 84 } STRUCT_RKTIME, *PSTRUCT_RKTIME; 85 86 typedef struct{ 87 char szItemName[20]; 88 char szItemValue[256]; 89 } STRUCT_CONFIG_ITEM, *PSTRUCT_CONFIG_ITEM; 90 typedef struct 91 { 92 char szItemName[64]; 93 UINT uiItemOffset; 94 UINT uiItemSize; 95 }STRUCT_PARAM_ITEM,*PSTRUCT_PARAM_ITEM; 96 typedef struct _STRUCT_RKDEVICE_DESC{ 97 USHORT usVid; 98 USHORT usPid; 99 USHORT usbcdUsb; 100 UINT uiLocationID; 101 ENUM_RKUSB_TYPE emUsbType; 102 ENUM_RKDEVICE_TYPE emDeviceType; 103 void *pUsbHandle; 104 } STRUCT_RKDEVICE_DESC, *PSTRUCT_RKDEVICE_DESC; 105 typedef struct { 106 DWORD dwTag; 107 BYTE reserved[4]; 108 UINT uiRc4Flag; 109 USHORT usBootCode1Offset; 110 USHORT usBootCode2Offset; 111 BYTE reserved1[490]; 112 USHORT usBootDataSize; 113 USHORT usBootCodeSize; 114 USHORT usCrc; 115 } RK28_IDB_SEC0, *PRK28_IDB_SEC0; 116 117 typedef struct { 118 USHORT usSysReservedBlock; 119 USHORT usDisk0Size; 120 USHORT usDisk1Size; 121 USHORT usDisk2Size; 122 USHORT usDisk3Size; 123 UINT uiChipTag; 124 UINT uiMachineId; 125 USHORT usLoaderYear; 126 USHORT usLoaderDate; 127 USHORT usLoaderVer; 128 USHORT usLastLoaderVer; 129 USHORT usReadWriteTimes; 130 DWORD dwFwVer; 131 USHORT usMachineInfoLen; 132 UCHAR ucMachineInfo[30]; 133 USHORT usManufactoryInfoLen; 134 UCHAR ucManufactoryInfo[30]; 135 USHORT usFlashInfoOffset; 136 USHORT usFlashInfoLen; 137 UCHAR reserved[384]; 138 UINT uiFlashSize; 139 BYTE reserved1; 140 BYTE bAccessTime; 141 USHORT usBlockSize; 142 BYTE bPageSize; 143 BYTE bECCBits; 144 BYTE reserved2[8]; 145 USHORT usIdBlock0; 146 USHORT usIdBlock1; 147 USHORT usIdBlock2; 148 USHORT usIdBlock3; 149 USHORT usIdBlock4; 150 } RK28_IDB_SEC1, *PRK28_IDB_SEC1; 151 152 typedef struct { 153 USHORT usInfoSize; 154 BYTE bChipInfo[CHIPINFO_LEN]; 155 BYTE reserved[RK28_SEC2_RESERVED_LEN]; 156 char szVcTag[3]; 157 USHORT usSec0Crc; 158 USHORT usSec1Crc; 159 UINT uiBootCodeCrc; 160 USHORT usSec3CustomDataOffset; 161 USHORT usSec3CustomDataSize; 162 char szCrcTag[4]; 163 USHORT usSec3Crc; 164 } RK28_IDB_SEC2, *PRK28_IDB_SEC2; 165 166 typedef struct { 167 USHORT usSNSize; 168 BYTE sn[RKDEVICE_SN_LEN]; 169 BYTE reserved[RK28_SEC3_RESERVED_LEN]; 170 BYTE wifiSize; 171 BYTE wifiAddr[RKDEVICE_WIFI_LEN]; 172 BYTE imeiSize; 173 BYTE imei[RKDEVICE_IMEI_LEN]; 174 BYTE uidSize; 175 BYTE uid[RKDEVICE_UID_LEN]; 176 BYTE blueToothSize; 177 BYTE blueToothAddr[RKDEVICE_BT_LEN]; 178 BYTE macSize; 179 BYTE macAddr[RKDEVICE_MAC_LEN]; 180 } RK28_IDB_SEC3, *PRK28_IDB_SEC3; 181 #pragma pack() 182 typedef list<STRUCT_RKDEVICE_DESC> RKDEVICE_DESC_SET; 183 typedef RKDEVICE_DESC_SET::iterator device_list_iter; 184 typedef vector<string> STRING_VECTOR; 185 typedef vector<UINT> UINT_VECTOR; 186 typedef vector<STRUCT_CONFIG_ITEM> CONFIG_ITEM_VECTOR; 187 typedef vector<STRUCT_PARAM_ITEM> PARAM_ITEM_VECTOR; 188 typedef enum{ 189 TESTDEVICE_PROGRESS, 190 DOWNLOADIMAGE_PROGRESS, 191 CHECKIMAGE_PROGRESS, 192 TAGBADBLOCK_PROGRESS, 193 TESTBLOCK_PROGRESS, 194 ERASEFLASH_PROGRESS, 195 ERASESYSTEM_PROGRESS, 196 LOWERFORMAT_PROGRESS, 197 ERASEUSERDATA_PROGRESS 198 } ENUM_PROGRESS_PROMPT; 199 200 typedef enum{ 201 CALL_FIRST, 202 CALL_MIDDLE, 203 CALL_LAST 204 } ENUM_CALL_STEP; 205 206 typedef void (*ProgressPromptCB)(DWORD deviceLayer, ENUM_PROGRESS_PROMPT promptID, long long totalValue, long long currentValue, ENUM_CALL_STEP emCall); 207 208 bool WideStringToString(wchar_t *pszSrc, char *&pszDest); 209 bool StringToWideString(char *pszSrc, wchar_t *&pszDest); 210 #endif