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