`
xusaomaiss
  • 浏览: 616736 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

MTK电话本短信同步

阅读更多

做MTK开发也有一段时间,最近做一个产品,其中有一个测试功能,MTK自带的PC suit(PC同步工具)好像有问题一

直连接不上,所以无法使用,由于该功能是提供给测试部做测试使用,于是自己动手写了一段代码。

      python原来没有用过,今天暂时看了一下,找了一段代码进行修改,主要参考两份文档,一份是python的语法,还有一份是pySerial这个类的使用,网址如下:

http://www.cnblogs.com/starspace/archive/2009/02/20/1394603.html

       代码写完了,基本功能是没有问题,贴出来给大家参考使用。主要是对AT和操作,

# -*- coding=cp936 -*-
#author:xusaomaiss@hotmail.com
#datetime:2009-4-27
#comment:这个小程序主要用于测试MTK话机的电话本容量与短信箱的容量
#当然,也可以通进扩展,改造与PC端同步工具,MTK自带的软件也就是通过AT方式进行与终端同步信息
#ATClass这个类做为基类,一般不进行修改
#通过继承把业务相关放在MTKTest这个类中,小程序是用一天时间完成了,基本上满意我们公司测试部的要求
#大家可以把修改意见发到我邮箱,本人将不断完善。
import time, re, sys, os
#import sms
from cStringIO import StringIO

import serial

ENCODING = 'cp936'

OK = '\r\nOK\r\n'
FLUSH_TIMEOUT = 0.1
READ_TIMEOUT = 20
SEND_TIMEOUT = 20
RESET_RETRIES = 5
BAUDRATE=115200




class ATClass:

    def __init__(self, port,baudrate):
        try:            
            self.timeout = READ_TIMEOUT
            self.ser = serial.Serial(port, baudrate=baudrate, timeout=FLUSH_TIMEOUT, rtscts=0)
            self.buff = ''
        except:
            print '串口初始化失败'
            sys.exit(0)
        
        
    def opencomm(self):
        try:
            self.ser.open()
        except:
            print '打开串口失败'
            sys.exit(0)
    
                       
 

    def reset(self):
        for i in range(RESET_RETRIES):
            try:
                self.at_command('ATZ\r\n', OK)
                self.at_command('ATE0\r\n', OK) # must turn the echo off                
                return 'OK' 
            except TimeoutException:
                pass 
        raise ResetException, "Unable to reset"

    def flush(self):
        while self.ser.read(1024):
            pass
        
    def at_command(self, text, response=None, timeout=SEND_TIMEOUT):
        self.flush()
        
        self.ser.write(text)
        return response and self.wait_for(response, timeout)

    def wait_for(self, response, timeout=READ_TIMEOUT):
        end = (timeout or self.timeout) + time.time()
        result = '' 
        while time.time() < end:
            data = self.ser.read(1)
            if len(data):
                result += data
                if result.endswith(response):                    
                    return result
        return False

    def at(self):
        try:
            return self.at_command('AT\r\n', OK)
        except TimeoutException:
            return ''
   
    def close(self):
        self.ser.close()
def error_code(text):
    match = re.match(r'\r\n\+CMS ERROR: (\d+)\r\n', text)
    return match and int(match.group(1))


class MTKTest (ATClass):
    def __init__(self, com, rate):
        ATClass.__init__(self, com, rate)
    
    def addOnePhoneTest(self,i):         
          data = 'AT+CPBW='+str(i)+',"'+str(i)+'",129,"name'+str(i)+'"\r\n'
          return self.at_command(data, OK)
      
    def addOneSMSTest(self,i):         
         strRespone = ''
         data = 'AT+CMGW="10086","STO SENT"\r\n'
#        data = 'AT+CMGW="10086","REC UNREAD"\r\n'   #保存到收件箱未读短信
#        data = 'AT+CMGW="10086","REC READ"\r\n'     #保存到收件箱已读短信
#        data = 'AT+CMGW="10086","STO UNSENT"\r\n'   #保存到发件箱中的未发送短信
#        data = 'AT+CMGW="10086","STO SENT"\r\n'     #保存到发件箱中的已发送短信
         strRespone = self.at_command(data, '\r\n>')  
         if strRespone.find('>')>0:
             data = 'linhai'+str(i)+'\x1A'
             strRespone = self.at_command(data, OK)
             if  strRespone.find('OK')>0:
                 return True
         else:
             print '添加短信失败'
             return False

#添加短信测试
    def addSMSTest(self): 
        #设置短信方式为TEXT格式,注意,这种格式不能发中文       
        data = 'AT+CMGF=1\r\n'
        strRespone = self.at_command(data, OK,SEND_TIMEOUT) 
           
        print '**************bgein add sms test**************'
        count = 0
        i = 0 
        strRespone = ''
        for i in range(10):
            try:
               strRespone = self.addOneSMSTest(i)  
               if strRespone == False:
                    count = count+1                  
                    if count ==3:
                        print '错误超过三次,退出添加短信测试'                        
                        return False
               else:
                    print '添加短信成功:'+str(i)
               print '-----------------------------------'
            except:
                pass
        print '\r\n**************结束添加短信测试**************'
         
#添加电话本测试
    def addPhoneTest(self):
        print '**************bgein add phone test**************'
        #设置电话本存储的位置
        data = 'AT+CPBS="me"'#me为保存在终端
        #data = 'AT+CPBS="sm"' #sm为保存为SIM卡
        
        self.at_command(data, OK)
        
        count = 0
        i = 0 
        strRespone = ''
        for i in range(1000):
            try:
               strRespone = self.addOnePhoneTest(i)  
               if strRespone == False:
                    count = count+1
                    print '添加电话本:'+str(i)
                    print '错误!!!真实返回: Error\r\n期望:OK'
                    if count ==3:
                        print '错误超过三次,退出添加电话本测试'                        
                        return False
               else:
                    print '添加电话本成功:'+str(i)
               print '-----------------------------------'
            except:
                pass
        print '\r\n**************结束添加电话本测试**************'
            
class SerialException(Exception):

    def __init__(self, text):
        print 'exception ' ,text
        self.text = text
        code = error_code(text)
        if not code is None:
            print 'error code %d' % code
    def __repr__(self):
        return self.text

class TimeoutException(SerialException): pass
class ResetException(SerialException): pass


    

if __name__=='__main__':
    try:
        #说明:com port 1使用参数0  我机子上是comport7所以使用6
        mtkTest = MTKTest(6,115200)
        mtkTest.opencomm()
        mtkTest.reset()
#        mtkTest.addPhoneTest()
        mtkTest.addSMSTest()
       

    finally:
        mtkTest.close()
    
    

 这个工程使用eclipse+python+pyserial-2.2.win32.exe

以上文件都可在网络上很方便的下载到。附件是上面代码的py文件。

 

注意:一定要使用python2.4版本,主要原因是我使用的pyserial-2.2.win32,这个东东它支持的是2.4版本.

在使用python时,感觉它的版本好多

1
0
分享到:
评论

相关推荐

    ( MTK芯片_电话本_短信息备份工具

    本文将详细讲解如何使用"MTK芯片_电话本_短信息备份工具"来解决这个问题。这个工具设计的目的在于帮助那些使用非智能机的用户,在更换新手机时能够方便地将通讯录和短信导出,确保数据不丢失。 首先,我们来看看这...

    国产手机MTK平台同步工具

    其次,短信同步也是一个亮点。在日常生活中,短信可能包含着重要的对话记录、验证码或是其他关键信息。使用这款工具,用户能够将手机中的短信备份到电脑,防止误删或意外丢失。同时,如果需要查找特定的短信记录,...

    支持MTK6235电话本(支持多号码)的PhoneSuite-电话本备份工具及驱动.rar

    可以下载 MTK6235 的手机的电话本到电脑,并且支持多个号码下载,不会弹出错误提示,不过短信、彩信、图片等同步功能还不行。如果哪位有更好的版本,欢迎回复! 在 MTK6235(BB Chip: MT6235,E04)上亲测成功! ...

    MTK平台手机最新PC电脑同步软件:MTK PhoneSuite2.3.0

    MTK PhoneSuite 2.3.0是一款专为MTK(MediaTek)平台智能手机设计的PC端同步软件,旨在帮助用户高效地管理他们的手机数据,包括联系人、短信、音乐、图片等。这款软件更新至2.3.0版本,带来了更稳定的功能和优化的...

    MTK主要模块详细设计说明书

    《MTK主要模块详细设计说明书》是一份深入探讨MTK平台关键功能模块设计的专业文档,主要涵盖了电话本、信息和设置等日常使用的核心模块。这份说明书对于理解MTK( MediaTek,联发科)芯片组在智能手机和平板电脑等...

    MTK 架构描述文档

    Gemini UI变更涉及到了双卡功能相关的用户界面调整,如状态栏、电话簿、短信等模块。 #### 二、Gemini UI变更表 ##### 2.1 Idle Screen(空闲屏幕) - **变更描述**:增加了SIM2的相关状态图标显示,使得用户能够...

    MTK手机仿真工具PhoneUI

    - 模拟真实手机操作:PhoneUI可以仿真手机的各个功能,包括拨号、接打电话、发送接收短信、设置等。 - 多语言支持:通过Lang开头的DLL文件,PhoneUI可以支持多种语言,满足全球化需求。 - 主题定制:ThemeCreator...

    MTK驱动与操作软件包(MT6225-MT6227)

    针对这些采用MT6225-MT6227芯片组的手机,MTK驱动与操作软件包提供了一个集成了多种功能的工具集合,解决了手机与电脑之间的连接难题,使得用户能够轻松进行数据同步、短信和电话簿的管理。 MT6225至MT6227芯片系列...

    山寨机mtk6225手机驱动(含xp、2000、98、me等系统驱动)

    配合`phoneSuite电话本备份工具`,用户可以更方便地管理和备份手机上的联系人信息。这类工具通常提供批量导入/导出、同步等功能,确保数据安全,避免因手机故障或更换设备时丢失重要联系人。 总的来说,MTK6225驱动...

    mtk常语缩写,对看代码有帮助.txt

    - **含义**:串行外设接口,是一种同步串行数据传输协议。 - **功能**:允许微处理器与各种外围设备进行高速数据交换。 - **应用场景**:传感器、存储器芯片、显示器驱动等。 #### LCD: Liquid Crystal Display - *...

    PhoneSuite1.2

    PhoneSuite1.2是一款专为MTK(Mediatek)平台手机设计的软件,它提供了与个人计算机进行数据同步和管理的强大功能。这款工具的主要目标是帮助用户方便地备份和恢复手机上的重要数据,如联系人(电话簿)、照片以及...

    手机软件平台API标准(1.0.3版本正式完整版).pdf

    6. **消息服务**:提供了发送和接收消息的能力,包括短信、彩信等。 7. **信息交换接口**:定义了应用程序间的数据交换格式和协议。 8. **桌面系统**:涉及桌面环境下的功能和服务,如个人信息管理、系统设置等。 ...

Global site tag (gtag.js) - Google Analytics