MTK电话本短信同步

阅读更多

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

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

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

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

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

# -*- coding=cp936 -*-
#author:[email protected]
#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时,感觉它的版本好多

  • MtkTest.rar (521.4 KB)
  • 下载次数: 29

你可能感兴趣的:(MTK,Python,软件测试,Eclipse,CMS)