Windows Mobile Sensors API库的设计

简介:

背景

热烈欢迎 simon_new88 同学加入 Mobile Sensors API - Native unified APIs for Windows Mobile Sensors 项目。为了他更快熟悉,我把GSensor的设计记录下来。关于该项目的一些信息可以参考 Windows Mobile下的重力感应器(Gravitational Sensor)开发 和 Windows Mobile下使用CppUnitLite输出测试结果

简介

本文讲述Windows  Mobile Sensors API库中重力感应器部分(GSensor)的设计。讲述一个统一访问接口的Sensor库的设计方法和一些设计模式的应用。

需求

统一访问接口的Sensor库(Native unified APIs for Windows Mobile Sensors)的需求:

1.统一的API访问接口。由于为HTC和Samsung移动设备提供各自提供DLL来封装Sensor,所以提供不一样的访问接口。使用Windows  Mobile Sensors API库,应用开发人员在开发客户端(Client)代码时不需要知道具体设备的API,只是需要调用Windows  Mobile Sensors API库的统一接口就可以得到相应的GSensor运行信息。

2.统一输出GVector的单位。由于HTC和Samsung移动设备各自的GSensor库输出的GVector的单位是不一样的,HTC输出是-100到100的值,而Samsung又不一样。所以Windows  Mobile Sensors API库需要把输出值的单位进行统一。应用开发人员在开发客户端(Client)代码时,一套代码可以同时支持HTC和Samsung的移动设备。

 

设计

总体设计

GSensor部分的总体类图设计:

sensor_api_uml

下面文章分部分讲述。

GSensor设计

sensor_api_uml2

GSensor是一个抽象类,定义了统一的访问接口,主要提供三个主要的接口:

1.取GVector信息接口。客户端调用GetGVector()函数可以得到实时的GVector信息。

2.事件订阅接口。当客户端调用Register()订阅GVector事件,通过Unregister()函数退订该事件。事件的发送通过Observer模式实现,后面讲到。

3.单位调整接口。客户端可以调用Scale()来调整想要的单位。

GetGVector(),Register()和Unregister()为纯虚函数。表示GSensor指定的契约(contract),其继承子类SamsungGSensor和HTCGSensor必须实现这些接口以厉行该契约。这两个子类在实现这些接口时分别调用各自平台相关的DLL来实现。

由于HTC的DLLHTCSensorSDK.dll没有定时回调函数的实现,所以在Windows  Mobile Sensors API库实现了一个ThreadTask类来定时查询GVector的信息。ThreadTask类封装了Start(),Stop()和ProcessTask()函数,Start()负责产生一个线程,Stop()负责结束由Start()产生的线程,而ProcessTask()负责定期执行任务。执行任务的具体内容在Process()中定义,Process()也是纯虚函数,也就是contract,由子类实现需要执行的具体任务,这里可以认为是Method Template模式的实现。HTCGSensor继承了ThreadTask类,然后重载了Process()定时查询GVector信息,然后通过调用GSensor的GVectorChanged()函数来通知Client。后面将讲Observer模式,怎么GSensor怎么通知Client。

GSensorFactory的设计

sensor_api_uml3

这里使用了Simple Factory模式,客户端只是需要调用GSensorFactory就可以取出GSensor的指针,GSensorFactory可以判断设备类型取出SamsungGSensor或者HTCGSensor的实例。关于Simple Factory可以参考 我的实用设计模式之Simple Factory,Factory Method和Abstract Factory

Observer的设计

从需求看,Windows  Mobile Sensors API库需要实现事件订阅接口。当客户端订阅了消息时,客户端会自动接收到GVector信息,这个功能是使用Observer模式实现的。关于Observer模式可以参考 我的实用设计模式之Observer模式

sensor_api_uml4

我使用了一个开源的Observer模式实现,和经典的Observer的实现有点差异。但是目标是一致的,就是实现消息提供方和消息接收方的解耦。那个实现可以参考Experiences of Implementing the Observer Design Pattern (Part 3)

Notifier是经典Observer模型的Abstract Subject。GSensor是Concrete Subject继承Notifier,通过调用notify()函数来通知Observers。Listener是经典Observer模式的Abstract Observer。和经典Observer模式有点不一样。Notifier通过Event类来通知Listener。而Listener增加了一层继承于GSensorListener。GSensorListener根据具体通知内容而定义。这里通过C++的模板类来实现的。关于这方面的实现可以参考Template metaprogramming

template <class interface_type>
class Listener : public interface_type

SensorTesterView是Concrete Observer。需要实现GSensor_GVectorChanged()来处理通知消息。

 

Singleton的设计

sensor_api_uml5 

SamsungGSensor和HTCGSensor分别设计为Singleton,因为不管有多少个消息订阅者(Listener)都只有一个消息发送方。也就是一套系统里面只有一个SamsungGSensor或者HTCGSensor的实例。

 

关于Mobile Sensors API项目

这个项目还是在起步阶段,当前实现了samsung的重力感应器,我把项目host到 Mobile Sensors API - Native unified APIs for Windows Mobile Sensors 了,我会持续改进,把各种sensors的实现到这个项目中。

由于我手头上没有HTC的机器,如果谁有兴趣可以加入到项目中帮我测试HTC设备,由于加入了Unit Test,测试变得很简单,只需要执行程序,参考测试输出文件就可以了,不需要调试。当然这个测试过程是一个不断迭代的过程,只是Unit Test把子过程简单化了。

源代码:http://mobilesensor.codeplex.com/SourceControl/ListDownloadableCommits.aspx

环境:VS2008 + WM 6 professional SDK + Samsung Windows Mobile SDK




    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/09/18/1568939.html,如需转载请自行联系原作者


相关文章
|
3月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
471 130
|
4月前
|
域名解析 JSON API
【干货满满】如何处理requests库调用API接口时的异常情况
在调用 API 时,网络波动、服务器错误、参数异常等情况难以避免。本文提供一套系统化的异常处理方案,涵盖 requests 库常见异常类型、处理策略、实战代码与最佳实践,通过分类处理、重试机制与兜底策略,提升接口调用的稳定性与可靠性。
|
2月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
114 11
|
8月前
|
自动驾驶 程序员 API
告别重复繁琐!Apipost参数描述库让API开发效率飙升!
在API开发中,重复录入参数占用了42%的时间,不仅效率低下还易出错。Apipost推出的参数描述库解决了这一痛点,通过智能记忆功能实现参数自动填充,如版本号、分页控制、用户信息等常用字段,大幅减少手动输入。支持Key-Value与Raw-Json格式导入,一键提取响应结果至文档,将创建20参数接口文档时间从18分钟缩短至2分钟。相比Postman需手动搜索变量,Apipost的参数复用响应速度仅0.3秒,且支持跨项目共享与实时纠错,真正实现“一次定义,终身受益”。
|
10月前
|
监控 API 计算机视觉
CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
CompreFace 是一个在 GitHub 上拥有 6.1k Star 的轻量级人脸识别库,支持 API 和 SDK。它由 Exadel 公司开发,基于深度学习技术,提供高效、灵活的人脸识别解决方案。CompreFace 支持多种模型(如 VGG-Face、OpenFace 和 Facenet),具备多硬件支持、丰富的功能服务(如人脸检测、年龄性别识别等)和便捷的部署方式。适用于安防监控、商业领域和医疗美容等多个场景。
1048 4
|
9月前
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
11月前
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
644 13
表情包-API盒子官方资源库版免费API接口教程
该API用于访问API盒子官方资源库中的数十万表情包,支持快速搜索。通过POST或GET请求,用户可按随机或关键词搜索表情包,返回表情包的图片地址等信息。请求需提供用户ID、KEY及搜索类型等参数。示例与详情参见官方文档。
|
机器人 API
随机昵称网名[百万昵称库]免费API接口教程
该API接口用于随机生成网名,适用于机器人昵称、虚拟用户名等场景。支持POST和GET请求,需提供用户ID和KEY。返回状态码及信息提示,示例如下:{&quot;code&quot;:200,&quot;msg&quot;:&quot;豌豆公主&quot;}。详情见官方文档:https://www.apihz.cn/api/zicisjwm.html

热门文章

最新文章