MTK开发参考MTK - Dev - Guide
更新时间:2024-06-13 15:01:01 阅读量: 综合文库 文档下载
- mtk 开发推荐度:
- 相关推荐
MTK Dev Guide
samuel.song.bc@gmail.com
1
添加新的模块............................................................................................................ 4 1.1 1.2 2
添加新模块 ................................................................................................. 4 添加到系统编译中....................................................................................... 4
1.3 总Makefile.................................................................................................. 4 添加资源................................................................................................................... 6 2.1 2.2 2.3 2.4 2.5 2.6 3 4
定义ID范围 ............................................................................................... 6 添加应用程序.............................................................................................. 7 添加菜单..................................................................................................... 8 Add new string ............................................................................................. 8 图片资源..................................................................................................... 8 编译资源..................................................................................................... 9
NVRAM.................................................................................................................. 10 Message organize in nvram ........................................................................................ 12 4.1 添加nvram项 ........................................................................................... 12 4.2 4.3
Data structure: ............................................................................................ 12 Function .................................................................................................... 12
5
4.4 note........................................................................................................... 13 screen管理 .............................................................................................................. 16 5.1 5.2 5.3
U8 GoBackToHistory(U16 scrnid) ................................................................ 16 void GoBacknHistory(U16 n) ....................................................................... 17 historyData[50] 是个栈,最大可以有50个history ...................................... 17
6 7 8 9 10 11 12 13 14 15 16 17 18 19
多国语言支持.......................................................................................................... 17 键盘处理................................................................................................................. 18 YUV-RGB ............................................................................................................... 19 触摸屏的支持.......................................................................................................... 21
Status Bar ......................................................................................................... 23 网络................................................................................................................. 23 SMS................................................................................................................. 25 TASK ............................................................................................................... 27 Camera............................................................................................................. 28 IMSI ................................................................................................................ 29 IMEI ................................................................................................................ 29 APN................................................................................................................. 29 GPRS ............................................................................................................... 30 阿拉伯文和波斯文............................................................................................ 38
1
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
电话号码长度: ............................................................................................... 46 Set Font ............................................................................................................ 46 把emoticons加到vkey中 ................................................................................. 47 star键的处理.................................................................................................... 48 常用短语.......................................................................................................... 48 表情符 ............................................................................................................. 48 切换输入法 ...................................................................................................... 49 EMS ................................................................................................................ 49 小区ID ............................................................................................................ 51 好算法:.......................................................................................................... 52 Popup............................................................................................................... 52 virtual keyboard................................................................................................. 52 SetDelScrnIDCallbackHandler ............................................................................ 53 闹钟................................................................................................................. 53 Key .................................................................................................................. 53 添加中文输入法 ............................................................................................... 53 ShowCategory28Screen ...................................................................................... 54 小菜单 ............................................................................................................. 54 播放声音.......................................................................................................... 55 录制声音.......................................................................................................... 57 WAP ................................................................................................................ 57 打电话 ............................................................................................................. 58 Layer ............................................................................................................... 58 Mtk的perl脚本 ............................................................................................... 59 图片的文件接口 ............................................................................................... 59 背光灯 ............................................................................................................. 60 宏定义文件 ...................................................................................................... 60 所有的宏定义开关............................................................................................ 60 接口函数.......................................................................................................... 60 48.1 音乐播放器 ............................................................................................... 60 48.2 48.3 48.4 48.5 48.6 48.7 48.8 48.9 48.10 48.11 48.12
内核级的timer .......................................................................................... 61 开机logo,问候语..................................................................................... 61 时间日期设置............................................................................................ 61 工程模式................................................................................................... 61 关机.......................................................................................................... 61 USB config ................................................................................................ 62 隐藏status,进入全屏 ............................................................................... 62 输入ems时的选项 .................................................................................... 62 输入符号................................................................................................... 62 电话簿 ...................................................................................................... 62 回到idle ................................................................................................... 62
48.13 取当前系统时间 ........................................................................................ 62 49 Arm工具 ......................................................................................................... 64
49.1
Armar –t .................................................................................................... 64
2
49.2 49.3
编译.......................................................................................................... 64 链接.......................................................................................................... 64
49.4 elf->bin ..................................................................................................... 64 50 分布式编译 ...................................................................................................... 65 51 编译依赖关系................................................................................................... 66 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
模拟器 ............................................................................................................. 66 获取手机号码................................................................................................... 67 C++的支持 ....................................................................................................... 67 九宫格 ............................................................................................................. 67 Power键处理 ................................................................................................... 68 优化................................................................................................................. 68 High light ......................................................................................................... 68 ShowCategory353Screen .................................................................................... 68 错误................................................................................................................. 69 内存布局.......................................................................................................... 69 拦截来电话 ...................................................................................................... 69 66category画图 ................................................................................................ 70 系统错误.......................................................................................................... 70 检查MTK开发环境配置 .................................................................................. 71 GUI ................................................................................................................. 71 MCP工程 ........................................................................................................ 71 屏幕大小.......................................................................................................... 72 windows类型重复定义 ..................................................................................... 72 08A编译.......................................................................................................... 72 PNG解码......................................................................................................... 72 trace ................................................................................................................. 73
3
1 添加新的模块
1.1
添加新模块
添加一个新的编译单元,需要按照MTK的Makefle系统的规则填写Makefile,然后把模块添加到系统中即可。
编译单元的编写参考make文件夹下面的各个单元:
pdk_demo.inc:引用路径,相当于-I编译选项 pdk_demo.def:宏定义,相当于-D
pdk_demo.lis:源文件列表(最好加全路径,这样模拟器可以找到) pdk_demo.pth:源文件的路径
1.2 添加到系统编译中
Option.mak文件
添加:
CUS_REL_SRC_COMP += pdk_demo
外部库:
COMPOBJS += ..\\..\\xxx.lib,可以使用相对路径,该路径是相对于MTK系统根目录的
1.3 总Makefile
LC6225_GEMINI_GPRS.mak
一般在这里添加总开关
PDK_DEMO = TRUE #TRUE/FALSE
4
然后在Option.mak中使用该选项
ifdef PDK_DEMO
ifeq ($(strip $( PDK_DEMO)),TRUE)
COM_DEFS += __MIIPTV_MMI_SUPPORT__:全局的宏定义 #COMPOBJS += ..\\lib\\mgp_common.a CUS_REL_SRC_COMP += pdk_demo endif endif
5
2 添加资源
所有的字符串,图片,声音资源最终都是以二进制数组的形式存在于程序中的。
2.1 定义ID范围
Plutommi\\mmi\\inc\\mmidatatype.h
首先定义始末范围
#define RESOURCE_BASE_RANGE(name, count)
\\
RESOURCE_BASE_##name, \\
RESOURCE_BASE_##name##_END = RESOURCE_BASE_##name + count – 1
Typedef enum { …
#if defined(__PDK_DEMO__)
RESOURCE_BASE_RANGE(PDK_DEMO, 100), #endif
…
} RESOURCE_BASE_ENUM;
typedef struct {
char *appname;
unsigned short min; // value;
unsigned short max; } mmi_resource_base_struct;
#define RESOURCE_BASE_TABLE_BEGIN() \\ const mmi_resource_base_struct g_mmi_resource_base_table[] = {
#define RESOURCE_BASE_TABLE_ITEM(ENUM_NAME) \\
{#ENUM_NAME, \\
(U16) RESOURCE_BASE_##ENUM_NAME, \\
(U16) RESOURCE_BASE_##ENUM_NAME##_END}, #define RESOURCE_BASE_TABLE_END() \\
};
6
然后定义应用程序使用的宏定义
#if defined(__PDK_DEMO__)
#define PDK_DEMO_BASE ((U16) RESOURCE_BASE_PDK_DEMO) #define PDK_DEMO_BASE_MAX ((U16) RESOURCE_BASE_PDK_DEMO_END) RESOURCE_BASE_TABLE_ITEM(PDK_DEMO) #endif //__PDK_DEMO__
2.2 添加应用程序
添加应用程序
Add new application
Plutommi\\mmi\\inc\\mmidatatype.h
typedef enum { …
APP_MIIPTS, …
} APPLICATION_DEPLOY;
#define ADD_APPLICATION(nId, pName, nMinId, nMaxId) \\
AddApp(nId, pName, nMinId, nMaxId)
void PopulateResData(void) { …
ADD_APPLICATION(APP_MIIPTS, \T\
… };
添加字符串
添加图片
添加菜单
7
2.3 添加菜单
define a new menu item in a new file ?plutommi\\mmi\\inc\\menuid\\miiptsmenuitems.h‘ MENU_ID_MIIPTS_APP,
include our app-menu in message menu
PopulateMessagesResData()?
ADD_APPLICATION_MENUITEM(MESSAGES_MENU_SMS_MENUID, …
MENU_ID_MIIPTS_APP, .. );
we add our appmenu into the system message menu. ADD_APPLICATION_MENUITEM((MENU_ID_MIIPTS_APP, MAIN_MENU_MESSAGES_MENUID, 0, SHOW, MOVEABLEACROSSPARENT|SHORTCUTABLE, STR_ID_MIIPTS_APP_NAME, 0));
2.4 Add new string
资源id在plutommi\\Customer\\ResGenerator文件夹里面
GetImageRaw读取资源ReadRes.c文件中
2.5 图片资源
gdi_image_draw_id
GetImage:从资源id中获取buffer GetImageTheme:取theme相关的图像 GetImageRaw:
GetImageFromIndex:
gdi_image_codec_draw: gdi_image_parse_info
gdi_image_parse_resource_internal: gdi_image_gif_draw_handler
8
1,
ImageIdMap:
资源内部格式:8位控制信息,0位type,1为帧数,
InitializeResourceVariables.c:初始化资源相关的变量
mtk_nCustImageNames:resource generator产生的图像的数组
CustImgDataHW.h:中就是所有的图像数组
2.6 编译资源
AlmInitRTCPwron? PopulateResData
#if defined(__PDK_DEMO__) {
extern void populate_pdk_demo_res(void); populate_pdk_d emo_res(); }
#endif //__PDK_DEMO__
这段代码,只有resgen时候才会用到。
编译资源时,会把Res_MMI目录下的所有源文件拷贝到工作目录,然后编译,其他的源文件不编译,所以需要把资源生成文件发在该目录下。
9
3 NVRAM
Default值在文件nvram_common_config.c中定义
目前, 我的format之后,值不是0,而是FF,为什么?因为Flash的默认情况下都是1,写操作是将某些位置为0,这是由Flash的原理决定的。
size必须为偶数 index是从1开始
读可以size内的任意大小,写必须为声明的大小 必须在nvram_user_config.c中定义新的nvram 项
锐锦的nvram定义在nvram_user_config.c中
联桥的定义在
属性:NVRAM_CATEGORY_USER
NVRAM_RESERVED_VALUE 这2条很重要
MAX_PHB_SIM_ENTRY = 250 MAX_PHB_PHONE_ENTRY = 200
初始化的时候,malloc函数还没有初始化? 我觉得有些不可能
nvram每项数据最大不能超过2k
1. Add new lid to nvram_lid_commapp_enum in
\\custom\\common\\PLUTO_MMI\\nvram_common_defs.h
code example: typedef enum {
NVRAM_EF_ADC_LID = NVRAM_LID_COMMAPP_BEGIN, …
NVRAM_EF_RAC_PREFERENCE_LID,
NVRAM_EF_MIIPTS_MSG_LID, //our code /* Add LID with its compile optoin in the tail comment */
NVRAM_EF_LAST_LID_COMMAPP
10
}nvram_lid_commapp_enum;
Note: our new LID must between the ?NVRAM_EF_ADC_LID‘ and ?NVRAM_EF_LAST_LID_COMMAPP‘.
2.
Define size and total in
\\custom\\common\\PLUTO_MMI\\common_nvram_editor_data_item.h
code example:
#define NVRAM_EF_MIIPTS_MSG_SIZE 260 #define NVRAM_EF_MIIPTS_MSG_TOTAL 20
Note: size must be even, if not, phone will be reset just after power on.
3. Add version number to \\interface\\ps\\nvram_editor_data_item.h
code example:
#define NVRAM_EF_MIIPTS_MSG_LID_VERNO \
4. Add a new struct to logical_data_item_table_comm_app in
\\custom\\common\\PLUTO_MMI\\nvram_common_config.c
code example:
ltable_entry_struct
logical_data_item_table_comm_app[NVRAM_EF_LAST_LID_COMMAPP
NVRAM_LID_COMMAPP_BEGIN] = { , }
… { },
NVRAM_EF_MIIPTS_MSG_LID, NVRAM_EF_MIIPTS_MSG_SIZE, NVRAM_EF_MIIPTS_MSG_TOTAL, NVRAM_EF_ZERO_DEFAULT,
NVRAM_ATTR_AVERAGE,
NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, \
VER(NVRAM_EF_MIIPTS_MSG_LID), \
NVRAM_INVALID_VALUE
-
Note: this item positon is according to the ?NVRAM_EF_MIIPTS_MSG_LID‘ in the enum
存储这种数据,还可以使用系统内置的Flash,在MTK6225-07B-0812上,该盘符是Z盘。
11
fs_quota.c
在数组gFS_ExtQuotaSet中申请一项:
{\ FS_QP_HIG_ENUM, 10*1024, FS_QMAX_NO_LIMIT, FS_COUNT_IN_BYTE}
4 Message organize in nvram
4.1
添加nvram项
在这个文件中添加nvram_user_config.c
4.2 Data structure:
typedef struct
{
S8 title[MIIPTS_MAXIMUM_MESSAGE_TITLE]; }miipts_struct_message_title;
typedef struct {
S8 title[MIIPTS_MAXIMUM_MESSAGE_TITLE]; S8 body[MIIPTS_MAXIMUM_MESSAGE_BODY]; }miipts_struct_message_item;
typedef struct
{
miipts_struct_message_title titles[MIIPTS_MAXIMUM_MESSAGE_ITEMS]; }miipts_struct_message_title_list;
4.3 Function
S32 miipts_read_msg_title_list(miipts_struct_message_title_list *list, S32 size); void miipts_read_msg(S32 index, miipts_struct_message_item *item); void miipts_write_msg(S32 index, miipts_struct_message_item *item); void miipts_append_msg(miipts_struct_message_item *item); void miipts_del_msg(S32 index);
12
4.4 note
We just read all the titles of messages into list when we browse the message list, but not all the message bodies because the data size may too large.
We read one message body into RAM when we enter the message body screen.
wgui_categories_inputs.c
wgui_EMS_inputbox_input_type
wgui_EMS_inputbox_input_mode_changed ;
wgui.c
S32 MMI_status_bar_height; S32 MMI_content_x; S32 MMI_content_y; S32 MMI_content_width; S32 MMI_content_height;
wgui_categories_util.c
MMI_title_string = (UI_string_type) get_string(title); MMI_title_icon = (PU8) get_image(title_icon);
smscore.c
2个有关ems输入和显示的全局变量: static msg_ems_data_struct bufForDisplay; static msg_ems_data_struct bufForEdit; 这个是这2个全局变量的外部接口:
EMSData *GetEMSDataForEdit(EMSData **p, U8 force)
MMI_current_input_box_type = EDITOR_EMS_INPUT_BOX
test_change_input_mode
gdi_layer.c
GDI_LCD is a global value to control the gdi context gdi_layer_lock_frame_buffer();
wgui_categories_util.c
UI_common_screen_exit? ExitCategoryFunction
13
event.c
U8 EntryNewScreen(U16 newscrnID, FuncPtr newExitHandler, FuncPtr newEntryHandler, void *peerBuf)
static FuncPtr currEntryFuncPtr;
static U16 currExitScrnID, currTopScrnID; /* curr exit func ptr with scrn id */ static FuncPtr currExitFuncPtr;
typedef enum { KEY_0= 0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9,
KEY_LSK, KEY_RSK, KEY_UP_ARROW, KEY_DOWN_ARROW, KEY_LEFT_ARROW, KEY_RIGHT_ARROW, KEY_SEND, KEY_END, KEY_CLEAR, KEY_STAR, KEY_POUND,
KEY_VOL_UP, KEY_VOL_DOWN, KEY_QUICK_ACS, KEY_CAMERA KEY_ENTER, KEY_WAP KEY_IP
MAX_KEYS,
KEY_INVALID
} mmi_keypads_enum;
= KEY_QUICK_ACS,
=KEY_ENTER, =KEY_ENTER,
/* max key codes support */
=0xFE// 255 /* By JL, to sync with driver */
14
typedef enum {
KEY_EVENT_DOWN, KEY_EVENT_UP, KEY_LONG_PRESS, KEY_REPEAT, MAX_KEY_TYPE
} mmi_key_types_enum;
FuncPtr currKeyFuncPtrs[MAX_KEYS][MAX_KEY_TYPE];
#define GDI_ENTER_CRITICAL_SECTION(func) GDI_LOCK; {int gdi_mutex_level = gdi_mutex.cnt;
#define GDI_EXIT_CRITICAL_SECTION(func) GDI_ASSERT(gdi_mutex_level == gdi_mutex.cnt);} GDI_UNLOCK;
wgui_ems.c
wgui_EMS_redraw_input_information_bar wgui_EMS_show_input_mode
wgui_EMS_redraw_remaining_characters_display
use this register function to register control_area_callback dm_register_category_controlled_callback
wgui_categories.c
ShowCategory66Screen
This category is special because it‘s redraw function will be called repeatedly if this category is being on show.
For a category:
ShowCategoryScreen ExitCategoryScreen
dm:draw manager
dm_setup_and_draw_ems_inputbox ?
15
move_EMS_inputbox (0, 120); MMI_multitap_height = 17 resize_EMS_inputbox(176, 63); hide_multitap
gui_show_EMS_input_box_ext
MMI_multitap_height is for the softkeyboard under the input text.
scroll bar:
void gui_set_vertical_scrollbar_scale(vertical_scrollbar *v, S32 scale) : length
void gui_set_vertical_scrollbar_range(vertical_scrollbar *v, S32 range) : total length void gui_set_vertical_scrollbar_value(vertical_scrollbar *v, S32 value) : position
void gui_move_vertical_scrollbar(vertical_scrollbar *v, S32 x, S32 y) void gui_show_vertical_scrollbar(vertical_scrollbar *v)
从ems中取出输入的数据: EMSData *pEMS;
GetEMSDataForEdit(&pEMS, 0);
5 screen管理
5.1 U8 GoBackToHistory(U16 scrnid)
回到history中的某个screen,返回值:0 失败,1 成功
入栈操作为:historyData[++currHistoryIndex] = data;currHistoryIndex 初始值为-1
16
5.2
void GoBacknHistory(U16 n)
返回到上 n+1 个history
5.3
historyData[50] 是个栈,最大可以有50个history
综合考虑闹钟,短信息,电话等等综合因素,screen切换要慎重。
screen只能作为显示,因为是screen manager来自动管理,即自动调用exit和entry函数的,因此程序的逻辑最好不要放在screen中,以免出错
6 多国语言支持
ref_list.txt
E:\\mtk_base\\plutommi\\Customer\\CustResource\\PLUTO_MMI *
E:\\MTK_BASE\\PLUTOMMI\\Customer\\CustResource 这个是根据上面的文件生成的文件
? ? ?
各个条目之间用 tab 分隔
在设置语言后,代码里要重新getstring,从而替换语言 不要修改长度项,6, … 随他去
language有个code,各个公司定义的不同,要注意。 比如:联桥的阿拉伯文定义就是0x9660,和其他不同
gCurrLangIndex
这是个很好的专题
FontRes.c里面的
typedef struct _CustFontData {
U8 nHeight; U8 nWidth; U8 nAscent; U8 nDescent;
17
U8 nEquiDistant;
U8 nCharBytes; U16 nMaxChars;
#ifdef __MMI_INDIC_ALG__
U8 *pDWidthArray; /* vijay added during merge */ #endif
U8 *pWidthArray; U32 *pOffsetArray; U8 *pDataArray; U32 *pRange;
U16 pFontType[MAX_FONT_TYPES][2]; const RangeDetails *pRangeDetails; } sCustFontData;
GB2312_Data_small
GB2312_RangeOffset_small
ShowString:
bidi_get_char_type:根据输入的字符串,获取字符方向:从右到左还是从左到右 ShowString_internal:
GetFontdata
画字符时,如果是控制字符,则转化为空格
UI_print_text ShowString ShowString_internal
7 键盘处理
MMI_key_input_handler
EMS_inputbox_multitap_input
clear_category_screen_key_handlers();
change_left_softkey(left_softkey, left_softkey_icon);
18
change_right_softkey(right_softkey, right_softkey_icon); clear_left_softkey(); clear_right_softkey();
register_left_softkey_handler(); register_right_softkey_handler(); register_default_hide_softkeys();
//get_softkey_function(KEY_EVENT_DOWN, MMI_RIGHT_SOFTKEY)
//GetKeyHandler(KEY_RSK, KEY_EVENT_DOWN)
execute_softkey_function(KEY_EVENT_UP, MMI_RIGHT_SOFTKEY);
8 YUV-RGB
#if 0
static long int crv_tab[256]; static long int cbu_tab[256]; static long int cgu_tab[256]; static long int cgv_tab[256]; static long int tab_76309[256];
static unsigned char clp[1024]; //for clip in CCIR601
void mbm_InitYUV2RGBTbl() {
long int crv,cbu,cgu,cgv; int i,ind;
crv = 104597; cbu = 132201; cgu = 25675; cgv = 53279;
for (i = 0; i < 256; i++) { crv_tab[i] = (i-128) * crv; cbu_tab[i] = (i-128) * cbu; cgu_tab[i] = (i-128) * cgu; cgv_tab[i] = (i-128) * cgv; tab_76309[i] = 76309*(i-16); }
for (i=0; i<384; i++) clp[i] =0; ind=384;
19
for (i=0;i<256; i++) clp[ind++]=i; ind=640;
for (i=0;i<384;i++) clp[ind++]=255; }
void mbm_Yuv420ToRGB565(char *yuvBuf, char *rgbBuf, int width, int height) {
unsigned char *src0; unsigned char *src1; unsigned char *src2; int y1,y2,u,v;
unsigned char *py1,*py2; int i,j, c1, c2, c3, c4; unsigned char *d1, *d2;
unsigned char r,g,b;
int imgSize = width * height; int doubWidth = width<<1;
src0=(unsigned char *)yuvBuf; src1=src0 + imgSize;
src2=src1+ (imgSize>>2);
py1=src0;
py2=py1+width;
d1=(unsigned char *)rgbBuf; d2=d1+doubWidth;
for (j = 0; j < height; j += 2) { for (i = 0; i < width; i += 2) {
u = *src1++; v = *src2++;
c1 = crv_tab[v]; c2 = cgu_tab[u]; c3 = cgv_tab[v]; c4 = cbu_tab[u]; //up-left
y1 = tab_76309[*py1++]; b = clp[384+((y1 + c4)>>16)]; g = clp[384+((y1 - c2 - c3)>>16)];
20
r = clp[384+((y1 + c1)>>16)];
*(unsigned short*)d1 = ((r>>3)<<11) | ((g>>2)<< 5) | (b>>3); d1 += 2;
//down-left
y2 = tab_76309[*py2++]; b = clp[384+((y2 + c4)>>16)]; g = clp[384+((y2 - c2 - c3)>>16)]; r = clp[384+((y2 + c1)>>16)];
*(unsigned short*)d2 = ((r>>3)<<11) | ((g>>2)<< 5) | (b>>3); d2 += 2;
//up-right
y1 = tab_76309[*py1++]; b = clp[384+((y1 + c4)>>16)];
g = clp[384+((y1 - c2 - c3)>>16)]; r = clp[384+((y1 + c1)>>16)];
*(unsigned short*)d1 = ((r>>3)<<11) | ((g>>2)<< 5) | (b>>3); d1 += 2;
//down-right
y2 = tab_76309[*py2++]; b = clp[384+((y2 + c4)>>16)]; g = clp[384+((y2 - c2 - c3)>>16)]; r = clp[384+((y2 + c1)>>16)];
*(unsigned short*)d2 = ((r>>3)<<11) | ((g>>2)<< 5) | (b>>3); d2 += 2;
}
d1 += doubWidth; d2 += doubWidth; py1 += width; py2 += width; } } #endif
9 触摸屏的支持
21
mmi_pen_editor_pen_down_handler
wgui_general_pen_down_hdlr
wgui_touch_screen.c
mmi_pen_editor_setup_input_box
注册pen down handler (mmi_pen_editor_pen_down_handler)-
mmi_pen_editor_pen_down_handler –〉处理PEN_EDITOR_CONTROL控件集,如果没有,则调用通用处理函数:
void wgui_general_pen_down_hdlr(mmi_pen_point_struct point),在其中查找控件集合,处理控件(主义,这里的控件时显示控件,在draw manager里定义,不同于上面的pen 控件) 查找当前的screen,并且查找其中的控件
void wgui_general_pen_up_hdlr(mmi_pen_point_struct point)
在列表里面,点击某一项,触摸屏会如下处理: wgui_general_pen_list_menu_hdlr
但是这个函数每次更换high light的时候,都会被重置,因此需要在每次high light的时候重新设置。
wgui_register_list_item_selected_callback()
同样,九宫格的处理是在下面的函数:
wgui_general_pen_matrix_menu_hdlr
只需要在enternewscreen时,使用wgui_register_matrix_item_selected_callback_all,就可以了,不需要每次high light都处理。
在TouchScreen.c module里面
typedef void (*mmi_pen_hdlr) (mmi_pen_point_struct pos); typedef struct {
S16 x; S16 y;
} mmi_pen_point_struct;
void mmi_pen_register_down_handler(mmi_pen_hdlr) void mmi_pen_register_up_handler(mmi_pen_hdlr pen_fp) void mmi_pen_register_move_handler(mmi_pen_hdlr pen_fp) void mmi_pen_register_long_tap_handler(mmi_pen_hdlr pen_fp)
22
10 Status Bar
statusIconRes.h 添加image id wgui_status_icons.h 添加 status id
wgui_status_icons.c 向MMI_status_icon MMI_status_icons[MAX_STATUS_ICONS]数组添加status 项
bmp图片13x13,放在\\MainLCD\\idleScreen\\Statusicons
11 网络
网络操作中的打开网络,创建socket,DNS以及关闭网络都与2各ID有关:
Account ID:数据账户的位序,在数据账户中有2个账户,GSM和GPRS,GSM有10个选项,从0到9,GPRS账户从10开始,例如:我们使用GPRS账户中的第四项作为imiChat的账户,则这个ID为13。(注:在07B双卡中, AccountID还需要使用
always_ask_encode_data_account_id函数,针对不同的卡进行处理,返回的ID才能使用,打开网络时使用AccountID,其他的Socket和DNS操作,以及关闭网络,都需要使用转换的AccountID)
Mode ID:这个ID是指该网络由哪个task操作的,如果想让网络层在单独的Task里面跑,则可以制定自定义的task。
打开网络:主要是设置账户的APN,向MOD_L4C发送 PRT_MMI_PS_SET_GPRS_DATA_ACCOUNT_REQ,需要传入AccountID,ModeID和账户的名称以及APN名称(例如CMNET或者CMNET)。
DNS:soc_gethostbyname,需要传入AccountID,ModeID
创建socket:soc_create
关闭网络:
soc_win32.c
kal_int8 soc_create(kal_uint8 domain, kal_uint8 type, kal_uint8 protocol, kal_uint16 mod_id, kal_uint32 nwk_account_id) 创建一个socket
23
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size) 设置socket的属性
1. 向MOD_L4C设置网络
2. DNS:MMI向LC4和TCPIPmodule发送消息,也不能简单地换module
3. soc_create用MOD
send:MMI-〉TCPIP
close:MMI-〉TCPIP detach
close ind:TCPIP->SOCK close_ind
MMI Task Stack Size: 5698
如果上网操作变成拨打电话,则是APN帐户设置不对,有次因为把13(第四个帐户再加9),直接设置成了4,导致出了问题
数据帐户设置 EntryDTCNTGPRSList
调节音量
EntryScrProfilesCommonVolumeLevel
察看jpeg图片
mmi_imgview_view_image_hdlr_ext
23网络与25不同
23关闭网络使用:soc_app_auto_deactivate_req(mod, account, 0),该函数会发送消息 MOD_MMI -> MOD_ABM:MSG_ID_SOC_ABM_DEACTIVATE_REQ
然后在处理后,MOD_ABM -> MOD_SOC:MSG_ID_SOC_AMB_DEACTIVATE_CNF
cmwap代理 HTTP/1.1 200 OK
Content-Type: text/vnd.wap.wml; charset=UTF-8 Content-Length: 804
Date: Wed, 20 Jan 2010 04:55:19 GMT
24
Connection: Close
Proxy-Connection: Close
Via: HTTP/1.1 SHSH-PS-WAP2-GW18(infoX-WISG, Huawei Technologies)
Server: WebLogic Server 8.1 SP3 Tue Jun 29 23:11:19 PDT 2004 404973 with CRs:
wml
PUBLIC
\
WML
1.1//EN\
\
href=\TN=2SQMQMZ6&IMSI=46002\
关闭网络的地方,再08A版本后,使用的是:cbm_release_bearer
12 SMS
smsmsg.c
void mmi_frm_sms_new_sms_ind(void *inMsg)
void mmi_frm_sms_delete_sms(PsFuncPtrU16 callback, module_type mod_src, U8 type, U16 index)
联通和移动编码不同
拔电池和关机是有区别的,拔电池,与基站的联系并没有断开,而关机会断开的,因此,拔电池再重新开机时会收到短消息,会导致异常的。
void miiaux_dual_send_sms_req(int slave, const char* number, const char* content, miipts_send_sms_cb cb)
25
{
#if 1
char* ucs2;
mmi_frm_sms_send_struct sendData; //char * test_no = \
memset(&sendData, 0, sizeof(mmi_frm_sms_send_struct));
MIIPTS_ASSERT(mb_utf8_len(number) \
<
sizeof(sendData.number),
memset(sendData.number, 0, sizeof(sendData.number));
strncpy((char *) sendData.number, number, sizeof(sendData.number) - 1); //strncpy((char *)sendData.number, test_no, sizeof(sendData.number) - 1);
//malloc
//ucs2 = (char *) miipts_utf8_to_unicode((const char *) content); sendData.stringlength = (U16)strlen((char *)content);
sendData.string = (S8 *) OslMalloc((sendData.stringlength + 1) << 2);
MIIPTS_ASSERT(sendData.string, \ if(sendData.string) {
memset(sendData.string, 0, ((sendData.stringlength + 1))); }
mmi_asc_to_ucs2((char *)(sendData.string), (char *)content);
//mb_free(ucs2);
sendData.dcs = SMSAL_8BIT_DCS;
sendData.sendcheck = MMI_FRM_SMS_SCR;
MTPNP_AD_Set_Channel(MTPNP_AD_SMS_CHANNEL, MTPNP_AD_CHANNEL_MASTER + slave);
mmi_frm_sms_send_sms(cb, g_miiaux_mod, &sendData); //OslMfree(sendData.string); #else {
char* ucs2;
mmi_frm_sms_send_struct sendData; //char * test_no = \
memset(&sendData, 0, sizeof(mmi_frm_sms_send_struct));
MIIPTS_ASSERT(mb_utf8_len(number) \
26
< sizeof(sendData.number),
memset(sendData.number, 0, sizeof(sendData.number));
strncpy((char *) sendData.number, number, sizeof(sendData.number) - 1); //strncpy((char *)sendData.number, test_no, sizeof(sendData.number) - 1);
//malloc
ucs2 = (char *) miipts_utf8_to_unicode((const char *) content); sendData.stringlength = (U16)mb_ucs2_len((const U16*)ucs2); sendData.string = (S8 *) OslMalloc((sendData.stringlength + 1) << 1);
MIIPTS_ASSERT(sendData.string, \ if(sendData.string) {
memset(sendData.string, 0, ((sendData.stringlength + 1) << 1)); }
memcpy(sendData.string, ucs2, ((sendData.stringlength + 1) << 1)); mb_free(ucs2);
sendData.dcs = SMSAL_UCS2_DCS; sendData.sendcheck = MMI_FRM_SMS_SCR;
MTPNP_AD_Set_Channel(MTPNP_AD_SMS_CHANNEL, MTPNP_AD_CHANNEL_MASTER + slave);
mmi_frm_sms_send_sms(cb, g_miiaux_mod, &sendData); //OslMfree(sendData.string); } #endif }
13 TASK
custom_config.h
add customer task id into ?custom_module_type‘
custom_config.c
define task create function here
?extern kal_bool miipts_task_create(comptask_handler_struct **handle);‘ add index into ?custom_task_indx_type custom_mod_task_g‘
add task item into ?const comptask_info_struct custom_comp_config_tbl‘
custom_config.h
27
define index here into ?custom_task_indx_type‘ add mode id into ?custom_module_type‘
stack_config.h
MMI的优先级是220
我们目前的miipts task的优先级是212
上面的是06B的方式,在07B中,这2个文件是由sysGen1脚本生成的,因此需要改动脚本。
stack_int_get_active_module_id 在TASK中,动态获得自己的MOD ID,这个值在各种系统级的应用中都会用到,例如network等。
stack_int_set_active_module_id(INDX_FLASH, MOD_FLASH); kal_get_my_task_index(&my_index);
stack_set_active_module_id(my_index, MOD_FLASH);
干啥用的?
14 Camera
需要定义宏:__MMI_CAMERA__
mdi_camera.h mdi_camera.c
mdi_camera_power_on:
发消息MSG_ID_MEDIA_CAM_POWER_UP_REQ给MED Task,并用事件来同步等待MED的回复。
我们imiChat自己使用时会有些特殊的处理: MSG_ID_MEDIA_CAM_PTS_INIT_REQ,
mdi_camera_power_off
28
resizer.c中的RESZ_HISR
我们在这里面处理图像数据,miimtk_media_RESZ_update_yuv_buffer,乒乓buffer,我们在这里修改buffer,将已有的数据发送给处理task来处理。
15 IMSI
IMSI的全称是(International Mobile Subscriber Identification Number)全球移动用户标示码,也就是客户识别码(15位数字)。它包括移动国家代码、移动网络代码和移动用户身份号码三部分。当手机开机后在接入网络的过程中有一个注册登记的过程,这时候会被分配一个客户号码(客户电话号码)和客户识别码(IMSI)客户请求接入网络时,系统通过控制信道将经加密算法后的参数组传送给客户,手机中的SIM卡收到参数后,与SIM卡存储的客户鉴权参数经同样算法后对比,结果相同就允许接入,否则为非法客户,网络拒绝为此客户服务。IMSI是用来产生TIMSI的。TIMSI是一种伪随机数产生的IMSI,GSM网络运营商使用TIMSI是为了通过空中界面传输IMSI的需要,这能使IMSI更加安全。要通过IMSI/TIMSI追踪一个GSM用户,窃听者必须在TIMSI开始通讯的时候就拦截GSM网络通信。此外,因为TIMSI周期性的重复通讯,窃听者必须拦截每一次TIMSI的重新通讯会话。
IMSI共有15位,其结构如下:
MCC+MNC+MIN
MCC:Mobile Country Code,移动国家码,共3位,中国为460;
16 IMEI
16位
17 APN
APN(Access Point Name),即―接入点名称‖,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。
名字:MAX_GPRS_APN_LEN 100字节
29
18 GPRS
概述
GPRS是 通用分组无线业务(General Packet Radio Service)的简称,它突破了GSM网只能提供电路交换的思维方式,只通过增加相应的功能实体和对现有的基站系统进行部分改造来实现分组交换,这种改 造的投入相对来说并不大,但得到的用户数据速率却相当可观。GPRS(General Packet Radio Service)是一种以全球手机系统(GSM)为基础的数据传输技术,可说是GSM的延续。GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输,因此使用者所负担的费用是以其传输资料单位计算,并非使用其整个频道,理论上较为便宜。
GPRS的 传输速率可提升至56甚至114Kbps。而且,因为不再需要现行无线应用所需要的中介转换器,所以连接及传输都会更方便容易。如此,使用者既可联机上 网,参加视讯会议等互动传播,而且在同一个视讯网络上(VRN)的使用者,甚至可以无需通过拨号上网,而持续与网络连接。
GPRS的特点
1.应用上的特点
目前,用手机上网还显得有些不尽人意。因此,全面的解决方法GPRS也就这样应运而生了,这项全新技术可以令您在任何时间、任何地点都能快速方便地实现连接,同时费用又很合理。简单地说:速度上去了,内容丰富了,应用增加了,而费用却更加合理。
(1)高速数据传输
速度10倍于GSM,更可满足您的理想需求,还可以稳定地传送大容量的高质量音频与视频文件,可谓不一般的巨大进步。
(2)永远在线
由于建立新的连接几乎无需任何时间(即无需为每次数据的访问建立呼叫连接),因而您随时都可与网络保持联系,举个例子,若无GPRS的支持,当您正在网上漫游,而此时恰有电话接入,大部分情况下您不得不断线后接通来电,通话完毕后重新拨号上网。这对大多数人来说,的确是件非常令人恼火的事。而有了GPRS,您就能轻而易举地解决这个冲突。
(3)仅按数据流量计费
即根据您传输的数据量(如:网上下载信息时)来计费,而不是按上网时间计费也就是说,只要不进行数据传输,哪怕您一直“在线”,也无需付费。做个“打 电话”的比方,在使用GSM+WAP手机上网时,就好比电话接通便开始计费;而使用GPRE+WAP上网则要合理得多,就像电话接通并不收费,只有对话时 才计算费用。总之,它真正体现了少用少付费的原则2.
30
2.技术上的特点
数据实现分组发送和接受,按流量计费;56~115Kbps的传输速度.
由于使用了\分组\的技术,用户上网可以免受断线的痛苦(情形大概就跟使用了下载软件NetAnts差不多)。此外,使用GPRS上网的方法与WAP并不同,用WAP上网就如在家中上网,先\拨号连接\,而上网后便不能同时使用该电话线,但GPRS就较为优越,下载资料和通话是可以同时进行的。从技术上来说,声音的传送(即通话)继续使用GSM,而数据的传送便可使用GPRS,这样的话,就把移动电话的应用提升到一个更高的层次。而且发展GPRS技术也十分\经济\,因为只须沿用现有的GSM网络来发展即可。GPRS的用途十分广泛,包括通过手机发送及接收电子邮件,在互联网上浏览等。
现在手机上网的口号就是\、\,使用了GPRS后,数据实现分组发送和接收,这同时意味着用户总是在线且按流量计费,迅速降低了服务成本。对于继续处在难产状态的中国移动/联通WAP资费政策,如果将CSD(电路交换数据,即通常说的拨号数据,欧亚WAP业务所采用的承载方式)承载改为在GPRS上实现,则意味着由数十人共同来承担原来一人的成本。
GPRS的最大优势在于它的数据传输速度不是WAP所能比拟的。目前的GSM移动通信网的传输速度为每秒9.6K字节,GPRS手机在今年年初推出时已达到56Kbps的传输速度,到现在更是达到了115Kbps(此速度是常用56Kmodem理想速率的两倍)。
GPRS是以分组交换的方式进行数据传输,由于是分组交换,因此在网络资源的利用率上较电路交换有了很大的提高,而且GPRS可以同时进行语音与数据的传递,并且计费可以完全按照产生的流量来统计。而现有的WAP的承载是电路交换(CSD)方式,电路交换方式数据与话音不能同时进行,在收费模式上也是按照时长来收费。
实际上WAP本身与GPRS本质上不具有可比性,现有WAP上的内容在GPRS上面一样可以浏览和应用,只不过GPRS使现有的CSD方式的WAP更快、更方便、收费更合理,对WAP的服务内容也会由于网络的技术进步而有较大的促进和改善。
长远来看,WAP现在用的是CSD(电路交换数据)的GSM数据业务,以后WAP也可以转为使用GPRS这种新的GSM网络作为承载方式。
所以,GPRS不会取代WAP,举一个形象的例子:GPRS和现在的CSD方式的GSM数据业务都是马路,WAP则是马路上的汽车,WAP现在行驶在两车道上,GPRS提高了数据传送速度,是8车道,可以说GPRS增强了WAP业务,现有WAP上的内容一样可以通过GPRS进行浏览和应用。
GPRS的应用,迟些还会配合Bluetooth(蓝牙技术)的发展。到时,数码相机
31
加了bluetooth,就可以马上通过手机,把像片传送到遥远的地方,也不过一刻钟的时间,够酷吧,这个日子将距离我们不远了。
3.GPRS与GSM比较中表现出的特点
相对于GSM的9.6kbps的访问速度而言,GPRS拥有171.2kbps的访问速度;在连接建立时间方面,GSM需要10-30秒,而GPRS只需要极短的时间就可以访问到相关请求;而对于费用而言,GSM是按连接时间计费的,而GPRS只需要按数据流量计费;GPRS对于网络资源的利用率而相对远远高于GSM。
4.GPRS服务特点对应的范围 1.移动商务
2.移动信息服务 3.移动互联网 4.多媒体业务
5.GPRS的技术优势
(1)相对低廉的连接费用
资源利用率高在GSM网络中,GPRS首 先引入了分组交换的传输模式,使得原来采用电路交换模式的GSM传输数据方式发生了根本性的变化,这在无线资源稀缺的情况下显得尤为重要。按电路交换模式 来说,在整个连接期内,用户无论是否传送数据都将独自占有无线信道。在会话期间,许多应用往往有不少的空闲时段,如上Internet浏览、收发E- mail等等。对于分组交换模式,用户只有在发送或接收数据期间才占用资源,这意味着多个用户可高效率地共享同一无线信道,从而提高了资源的利用率。GPRS用户的计费以通信的数据量为主要依据,体现了“得到多少、支付多少”的原则。实际上,GPRS用户的连接时间可能长达数小时,却只需支付相对低廉的连接费用。
(2) 传输速率高
GPRS可提供高达115kbit/s的传输速率(最高值为171.2kbit/s,不包括FEC)。这意味着在数年内,通过便携式电脑,GPRS用户能和ISDN用户一样快速地上网浏览,同时也使一些对传输速率敏感的移动多媒体应用成为可能。
(3) 接入时间短分组交换接入时间缩短为少于1GPRS是一种新的GSM数据业务,它可以给移动用户提供无线分组数据接入股务。GPRS主要是在移动用户和远端的数据网络(如支持TCP/IP、X.25等网络)之间提供一种连接,从而给移动用户提供高速无线IP和无线X.25业务。
GPRS采用分组交换技术,它可以让多个用户共享某些固定的信道资源。如果把空中接口上的TDMA帧中的8个时隙都用来传送数据,那么数据速率最高可达164kb/8.GSM空中接口的信道资源既可以被话音占用,也可以被GPRS数据业务占用。当然在信道充足的条件下,可以把一些信道定义为GPRS专用信道。要实现GPRS网络,需要在传统的GSM网络中引入新的网络接口和通信协议。目前
32
GPRS网络引入GSN(GPRS Surporting Node)节点。移动台则必须是GPRS移动台或GPRS/GSM双模移动台。
GPRS的发展
根据欧洲ETSI的GSM第2+阶段的建议,GPRS分为两个发展阶段(即Phase 1和Phase2)。GPRS的Phase l阶段将能支持下列功能和业务:
1.TCP/IP和X.25业务
2.全新的GPRS空中接口加密技 3.GPRS附加业务
4.增强型的短信业务(E一SMs)
GPRS分组数据计费功能,即根据数据量而采取计费上述功能业务中最显著的是TCP/IP和X.25功能。GSM网络可以通过TCP/IP和X.25为用户提供电子邮件、WWW浏览、专用数据、LAN接入等业务。GPRS Phase 2阶段的规范尚在制订之中,它将能提供更多的新功能和新业务。
GPRS的应用
1.GPRS中的WAP应用
GPRS与WAP组合是当前令“手机上网”迈上新台阶的最佳实施方案:GPRS是强大的底层传输,WAP则作为高层应用,如果把WAP比作飞驰的车辆,那么GPRS就是宽阔畅通的高速公路,任您在无线的信息世界中随意驰骋。
2.设备上的应用
GPRS可 以在除蜂窝电话之外的多种设备中得以实现,包括膝上型电脑的PCMCIA调制解调器、个人数字助理的扩展模块和手提式电脑。当前流行的手提式E-mail 设备BlackBerry(黑莓)的制造商Research in Motion(RIM)于一个称为Microcell Telecommunications的GSM供应商合作,研究如何将GPRS用于其他无线系统消息的传送。
3.GPRS业务应用
自从首次实现文本信息传输以来,无线数据应用已经历了飞跃式的增长,单是看看欧美知名厂商大肆宣传通用分组无线业务(GPRS)的劲头,似乎也能让人感到下一代移动数据应用时代的行将来临。将在99年底或是2000年初开启的通用分组无线业务GPRS, 作为迈向第三代个人多媒体业务的重要里程碑,将使移动通信与数据网络合二为一,使IP业务得以引入广阔的移动市场。尽管目前移动数据的使用相对较少,但在 某些市场中,不同的用户群却正在快速发展,其推动力量主要是在移动领域中采用数据业务的商业市场。不论是爱立信、诺基亚还是阿尔卡特,几乎所有宣传GPRS的厂商都以商业用户市场的快速成长来游说运营商。
GSM系统的分组移动数据通信(即GPRS)是基本分组无线业务,采用分组交换的方式,数据速率最高可达164kb/、它可以给GSM用户提供移动环境下的高速数据业务,还可以提供收发Emai1、Internet例览等功能。
33
4.GPRS功能对应的业务应用
GPRS是一种新的GSM数据业务,它可以给移动用户提供无线分组数据接入股务。GPRS主要是在移动用户和远端的数据网络(如支持TCP/IP、X.25等网络)之间提供一种连接,从而给移动用户提供高速无线IP和无线X.25业务。 GPRS采用分组交换技术,它可以让多个用户共享某些固定的信道资源。如果把空中接口上的TDMA帧中的8个时隙都用来传送数据,那么数据速率最高可达164kb/8.GSM空中接口的信道资源既可以被话音占用,也可以被GPRS数据业务占用。当然在信道充足的条件下,可以把一些信道定义GPRS专用信道。 要实现GPRS网络,需要在传统的GSM网络中引入新的网络接口和通信协议。目前GPRS网络引入GSN(GPRS SurportingNode)节点。移动台则必须是GPRS移动台或GPRS/GSM双模移动台。
GPRS相关技术
1.GPRS技术体现
GPRS通用无线分组业务,是一种基于GSM系统的无线分组交换技术,提供端到端的、广域的无线IP连接。通俗地讲,GPRS是一项高速数据处理的技术,方法是以\分组\的形式传送资料到用户手上。虽然GPRS是作为现有GSM网络向第三代移动通信演变的过渡技术,但是它在许多方面都具有显著的优势。目前,香港作为第一个进行GPRS实地测试的地区,已经取得了良好的收效。
由于使用了\分组\的技术,用户上网可以免受断线的痛苦(情形大概就跟使用了下载软件NetAnts差不多)。此外,使用GPRS上网的方法与WAP并不同,用WAP上网就如在家中上网,先\拨号连接\,而上网后便不能同时使用该电话线,但GPRS就较为优越,下载资料和通话是可以同时进行的。从技术上来说,声音的传送(即通话)继续使用GSM,而数据的传送便可使用GPRS,这样的话,就把移动电话的应用提升到一个更高的层次。而且发展GPRS技术也十分\经济\,因为只须沿用现有的GSM网络来发展即可。GPRS的用途十分广泛,包括通过手机发送及接收电子邮件,在互联网上浏览等。
现在手机上网的口号就是\、\,使用了GPRS后,数据实现分组发送和接收,这同时意味着用户总是在线且按流量计费,迅速降低了服务成本。对于继续处在难产状态的中国移动/联通WAP资费政策,如果将CSD(电路交换数据,即通常说的拨号数据,欧亚WAP业务所采用的承载方式)承载改为在GPRS上实现,则意味着由数十人共同来承担原来一人的成本。
而GPRS的最大优势在于:它的数据传输速度不是WAP所能比拟的。目前的GSM移动通信网的传输速度为每秒9.6K字节,GPRS手机在今年年初推出时已达到56Kbps的传输速度,到现在更是达到了115Kbps(此速度是常用56Kmodem理想速率的两倍)。所以敬请大家珍惜手上的Nokia7110及MotorolaL2000,相信到了GPRS手机推出时,他们都要让路。
2.封包(Packet)技术
所谓的封包(Packet)就是将Date封装成许多独立的封包,再将这些封包一个一个传送出去,形式上有点类似寄包裹,采用包交换的好处是只有在有 资
34
料需要传送时才会占用频宽,而且可以以传输的资料量计价,这对用户来说是比较合理的计费方式,因为象Internet这类的数据传输大多数的时间频宽是 间置的。此外,在GSM phase 2 的标准里,GPRS可 以提供四种不同的编码方式,这些编码方式也分别提供不同的错误保护(Error Protection)能力。利用四种不同的编码方式每个时槽可提供的传输速率为CS-1(9.05K)、CS-2(13.4K)、CS-3 (15.6K)及CS-4(21.4K),其中CS-1的保护最为严密,CS-4则是完全未加以任何保护。每个用户最多可同时使用八个时槽,所以GPRS号称最高传输速率为171.2K。
3.GPRS的网络结构
GPRS网络是基于现有的GSM网络来实现的。在现有的GSM网络中需要增加一些节点,如GGSN(Gateway GPRSSupporting Node,网关GPRS支持节点)和SGSN(Serving GSN,服务GPRS支持节点)。
GPRS网络参考模型如图1所示。GSN是GPRS网络中最重要的网络节点。GSN具有移动路由管理功能,它可以连接各种类型的数据网络,并可以连到GPRS寄存器。GSN可以完成移动台和各种数据网络之间的数据传送和格式转换。GSN可以是一种类似于路由器的独立又备,也可以与GSM中的MSC集成在一起。
GSN有两种类型:一种为SGSN(Serving GSN,服务GSN),另一种为GGSN(GatewayGSN,网关GSN),SGSN的主要作用是记录移动台的当前位置信息,并且在移动台和GGSN 之间完成移动分组数据的发送和接收。GGSN主要是起网关作用,它可以和多种不同的数据网络连接,如ISDN、PSPDN和LAN等。有的文献中,把 GGSN称为GPRS路由器。GGSN可以把GSM网中的GPRS分组数据包进行协议转换,从而可以把这些分组数据包传送到远端的TCP/IP或X.25网络。
另外,有的厂商提出了GR(GSMRegister,GPRS数据库)的概念。GR类似于GSM中的HLR,是GPRS业务数据库。它可以独立存在,也可以和HLR共存,由服务器或程控交换机实现。GR这个名称在ETSI的建议中没有专门提及。
GPRS网络结构中还引入了下列新的网络接口: Gn,GSN主干网接口,用于各种GSN之间 Gb,BSS和sGsN之间的接口。 Gr,SGSN和HLR之间的接口。
Gp,不同的GSM网络(不同的PLMN)之间的接口。 Gs,SGSN和MSC之间的接口。
4.GPRS协议模型
Um接口是GSM的空中接口。Um接口上的通信协议有5层,自下而上依次为物理层、MAC Mdium AccessControl)层、LLC(Logical Link Control)层、SNDC(Subnetwork DependantConvergence)层和网络层。
Um接口的物理层为射频接口部分,而物理链路层则负责提供空中接口的各种逻辑信道。GSM空中接口的载频带宽为20OkHz,一个载频分为8个物理信道。
35
如果8个物理信道都分配为传送GPRS数据,则原始数据速率可达20Okb/s。考虑前向纠错码的开销,则最终的数据速率可达164kb/s左右。
MAC为媒质接入控制层。MAC的主要作用是定义和分配空中接口的GPRS逻辑信道,使得这些信道能被不同的移动台共享。GPRS的逻辑信道共有3类,分别是公共控制信道、分组业务信道和GPRS广播信道。公共控制信道用来传送数据通信的控制信令,具体又分为寻呼和应答等信道。分组业务信道用来传送分组数据。广播信道则是用来给移动台发送网络信息。
LLC层为逻辑链路控制层。它是一种基于高速数据链路规程HDLC的无线链路协议。LLC层负责在高层SNDC层的SNDC数据单元上形成LLC地址、帧字段,从而生成完整的LLC帧。另外,LLC可以实现一点对多点的寻址和数据帧的重发控制。
BSS中的LLR层是逻辑链路传递层。这一层负责转送MS和SGSN之间的LLC帧。LLR层对于SNDC数据单元来说是透明的,即不负责处理SNDC数据。
SNDC被称为子网依赖结合层。它的主要作用是完成传送数据的分组、打包,确定TCP/IP地址和加密方式。在SNDC层,移动台和SGSN之间传送的数据被分割为一个或多个SNDC数据包单元。SNDC数据包单元生成后被放置到LLC帧内。
网络层的协议目前主要是Phase 1阶段提供的TCP/IP和L25协议。TCP/IP和X.25协议对于传统的GSM网络设备(如BSS和NSS等设备)是透明的。
5.GPRS的路由管理
GPRS的路由管理是指GPRS网络如何进行寻址和建立数据传送路由。GPRS的路由管理表现在以下3个方面:移动台发送数据的路由建立;移动台接收数据的路由建立;以及移动台处于漫游时数据路由的建立。
对于第一种情况,如图3中的路径1所示。当移动台产生了一个PDU(分组数据单元),这个PDU经过SNDC层处理,称为SNDC数据单元。然后经过 LLC层处理为LLC郑通过空中接口送到GSM网络中移动台所处的SGSN。SGSN把数据送到GGSN。GGSN把收到的消息进行解装处理,转换为可在 公用数据网中传送的格式(如PSPDN的PDU),最终送给公用数据网的用户。为了提高传输效率,并保证数据传输的安全,可以对空中接口上的数据做压缩和 加密处理。
在第二种情况中,一个公用数据网用户传送数据到移动台。首先通过数据网的标准协议建立数据网和GGSN之间的路由。数据网用户发出的数据单元(如 PSPDN中的PDU),通过建立好的路由把数据单元PDU送给GGSN。而GGSN再把PDU送给移动台所在的SGSN上GSN把PDU封装成SNDC 数据单元,再经过LLC层处理为LLC帧单元,最终通过空中接口送给移动台。
第三种情况是一个数据网用户传送数据给一个正在漫游的移动用户。其数据
36
必须要经过归属地的GGSN,然后送到移动用户A。 空中按口的信道构成 GPRS空中接口的信道构成如下:
PDTCH(Pachet Data Traffic Channe1),分组数据业务信道。这种信道用来传送空中接口的GPRS分组数据。
PPCH(Packet Paging Channe1),分组寻呼信道PPCH用来寻呼GPRS被叫用户。
PRACH(Packet Randem Access Channel),分组随机接入信道。GPRS用户通过PRACH向基站发出信道请求。
PAGCH(Packet Access Grant Channel),分组接人应答信道。PAGCH是一种应答信道,对PRACH作出应答。
PACCH(Packet Asscrchted ControlChannel),分组随路控制信道。这种信道用来传送实现GPRS数据业务的信令。
6. GPRS服务技术
GPRS分组数据计费功能,即根据数据量计费。
7. GPRS与IP
GPRS的技术的引进,把电信网络和计算机网络有机地连接在一起,朝未来的全IP网络平台发展。 从GPRS结构可以看出,基站与SGSN备之间的连接一般通过帧中继连接,SGSN与GGSN设备之间通过IP网络连接。
GGSN可以由具有 NAT(网络地址翻译)功能的路由器承担内部IP地址与外部网络IP地址的转换,MS可以访问GPRS内部的网络,也可以通过 APN(外部网络接入点名)访问外部的PDN/Internet网络。 在标识GPRS设 备中,如手机MS的标识除了在GSM中使用的IMSI、MSISDN等号码外,还需要分配IP地址。网元设备SGSN、GGSN的标识既有7号信令地址, 又有数据GGSN的IP地址,GSN(SGSN或GGSN)之间的通信采用IP地址,而GSN与MSC、HLR等实体的通信采用7号信令地址。在GPRS系统中,有两个重要的数据库记录信息。一是用户移动性管理上下文,用于管理移动用户的位置信息,另一是用户的PDP上下文(分组数据协议上下文),用于管理从手机MS到网关GGSN及到ISP(Internet服务提供商)之间的数据路由信息。当MS访问GPRS内 部网络或外部PDN/ Internet网络时,MS向SGSN发激活PDP上下文请求消息,MS可以与运营商签约选择固定服务的GGSN。或根据APN选择规则,由SGSN选 择服务的GGSN,SGSN再向GGSN发建立PDP上下文请求消息。GGSN分配 MS一个IP地址(静态或动态、公用或私有),在建立PDP上下文过程中,需要对用户的身份,需要的服务质量进行鉴权和论证,在成功地建立和激活PDP上 下文后, MS、 SGSN和GGSN都存储了用户的PDP上下文信息。有了用户的位置信息和数据的路由信息, MS就可以访问该网络的资源。 二代半产品GPRS的问世,在开发和部署GPRS业务时会遇到一些新的概念。
GPRS与GPS
两者完全不属于一个技术范畴,根本不可相提并论。
据介绍,GPS意为“全球卫星定位系统”,是一种定位技术,用来确认物体
37
的经纬度位置,至少十年内不会有比GPS更先进的定位技术。而GPRS意为“通用分组无线数据服务”,只是一种数据传输方式,用来传递数据组群,如同发送手机短信息,不具备任何定位或防盗抢功能。GPRS可说是GPS中的一个部件,为GPS技术应用中起到一种传输数据的功能。如GPS领军企业“赛格车圣”的产品,就有几款是采用GPRS方式来传送数据。
19 阿拉伯文和波斯文
阿拉伯文和波斯文主要在文字显示的数序上有不同。一般语言都是从左到右,阿拉伯文的话是从右到左显示的。
阿拉伯语有28个字母
使用阿拉伯语字母的语言有:波斯语,阿富汗语,乌尔都语,和部分突厥语,柏柏语,马来语
阿拉伯人善用舌,希腊人善用脑,中国人善用手
23568947 25363258 2 共17个,其中10个分为第一行显示,7个第二行
改动:
1. add dynamic scroll bar position for browser (MiiptsApp.h, MiiptsApp.c and
wgui_categories_inputs.c)
2. add right align into browser(mb_browser.cpp) 3. add right align draw text(mb_mtk_gdi.cpp)
在ref_list.txt里面有各个语言的id,有可能不一致,看看
由于是从右向左,所以起始点变为了最后点,我们print text错误了
语言支持配置在mmi_featuresPLUTO.h,mmi_features.h
双向语言(bi-directional
language)。对于希伯莱语言或者阿拉伯语言,文字是从右向左显示,而其中的英文单词或商标符号从左向右显示。对于中文,都是从左向右显示。
以下是一些统计资料,显示用UTF8来储存文件每个字符所需的平均字节: 1.拉丁语系平均用1.1 Bytes;
2.希腊文、俄文、阿拉伯文和希伯莱文平均用1.7 Bytes;
38
3.其他大部份文字如中文、日文、韩文、Hindi(北印度语)用约3 Bytes; 4.用超过4 Bytes的都是些非常少用的文字符号。
0000..007F; Basic Latin 0080..00FF; Latin-1 Supplement 0100..017F; Latin Extended-A 0180..024F; Latin Extended-B 0250..02AF; IPA Extensions 02B0..02FF; Spacing Modifier Letters 0300..036F; Combining Diacritical Marks 0370..03FF; Greek and Coptic 0400..04FF; Cyrillic
0500..052F; Cyrillic Supplementary 0530..058F; Armenian 0590..05FF; Hebrew
0600..06FF; Arabic
0700..074F; Syriac 0780..07BF; Thaana 0900..097F; Devanagari 0980..09FF; Bengali 0A00..0A7F; Gurmukhi 0A80..0AFF; Gujarati 0B00..0B7F; Oriya 0B80..0BFF; Tamil 0C00..0C7F; Telugu 0C80..0CFF; Kannada 0D00..0D7F; Malayalam 0D80..0DFF; Sinhala 0E00..0E7F; Thai 0E80..0EFF; Lao 0F00..0FFF; Tibetan 1000..109F; Myanmar 10A0..10FF; Georgian 1100..11FF; Hangul Jamo 1200..137F; Ethiopic
13A0..13FF; Cherokee
1400..167F; Unified Canadian Aboriginal Syllabics 1680..169F; Ogham 16A0..16FF; Runic 1700..171F; Tagalog 1720..173F; Hanunoo 1740..175F; Buhid
39
1760..177F; Tagbanwa
1780..17FF; Khmer 1800..18AF; Mongolian
1E00..1EFF; Latin Extended Additional 1F00..1FFF; Greek Extended 2000..206F; General Punctuation 2070..209F; Superscripts and Subscripts
20A0..20CF; Currency Symbols
20D0..20FF; Combining Diacritical Marks for Symbols 2100..214F; Letterlike Symbols 2150..218F; Number Forms 2190..21FF; Arrows
2200..22FF; Mathematical Operators 2300..23FF; Miscellaneous Technical 2400..243F; Control Pictures
2440..245F; Optical Character Recognition 2460..24FF; Enclosed Alphanumerics 2500..257F; Box Drawing 2580..259F; Block Elements 25A0..25FF; Geometric Shapes 2600..26FF; Miscellaneous Symbols
2700..27BF; Dingbats
27C0..27EF; Miscellaneous Mathematical Symbols-A 27F0..27FF; Supplemental Arrows-A 2800..28FF; Braille Patterns
2900..297F; Supplemental Arrows-B
2980..29FF; Miscellaneous Mathematical Symbols-B 2A00..2AFF; Supplemental Mathematical Operators 2E80..2EFF; CJK Radicals Supplement 2F00..2FDF; Kangxi Radicals
2FF0..2FFF; Ideographic Description Characters 3000..303F; CJK Symbols and Punctuation 3040..309F; Hiragana 30A0..30FF; Katakana
3100..312F; Bopomofo
3130..318F; Hangul Compatibility Jamo 3190..319F; Kanbun
31A0..31BF; Bopomofo Extended
31F0..31FF; Katakana Phonetic Extensions 3200..32FF; Enclosed CJK Letters and Months 3300..33FF; CJK Compatibility
3400..4DBF; CJK Unified Ideographs Extension A 4E00..9FFF; CJK Unified Ideographs A000..A48F; Yi Syllables
40






正在阅读:
当“西游记”遇到了“苦肉计”作文800字06-24
急救护理学试题集(内含答案)04-10
普米克令舒雾化吸入辅助治疗小儿支原体肺炎的护理_忻肖兰04-19
庙会作文600字06-17
西陵区低丘岗地项目规划设计报告03-05
学校校车安全管理制度03-30
时政热点02-13
生物化学与分子生物学名词解释05-23
爱读书的我作文500字07-15
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- MTK
- 参考
- 开发
- Guide
- Dev
- 团员民主评议个人总结
- 小学语文中高年级读写训练点
- 合成氨工业技术的现状及展望
- 《识字2》教学设计1
- 48000吨废旧轮胎裂解综合利用项目可研
- 八年级物理第七章《欧姆定律》测试题 人教新课标版
- 案例-4G通过调整上行功控及调度参数提高干扰场景MOS值低研究总结
- 推焦车试题
- 特种作业取证 高压电工作业 2015修订版课后题 (带答案)
- 食品化学学习大纲
- 四川省成都市第七中学16届初三下物理《电和磁单元检测》
- 全国2008年4月《中国现代文学史》试题及参考答案
- 高中数学知识点立体几何学习的几点建议
- 实验一 传感器综合实验
- 拦水带施工方案
- 上海海事大学导师
- 河南省具有电力设计资质的企业名录
- 海上风力发电变桨伺服系统设计开题报告 - 图文
- labview串口好资料与属性节点 - 图文
- 浅谈培养优生的几点做法