H2003031301_张成银_vCalendar的跨平台系统的设计_第1页
H2003031301_张成银_vCalendar的跨平台系统的设计_第2页
H2003031301_张成银_vCalendar的跨平台系统的设计_第3页
H2003031301_张成银_vCalendar的跨平台系统的设计_第4页
H2003031301_张成银_vCalendar的跨平台系统的设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号 分类号 TP311 1TP311 1 U U D D C C D10621 408 2007 5742 D10621 408 2007 5742 0 0 密密 级 公级 公 开开 编编 号 号 20030313012003031301 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 vCalendarvCalendar 的跨平台系统的设计的跨平台系统的设计 论文作者姓名 论文作者姓名 张成银张成银 申请学位专业 申请学位专业 计算机科学与技术计算机科学与技术 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 吴春旺 助理研究员 吴春旺 助理研究员 论文提交日期 论文提交日期 20072007 年年 0606 月月 1010 日日 vCalendar 的跨平台系统的设计的跨平台系统的设计 摘摘 要要 个人数据交换 PDI Personal Data Interchange 每时每刻都进行着 可以是两 个人面对面 通过电话或网络的信息交流 同其他人一起的信息共享 通过纸 质名片 或者电子名片来进行信息的交换 该课题研究首先围绕 vCalendar 结构 阐述了什么是 vCalendar 产生过程 以及应用范围 对其组织结构和主要字段 DTSTART DALARM DTEND 等 在结构中作用 以及各属性取值 编码间的转换作了详细分析 然后结合 Motorola L7 型号手机 测试出手机特性 功能操作流程 系统编码方式 读取 开关 配置信息 数据格式构成等 可以实现操作有 下载 新增 修改 删 除 再根据每一功能特性 制定出实现方式 主要是重写基类接口函数 来达 到对该手机型号的支持 再把插件加入到软件架构中 设计出能在 PC 和手机 端通信的软件 通过该软件可以对手机中的事件 日程安排进行操作 同时也 可以同 WINDOWS 系统进行数据同步 关键词 关键词 事件 日程安排 数据同步 插件 The design of the vCalendar s cross platform system Abstract Personal Data Interchange PDI occurs every time Two or more individuals communicate in either face to face or across wire and internet data Such interchanges frequently include the exchange of informal information such as business cards paper cars or Vcards The topic is based on the construction of vCalendar expounded what is vCanlendar the process of having it and the applications Especially it explains the histological structure and the function for key fields DTSTART DALARM and DTEND the value of each attribution and the transforms between the codes Combined with Motorola L7 to get the property of the mobile phone operation flow of the functions methods of system coding switches reading configuration messages and the forming of data compositions etc Effected operations could be downloading adding revising and deleting and fulfilling the methods with the functional characters Main point is re writing basic port function to get the compatibility of the mobile Then add the x activitis into the software obtain the communications between PC and cell phone which can either control the events schedule in for the mobile or make the data synchronization with Windows system Key words vEvent vTodo Data synchronous Plugin 目目 录录 论文总页数 26 页 1 引言 1 1 课题背景 1 2 国内外研究的现状 1 3 本课题研究的意义 1 4 本课题的研究方法 2 VCALENDAR 2 1 字符编码 2 1 1 vCalendar 对象 2 1 2 编码方式 2 1 3 持续时间 2 1 4 版本 2 2 VEVENT和VTODO 属性 2 2 1 声音提醒 2 2 2 类别 2 2 3 分类 2 2 4 时间 2 2 5 更改记录 2 2 6 优先级 3 VCALENDAR 实现 3 1 系统架构分析 3 2 PLUG分析 3 3 函数实现 3 3 1 配置信息 3 3 2 构造函数实现 3 3 3 数据获取 3 3 4 数据下载 3 3 5 数据新增 3 3 6 数据删除 3 3 7 数据同步 3 3 8 析构函数实现 结 论 参考文献 致 谢 声 明 第 1 页 共 26 页 1 1 引言引言 1 11 1 课题背景课题背景 随着信息化网络的便利 数据的及时交互 跨平台交互得到一定程度发展 尤其 3G 技术将无限通信与国际互联网等多媒体通信结合 能够处理图像 视频 流等多种媒体形式外 个人信息 电子商务等多种信息服务提供 也是新一代 网络对业务支持的独特优势 因此 手机终端软件的设计 以及能适应新技术 发展的需要成为各大手机软件设计商热点 1 21 2 国内外研究的现状国内外研究的现状 从相关文献资料来看 国外一些手机软件 尤其以 NOKIA MOTOROLA SIEMENS 和 SAMSUNG 四家全球最大的手机设计商 占据了全 球大部分市场 其产品的自主研发性程度很高 尤其对智能手机研发走在前列 国内的中兴 德信无线通信等手机设计商在国内市场份额较大 对于智能手机 系统的研究受到国外厂商的压力较大 1 31 3 本课题研究的意义本课题研究的意义 对于手机 PC 端软件的设计 有助于使手机和 PC 互连 在 PC 端完全操作手 机 如邮件信息收发 手机功能设置 PC 通过手机连入互相网 信息备份与恢 复等 可以从手机端设置转换向 PC 方向 与手机生产商的合作 开发出定制软 件 功能得到更加增强 本课题主要研究关于事件和日程安排在不同平台上的 应用设计 综合各手机操作系统的特点 对跨平台数据中 vCalendar 应用研究 1 41 4 本课题的研究方法本课题的研究方法 该研究方法主要从不同的手机操作系统如 MTK OBEX Linux Windows CE PC 操作系统入手 分析数据在不同平台存在格式 从而为信息新增 数据 同步等提供数据段的分析 匹配 格式转换 编码 解码等操作 2 2 vCalendarvCalendar 2 12 1 字符编码字符编码 以下部分主要简单定了 vCalendar 的语法构成 语意的解释 2 1 1 vCalendarvCalendar 对象对象 vCalendar 数据流可以包含一个或者多个 vCalendar 对象 作为每一个 vCalenda 数据流对象 都会以 BEGIN VCALENDAR 作为分隔字符串 BEGIN VCALENDAR 该标志必须是数据流对象的第一个起始字符串 且为第一行内容出现 标 志着内容开始 vCalendar 数据流对象也会以一个 END VCALENDAR 作为结束字符串 第 2 页 共 26 页 END VCALENDAR vCalendar 对象可以比着一个容器类 里面包含有事件和日程安排实体内 容 也就是所定义的 vEvent 和 vTodo 实体结构 两个实体间区别不是太大 只 是对某些字段的支持上有差异 vEvent 事件定义 一个 vEvent 事件就是一个日历事件安排的实体 大多都会依赖日历时间 例如 可以设置节日提醒事件 自己生日提醒事件等 当接受到提醒通知表明 该事件发生 每一个 vEvent 实体也就是一个 vCalendar 对象 由开始标志符 BEGIN VEVENT 该标识符号也必须出现在 vEvent 实体第一行 作为标识开始符 vEvent 事件不能同另外一个 vEvent 事件或者 vTodo 日程安排嵌套使用 但可以通过关 键字符串 RELATED TO 来连接两个实体 否则会被系统识别为错误 vTodo 日程安排定义 可以定义日程安排提醒 该实体大多依赖月 天 时 分 秒 比如一个 小时的日程安排 考试时间从 10 00 开始到 11 00 结束 在从开始到结束的 这一个小时后 会接受到通知 表面该日程安排结束 与 vEent 事件开始标志 一样 需要在日程安排首行出现开始标志符号 BEGIN VTODO 下面是实体内容 然后是日程安排结束标志符号 END VTODO vTodo 不能同另外一个 vEvent 事件或者 vTodo 日程安排嵌套使用 但可以 通过关键字符串 RELATED TO 来连接两个实体 否则会被系统识别为错误 2 1 2 编码方式编码方式 大多手机系统都是采用 7 BIT 编码方式 也可以通过终端来设置所支持的 编码 来满足操作的需要 该操作需要通过 ENDODING 属性来设置 综合常见 系统中所使用的编码 可有 UTF 8 GSM UCS2 这些国际通用编码方式 在从不同平台数据交换 数据同步时候需要注意 编码识别和转换 以便能够适应当前系统的编码方式 2 1 3 持续时间持续时间 在 vCalendar 对象中 有持续事件的定义 时间格式严格遵守 ISO8601 规 范中所定义的时间格式 对象中如时间需要持续下去 需要使用标识符 P 示例 第 3 页 共 26 页 P3W持续时间为 3 周 PT5M持续时间为 5 分钟 PT1H8M 持续时间为 1 小时 8 分钟 P2Y10M15DT10H30M20S持续时间为 2 年 10 个月 15 天 10 小时 30 分 20 秒 2 1 4 版本版本 该标识主要用来定义手机软件上 vCalendar 版本号 当用于不同平台数据 交换时 需要先判断版本号是否相同 因为可能版本不同 支持的字段不一样 而使同步或者新增数据出错 该字段用 VERSION 来标识 示例 VERSION 1 0 该字段在 vCalendar 对象中必须出现 因此对其支持是强制性的 2 22 2 vEventvEvent 和和 vTodovTodo 属性属性 以下所定义的属性会出现在 vEvent 事件和 vTodo 日程安排中 2 2 1 声音提醒声音提醒 该字段由属性名 AALARM 来标识 后面跟声音提示文件 通过该属性 可以 定义事件或者日程安排发生时 提醒用音频来发出警报声音 Run Time 被执行的日期和时间 Snooze Time 在执行时间之后 提示将处于休眠状态时间间隔 Repeat Count 语音提示重复的次数 Audio Content 提示时要被播放的声音文件 该字段在 vCalendar 对象属于可选字段 2 2 2 类别类别 该字段由 CATEGORIES 标识 用来定义 vCalendar 实体类别 如日程安排为 会议 聚餐 电话会议等 当要用到多个类别属性时用分号隔开表示即可 该 属性值可以有如下取值 APPONTMNET BUSINESS EDUCATION HOLIDAY MEETING MISCELLANEOUS PERSONAL PHONE CALL SICK DAY SPECIAL OCCASION TRAVEL VACATION 2 2 3 分类分类 该字段由 CLASS 标识 为 vCalendar 实体定义了访问权限 手机系统中可 以对事件 日程安排设置一定的访问权限 使其内容得到保护 只有合法用户 可以查看 修改 增加 删除等操作 非合法用户不能操作 该属性在智能手 机系统中体现较明显 如同 Windows 的权限分配 但在一些 MTK 手机系统对该 字段不予支持 所以 vCalendar 实体对其支持也是可选的 示例 第 4 页 共 26 页 CLASS PUBLIC 上面示例说明 对于该条 vCalendar 实体 它的访问权限不受控制 使用 手机的任何人都可以对其修改等操作 其余取值可以有 PUBLIC PRIVATE CONFIDENTIAL 2 2 4 时间时间 1 开始日期 时间 该字段由 DTSTART 来标识 指定了 vCalendar 对象开始的日期和时间 属 性在 vCalendar 对象中也是必须给出定义的 日期和事件值可以是本地时间或 者 UTC 时间来表示 格式在 ISO08601 中定义 在日期和时间中用 T 表示 如果 是 UTC 时间表示法 最后用 Z 结束标志 示例 DTSTART 20070601T120000 2 提醒日期 时间 该字段由 DALARM 来标识 指定了 vCalendar 对象提醒日期和时间 该属性 必须在 vCalendar 对象对象中出现 所以对其支持是强制性的 日期和事件值 可以是本地时间或者 UTC 时间来表示 格式在 ISO08601 中定义 在日期和时间 中用 T 加以分隔 如果是 UTC 时间表示法 最后用 Z 结束标志 示例 DALARM 20070601T140000 3 结束日期 时间 该字段由 DTEND 来标识 指定了 vCalendar 对象结束的日期和时间 该时 间必须晚于提醒 开始 该属性必须在 vCalendar 对象对象中出现 所以对其 支持是强制性的 日期和事件值可以是本地时间或者 UTC 时间来表示 格式在 ISO08601 中定义 在日期和时间中用 T 加以分隔 如果是 UTC 时间表示法 最 后用 Z 结束标志 DTEND 20070401T235959Z 2 2 5 更改记录更改记录 该字段由 LAST MODIFIED 标识 该属性说明了 vCalendar 对象被最后修改 的日期和时间 该字段也是体现了智能手机设置的方便性 便于对信息修改历 史记录的查询 示例 LAST MODIFIED 20070817T133000 2 2 6 优先级优先级 该字段由 PRIORTY 来标识 属性定义了 vCalendar 对象的优先级 当定义 第 5 页 共 26 页 了多事件同时提醒时 可以通过优先级来设置哪一事件先于其他事件提醒 属 性值用数字表示 示例 0 未定义级别 1 最高优先级 2 第二优先级 随数字增加 优先级递减 PRIORITY 2 时间优先级别为 2 3 vCalendarvCalendar 实现实现 3 13 1 系统架构分析系统架构分析 软件以插件方式构成 即通过新增方式可以扩展软件对新手机的支持界面 由 Delph 开发 底层由 C C 开发 手机系统虽然可以分为 MTK OBEX Linux Windows CE 但又可以归结为两大类 即以系统支持 AT 和 OBEX 命令为分类 NOKIA 类手机完全应用自己独立开发的 OBEX 系统 属于 私有协议 所以实现起来需要分析官方软件的收发数据 然后分析 实现开发 出支持 NOKIA 型号手机 其余 MOTOROLA SIEMENS LG 等系列手机厂商都是以 AT 指令方式与手机操作系统交互 有时也会带有私有协议 扩展协议等只有在 测试官方软件 现有软件的支持情况分析出来 所以软件会因 AT OBEX 协议不同 而加载 Other base 或 Nokia base 来 对当前手机支持 然后加载支持不同款手机的 plug 来对手机指令处理 达到 数据的请求和应答 其中 plug 也就是一个 Win32 下的 dll 文件 只是后缀 名不同而已 每一个手机大类中的插件可以支持几款手机 或者经过细微的修 改也可以支持 所以也就分了某一大类手机的未知型号的手机插件 通用手机 插件等 3 23 2 plugplug 分析分析 plug 是开发出的支持手机的 dll 程序 供界面调用 来处理底层数据的 通信 由于架构在一个软件可以支持多厂家 多系统 多款手机 所以对插件 的归类作了规定 首先应该以插件所属手机大类如 Motoralor 然后是具体的 手机型号 由于是一款插件可以支持该类多款手机 所以把插件的手机列表写 入到了程序的静态数组 或者本地磁盘 ini 文件 作为软件配置信息存在 当 第一次使用软件时候 界面调用 plug 插件扫描静态数组和配置文件 把手机大 类信息 手机型号写入数据库 以便当手机与 PC 连接时查询到是否支持 或者 加载什么样的插件来初始化软件 第 6 页 共 26 页 插件主要向外界暴露标准的操作接口 如新增 下载 删除 修改等 具 体实现在插件内部 也就是实现基类中的函数接口 或者重写继承过后的函数 当需要开发出一个插件来支持新型号的手机时候 主要是先通过终端测试 得 出手机系统特性 分析出于该类其余手机的相识情况 然后用已知插件测试功 能支持情况 如果能用已开发出的插件支持手机 则需要维护静态数据库或者 ini 配置文件 加入新型号手机进去 插件主要处理由界面传来的操作命令 向手机发送请求命令和接受手机的应答 对数据进行封装 从手机的 AT 命令格 式和界面 Absfile 格式进行匹配转换 都是先接受响应的数据包载缓存中 对 串口缓存数据逐条解析 寻找开始 结束字符串 例如对短信息 电话本 事 件 日程等的封装 然后发送到串口 手机予以响应 3 33 3 函数实现函数实现 插件向外暴露的都是标准的操作接口 都从基类 plugBse absPimCpp 继承 而来 或者从其他插件功能继承再加以重写 有些型号手机需要重新实现所有 的基类接口 从别的派生类继承实现起来比较困难 这样也是开发量最大的情 况 以下对于数据封装后会以 absfile 形式存在 也就是虚拟文件 根据实现 的函数不同从而具有各自不同的接口 但都以两种方式存在 一种是在本地磁 盘建立一个文件 所有对该方式建立的 absfile 操作 都在操作标准的磁盘文 件 另外一种是在内存中申请一动态堆栈区 来保存信息从而实现 absfile 然后可以用操作文件方式对该内存区进行数据处理 这也是配置的内存文件 以下是在开发中实现的接口 3 3 1 配置信息配置信息 通过实现 getProf 函数 给出配置信息到 absFile 可以在 PC 与软件连接中 传递给界面一些参数 让界面来根据文件配置加载相应的功能 不仅对于该模 块需要实现 getProf 函数 所有模块都需要根据该模块的特性来重写接口 int MotoVcs getProf AbsFile prof int ret titleLen char rsp 256 if this vcsProfObj prof printf prof s this vcsProfObj AbsFile dbgOut prof return 0 if ret enter at MDBR MDBR CME rsp sizeof rsp NULL rspBuf rsp sizeof rsp ret 0 if ret AtLex do this rspBuf this token AT ATOM return CNSE PROT 500 if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if ret AtLex do this rspBuf this token return CNSE PROT 44 if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if ret AtLex do this rspBuf this token return CNSE PROT 64 if ret AtLex do this rspBuf this token AT NUM return CNSE PROT titleLen atoi StrBuf buf this token prof printf prof Base r n prof printf prof OpSupp getInfo listById writeById readById removeById r n prof printf prof FieldListEvent r n prof printf prof T d UNICODE r n titleLen 2 prof printf prof DA 60 UNICODE r n prof printf prof DS 60 UNICODE r n prof printf prof DE 60 UNICODE r n prof printf prof R 60 UNICODE selList 0 1 2 3 4 6 r n return 0 第 8 页 共 26 页 在 absfile 中会得到信息 Base OpSupp listById readById writeById removeById getInfo FieldListEvent T d UNICODE DA 60 UNICODE DS 60 UNICODE DE 60 UNICODE R 60 UNICODE selList 0 1 2 3 4 6 从该配置信息可以看出支持操作有 下载 读取 新增 删除 同时也传递给界面所支持的字段有 T DA DS DE R 和对每一个字段编 码方式 字符长度作了约束 其中 selList 中选项表示可能的取值 3 3 2 构造函数实现构造函数实现 构造函数中分为该功能模块构造 和操作时的构造 但都是为了能满足对 内存堆栈申请 操作时对事件或者日程安排的开关 1 功能模块构造 实现对虚拟文件的堆栈分配 存储信息的堆栈分配 还有相关信息的初始化 MotoVcs MotoVcs ItfMng itfMng AtTe at char vcsProfObj PlugBase itfMng this at at this rspBuf AbsFileMem new NULL 0 0 0 this token StrBuf new 128 this maxReadPerTime 1 this cs 0 0 this vcsProfObj vcsProfObj 2 功能操作构造 当要对 vEvent 或者 vTodo 操作时候 根据系统的设 计 需要设置信息开关 MDBL 1 否则不能读取和其余操作 设置编码方式 但都需要先从手机中读取 然后根据支持操作来设置编码 界面都是统一按照 UTF 8 编码数据 该款手机优先支持 UCS2 编码 这些是由手机系统所决定 int MotoVcs init 第 9 页 共 26 页 int ret char buf 128 cs CnsCharset charset if ret AtTe setAny this at MDBL 1 CME NULL at buf sizeof buf utf8Ira CNS TRUE charset CS UTF8 cs UTF8 else charset CS ASCII cs GSM if this cs cs this cs if StrUtil stristr cs UTF 8 charset CS UTF8 for MOTOs else if StrUtil stristr cs UTF8 charset CS UTF8 this utf8Ira CNS TRUE else if StrUtil stristr cs UCS2 charset CS UCS2 else 第 10 页 共 26 页 charset CS ASCII if ret GmcTe3 setCs this at cs charset charset this savedCharset this charset return 0 3 3 3 信息获取信息获取 在对事件或者日程下载时候 会两次操作接口 getInfo 第一次传递给界 面信息如 最大索引 存储容量 剩余空间 有的可以读取出使用量等信息 第二次得到最大索引 存储容量等信息 给循环控制参数 用来设置读取时候 方式 对于串口缓冲区中数据都是通过 AtLex do 或者 BnfLex do 来对字段解析 然后保存到变量中 这种读取方式是在操作内存文件 int MotoVcs getInfo StrBuf did int capa int used int freed int indexLow int indexHigh int indexOwn int ret char rsp 256 if ret enter at MDBR MDBR CME rsp sizeof rsp NULL rspBuf rsp sizeof rsp ret 0 if ret AtLex do this rspBuf this token AT ATOM return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if capa capa atoi StrBuf buf this token if indexLow indexLow 0 if indexHigh indexHigh atoi StrBuf buf this token 1 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if used used atoi StrBuf buf this token if indexOwn indexOwn 1 return 0 3 3 4 数据下载数据下载 当打开读取开关后 更具读取 AT 命令 设置读取的条数 也就是一次让手 机返回给串口缓存数据包大小 可以一次读取一条信息 也可以一次读取十条 信息 Motoralor 系列手机不能首先得到有多少条信息记录 所以只能读取所 有的记录 即使只有一条也会读取全部信息 由于每次解析一条 所以会多次 调用 listById 接口 每一次调用 都是读取缓存数据 然后根据前面章节中提 到的字段依次解析存放到一个结构体中 对标题 日期等都需要经过编码后载 保存 由于 Motoralor 系列手机不能直接读取出结束时间 只能得到开始时间 到结束时间的分钟数 不足一分钟会置为 0 保存 然后通过函数换算成结束日 第 12 页 共 26 页 期和时间 最后读取保存的字段 字段值写成一个标准格式的 vCalendar 内存 文件传递给界面 用于显示给用户 int MotoVcs listById int index AbsFile item CnsBool first int ret tmp char cmd 64 if ret enter used NULL this listed 0 this curIndex this indexLow min this maxReadPerTime tmp sprintf cmd MDBR d d this indexLow this curIndex 1 if ret AtTe sendCmd this at cmd listed return ret else if ret used 0 while tmp this indexHigh this curIndex 1 0 this curIndex min tmp this maxReadPerTime sprintf cmd MDBR d d this oldCur this curIndex 1 if ret AtTe sendCmd this at cmd listed AbsFile dbgOut item return ret else if ret 0 return ret return 0 return 0 该函数定义为类的私有函数 主要是来读取一条记录后返回 所有的字段 检索 字段值存储 以及写成标准格式的 absfile 都在内部实现 int MotoVcs readOne int index AbsFile item int ret bufLen rcvd i 0 ruleType char buf 1024 rule 8 CnsResult result VcalField vCalFields 10 CnsTime cnsDate cnsMargin cnsDst VpiRule vpiRule bufLen sizeof buf if ret AtTe recvFrmLine this at NULL buf bufLen 得到索引号 if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if index index atoi StrBuf buf this token 得到标题 进行编码使其从UCS2编码 转换到界面的UTF 8编码方式 if ret AtLex do this rspBuf this token return CNSE PROT if ret BnfLex get1 this rspBuf this token BNF STR StrUtil strxfrm vCalFields i type T sizeof T strPhoneToStd StrBuf buf this token vCalFields i value sizeof vCalFields i value i 第 15 页 共 26 页 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT 得到开始时间 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT STRING return CNSE PROT memset sscanf StrBuf buf this token d d 得到开始日期 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT STRING return CNSE PROT sscanf StrBuf buf this token d d d StrUtil strxfrm vCalFields i type DS sizeof DS Iso8601Date enc i 得到结束日期 由于该系列手机不能直接得到结束时间 需要换算 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT memset memset 第 16 页 共 26 页 cnsMargin minute atoi StrBuf buf this token if ret DateMargin2CnsTime if ret AtLex do this rspBuf this token AT STRING return CNSE PROT memset sscanf StrBuf buf this token d d 提醒日期 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT STRING return CNSE PROT sscanf StrBuf buf this token d d d StrUtil strxfrm vCalFields i type DA sizeof DA Iso8601Date enc i 得到重复类型 系统默认为 0 if ret AtLex do this rspBuf this token return CNSE PROT if ret AtLex do this rspBuf this token AT NUM return CNSE PROT ruleType atoi StrBuf buf this token memset 第 17 页 共 26 页 switch ruleType case 1 每天重复发生 sprintf rule d 1 0 RULE TYPE DAILY StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break case 2 每周 sprintf rule d 1 0 RULE TYPE WEEKLY StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break case 3 每月的该日重复发生 sprintf rule d 1 0 RULE TYPE MONTHLY POS StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break case 4 每月的该天重复发生 sprintf rule d 1 0 RULE TYPE MONTHLY DAY StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break case 5 每年重复发生 sprintf rule d 1 0 RULE TYPE YEARLY DAY StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break default sprintf rule d 1 0 RULE TYPE UNKNOW StrUtil strxfrm vCalFields i type R sizeof R StrUtil strxfrm vCalFields i value rule strlen rule 1 break if ret Vcal enc item VPICAL TYPE VEVENT vCalFields sizeof vCalFields sizeof vCalFields 0 charset CS UCS2 tmpLen strlen src tmpBuf unsigned char malloc tmpLen memset tmpBuf 0 x00 tmpLen len IraUtil iraToBuf unsigned char src tmpBuf tmpLen len 转换后的字节数 len CsUtil ucs2ToUtf8 unsigned short tmpBuf len dst dstLen else if this charset CS GSM len StrUtil strxfrm dst src dstLen else if this charset CS UTF8 if this utf8Ira len StrUtil strxfrm dst src dstLen else len IraUtil iraToBuf unsigned char src unsigned char dst dstLen if tmpBuf free tmpBuf tmpBuf NULL 第 19 页 共 26 页 3 3 5 数据新增数据新增 该功能主要是实现从标准格式的 absfile 经过转换 编码成手机可以识 别的 AT 命令文件 会使用两个接口 即 writeById 或者 insertById 区别主 要在于 能否由界面控制手机中信息的索引号 每一条记录在手机中都会同手 机中索引号关联起来 writeById 接口可以由界面根据已知的索引来分配一格 索引 如果索引相同就成了修改 insertById 接口是不能由界面控制索引分配 只能手机内部分配 所以写入时不需要设置索引号 手机这样的约束也就不能 同步 详见 3 3 有时手机也会同时支持两种方式 界面则会优先选取 writeById int MotoVcs writeById int index AbsFile item int ret char buf 1024 CnsResult result AbsFile vcsBuf NULL if ret enter 0 TRACE LINE return ret AbsFile dbgOut item vcsBuf MemBuf new 128 512 MemBuf ctrlDoubleExpand vcsBuf CNS ENABLE if ret vcsPC2Pone index item vcsBuf at const char MBuf buf vcsBuf at NULL buf sizeof buf NULL vcsBuf NULL return ret 该函数主要对标准格式的 absfile 转换成手机可以识别的 absfile void MotoVcs strStdToPhone char src char dst int dstLen int len unsigned char tmpBuf NULL if this charset CS UCS2 tmpBuf unsigned char malloc dstLen memset tmpBuf 0 x00 dstLen len CsUtil utf8ToUcs2 src unsigned short tmpBuf dstLen len 转换的字符数 len IraUtil bufToIra tmpBuf len 2 unsigned char dst dstLen len 转换后的字节数 else if this charset CS GSM StrUtil strxfrm dst src dstLen 第 21 页 共 26 页 else if this charset CS UTF8 if this utf8Ira StrUtil strxfrm dst src dstLen else len IraUtil bufToIra unsigned char src strlen src unsigned char dst dstLen if tmpBuf free tmpBuf tmpBuf NULL 3 3 63 3 6 数据删除数据删除 当对事件或者日程删除时候 可以直接对指定内容写入空 达到删除目的 但也有的 Motoralor 不允许这样对索引写入空值 而是需要先读取出内容后 判断是否已经有值 如果有才允许写空删除 无内容时不允许写空 当删除一 条记录时 该索引保留为空 新增内容会存放到该索引中 int MotoVcs removeById int index int ret char cmd 24 if ret enter at cmd CME NULL 3 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论