微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 关于MTK socket编程的一些经验

关于MTK socket编程的一些经验

时间:10-02 整理:3721RD 点击:
GPRS的工作原理 GPRS的英文全称是:“General Packet Radio Service”(译作“通用分组无线服务”),它是利用“包交换”(Packet-Switched)的概念发展起来的一套无线传输方式。所谓“包交换 ”就是将Data封装成许多独立的封包,再将这些封包一一传送出去,形式上有点类似邮局中的寄包裹。其作用在于只有当有资料需要传送时才会占用频宽,而且可以以传输的资料量计价,这对广大用户来说是较合理的计费方式,因为像Internet这类的数据传输大多数的时间频宽是闲置的。
GPRS 网络是基于现有的GSM网络来实现的。在现有的GSM网络中需增加一些节点,如GGSN(Gateway GPRS Supporting Node,GPRS网关支持节点)和SGSN( Serving GSN,GPRS服务支持节点),GSN是GPRS网络中最重要的网络节点。GSN具有移动路由管理功能,它可以连接各种类型的数据网络,并可以连到 GPRS寄存器。GSN可以完成移动终端和各种数据网络之间的数据传送和格式转换。GSN可以是一种类似于路由器的独立设备,也可以与GSM中的MSC集成在一起。GSN有两种类型:一种为SGSN( Serving GSN,服务GSN),另一种为GGSN(Gateway GSN,网关GSN),SGSN的主要作用是记录移动终端的当前位置信息,并且在移动终端和GGSN之间完成移动分组数据的发送和接收。GGSN主要是起网关作用,它可以和多种不同的数据网络连接,如ISDN、PSPDN和LAN等。国外有些资料甚至将GGSN称为GPRS路由器。GGSN可以把GSM网中的GPRS 分组数据包进行协议转换,从而可以把这些分组数据包传送到远端的TCP/IP或X.25网络。
GPRS工作时,通过路由管理来进行寻址和建立数据连接,而GPRS的路由管理表现在以下三方面:移动终端发送数据的路由建立;移动终端接收数据的路由建立;以及移动终端处于漫游时数据路由的建立。
对于第一种情况,当移动终端产生了一个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帧单元,最终通过空中接口送给移动终端。
第三种情况是一个数据网用户传送数据给一个正在漫游的移动用户。这种情况下的数据传送必须要经过归属地的GGSN,然后送到用户A端。
GPRS的主要特点
相对原来GSM的电路交换数据传送方式,GPRS采用分组交换技术。由于使用“分组”技术,用户上网可以免受掉线的麻烦。此外,使用GPRS上网的方法与 WAP不同, 用WAP上网就如在家中上网,先“拨号连接”,而上网后便不能同时使用该电话线,但GPRS则较优越,下载资料和通话可以同时进行。
从技术上来说,声音的传送(即通话)继续使用GSM,而数据的传送则使用GPRS,就把移动电话的应用提升到一个更高层次,而且不需重新组网,十分经济。 GPRS的用途十分广泛,包括通过手机发送及接收电子邮件、在Internet上浏览等。使用GPRS,数据可实现分组发送和接受,这意味着用户总是在线且按流量计费,降低了服务成本。
GPRS的最大优势在于数据传输速度不是WAP所能比拟的。目前的GSM移动通信网的传输速度为每秒 9.6K字节,GPRS手机在今年初推出时已达到56Kbps的传输速度,到现在更是达到了115Kbps(此速度是常用56k Modem理想速率的两倍)。除了速度上的优势,GPRS还有“永远在线”的特点,即用户随时与网络保持联系。举个例子,用户访问Internet时,点击一个超级链接,手机就在无线信道上发送和接受数据,主页下载到本地后,没有数据传送,手机就进入一种“准休眠”状态,手机释放所用的无线频道给其它用户使用,这时网络与用户之间还保持一种逻辑上的连接,当用户再次点击,手机立即向网络请求无线频道用来传送数据,而不像普通拨号上网那样断线后还得重新拨号才能上网。
GPRS的协议模型
Um接口是GSM的空中接口。Um接口上的通信协议有5层,自下而上依次为物理层、 MAC(Media Access Control)层、LLG(Logical Link Control)层、SNDC层和网络层。Um接口的物理层为射频接口部分,而物理链路层则负责提供空中接口的各种逻辑信道。GSM空中接口的载频带宽为 200KHZ,一个载频分为8个物理信道。如果8个物理信道都分配为传送GPRS数据,则原始数据速率可达200Kbps。考虑前向纠错码的开销,则最终的数据速率可达164kbps左右;MAC为媒质访问控制层。MAC的主要作用是定义和分配空中接口的GPRS逻辑信道,使得这些信道能被不同的移动终端共享;LLG层为逻辑链路控制层。它是一种基于高速数据链路规程HDLG的无线链路协议;SNDC被称为子网依赖结合层。它的主要作用是完成传送数据的分组、打包,确定TCP/IP地址和加密方式;网络层的协议目前主要是Phasel阶段提供的 TCP/IP和L25协议。TCP/IP和X.25协议对于传统的GSM网络设备(如:BSS、NSS等设备)是透明的。
GPRS的应用范围
GPRS是在现有GSM网络上开通的一种新型的分组数据传输业务,在有GPRS承载业务支持的标准化网络协议的基础上,GPRS可以提供系列交互式业务服务:
1、点对点面向连接的数据业务。为两个用户或者多个用户之间发送多分组的业务,该业务要求有建立连接、数据传送以及连接释放等工作程序。
2、单点对多点业务。根据某个业务请求者的要求,把单一信息传送给多个用户。该业务又可以分为点对多点多信道广播业务、点对多点群呼业务和IP多点传播业务。
3、点对点无连接型网络业务。各个数据分组彼此互相独立,用户之间的信息传输不需要端到端的呼叫建立程序,分组的传送没有逻辑连接,分组的交付没有确认保护,是由IP协议支持的业务。
GPRS除了提供点对点、点对多点的数据业务外,还能支持用户终端业务、补充业务、 GSM短消息业务和各种GPRS电信业务。
关于mtk socket编程的一些经验

0.模拟器上,初始化需要先调用soc_init_win32()
1.监视MSG_ID_APP_SOC_NOTIFY_IND消息(SOC_WRITE,SOC_READ,SOC_CONNECT,SOC_CLOSE)
2.soc_create的最后一个参数:cmnet帐号默认是10,cmwap是14. 模拟器上随便都没问题.只要PC能上网.
3.soc_setsockopt  SOC_NBIO 设置不阻塞
4.soc_setsockopt  SOC_ASYNC 设置异步
5.soc_connect,soc_write,soc_read返回SOC_WOULDBLOCK必须等1的通知函数进行处理.最好设置超时来close socket.
6.数据的任意指针转化成short,int
   ARM的特性,short指针必须2对齐,int指针必须4对齐.
   来自于网络的紧凑数据(packed data),必须支持任意地址转换成short或者int
static int  MyInt(unsigned char * p)
{
int a ;
((unsigned char *)&a)[0] = p[0] ;
((unsigned char *)&a)[1] = p[1] ;
((unsigned char *)&a)[2] = p[2] ;
((unsigned char *)&a)[3] = p[3] ;
return a ;
}

static  short MyShort(unsigned char * p)
{
short a ;
((unsigned char *)&a)[0] = p[0] ;
((unsigned char *)&a)[1] = p[1] ;
return a ;
}

7.cmwap的http协议模拟
   cmwap必须通过10.0.0.172:80端口进行代理
   走http协议.一般是1.1

#define      ProxyHttpRequestHeader  "POST / HTTP/1.1\r\n" "X-Online-Host: www.abc.com:12345\r\n" "Keep-Alive: close\r\n" "Content-Length: %d\r\n" "\r\n"
// X-Online-Host后面跟着的就是目标机器网络地址和端口
// Content-Length 后面填写随后的数据长度
// 头部后面跟着就是随后数据,最好使用base64编码.
// 服务器端收到数据一般经过移动网关修改.

8.cmwap的http模拟: 服务器端返回格式:
#define HTTP_RESPONSE_HEADER  "HTTP/1.1 200 OK\r\n" "Content-Length: %d\r\n" "\r\n"
// Content-Length 后面填写随后的数据长度
// 头部后面跟着就是随后数据,最好使用base64编码.

浅谈mtk平台手机通过gprs网络连接pc
GPRS:通用分组无线技术(General packet radios service),GSM网络覆盖的区域都可快速实现GPRS的覆盖.
gprs的特点:高速率的数据传输.目前gprs速率达到40kb/s以上,gprs可实现的最高速率是171.2kb/s.EDGE最高速率可达到384kb\s.可以提供按流量计费方式.快捷登录,永远在线.gprs的用户一开机就始终附着在gprs网络上,登录时间只要1-3秒,远快于普通拨号方式.
中国移动gprs网络有两个接入点:cmwap和cmnet.
如果使用cmwap接入点连接上gprs网络后手机得到的ip地址形如10.x.x.x,这个地址是一个A类地址,也就是内网地址.这个地址的访问受到很多限制,它只能够访问gprs网而不能访问整个internet,如果要用这个地址访问internet就需要使用代理服务器,如中国移动的 10.0.0.172的80端口.
如果使用cmnet接入点连接上gprs网络后手机得到的ip地址是一个形如202.x.x.x或者61.x.x.x这样的地址.这是一个C类地址,它可以自由的访问整个internet,也就说它和电脑的上网能力是一样.但是有些地方的移动卡不支持cmnet.
mtk平台手机基于gprs连接pc的实现方式(tcp通讯方式)
1.建立data account(上网账号)
MMI层发送PRT_MMI_PS_SET_GPRS_DATA_ACCOUNT_REQ消息到L4C层,在消息中设定data account 的id(1-10),自定义名称,APN(cmnet,cmwap),用户名,密码,DNS等信息.
2.创建socket
手机上用socket建立连接和pc用socket建立连接的原理是一样的,只是api函数不一样.
kal_int8 soc_create(kal_uint8 domain, socket_type_enum type, kal_uint8 protocol, module_type mod_id, kal_uint32 nwk_account_id);
3.设置socket的异步非阻塞模式
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size);
这里的第二个参数option设置为SOC_NBIO(socket非阻塞模式)
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size);
这里的第二个参数option设置为SOC_ASYNC(异步i/o)
4.建立连接
kal_int8 soc_connect(kal_int8 s, sockaddr_struct *addr);
5.发送数据
kal_int32 soc_send(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags);
6.读取数据
kal_int32 soc_recv(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags);
7.关闭连接
kal_int8 soc_close(kal_int8 s);
程序开发要点:
1.实现之前要规定好发送方和接收方数据传输的协议,数据格式.包括如何确定数据长度,校验算法,是否加密等.
2.要注意对其方式和存储方式.如果发送方和接收方的对其方式和存储方式不一样,数据可能会传输错误.
3.错误处理,确保可以捕捉到所有错误,从而关闭socket连接,释放资源.
4.超时设定,由于socket接口没有提供超时功能,所以需要自己实现超时功能,可在每次操作前设定timer,如超时仍没有收到消息,则进行错误处理,特别要考虑到多个socket同时打开的情况.
文章只是简单的介绍了在mtk平台手机上如何使用socket套接字来实现网络通讯,下一篇我会给出一个示例代码来详细说明mtk手机的socket套接字是如何实现异步I/O和消息驱动模型的.

上一篇:WiFi 扫描功耗
下一篇:MT6261D链接出错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top