Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1532586
  • 博文数量: 114
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1357
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 18:13
文章分类
文章存档

2010年(8)

2009年(9)

2008年(27)

2007年(62)

2006年(8)

我的朋友

分类: LINUX

2007-08-19 11:39:38

北京理工大学 20981 陈罡
注意,以下代码需要在破解版的moto sdk里面添加正版的头文件才能编译,纯粹是出于个人爱
好,尝试在破解的sdk下面编译正版的头文件,然后链接,没有任何其他目的。
编译的时候确实让偶费了番功夫。呵呵,不过总算结局是好的,小明可以发送短消息拉!!
 
a1200发送短消息总体来说还是比较简单的。确实moto那边做了非常多的工作,在此一并感谢
moto的开发人员了。对于发送短消息,必不可少的是moto官方native sdk中的两个头文件:
ZSMSMsg.h,ZSMSSession.h,这两个文件的内容,我就不方便透露了,有本领的大侠们自然可以
弄到。(NDA协议,怕怕)
 
具体的过程我们看代码吧,codes show everything,这句话是谁说得来着?说得太好了。假设
我们的程序名字为sms1.cpp,那么:
#include  
#include //这个在破解版的sdk的include里面有
#include // 这是消息体定义的头文件
#include //这是异步发送过程的头文件,来历嘛...
//一定要是123,天知道为什么短信端口都是123
#define SMS_PORT 123
//这里定义你要发送的手机号码
#define SMS_TEL  "xxxxxxxxxxx"
//这里是短消息的文本内容
#define SMS_TXT  "hello, this is wayne speaking"
using namespace std ;
int main(int argc, char * argv[])
{
//开始我还纳闷呢,为什么moto的sms需要QString来传参数,
//char *不是很好嘛?后来一想,这可能是由于多国语言需要转换
//成为utf-8的格式,直接依赖qte似乎比较方便。
 QString   target_tel(SMS_TEL) ; // init the sms target tel
number
 QString   target_txt(SMS_TXT) ; // init the sms body text
 ZMFMEntry   target_entry ;
 ZMFM::STATUS_T  sms_status ;
 ZMFM::STATUS_T session_status ;
 ZSMSMsg *  sms_msg ;
 ZSMSSession *   sms_session ;
 
 // create new sms message
 sms_msg = (ZSMSMsg *)ZMFMMsg::factory(ZMFM::MSG_TYPE_SMS);
 
 // now set the target tel number
 target_entry.setEntryVal(target_tel);
 target_entry.setEntryType(ZMFM::ENTRY_TYPE_PLMN);
 sms_msg->setTo(target_entry);
 
    // set sms port number
 sms_msg->setPortNumber( SMS_PORT, SMS_PORT ) ;
 
 // set sms body text
 sms_msg->setBody( target_txt ) ;
       
    // create sms session
    sms_session = (ZSMSSession *)ZMFMSession::open(ZMFM::MSG_TYPE_SMS,
session_status) ;
   
    //smsListener *listener = new smsListener(pSession);
    //pSession->setListener(listener,status);
    session_status = sms_session->registerPortNumber(SMS_PORT, SMS_RECV_MODE_TEXT)
;
    if( session_status == ZMFM::STATUS_SUCCESS){
  cout<<"reg sms port ok"<    } else {
  cout<<"reg sms port fail"<        delete sms_msg;
        //delete listener;      
        ZMFMSession::close( sms_session );
        exit(-1);
    }
 
 // send sms now
 sms_session->send(sms_msg,sms_status);
 if( sms_status == ZMFM::STATUS_FAIL ){
  cout<<"send sms fail"<  exit(0);
 } else cout<<"send sms ok"<   return 0 ;
}
cygwin下面的编译效果如下图:
代码不多,我自信也写的很清晰了,能够为moto开发的大侠们我想也肯定看得懂,在此就不聒
噪了。代码虽然简单,呵呵,编译得时候可就费了劲拉,通篇我们没有使用qte或者ezx的gui架
构,只是用了一下QString,理论上不需要那么多的lib其实不然,发送一个短信涉及到的库还
是非常多的,一下子还真不太容易编译。不过qte那套什么什么QObject,或者QApplication什
么的倒是可以能省则省了。言归正传,Makefile贴一下,
事先声明,全部的lib都是从手机里面拷下来的,没有版权问题吧。。。汗,总觉得签了保密协
议,这些东西就都是应该保密的东西。。。心里障碍吧。。。
Makefile ---->
EZX_BASE=..
CXX=arm-linux-g++
LNK=arm-linux-g++
STP=arm-linux-strip
MOC=$(EZX_BASE)/moc/moc
D2U=dos2unix
CXXFLAGS=-fno-exceptions -fno-rtti -Wall -g
INCLUDE=-I$(EZX_BASE)/include/qt -I$(EZX_BASE)/include/ezx
LIBDIRS=-L$(EZX_BASE)/lib -L$(EZX_BASE)/lib/ezx/lib
LIBS= -lezxmessagingsdk -lezxappbase -lqte-mt -lpthread \
-lezxappsdk -lipp-jp -lezxopenwindow -lipp-miscGen \
-lezxjpeg -lezxpm -lezxtapi -lezxdrmsp -lezxdrmsecuretime \
-lezxdrmcipher -lezxdrmclibhack
OBJS=sms1.o
APP=sms1
%.o: %.cpp
 $(D2U) $<
 $(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
%.moc: %.cpp
 $(MOC) $< -o $@
$(APP): $(OBJS)
 $(CXX) $^ -o $@ $(LIBDIRS) $(LIBS)
 $(STP) $^
clean:
 rm -f -r $(APP) *.o *~
有了这些,编译的时候还会出现一些警告,不管了,反正对生成可执行格式的sms1没有影响。
然后,就可以在手机上真正运行sms1程序(用eKonsole,或者自己写个脚本直接从telnet上面
运行)。顺便提一下,手机会弹出一个什么确认对话框,这个框框挺让人郁闷的,是不是经过了什么安全性检查以后,就不会弹出了呢?这就不得而知了,我猜想这次是采用ezx的框架发送短信,可能就会有这个问题,如果采用tapi的底层api直接发送短信,可能就没有这些限制了吧,不过我看libezxtapi.so这个也是ezx作为前缀的,似乎也和他们的框架有关,呵呵,也许还是会弹出这种对话框吧。
发送确认对话框抓图如下:

也许经过授权以后,就可以直接发送sms了,期待中。
阅读(2268) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~