blob: 72622b62b8523785bdaa321891a8bd448d572f33 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2016, ZIXC Corporation.
*
* File Name: cmd_getvar.c
* File Mark:
* Description: get information such as IMEI,SN,NV CONFIG from UE.
* Others:
* Version: 1.0
* Author: zangxiaofeng
* Date: 2013-3-6
* History 1:
* Date: 2013-11-6
* Version:
* Author:
* Modification: mod for after-sale tool
* History 2:
********************************************************************************/
/****************************************************************************
* Include files
****************************************************************************/
#include <common.h>
#include <command.h>
#include <net.h>
#include "downloader_serial.h"
#include <jffs2/load_kernel.h>
#include "downloader_nand.h"
#include "errno.h"
extern char *tsp_console_buffer;
/****************************************************************************
* Local Macros
****************************************************************************/
/*NVR AMT LENGTH*/
#define ZPS_ImeiLen 20
#define ZPS_ImeiSvLen 20
#define ZPS_DEV_MSINFO_MAX_BORDNAME_LEN 20
#define ZPS_DEV_MSINFO_MAX_MSerialNum_LEN 20
#define ZPS_DEV_MSINFO_MAX_ValidFlag_LEN 4
#define ZPS_DEV_MSINFO_MAX_InternalMAC_LEN 20
#define ZPS_DEV_MSINFO_MAX_ExternalMAC_LEN 20
#define ZPS_DEV_MSINFO_MAX_WIFIMAC_LEN 20
#define ZPS_DEV_MSINFO_MAX_NvVersion_LEN 40
#define ZPS_DEV_MSINFO_MAX_TestInfo_LEN 200
#define ZPS_DEV_MSINFO_MAX_SOFTVERSION_LEN 10
#define ZPS_NVR_LEN 394
/*NVRW AMT LENGTH*/
#define SoftVersion_LEN 10
#define Register_LEN 77
#define Bflag_LEN 1
#define Reserve_LEN 40
#define AfterSaleVersion_LEN 670
#define InerVersion_LEN 100
#define ExVersion_LEN 100
#define HWVersion_LEN 100
#define PCUIVersion_LEN 100
#define InerMdelNum_LEN 32
#define ExModelNum_LEN 32
#define ModemVersion_LEN 100
#define ZPS_NVRW_LEN 1362
/****************************************************************************
* Local Types
****************************************************************************/
typedef struct
{
unsigned int nvID; /*NV file ID */
unsigned char nvPart[4]; /* NV partition name,nvr or nvrw */
unsigned int addr; /*NV file address */
unsigned int size; /*NV file size*/
}Tsp_Nv_Config_Item; /*NV CONFIG ITEM*/
#define TSP_NV_COUNT 7
Tsp_Nv_Config_Item tspNvConfig[TSP_NV_COUNT]=
{
{0,"nvro",0x0,16384},
{1,"nvro",0x4000,98304},
{2,"nvro",0x1c000,32768},
{3,"nvro",0x24000,16384},
{4,"nvro",0x28000,32768},
{5,"nvro",0x30000,32768},
{6,"nvro",0x38000,32768},
};
typedef struct getvar_info_nvr
{
/********************************************************************************
¹¦ÄÜ£º Ó²¼þÉ豸ºÅ
ȡֵ·¶Î§£ºIMEIÖÐÿһ¸öBCDÂ뷶ΧΪ0-9
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char abImei[ZPS_ImeiLen];
/********************************************************************************
¹¦ÄÜ£º Èí¼þ°æ±¾ºÅ
ȡֵ·¶Î§£ºIMEISVÖÐÿһ¸öBCDÂ뷶ΧΪ0-9
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char abImeiSv[ZPS_ImeiSvLen];
/********************************************************************************
¹¦ÄÜ£º Ö÷°åºÅ£¬ÓÉBCDÂë×é³É
ȡֵ·¶Î§£ºÖ÷°åºÅÖÐÿһ¸öBCDÂ뷶ΧΪ0-9
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char abBordNum[ZPS_DEV_MSINFO_MAX_BORDNAME_LEN];
/********************************************************************************
¹¦ÄÜ£º
ȡֵ·¶Î§£ºÈÎÒâ×Ö·û´®,ÒÔ'\0'±íʾ½áÊø
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char abMSerialNum[ZPS_DEV_MSINFO_MAX_MSerialNum_LEN];
/********************************************************************************
¹¦ÄÜ£º MACµØÖ·Ñ¡Ôñ±ê־λ
ȡֵ·¶Î§£º0x30»òÕß0x31£¬Ä¬ÈÏΪ0x30
³ö³§Öµ£º0x30
*********************************************************************************/
unsigned char abValidFlag[ZPS_DEV_MSINFO_MAX_ValidFlag_LEN];
/********************************************************************************
¹¦ÄÜ£º ÄÚ²¿MAC µØÖ·
ȡֵ·¶Î§£ºBCDÂë
³ö³§Öµ£ºÓÉ´ó°æ±¾Ê×´ÎÆô¶¯Ê±Ð´Èë
*********************************************************************************/
unsigned char abInternalMAC[ZPS_DEV_MSINFO_MAX_InternalMAC_LEN];
/********************************************************************************
¹¦ÄÜ£º ÍⲿMAC µØÖ·
ȡֵ·¶Î§£ºBCDÂë
³ö³§Öµ£ºÓÉ´ó°æ±¾Ê×´ÎÆô¶¯Ê±Ð´Èë
*********************************************************************************/
unsigned char abExternalMAX[ZPS_DEV_MSINFO_MAX_ExternalMAC_LEN];
/********************************************************************************
¹¦ÄÜ£º WIFI MACµØÖ·
ȡֵ·¶Î§£ºBCDÂë
³ö³§Öµ£ºÓÉ´ó°æ±¾Ê×´ÎÆô¶¯Ê±Ð´Èë
*********************************************************************************/
unsigned char abWiFiMAC[ZPS_DEV_MSINFO_MAX_WIFIMAC_LEN];
/********************************************************************************
¹¦ÄÜ£º ָʾNV°æ±¾
ȡֵ·¶Î§£º¿É¼ûASCIIÂë×Ö·û£¬ÒÔ×Ö·û'\0'½áÊø£¬Ê£Óà×Ö½ÚÌî³ä0x00
³ö³§Öµ£ºÓÉ´ó°æ±¾Ê×´ÎÆô¶¯Ê±Ð´Èë
*********************************************************************************/
unsigned char abNVVersion[ZPS_DEV_MSINFO_MAX_NvVersion_LEN];
/********************************************************************************
¹¦ÄÜ£º Éú²ú²âÊÔ±ê־λ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓÉ´ó°æ±¾Ê×´ÎÆô¶¯Ê±Ð´Èë
*********************************************************************************/
unsigned char abTestInfo[ZPS_DEV_MSINFO_MAX_TestInfo_LEN];
}getvar_info_nvr_t;
typedef struct getvar_info_nvrw
{
/********************************************************************************
¹¦ÄÜ£º Èí¼þ°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char SoftVersion[SoftVersion_LEN];
/********************************************************************************
¹¦ÄÜ£º ×Ô×¢²áÐÅÏ¢
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char Register[Register_LEN];
/********************************************************************************
¹¦ÄÜ£º BFLAGСϵͳÆô¶¯Ä£Ê½ÐÅÏ¢
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char Bflag[Bflag_LEN];
/********************************************************************************
¹¦ÄÜ£º ±£Áô
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char Reserve[Reserve_LEN];
/********************************************************************************
¹¦ÄÜ£º ÊÛºó°æ±¾¿ØÖÆ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char AfterSaleVersion[AfterSaleVersion_LEN];
/********************************************************************************
¹¦ÄÜ£º ÄÚ²¿°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char InerVersion[InerVersion_LEN];
/********************************************************************************
¹¦ÄÜ£ºÍⲿ°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char ExVersion[ExVersion_LEN];
/********************************************************************************
¹¦ÄÜ£ºÓ²¼þ°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char HWVersion[HWVersion_LEN];
/********************************************************************************
¹¦ÄÜ£ºPCUI °æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char PCUIVersion[PCUIVersion_LEN];
/********************************************************************************
¹¦ÄÜ£ºÄÚ²¿ÐͺÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char InerMdelNum[InerMdelNum_LEN];
/********************************************************************************
¹¦ÄÜ£ºÍⲿÐͺÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char ExModelNum[ExModelNum_LEN];
/********************************************************************************
¹¦ÄÜ£ºMODEM°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char ModemVersion[ModemVersion_LEN];
}getvar_info_nvrw_t;
typedef struct getvar_info_dl
{
unsigned char abImei[ZPS_ImeiLen];
/********************************************************************************
¹¦ÄÜ£º Ó²¼þÉ豸ºÅ
ȡֵ·¶Î§£ºIMEIÖÐÿһ¸öBCDÂ뷶ΧΪ0-9
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char abBordNum[ZPS_DEV_MSINFO_MAX_BORDNAME_LEN];
/********************************************************************************
¹¦ÄÜ£º Ö÷°åºÅ£¬ÓÉBCDÂë×é³É
ȡֵ·¶Î§£ºÖ÷°åºÅÖÐÿһ¸öBCDÂ뷶ΧΪ0-9
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
*********************************************************************************/
unsigned char InerVersion[InerVersion_LEN];
/********************************************************************************
¹¦ÄÜ£º ÄÚ²¿°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char ExVersion[ExVersion_LEN];
/********************************************************************************
¹¦ÄÜ£ºÍⲿ°æ±¾ºÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char InerMdelNum[InerMdelNum_LEN];
/********************************************************************************
¹¦ÄÜ£ºÄÚ²¿ÐͺÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
unsigned char ExModelNum[ExModelNum_LEN];
/********************************************************************************
¹¦ÄÜ£ºÍⲿÐͺÅ
ȡֵ·¶Î§£º
³ö³§Öµ£ºÓɳö²ú³§É̾ö¶¨
********************************************************************************/
}getvar_info_dl_t;
/*******************************************************************************
* Function:do_getvar
* Description:Sending UE information to After_sale update toll.
* Parameters:
* Input:
*
* Output:
*
* Returns:0 :success;
* -1:fail;
*
* Others:
********************************************************************************/
int do_getvar(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
#if 0 //hsy
char *ack = NULL;
char *cmd = NULL;
int ret = 0;
partition_entry_t *part = NULL;
getvar_info_nvr_t *info_nvr = NULL;
getvar_info_nvrw_t *info_nvrw = NULL;
getvar_info_dl_t *info_dl = NULL;
char *data_nvr = kzalloc(ZPS_NVR_LEN, GFP_KERNEL);
char *data_nvrw = kzalloc(ZPS_NVRW_LEN, GFP_KERNEL);
ack = tsp_console_buffer;
info_dl = kzalloc(4096, GFP_KERNEL);
cmd = argv[1];
if (argc < 2)
{
return cmd_usage(cmdtp);
}
part = downloader_get_part("nvro"); /*NVR READ*/
ret = downloader_zftl_read( part, 0, ZPS_NVR_LEN, (unsigned char *)data_nvr);
part = downloader_get_part("nvrw"); /*NVRW READ*/
ret = downloader_zftl_read( part, 0, ZPS_NVRW_LEN, (unsigned char *)data_nvrw);
if(ret)
{
sprintf(ack,"FAIL ZFTL READ ");
downloader_serial_write(ack, strlen(ack)+1);
kfree(data_nvr);
kfree(data_nvrw);
kfree(info_dl);
return ENOSYS; /* Function not implemented */
}
info_nvr = (getvar_info_nvr_t *)data_nvr;
info_nvrw = (getvar_info_nvrw_t *)data_nvrw;
memcpy(info_dl->abImei,info_nvr->abImei,ZPS_ImeiLen); /*copy information from NV*/
memcpy(info_dl->abBordNum,info_nvr->abBordNum,ZPS_DEV_MSINFO_MAX_BORDNAME_LEN);
memcpy(info_dl->InerVersion,info_nvrw->InerVersion,InerVersion_LEN);
memcpy(info_dl->ExVersion,info_nvrw->ExVersion,ExVersion_LEN);
memcpy(info_dl->InerMdelNum,info_nvrw->InerMdelNum,InerMdelNum_LEN);
memcpy(info_dl->ExModelNum,info_nvrw->ExModelNum,ExModelNum_LEN);
if(strcmp(cmd,"version") == 0)
{
sprintf(ack,"DATA %08x",sizeof(getvar_info_dl_t));
downloader_serial_write(ack, strlen(ack)+1); /* send length info*/
downloader_readline(tsp_console_buffer);
if(memcmp(tsp_console_buffer,"OKAY",4)==0) /* receive OKAY*/
{
memcpy(ack,info_dl,sizeof(getvar_info_dl_t)); /* send information*/
downloader_serial_write_actuallen(ack,sizeof(getvar_info_dl_t));
}
else
{
sprintf(ack,"FAIL COMMAND ERROR");
downloader_serial_write(ack, strlen(ack)+1);
return EBADRQC; /* Invalid request code */
}
}
else if(strcmp(cmd,"nv")== 0)
{
sprintf(ack,"DATA %08x",sizeof(tspNvConfig)+1);
downloader_serial_write(ack, strlen(ack)+1); /* send length info*/
downloader_readline(tsp_console_buffer);
if(memcmp(tsp_console_buffer,"OKAY",4)==0) /* receive OKAY*/
{
ack[0] = TSP_NV_COUNT;
memcpy(&ack[1],&tspNvConfig,sizeof(tspNvConfig)); /* send nv config*/
downloader_serial_write_actuallen(ack,sizeof(tspNvConfig)+1);
}
else
{
sprintf(ack,"FAIL COMMAND ERROR");
downloader_serial_write(ack, strlen(ack)+1);
return EBADRQC; /* Invalid request code */
}
}
else
{
sprintf(ack,"FAIL NOINFORMATION");
downloader_serial_write(ack,strlen(ack)+1);
kfree(data_nvr);
kfree(data_nvrw);
kfree(info_dl);
return -1;
}
kfree(data_nvr);
kfree(data_nvrw);
kfree(info_dl);
#endif
return 0;
}
U_BOOT_CMD(
getvar, CONFIG_SYS_MAXARGS, 0, do_getvar,
"Downloader get information: getvar [info]",
""
);