轉
二、將檔案新增工程裡:
三、mtk 實現socket連線,需要用到一下函式:
用到的標頭檔案有:
#include "soc_consts.h"
#include "soc_api.h"
#include "timerevents.h"
1、soc_cteat建立乙個socket
kal_int8 soc_creat(kal_uint8 domain, //
協議,現在只支援
soc_pf_inet
socket_type_enum type,
在該demain
下的型別,現在有
soc_sock_stream(tcp), soc_sock_dgram(udp), soc_sock_sms, soc_sock_ram
kal_uint8 protocol, //
協議型別,除了
type
為soc_sock_ram,
其他都為
0module_type mod_id, //
當前模組
id,主要用於接收訊息
kal_uint32 nwk_account_id) //
接入點,
cmwap為10
,cmnet為14
2、設定socket非阻塞模式
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size)
kal_uint8 val = 1;
soc_setsockopt(socket_id, soc_nbio, &val, sizeof(val))
val=soc_read|soc_write|soc_close|soc_connect;
soc_setsockopt(socket_id,soc_async,&val, sizeof(val))
3、連線中國移動閘道器
kal_int8 soc_connect(kal_int8 s, sockaddr_struct *daar)
手機上網與pc上網不同,選擇cmwap,手機端需要首先連線移動閘道器才能進行網路通訊,
選擇cmnet可以直接連線internet,這裡需要填寫結構體sockaddr_struct的addr即port成員。
4、傳送http請求
kal_int32 soc_send(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags)
其中buf子串需要遵守http連線協議。
5、接收資料
kal_int32 soc_recv(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags)
buf用來儲存接收到的字串,這裡需要注意buf的長度不能超過2000,否則上真機的時候到申請記憶體空間時就會宕機,可以用迴圈來接收資訊。
6、關閉socket連線
kal_int8 soc_close(kal_int8 s)
引數傳入soc_create的返回值。
在程式中的**在真機中實現了插入sim卡可以獲取北京的今明兩天的天氣情況,在模擬器中除錯時可以連線tcp除錯助手進行socket同,互發、收資料。
下面為具體**:
#include "mmi_features.h"
#include "pixteldatatypes.h"
#include "gdi_include.h"
#include "wgui.h"
#include "gui.h"
#include "globaldefs.h"
#include "custdatares.h"
#include "gui_themes.h"
#include "wgui_categories.h"
#include "wgui_categories_util.h"
#include "wgui_softkeys.h"
#include "historygprot.h"
#include "organizerdef.h"
#include "mainmenudef.h"
#include "unicodexdcl.h"
#include "gui.h"
#include "conversions.h"
#include "wgui_categories_list.h"
#include "uart_sw.h"
#include "uart_hw.h"
#include "soc_consts.h"
#include "soc_api.h"
#include "timerevents.h"
#define buf_size 1024
kal_int8 ticket_socket_id;//建立socket連線的返回值//建立socket連線的返回值(設定全域性變數,定義在邋錞icketsocket.c中)
kal_int8 ret;
kal_int8 ticket_soc_init()
val = soc_read | soc_write | soc_close | soc_connect;
if (soc_setsockopt(ticket_socket_id, soc_async, &val, sizeof(val)) < 0)
ret = soc_connect(ticket_socket_id, &server_addr);
dbg_print("connect: ret = %x\r\n var = %x\r\n", ret, val);
return ret;
} //dbg_print("zhanweizhao6\r\n");
else
return -0x11;
} void close_sock()
kal_uint32 ticketcount;
void timeout()
void sock_send() ;
//kal_uint8 rbuf[1024];
kal_int32 ret;
//kal_uint8 weather_url = ;
kal_uint8 weather_url = ;
entrynewscreen(scr_ticket_buy, null, null, null); //main_menu_screenid 主選單螢幕id
entry_full_screen(); //進入新程式時呼叫entrynewscreen
clear_screen(); //將整個螢幕刷成白色
//ret = soc_send(ticket_socket_id, wbuf, sizeof(wbuf), 0);
dbg_print("ready to send...\r\n");
ret = soc_send(ticket_socket_id, weather_url, sizeof(weather_url), 0);
dbg_print("send: ret = %x\r\n", ret);
if(ret > 0)
else if(ret == -12)//socket is not connect
show_chinese((kal_uint8 *)"請插入sim卡", 36, 25, 120, ui_color_dark_grey);
gui_blt_double_buffer(0, 0, ui_device_width - 1, ui_device_height - 1);//用來重新整理螢幕
setkeyhandler(goback, key_rsk, key_event_up);
return; }
u32 sock_receive()
}return ret; }
void soc_socket_notify(void *inmsg)//註冊的鉤子函式,響應socket伺服器端來的資料;
switch(soc_notify->event_type)
}頂
0
Mtk開機除錯步驟
開機除錯 1 將原來使用的mtk版本的tools目錄下的如下檔案 資料夾拷貝到tools目錄下 msys mingw make.exe 2 將目錄plutommi customer resgenerator下的exe檔案拷貝到新版本的plutommi customer resgenerator目錄下...
GPRS除錯時注意點
gprs除錯中指令 我使用的是原子的gprs開發板,其中有些預設指令是被記錄其中的 1 at cgclass b 2 at cgat 1 3 at cipcsgp 1,cmnet 以上指令是場景預設設定,設定後基本上就不會改變 以下指令是需要自己修改的 tcp協議傳輸時 1 at cipstart ...
除錯驅動思路 MTK除錯CTP
拿到ctp和相應的驅動 原廠的驅動 差別很大,有的廠家的驅動 寫得規規矩矩,注釋清楚,有的寫的就是一團糟,甚至還存在著邏輯錯誤。拿到ctp 驅動 後,直接將 合進去,然後看效果,不管怎麼觸控,ctp的列印一直不出來。看了看,也沒什麼問題,最後用示波器看中斷腳電平,發現一直為高,高為無效。然後用萬能表...