[Feature][ZXW-33]merge ZXW 0428 version

Change-Id: I11f167edfea428d9fab198ff00ff1364932d1b0b
diff --git a/ap/hostapp/zdownloader/download.h b/ap/hostapp/zdownloader/download.h
new file mode 100755
index 0000000..0fae875
--- /dev/null
+++ b/ap/hostapp/zdownloader/download.h
@@ -0,0 +1,476 @@
+#ifndef _DOWNLOAD_H_
+#define _DOWNLOAD_H_
+
+#include "define.h"
+
+// BI层最大支持线程数
+#define TSP_THREAD_NUM      64
+
+// 下载文件类型
+#define FLASH                   (0x01)
+#define EXTSRAM                 (0x02)
+#define FPGA                    (0x03)
+#define RAMIMAGE                (0x04)
+#define NVBACKUP                (0x05)
+#define ZPHY_ERFC_CA_NUMBER     2
+
+// 串行口参数配置
+#define READ_INTERVAL_TIMEOUT           (0)
+#define READ_TOTAL_TIMEOUT_MULTIPLIER   (0)
+#define READ_TOTAL_TIMEOUT_CONSTANT     (0)
+#define WRITE_TOTAL_TIMEOUT_MULTIPLIER  (0)
+#define WRITE_TOTAL_TIMEOUT_CONSTANT    (1000)
+
+// 收发数据包大小
+#define READ_QUEUE      (4096)
+#define WRITE_QUEUE     (4096)
+
+// 波特率设置选项
+#define NO_OF_PARAMS    (7)
+#define COM_PORT        (1)
+#define BAUD_RATE       (2)
+#define PARITY          (3)
+#define STOP_BITS       (4)
+#define DATA_BITS       (5)
+#define READ_INTVL      (6)
+#define TOTAL_TIME      (7)
+
+//
+//#define BUFFERLEN             1100
+#define AT_CMD_TYPE_TEST      1000
+#define AT_CMD_TYPE_AT        1001
+#define INFO_PACKET_LEN       1024
+// 下载的配置文件选项
+#define VERSION_NUM           4
+
+#define CONFIG_SECTION_CFG                  _T("Configuration")
+#define CONFIG_SECTION_VERSION              _T("Version")
+#define CONFIG_SECTION_CHIPDETAILS          _T("ChipDetails")
+#define CONFIG_SECTION_ARM_BIN              _T("ArmBin")
+#define CONFIG_SECTION_ZSP_BIN              _T("ZspBin")
+#define CONFIG_SECTION_ZSPCC_BIN            _T("ZspCCBin")
+#define CONFIG_SECTION_ARM1_BIN             _T("Arm1Bin")
+#define CONFIG_SECTION_TDNV_BIN             _T("TDNVBin")
+#define CONFIG_SECTION_AP_BIN               _T("APBin")
+#define CONFIG_SECTION_RAMDISK_BIN          _T("RAMDiskBin")
+#define CONFIG_SECTION_PHY_FILES_INFO       _T("AMT_PHY_FILES_INFO")
+#define CONFIG_SECTION_DOWNLOAD_IMAGE       _T("DownloadImage")
+#define CONFIG_SECTION_NV_BACKUP            _T("NVBackup")
+#define CONFIG_SECTION_INDEX_LIST           _T("IndexList")
+#define CONFIG_SECTION_IN_SOFTVERSION       _T("SoftVersionIn")
+#define CONFIG_SECTION_OUT_SOFTVERSION      _T("SoftVersionOut")
+#define CONFIG_SECTION_SSID_FLAG            _T("SSIDFlag")
+#define CONFIG_SECTION_SSID                 _T("SSID")
+
+#define CONFIG_SECTION_BUILD_DATE           _T("BuildDate")
+#define CONFIG_SECTION_BUILD_TIME           _T("BuildTime")
+#define CONFIG_SECTION_RALETIVEPATHBOOT     _T("RaletivePathBOOT")
+#define CONFIG_SECTION_RALETIVEPATHAT       _T("RaletivePathAT")
+#define CONFIG_SECTION_RALETIVEPATHATLC     _T("RaletivePathATLC")
+#define CONFIG_SECTION_RALETIVEPATHLOG      _T("RaletivePathLOG")
+#define CONFIG_SECTION_RALETIVEPATHFT       _T("RaletivePathFT")
+#define CONFIG_KEY_VERSION                  _T("Version")
+#define CONFIG_KEY_FILE                     _T("File")
+#define CONFIG_KEY_STARTADDRESS             _T("StartAddress")
+#define CONFIG_KEY_ENDADDRESS               _T("EndAddress")
+#define CONFIG_KEY_TYPE                     _T("Type")
+#define CONFIG_KEY_DEBUGINFO                _T("DebugInfo")
+#define CONFIG_KEY_OPENLOGPORT              _T("IsOpenLogPort")
+#define CONFIG_KEY_NVBACKUPCOUNT            _T("NVItemCount")
+#define CONFIG_KEY_TLFILE                   _T("TLFile")
+#define CONFIG_KEY_TLSTARTADDRESS           _T("TLStartAddress")
+#define CONFIG_KEY_TDPSTARTADDRESS          _T("TDPStartAddress")
+#define CONFIG_KEY_FLASHSTARTADDRESS        _T("FlashStartAddress")
+#define CONFIG_KEY_COUNT                    _T("Count")
+#define CONFIG_KEY_MANUID                   _T("ManuID")
+#define CONFIG_KEY_DEVICEID                 _T("DeviceID")
+#define CONFIG_KEY_TDPPATH                  _T("TDPPath")
+#define CONFIG_KEY_RELATIVEPATH             _T("UseRelativePath")
+#define CONFIG_KEY_READFROMFILE             _T("ReadFromFile")
+#define CONFIG_KEY_FILESYSTEM               _T("FileSystem")
+#define CONFIG_KEY_LENGTH                   _T("Length")
+#define CONFIG_KEY_BUILD_DATE               _T("BuildDate")
+#define CONFIG_KEY_BUILD_TIME               _T("BuildTime")
+#define CONFIG_KEY_SN_INDEX                 _T("SNIndex")
+// ....by wong
+#define CONFIG_KEY_HARDWARE_SN_INDEX        _T("HARDWARE_SNIndex")
+#define CONFIG_KEY_IMEI_INDEX               _T("IMEIIndex")
+#define CONFIG_KEY_WIFI_MAC_INDEX           _T("WIFIIndex")
+#define CONFIG_KEY_RJ45_MAC_INDEX           _T("RJ45MACIndex")
+#define CONFIG_KEY_TESTINFO_INDEX           _T("TestInfoIndex")
+#define CONFIG_KEY_SN_BACKUP_INDEX          _T("SNBackupIndex")
+#define CONFIG_KEY_IMEI_BACKUP_INDEX        _T("IMEIBackupIndex")
+#define CONFIG_KEY_TESTINFO_BACKUP_INDEX    _T("TestInfoBackupIndex")
+#define CONFIG_KEY_BBACKUPAREA              _T("bBackupArea")
+#define CONFIG_KEY_RALETIVEPATH             _T("RaletivePath")
+#define CONFIG_KEY_ATVERSION                _T("AtVersion")
+#define CONFIG_KEY_TESTINFODOWNLOAD			_T("TestInfoDLPV")
+
+//#define CONFIG_KET_ISBOOTROM				_T("IsBootRom")
+#define CONFIG_KEY_USBORUARTPORT            _T("USBORUARTPORT")
+#define CONFIG_KEY_BOOTSTAGE1FILE           _T("BootStage1File")   //add zxw 20130422 for 296301
+#define CONFIG_KEY_BOOTSTAGE1STARTADDRESS   _T("BootStage1StartAddress")
+#define CONFIG_KEY_BOOTSTAGE2FILE           _T("BootStage2File")   //add zxw 20120422 for 296301
+#define CONFIG_KEY_BOOTSTAGE2STARTADDRESS   _T("BootStage2StartAddress")
+#define CONFIG_KEY_PARTITIONFILE            _T("PartitionFile")   //add zxw 20120422 for 296301
+#define CONFIG_KEY_PARTITIONSTARTADDRESS    _T("PartitionStartAddress")
+#define CONFIG_KEY_PARTITIONNAME            _T("PartitionName")
+#define CONFIG_KEY_PARTITIONTYPE            _T("PartitionType")
+#define CONFIG_KEY_STARTAMTCMD              _T("StartAMTCMD")
+#define CONFIG_KEY_ISDOWNLOAD_PV            _T("ISDownLoadPV")
+#define CONFIG_KEY_PHY_FILE_NUMS            _T("FileNumber")
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+// For CDownload
+#define BI_TSP_ERROR_BASE_CDownload         (BI_TSP_ERROR_BASE_CTransmit + 10000)
+
+typedef enum
+{
+    TYPE_BOOT,              // 从TYPE_BOOT到TYPE_TEST_AUTO
+    TYPE_BOOT_AUTO,         // 属于老版本设计的思路,其初衷
+    TYPE_EVB_TEST,          // 是按照EVB、FWP、DATACARD进行
+    TYPE_EVB_LOG,           // 分类,根据配置界面(校准的脚本)
+    TYPE_FWP_TEST,          // 设置对应的值,达到找到对应端口
+    TYPE_FWP_LOG,           // 的目的。这种做法看似简单,但
+    TYPE_DATACARD_TEST,     // 带来了维护方面的困难,因此,
+    TYPE_DATACARD_LOG,      // 将采用新的方法进行兼容性过度
+    TYPE_TEST_AUTO,
+    TYPE_AT,                // 过度的准则是:在配置文件中设置对应端口的匹配信息
+    TYPE_LOG,               // 所有项目通过这对统一的入口与端口对接
+    TYPE_FT,                // 打开FT的AT口
+    TYPE_BOOT_P93B,         // P93B的Boot口
+    TYPE_AT_P93B,           // P93B的AT口
+    TYPE_AT_LC,
+    TYPE_INVALID = 99,
+} enCOMTYPE;
+
+typedef enum
+{
+    TYPE_GPIB = 0,
+    TYPE_LAN,
+
+} enTransferType;
+
+typedef enum
+{
+	OFF_STATE =0,
+	ON_STATE,
+	ERR_STATE,
+
+} enBootFlag;
+// BOOT口列表
+#define TYPE_BOOT_LIST  TYPE_BOOT, TYPE_BOOT_P93B
+// AT口列表
+#define TYPE_AT_LIST    TYPE_EVB_TEST, TYPE_FWP_TEST, TYPE_DATACARD_TEST, TYPE_AT, TYPE_FT, TYPE_AT_P93B
+// LOT口列表
+#define TYPE_LOG_LIST   TYPE_EVB_LOG, TYPE_FWP_LOG, TYPE_DATACARD_LOG
+
+typedef struct _COMSTRUCT
+{
+#pragma pack(1)
+    BYTE    byByteSize;
+    BYTE    byParity;
+    BYTE    byStopBits;
+    DWORD   dwBaudRate;
+    DWORD   dwReadInterval;
+    DWORD   dwTotalTime;
+#pragma pack()
+} COMSTRUCT;
+
+typedef struct
+{
+    int   cmd;
+    unsigned char   Msg[INFO_PACKET_LEN];
+}Msg_PACKET;
+
+// start =============================================================================================
+#define DLTYPE_CONTROL_BEGIN() \
+typedef enum{ \
+DLTYPE_OWNERSTATE_START	= 0x00, \
+
+#define DLTYPE_CONTROL_END() \
+DLTYPE_OWNERSTATE_END = 0X11, \
+}enDLTYPE_CONTROL;
+//  CDownload绑定状态位索引
+// 下载类型绑定状态位,enDownloadType高字合计2个字节空间,支持16个小bool位控制从BI传入BL
+// 如: 免PV的标志位IsNoPVDownLoad变量传入
+// 若已经使用某一位,则不可再复用
+
+#define STATEFLAG(x) (1<<x)
+
+DLTYPE_CONTROL_BEGIN()						// start 在此内部添加[下载类型绑定状态位]传入BL
+	DLTYPE_OWNERSTATE_NONEPV			= STATEFLAG(0),		// 免PV控制开关
+	DLTYPE_OWNERSTATE_NONEPV_ERASEAUTO	= STATEFLAG(1),
+	DLTYPE_OWNERSTATE_NONEPV_ERASEALL	= STATEFLAG(2),
+	// TODO
+
+DLTYPE_CONTROL_END()						// end
+// end    =============================================================================================
+
+
+//CDownload
+typedef enum
+{
+	DOWNLOAD_TYPE_AMT,
+    DOWNLOAD_TYPE_AMT_MODEM,        //modem 小系统
+    DOWNLOAD_TYPE_AMT_AP,           // AP小系统
+    DOWNLOAD_TYPE_IMAGE,            // 版本文件
+    DOWNLOAD_TYPE_NV_IMAGE,         // NV镜像文件
+    DOWNLOAD_TYPE_NV,               // NV 备份文件
+    DOWNLOAD_TYPE_SN,               // SN文件
+    DOWNLOAD_TYPE_IMEI,             // IMEI文件
+    DOWNLOAD_TYPE_TESTINFO,         // TESTINFO文件
+    DOWNLOAD_TYPE_SN_BACKUP,        // SN Backup文件
+    DOWNLOAD_TYPE_IMEI_BACKUP,      // IMEI Backup文件
+    DOWNLOAD_TYPE_TESTINFO_BACKUP,  // TESTINFO Backup文件
+    DOWNLOAD_TYPE_IN_SOFTVERSION,      // SoftVersion文件
+    DOWNLOAD_TYPE_MAC_WIFI,
+    DOWNLOAD_TYPE_SSID_FLAG,
+    DOWNLOAD_TYPE_SSID,
+    DOWNLOAD_TYPE_FS_FLAG,
+	DOWNLOAD_TYPE_OUT_SOFTVERSION,     // SoftVersion文件
+	DOWNLOAD_TYPE_HARDWARE_SN,		// HARDWARE_SN 下载硬件版本号
+	DOWNLOAD_TYPE_TESTINFO_DL_PV,		// 下载PV版本的生产测试标志位
+	DOWNLOAD_TYPE_TESTINFO_DL_RELEASE,	// 下载发货版本的生产测试标志位
+	DOWNLOAD_TYPE_TESTINFO_DL_AMT,		// 下载AMT版本的生产测试标志位
+	DOWNLOAD_TYPE_MAC_RJ45,
+} enDownloadType;
+
+typedef enum
+{
+    METHOD_NORMAL,              // 只备份工作区
+    METHOD_WORK_BACKUP,         // 根据标志位,备份工作区、备份区
+    METHOD_WRITE_TO_FILE,       // 备份时,若板号不为空,则将NV数据写入文件
+} enDownloadNVBackupMethod;
+
+// 待下载镜像文件信息 CDownload
+typedef struct
+{
+    BOOL    bDownload;              // 上/下载功能标志,TRUE = 下载;FALSE = 上载
+    char * strFileName;            // 文件路径
+    BOOL    bUseRelativePath;       // 文件路径是否为相对路径;TRUE = 相对路径;FALSE = 绝对路径
+    BOOL    bReadFromFile;          // 下载时,是否直接从文件读取;TRUE = 数据取自文件;FALSE = 数据取自内存
+  //  BOOL    bFileSystem;            // 镜像文件是否为文件系统;TRUE = 文件系统文件;FALSE = 非文件系统文件
+    BOOL    bAutoDeleteImageCache;  // 是否自动回收镜像缓存
+    BYTE   *pImageCache;            // 镜像缓存
+	//  DWORD   dwStartAddress;         // 下载/上载绝对起始地址
+
+    DWORD   dwOffset;               // 相对于文件/缓存的偏移 
+	DWORD   dwLength;               // 下载/上载数据长度
+    int     nType;                  // 下载类型
+	char    PartitionName[16];    	//分区名  add zxw 20130422
+	char    FileName[16];
+    char    PartitionType[16] ;
+    DWORD   nPartitionOffset;
+	//新增文件的CRC校验值
+	ULONG   ulCRCValue;
+	
+} stFileItem;
+
+// NV备份信息
+typedef struct
+{
+    enDownloadType   nType;         // NV备份的类型
+    BYTE            *pBuffer;       // NV备份的缓存
+    DWORD            dwStartAddress;// NV备份的下载地址
+    DWORD            dwLength;      // NV备份的长度
+} stNVItem;
+
+typedef struct
+{
+    unsigned long dwResult;
+} stResult;
+
+//////////////////////////////////////////////////////////////////////////
+typedef unsigned int UINT32;
+typedef   signed int SINT32;
+typedef unsigned short UINT16;
+typedef   signed short SINT16;
+
+// 分区表相关的信息
+#define MAX_ENTRY          16
+
+// add cxh 7510 下载分区文件类型
+#define nand                      (0x01) 
+#define fs                        (0x02)
+//#define NV                        (0x03) 
+#define zftl                      (0x03)
+#define ddr                       (0x04)
+#define raw                       (0x05)
+#define zloader                   (0x06)
+
+// 合并BIN文件中Masterhead结构
+typedef struct
+{
+	BYTE   FileId[16];
+    BYTE   chVersionIN[32];
+    BYTE   chVersionOUT[32];
+	DWORD  nTotalFileNum; 
+    DWORD  nFlashType;
+    DWORD  nNVCoalition; 
+    DWORD   iFileSize;      
+    DWORD   iCkeckSum;
+    DWORD   iImageStructOffset;
+    DWORD   tloaderOffset;
+    DWORD   tloaderLength;
+    DWORD   tBootOffset;
+    DWORD   tBootLength;
+    DWORD   PartitionOffset;
+    DWORD   PartitionLength;
+    BYTE    UnUsed[80];          //预留区
+}stBinMasterInfo;
+
+
+typedef struct  
+{
+    BYTE	PartitionName[16]; 
+    BYTE    PartitionType[16];
+    unsigned int    PartitionSize;
+    unsigned int    PartitionOffset;  
+}partition_entry;
+
+typedef struct 
+{
+    unsigned int       iPartitionMagic;
+    BYTE               PlatformName[16];
+    unsigned int       iPartitionVersion;     /* 分区版本 */
+    unsigned int       iPartitionEntrys;      /* 总的分区个数 */
+    unsigned int       iPartitionCrc;
+    partition_entry    PartitionTable[MAX_ENTRY];
+}partition_table;
+
+
+// 合并BIN文件的文件头部信息 CDownload
+typedef struct
+{
+    BYTE    nTotalFileNum;          // BIN文件中包含的子文件总数量
+    BYTE    UnUsed[15];             // 未使用
+} stBinInfo;
+
+// 合并BIN文件的每个文件信息 CDownload
+typedef struct
+{
+    DWORD   dwOffset;               // 子文件相对于BIN文件起始的偏移
+    DWORD   dwLength;               // 子文件长度
+    DWORD   dwStartAddress;         // 子文件待下载的绝对地址
+    DWORD    nType;                  // 子文件的类型
+    BYTE    bFileSystem;            // 子文件的文件系统标志
+	
+} stBinFileHeader;
+
+typedef struct  
+{
+    BYTE  FileName[64];
+    BYTE  PartitionName[16];
+	BYTE PartitionType[16];
+    unsigned int iFileLength;
+	unsigned int iPartitionOffset;
+    unsigned int iFileOffset; // 子文件相对于BIN文件起始的偏移
+    //相对于分区起始地址的偏移
+    BYTE  UnUsed[20];
+}stBinImageHead;
+
+typedef enum
+{
+	HDT_W_MAIN = 0,
+	HDT_W_ASSIST,
+	HDT_W_MAANDAS,
+}E_HDT_WAGCTYPE;
+
+typedef struct
+{
+    int  iErrorCode;
+    char cBarcode[21];
+} stDLDBInfo;
+
+typedef enum
+{
+    STAT_SYNC,                  // 0
+    STAT_START_BYTE,            // 1
+    STAT_NO_MODIFY_REG,         // 2
+    STAT_ADDRESS,               // 3
+    STAT_DATA_LEN,              // 4
+    STAT_DATAPACKET,            // 5
+    STAT_LINK_EST,              // 6
+    STAT_DEVICEINFO,            // 7
+    STAT_CONFIGTDP,             // 8
+    STAT_PROG_DEV_ST_ADDR,      // 9
+    STAT_PROG_DEV_END_ADDR,     // 10
+    STAT_SET_PACKET_SIZE,       // 11
+    STAT_CHANGE_CONFIG,         // 12
+    STAT_ERASE_SEG_ST_ADDR,     // 13
+    STAT_ERASE_SEG_END_ADDR,    // 14
+    STAT_DEV_BASE_ADDR,         // 15
+    STAT_EXECUTE_CODE,          // 16
+    STAT_TERMINATE,             // 17
+    STAT_RVRS_DWNLD,            // 18
+    STAT_UPLD_DATA_SIZE,        // 19
+    STAT_SUCCESS,               // 20
+	STAT_CRC_ON,   
+	STAT_CRC_OFF, 
+    // New stat add code here
+} enSTAT;
+
+
+//Bootrom & TLoader公用下载协议
+#define CMD_SYNC_BYTE_BOOTROM        0x5A
+#define CMD_SYNC_BYTE_ACK_BOOTROM    0xA5
+#define CMD_SEND_REG_CONFIG_BOOTROM  0x6A
+#define CMD_SEND_DATA_BOOTROM        0x7A
+#define CMD_STARTUP_BOOTROM          0x8A
+
+//7520V2 bootrom&TLoader新增回复命令
+#define CMD_SEND_ADDRESS_LEN_ACK_BOOTROM    0xA1
+#define CMD_SEND_DATA_ACK_BOOTROM           0xA7
+#define CMD_STARTUP_ACK_BOOTROM             0xA8
+
+
+//TBoot运行同步协议
+#define CMD_SYNC_TBOOT				 0x5A
+#define CMD_SYNC_ACK_TBOOT			 0xA7
+
+#define PACKET_SIZE_BOOT        131072 
+//#define PACKET_SIZE_BOOT        131072 
+
+#define PACKET_SIZE_TL          1024
+#define PACKET_SIZE_TDP         4096
+
+#define PACKET_SIZE_FLASH      	4096
+
+//#define PACKET_SIZE_FLASH      2097152
+#define PACKET_SIZE_IMAGE       131072
+#define PACKET_SIZE_FILESYSTEM  135168
+
+//partiiton协议
+typedef enum  
+{  // STAT_TBOOT_OK,
+    STAT_SYNC_PARTIITON,
+    STAT_SET_PARTITION_CMD,
+    STAT_SEND_PARTIITON,
+    STAT_EXIT,
+
+}enParpSTAT;
+
+typedef struct
+{
+    enSTAT  mNextTRUE;
+    enSTAT  mNextFALSE;
+} stSTAT;
+
+typedef struct DownloadConfig
+{  
+    enSTAT      mStartState;
+    BOOL        mbExecuteCode; //下载后,是否启动运行,暂时无用  zxw 20130422    
+    stFileItem  mCurrentFile;
+    DWORD       mPacketSize; //数据包大小,新方案由UE侧上传,暂无用处  zxw 20130422  //这个还是有用的,大小不超过2M就可以
+} stDownloadConfig;
+
+// 执行擦除NVRW
+BOOL ExecuteEraseNVRW(const char *softwarepath);
+// 下载boot和tloader
+BOOL DoDownloadBootForDL(BOOL bCheckPartition, const char *softwarepath);
+// 下载主流程
+int PrimaryDoDownload(const char *softwarepath);
+
+#endif