| /******************************************************************************* |
| * 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]", |
| "" |
| ); |
| |
| |
| |