Operator_logo.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:11k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  * Operator_logo.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  * Nokia Smart Messaging
  44.  *
  45.  * Description:
  46.  * ------------
  47.  * This file implements Nokia Smart Operator logo.
  48.  *
  49.  * Date :
  50.  * ------
  51.  * 9th May 2005   
  52.  *
  53.  * Author:  
  54.  * --------
  55.  * -------
  56.  * 
  57.  *****************************************************************************/
  58. /**************** Start : INCLUDE SECTION *************************/
  59. #include "MMI_features.h"
  60. #ifdef __MMI_OPERATOR_LOGO__
  61. #include "stdC.h"
  62. #include "L4Dr1.h"
  63. #include "ems.h"
  64. #include "Operator_logo.h"
  65. /**************** End : INCLUDE SECTION ***************************/
  66. /**************** Start : DEFINE SECTION*************************/
  67. /**************** End : DEFINE SECTION***************************/
  68. /**************** Start : TYPEDEFS SECTION *************************/
  69. /**************** End : TYPEDEFS SECTION ***************************/
  70. /**************** Start:GLOBAL VARIABLES *************************/
  71. extern U8 gPictureMessageError;
  72. extern U16 RemoveZerosInBetween(U8 *pOutBuffer, U8 *pInBuffer, U16 size);
  73. extern EMSData *GetEMSDataForView(EMSData **p, U8 force);
  74. extern void EntryNsmPicturemsg(void);
  75. /**************** End : GLOBAL VARIABLES *************************/
  76. /**************** Start:LOCAL FUNCTIONS DECLARATION *************************/
  77. static void mmi_oplogo_get_header_info(OP_LOGO_HEADER_STRUCT *ota_bmp_header, OTA_DATA_STRUCT *op_logo_ota_data);
  78. static void mmi_op_logo_get_mcc(U16 *mcc, const BOOL ver_flag, OTA_DATA_STRUCT *op_logo_ota_data);
  79. static void mmi_op_logo_get_mnc(U8 *mnc, OTA_DATA_STRUCT *op_logo_ota_data);
  80. static void mmi_op_logo_skip_line_feed(OTA_DATA_STRUCT *op_logo_ota_data);
  81. /**************** End : LOCAL FUNCTIONS DECLARATION *************************/
  82. /*****************************************************************************
  83.  * FUNCTION
  84.  *  mmi_op_logo_parse_ota_data
  85.  * DESCRIPTION
  86.  *  Parse operator Logo OTA data into bmp header and bmp buffer
  87.  * PARAMETERS
  88.  *  void
  89.  * RETURNS
  90.  *  void
  91.  *****************************************************************************/
  92. extern void mmi_op_logo_parse_ota_data(void)
  93. {
  94.     /*----------------------------------------------------------------*/
  95.     /* Local Variables                                                */
  96.     /*----------------------------------------------------------------*/
  97.     EMSData *pEms = NULL;
  98.     OTA_DATA_STRUCT op_logo_ota_data = {NULL, 0};
  99.     OP_LOGO_HEADER_STRUCT op_logo_header = {0};
  100.     U32 temp;
  101.     /*----------------------------------------------------------------*/
  102.     /* Code Body                                                      */
  103.     /*----------------------------------------------------------------*/
  104.     GetEMSDataForView(&pEms, 0);
  105.     op_logo_ota_data.OTA_data = (U8*) OslMalloc((pEms->textLength >> 1) + 1);
  106.     ASSERT(op_logo_ota_data.OTA_data != NULL);
  107.     memset(op_logo_ota_data.OTA_data, 0x00, ((pEms->textLength >> 1) + 1));
  108.     temp = RemoveZerosInBetween(op_logo_ota_data.OTA_data, pEms->textBuffer, pEms->textLength);
  109.     mmi_oplogo_get_header_info(&op_logo_header, &op_logo_ota_data);
  110.     mmi_nsm_create_bmp_buffer(&op_logo_ota_data, &(op_logo_header.op_logo_ota_bmp_header));
  111.     gPictureMessageError = 0;   /* Hack : MMI_NSM_PIC_SUCCESS */
  112.     if (op_logo_ota_data.OTA_data != NULL)
  113.     {
  114.         OslMfree(op_logo_ota_data.OTA_data);
  115.     }
  116.     /* Hack : Operator logo is treated as picture message */
  117.     EntryNsmPicturemsg();
  118. }
  119. /*****************************************************************************
  120.  * FUNCTION
  121.  *  mmi_oplogo_get_header_info
  122.  * DESCRIPTION
  123.  *  Get header info for bmp image
  124.  * PARAMETERS
  125.  *  ota_bmp_header          [IN]        BMP header structure
  126.  *  op_logo_ota_data        [IN]        Operator logo OTA data structure
  127.  * RETURNS
  128.  *  void
  129.  *****************************************************************************/
  130. static void mmi_oplogo_get_header_info(OP_LOGO_HEADER_STRUCT *ota_bmp_header, OTA_DATA_STRUCT *op_logo_ota_data)
  131. {
  132.     /*----------------------------------------------------------------*/
  133.     /* Local Variables                                                */
  134.     /*----------------------------------------------------------------*/
  135.     /*----------------------------------------------------------------*/
  136.     /* Code Body                                                      */
  137.     /*----------------------------------------------------------------*/
  138.     mmi_nsm_get_ver_no(&(ota_bmp_header->op_logo_ota_ver), op_logo_ota_data);
  139.     mmi_op_logo_get_mcc(&(ota_bmp_header->mmc), ota_bmp_header->op_logo_ota_ver.is_ver_present, op_logo_ota_data);
  140.     mmi_op_logo_get_mnc(&(ota_bmp_header->mnc), op_logo_ota_data);
  141.     mmi_op_logo_skip_line_feed(op_logo_ota_data);   /* Skip only if <line-feed> character present */
  142.     mmi_nsm_get_ota_bmp_header(&(ota_bmp_header->op_logo_ota_bmp_header), op_logo_ota_data);
  143. }
  144. /*****************************************************************************
  145.  * FUNCTION
  146.  *  mmi_op_logo_get_mcc
  147.  * DESCRIPTION
  148.  *  Get mcc number from OTA data
  149.  * PARAMETERS
  150.  *  mcc             [IN]        Mobile country code
  151.  *  ver_flag        [IN]        Version flag
  152.  *  ota             [IN]        OTA data structure
  153.  * RETURNS
  154.  *  void
  155.  *****************************************************************************/
  156. static void mmi_op_logo_get_mcc(U16 *mcc, const BOOL ver_flag, OTA_DATA_STRUCT *ota)
  157. {
  158.     /*----------------------------------------------------------------*/
  159.     /* Local Variables                                                */
  160.     /*----------------------------------------------------------------*/
  161.     /* 
  162.      * MMC is in little endian BCD format filled with 0xf to make even bytes.
  163.      * eg.   BCD little endian filled with 0xf: 42f4.
  164.      *    Actual value in mcc : 244
  165.      */
  166.     U16 temp1 = 0;
  167.     U16 temp2 = 0;
  168.     U16 result = 0;
  169. #if 0
  170. /* under construction !*/
  171. /* under construction !*/
  172. #endif /* 0 */ 
  173.     /*----------------------------------------------------------------*/
  174.     /* Code Body                                                      */
  175.     /*----------------------------------------------------------------*/
  176.     temp1 = (ota->OTA_data[ota->curr_index] & 0x0F);
  177.     temp2 = ((ota->OTA_data[ota->curr_index] >> 4) & 0x0F);
  178.     result = ((temp1 * 10) + temp2);
  179.     ota->curr_index += 1;
  180.     result = ((result * 10) + (ota->OTA_data[ota->curr_index] & 0x0F));
  181.     ota->curr_index += 1;
  182.     *mcc = result;
  183. }
  184. /*****************************************************************************
  185.  * FUNCTION
  186.  *  mmi_op_logo_get_mnc
  187.  * DESCRIPTION
  188.  *  Get mnc number from OTA data
  189.  * PARAMETERS
  190.  *  mnc     [IN]        Mobile network code
  191.  *  ota     [IN]        OTA data structure
  192.  * RETURNS
  193.  *  void
  194.  *****************************************************************************/
  195. static void mmi_op_logo_get_mnc(U8 *mnc, OTA_DATA_STRUCT *ota)
  196. {
  197.     /*----------------------------------------------------------------*/
  198.     /* Local Variables                                                */
  199.     /*----------------------------------------------------------------*/
  200.     /*----------------------------------------------------------------*/
  201.     /* Code Body                                                      */
  202.     /*----------------------------------------------------------------*/
  203.     /* 
  204.      * MNC is in little endian BCD format filled with 0xf to make even bytes.
  205.      * eg.   BCD little endian filled with 0xf: 50.
  206.      *    Actual value in mnc : 5
  207.      */
  208.     *mnc = ota->OTA_data[ota->curr_index];
  209.     ota->curr_index += 1;
  210. }
  211. /*****************************************************************************
  212.  * FUNCTION
  213.  *  mmi_op_logo_skip_line_feed
  214.  * DESCRIPTION
  215.  *  Get OTA BMP header info
  216.  * PARAMETERS
  217.  *  ota     [IN]        Structure OTA data
  218.  * RETURNS
  219.  *  void
  220.  *****************************************************************************/
  221. static void mmi_op_logo_skip_line_feed(OTA_DATA_STRUCT *ota)
  222. {
  223.     /*----------------------------------------------------------------*/
  224.     /* Local Variables                                                */
  225.     /*----------------------------------------------------------------*/
  226.     U8 temp;
  227.     /*----------------------------------------------------------------*/
  228.     /* Code Body                                                      */
  229.     /*----------------------------------------------------------------*/
  230.     temp = ota->OTA_data[ota->curr_index];
  231.     if (0x0a == temp)
  232.     {
  233.         ota->curr_index += 1;
  234.     }
  235. }
  236. #endif /* __MMI_OPERATOR_LOGO__ */