CommonNSM.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. *****************************************************************************/
  10. /*****************************************************************************
  11.  *
  12.  * Filename:
  13.  * ---------
  14.  * CommonNSM.c
  15.  *
  16.  * Project:
  17.  * --------
  18.  * Nokia Smart Messaging
  19.  *
  20.  * Description:
  21.  * ------------
  22.  * This file implements Common Function for Operator logo and CLI Icon.
  23.  *
  24.  * Date :
  25.  * ------
  26.  * 18th May 2005  
  27.  *
  28.  * Author:  
  29.  * --------
  30.  * -------
  31.  * 
  32.  *****************************************************************************/
  33. /**************** START :  INCLUDE SECTION *************************/
  34. #include "MMI_features.h"
  35. #if defined (__MMI_OPERATOR_LOGO__) || defined(__MMI_CLI_ICON__)
  36. #include "stdC.h"
  37. #include "L4Dr1.h"
  38. #include "ems.h"
  39. #include "CommonNSM.h"
  40. #include "customer_ps_inc.h"
  41. /**************** END   :  INCLUDE SECTION *************************/
  42. /**************** START :  DEFINE SECTION *************************/
  43. #define DEFAULT_OTA_VERSION         (0x30)
  44. #define  MOD_BY_FOUR             (0X04)
  45. #define BMP_HEADER_SIZE          (sizeof(BmpFileHeader_sturct)-2)
  46. #define MMI_EXTRA_BMP_HEADER_SIZE   (6)
  47. #define ONE_BYTE_SIZE            (8)
  48. #define MAX_BMP_BUF_SIZE         (1024)
  49. /**************** END   :  DEFINE SECTION *************************/
  50. /**************** START :  TYPEDEFS SECTION *************************/
  51. /**************** END   :  TYPEDEFS SECTION ***************************/
  52. /**************** START :  GLOBAL VARIABLES *************************/
  53. extern U8 gNSMBuffer[];
  54. extern S8 g_pmsg_TextInMessage[MAX_PICTEXT_BUFF_SIZE + (TEXT_BUFF_PADDING)];
  55. /**************** END   :  GLOBAL VARIABLES *************************/
  56. /**************** START :  LOCAL FUNCTIONS DECLARATION *************************/
  57. static void mmi_nsm_add_6extra_byte_for_mmi(BmpFileHeader_sturct *BmpHeader);
  58. static void mmi_nsm_set_bmp_header_default_values(BmpFileHeader_sturct *BmpHeader);
  59. /**************** END   :  LOCAL FUNCTIONS DECLARATION *************************/
  60. /*****************************************************************************
  61.  * FUNCTION
  62.  *  mmi_nsm_get_ver_no
  63.  * DESCRIPTION
  64.  *  Get version number from OTA data and convert to decimal
  65.  * PARAMETERS
  66.  *  ota_ver                 [?]         
  67.  *  ota                     [IN]        OTA data structure
  68.  *  op_logo_ota_ver(?)      [IN]        Version structure
  69.  * RETURNS
  70.  *  void
  71.  *****************************************************************************/
  72. extern void mmi_nsm_get_ver_no(OTA_VERSION_STRUCT *ota_ver, OTA_DATA_STRUCT *ota)
  73. {
  74.     /*----------------------------------------------------------------*/
  75.     /* Local Variables                                                */
  76.     /*----------------------------------------------------------------*/
  77.     U8 temp = 0;
  78.     /*----------------------------------------------------------------*/
  79.     /* Code Body                                                      */
  80.     /*----------------------------------------------------------------*/
  81.     /* Set Operator Logo default version values */
  82.     ota_ver->is_ver_present = FALSE;
  83.     ota_ver->version_no = DEFAULT_OTA_VERSION;
  84.     temp = ota->OTA_data[ota->curr_index];
  85.     if (DEFAULT_OTA_VERSION == temp)
  86.     {
  87.         ota_ver->is_ver_present = TRUE;
  88.         ota_ver->version_no = temp;
  89.         ota->curr_index += 1;
  90.     }
  91. }
  92. /*****************************************************************************
  93.  * FUNCTION
  94.  *  mmi_nsm_get_ota_bmp_header
  95.  * DESCRIPTION
  96.  *  Get OTA BMP header info
  97.  * PARAMETERS
  98.  *  ota_bmp_header      [IN]        BMP header structure
  99.  *  ota                 [IN]        OTA data structure
  100.  * RETURNS
  101.  *  void
  102.  *****************************************************************************/
  103. extern void mmi_nsm_get_ota_bmp_header(OTA_BMP_HEADER_STRUCT *ota_bmp_header, OTA_DATA_STRUCT *ota)
  104. {
  105.     /*----------------------------------------------------------------*/
  106.     /* Local Variables                                                */
  107.     /*----------------------------------------------------------------*/
  108.     /*----------------------------------------------------------------*/
  109.     /* Code Body                                                      */
  110.     /*----------------------------------------------------------------*/
  111.     /* <info-field> */
  112.     ota_bmp_header->info_feild = ota->OTA_data[ota->curr_index];
  113.     ota->curr_index += 1;
  114.     /* <width> */
  115.     ota_bmp_header->ota_image_width = ota->OTA_data[ota->curr_index];
  116.     ota->curr_index += 1;
  117.     /* <Height> */
  118.     ota_bmp_header->ota_image_height = ota->OTA_data[ota->curr_index];
  119.     ota->curr_index += 1;
  120.     /* <color Depth> */
  121.     ota_bmp_header->color_depth = ota->OTA_data[ota->curr_index];
  122.     ota->curr_index += 1;
  123. }
  124. /*****************************************************************************
  125.  * FUNCTION
  126.  *  mmi_nsm_create_bmp_buffer
  127.  * DESCRIPTION
  128.  *  Convert OTA data to BMP image data with BMP header
  129.  * PARAMETERS
  130.  *  ota                 [IN]        OTA data for BMP image
  131.  *  ota_bmp_header      [IN]        OTA header for BMP
  132.  * RETURNS
  133.  *  U8(?)
  134.  *****************************************************************************/
  135. extern void mmi_nsm_create_bmp_buffer(OTA_DATA_STRUCT *ota, OTA_BMP_HEADER_STRUCT *ota_bmp_header)
  136. {
  137.     /*----------------------------------------------------------------*/
  138.     /* Local Variables                                                */
  139.     /*----------------------------------------------------------------*/
  140.     U16 width_in_bytes;
  141.     U16 total_width = 0;
  142.     U16 ota_bitmap_len;
  143.     U16 ota_bitmap_index;
  144.     U16 gnsm_index = 0;
  145.     U8 padding_factor;
  146.     S32 count;
  147.     BmpFileHeader_sturct BmpHeader = {0};
  148.     /*----------------------------------------------------------------*/
  149.     /* Code Body                                                      */
  150.     /*----------------------------------------------------------------*/
  151.     mmi_nsm_set_bmp_header_default_values(&BmpHeader);
  152.     width_in_bytes = ((ota_bmp_header->ota_image_width) / (ONE_BYTE_SIZE));
  153.     /* Width should have bytes multiple of 4 */
  154.     {
  155.         U8 temp = 0;
  156.         temp = width_in_bytes % MOD_BY_FOUR;
  157.         padding_factor = 0;
  158.         if (temp != 0)
  159.         {
  160.             padding_factor = MOD_BY_FOUR - temp;
  161.         }
  162.     }
  163.     total_width = (width_in_bytes + padding_factor);
  164.     /* BMP file size */
  165.     BmpHeader.BmpBMPFileHeader.FileSize = (BMP_HEADER_SIZE + ((ota_bmp_header->ota_image_height) * (total_width)));
  166.     /* Reset global buffer */
  167.     memset(gNSMBuffer, 0x00, MAX_BMP_BUF_SIZE);
  168.     memset(g_pmsg_TextInMessage, 0x00, sizeof(g_pmsg_TextInMessage));
  169.     mmi_nsm_add_6extra_byte_for_mmi(&BmpHeader);
  170.     gnsm_index += MMI_EXTRA_BMP_HEADER_SIZE;
  171.     BmpHeader.BmpBMPInfoHeader.Width = ota_bmp_header->ota_image_width;
  172.     BmpHeader.BmpBMPInfoHeader.Height = ota_bmp_header->ota_image_height;
  173.     /* Copy BMP headers <File Header><Info Header><color> */
  174.     memcpy((gNSMBuffer + gnsm_index), (((U8*) & BmpHeader) + 2), BMP_HEADER_SIZE);
  175.     gnsm_index += BMP_HEADER_SIZE;
  176.     /* 
  177.      * Height (In pixel) for various Nokia Smart OTA Bitmaps 
  178.      * Operator logo and CLI Icon = 14
  179.      * Picutre Message   = 28
  180.      */
  181.     ota_bitmap_len = ((ota_bmp_header->ota_image_width * ota_bmp_header->ota_image_height) / (ONE_BYTE_SIZE));
  182.     ota_bitmap_index = (ota_bitmap_len + ota->curr_index);  /* Here points to NULL in ota_data */
  183.     /* To store OTA bitmap in reverse order in gNSMBuffer */
  184.     for (count = (ota_bitmap_index - width_in_bytes); count >= ota->curr_index; count -= width_in_bytes)
  185.     {
  186.         memcpy((gNSMBuffer + gnsm_index), (ota->OTA_data + count), width_in_bytes);
  187.         gnsm_index += (width_in_bytes + padding_factor);
  188.     }
  189. }
  190. /*****************************************************************************
  191.  * FUNCTION
  192.  *  mmi_nsm_add_6extra_byte_for_mmi
  193.  * DESCRIPTION
  194.  *  Add six extra byte in BMP buffer for MMI support
  195.  * PARAMETERS
  196.  *  BmpHeader       [?]     
  197.  * RETURNS
  198.  *  void
  199.  *****************************************************************************/
  200. static void mmi_nsm_add_6extra_byte_for_mmi(BmpFileHeader_sturct *BmpHeader)
  201. {
  202.     /*----------------------------------------------------------------*/
  203.     /* Local Variables                                                */
  204.     /*----------------------------------------------------------------*/
  205.     U8 gnsm_index = 0;
  206.     /*----------------------------------------------------------------*/
  207.     /* Code Body                                                      */
  208.     /*----------------------------------------------------------------*/
  209.     gNSMBuffer[gnsm_index] = 0x01;
  210.     gnsm_index += 1;
  211.     gNSMBuffer[gnsm_index] = 0x00;
  212.     gnsm_index += 1;
  213.     gNSMBuffer[gnsm_index] = (U8) ((BmpHeader->BmpBMPFileHeader.FileSize & 0x000000FF));
  214.     gnsm_index += 1;
  215.     gNSMBuffer[gnsm_index] = (U8) ((BmpHeader->BmpBMPFileHeader.FileSize & 0x0000FF00) >> 8);
  216.     gnsm_index += 1;
  217.     gNSMBuffer[gnsm_index] = (U8) ((BmpHeader->BmpBMPFileHeader.FileSize & 0x00FF0000) >> 16);
  218.     gnsm_index += 1;
  219.     gNSMBuffer[gnsm_index] = (U8) ((BmpHeader->BmpBMPFileHeader.FileSize & 0xFF000000) >> 24);
  220.     gnsm_index += 1;
  221. }
  222. /*****************************************************************************
  223.  * FUNCTION
  224.  *  mmi_nsm_set_bmp_header_default_values
  225.  * DESCRIPTION
  226.  *  Set default values for BMP header
  227.  * PARAMETERS
  228.  *  BmpHeader       [IN]        BMP header structure
  229.  * RETURNS
  230.  *  void
  231.  *****************************************************************************/
  232. static void mmi_nsm_set_bmp_header_default_values(BmpFileHeader_sturct *BmpHeader)
  233. {
  234.     /*----------------------------------------------------------------*/
  235.     /* Local Variables                                                */
  236.     /*----------------------------------------------------------------*/
  237.     /*----------------------------------------------------------------*/
  238.     /* Code Body                                                      */
  239.     /*----------------------------------------------------------------*/
  240.     BmpHeader->BmpBMPFileHeader.reserved = 0x0000;
  241.     BmpHeader->BmpBMPFileHeader.Signature = (U16) 19778;
  242.     BmpHeader->BmpBMPFileHeader.DataOffset = (U32) BMP_HEADER_SIZE;
  243.     BmpHeader->BmpBMPInfoHeader.HeaderSize = (U32) 40;
  244.     BmpHeader->BmpBMPInfoHeader.Bits = (U16) 1;
  245.     BmpHeader->BmpBMPInfoHeader.Planes = (U16) 1;
  246.     BmpHeader->BmpColors1.Blue = (U8) 255;
  247.     BmpHeader->BmpColors1.Green = (U8) 255;
  248.     BmpHeader->BmpColors1.Red = (U8) 255;
  249. }
  250. #endif /* defined (__MMI_OPERATOR_LOGO__) || defined(__MMI_CLI_ICON__) */