CommonNSM.c
上传用户:helaifa584
上传日期:2022-06-15
资源大小:29k
文件大小:11k
源码类别:

MTK

开发平台:

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