当前位置: 首页 > news >正文

网站建设交付形式聚名网备案查询

网站建设交付形式,聚名网备案查询,天津网络推广网站建设公司,智能网站建设推荐一、直通式HAL 这里使用一个案例来介绍直通式HAL#xff0c;选择MTK的NFC HIDL 1.0为例#xff0c;因为比较简单#xff0c;代码量也比较小#xff0c;其源码路径#xff1a;vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定义 1#xff09;NFC HAL数据类型 通常定…一、直通式HAL 这里使用一个案例来介绍直通式HAL选择MTK的NFC HIDL 1.0为例因为比较简单代码量也比较小其源码路径vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定义 1NFC HAL数据类型 通常定义在types.hal里面其语法和java/c/c可能不一致详细参考https://source.android.com/docs/core/architecture/hidl/types?hlzh-cn 2NFC HAL回调接口 HAL的回调接口即通常被定义为IXXXCallback INfcClientCallback从命名可以知道给客户端的回调接口即给客户端进程或者framework层提供的回调接口即hal可以通过该接口向对方回调数据 3NFC HAL接口定义 HAL的正式接口同前面的回调接口刚好相反即 HAL接口客户端/Framework -------  HAL进程HAL进程是被调用者 CALL接口HAL进程  ------客户端/Framework HAL进程主动发起 2、NFC HAL的逻辑 NFC HAL 1.0的版本是一个典型的直通式其源码就nfc.cpp逻辑相对比较简单 //vendor/hardware/interfaces/nfc/1.0/default/Nfc.h #ifndef ANDROID_HARDWARE_NFC_V1_0_NFC_H #define ANDROID_HARDWARE_NFC_V1_0_NFC_H#include android/hardware/nfc/1.0/INfc.h #include hidl/Status.h #include hardware/hardware.h #include hardware/nfc.h namespace android { namespace hardware { namespace nfc { namespace V1_0 { namespace implementation {using ::android::hardware::nfc::V1_0::INfc; using ::android::hardware::nfc::V1_0::INfcClientCallback; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_vec; using ::android::hardware::hidl_string; using ::android::sp;struct Nfc : public INfc, public hidl_death_recipient {Nfc(nfc_nci_device_t* device);::android::hardware::ReturnNfcStatus open(const spINfcClientCallback clientCallback) override;::android::hardware::Returnuint32_t write(const hidl_vecuint8_t data) override;::android::hardware::ReturnNfcStatus coreInitialized(const hidl_vecuint8_t data) override;::android::hardware::ReturnNfcStatus prediscover() override;::android::hardware::ReturnNfcStatus close() override;::android::hardware::ReturnNfcStatus controlGranted() override;::android::hardware::ReturnNfcStatus powerCycle() override;static void eventCallback(uint8_t event, uint8_t status) {if (mCallback ! nullptr) {auto ret mCallback-sendEvent((::android::hardware::nfc::V1_0::NfcEvent)event,(::android::hardware::nfc::V1_0::NfcStatus)status);if (!ret.isOk()) {ALOGW(Failed to call back into NFC process.);}}}static void dataCallback(uint16_t data_len, uint8_t* p_data) {hidl_vecuint8_t data;data.setToExternal(p_data, data_len);if (mCallback ! nullptr) {auto ret mCallback-sendData(data);if (!ret.isOk()) {ALOGW(Failed to call back into NFC process.);}}}virtual void serviceDied(uint64_t /*cookie*/,const wp::android::hidl::base::V1_0::IBase /*who*/) {close();}private:static spINfcClientCallback mCallback;const nfc_nci_device_t* mDevice; };extern C INfc* HIDL_FETCH_INfc(const char* name);} // namespace implementation } // namespace V1_0 } // namespace nfc } // namespace hardware } // namespace android#endif // ANDROID_HARDWARE_NFC_V1_0_NFC_H//vendor/hardware/interfaces/nfc/1.0/default/Nfc.cpp #define LOG_TAG android.hardware.nfc1.0-impl#include log/log.h#include hardware/hardware.h #include hardware/nfc.h #include Nfc.hnamespace android { namespace hardware { namespace nfc { namespace V1_0 { namespace implementation {spINfcClientCallback Nfc::mCallback nullptr;Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device) {}// Methods from ::android::hardware::nfc::V1_0::INfc follow. ::android::hardware::ReturnNfcStatus Nfc::open(const spINfcClientCallback clientCallback) {mCallback clientCallback;if (mDevice nullptr || mCallback nullptr) {return NfcStatus::FAILED;}mCallback-linkToDeath(this, 0 /*cookie*/);int ret mDevice-open(mDevice, eventCallback, dataCallback);return ret 0 ? NfcStatus::OK : NfcStatus::FAILED; }::android::hardware::Returnuint32_t Nfc::write(const hidl_vecuint8_t data) {if (mDevice nullptr) {return -1;}return mDevice-write(mDevice, data.size(), data[0]); }::android::hardware::ReturnNfcStatus Nfc::coreInitialized(const hidl_vecuint8_t data) {hidl_vecuint8_t copy data;if (mDevice nullptr || copy.size() 0) {return NfcStatus::FAILED;}int ret mDevice-core_initialized(mDevice, copy[0]);return ret 0 ? NfcStatus::OK : NfcStatus::FAILED; }::android::hardware::ReturnNfcStatus Nfc::prediscover() {if (mDevice nullptr) {return NfcStatus::FAILED;}return mDevice-pre_discover(mDevice) ? NfcStatus::FAILED : NfcStatus::OK; }::android::hardware::ReturnNfcStatus Nfc::close() {if (mDevice nullptr || mCallback nullptr) {return NfcStatus::FAILED;}mCallback-unlinkToDeath(this);return mDevice-close(mDevice) ? NfcStatus::FAILED : NfcStatus::OK; }::android::hardware::ReturnNfcStatus Nfc::controlGranted() {if (mDevice nullptr) {return NfcStatus::FAILED;}return mDevice-control_granted(mDevice) ? NfcStatus::FAILED : NfcStatus::OK; }::android::hardware::ReturnNfcStatus Nfc::powerCycle() {if (mDevice nullptr) {return NfcStatus::FAILED;}return mDevice-power_cycle(mDevice) ? NfcStatus::FAILED : NfcStatus::OK; }INfc* HIDL_FETCH_INfc(const char * /*name*/) {nfc_nci_device_t* nfc_device;int ret 0;const hw_module_t* hw_module nullptr;ret hw_get_module (NFC_NCI_HARDWARE_MODULE_ID, hw_module);if (ret 0) {ret nfc_nci_open (hw_module, nfc_device);if (ret ! 0) {ALOGE (nfc_nci_open failed: %d, ret);}}elseALOGE (hw_get_module %s failed: %d, NFC_NCI_HARDWARE_MODULE_ID, ret);if (ret 0) {return new Nfc(nfc_device);} else {ALOGE(Passthrough failed to load legacy HAL.);return nullptr;} }} // namespace implementation } // namespace V1_0 } // namespace nfc } // namespace hardware } // namespace android 1如何集成了驱动 首先在nfc.h定义了很关键的成员变量mDevice熟悉C/C代码的从命名来看应该是一个驱动关联的句柄 const nfc_nci_device_t*       mDevice; 在nfc.cpp代码中可以很明显的看到通过linux和hal的机制去打开nfc驱动设备节点 因此有理由相信这里的mDevice其实就是nfc驱动设备节点的一个句柄所以解析来的代码逻辑其实就是对nfc驱动设备节点的文件操作了。 2客户端如何通过hal调用驱动 对驱动设备节点的第一个操作就是open在open之后我们就可以对设备节点进行write或者其他操作如下几个函数都是NFC HAL接口的定义因此HAL进程这里都是作为被动调用的一方最后通过mDevice-XXX的方式调用驱动代码驱动代码实现具体功能。 3驱动阶段如何主动返回数据 那么如果驱动程序想主动返回数据给到客户端或者给到系统framework层那么如何操作呢 这时需要在看看open函数 我们来看看函数指针eventCallback和dataCallback如何实现 3、NFC HAL 流程图
http://www.pierceye.com/news/51929/

相关文章:

  • 哪个网站可以发宝贝链接做宣传wordpress全景图片
  • 恩平网站建设网站开发技术最新技术
  • 有哪些看设计做品的网站如何建设自己的公司网站
  • 网站的效果图如何访问服务器上的网站
  • 个人网站建设需求说明书小程序 手机网站
  • 织梦做的网站怎么样wordpress exploit
  • 成都建设监理协会网站织梦网站怎么上传视频教程
  • c 语言能开发做网站吗学完网站建设再可以学什么
  • 设计公司官方网站萍乡网站优化
  • 怎么做网站可以注册的wordpress 关闭更新警告
  • 合肥网站建合肥网站建设找蓝领商务京东网上商城购物
  • asp服装网站源码工商执照注册号查询网
  • 西安优秀高端网站建设服务商个人博客网站怎么建立
  • 高端网站如何建设福田网站建设龙岗网站建设
  • 博客网站开发背景微信公众号微商城平台
  • 做外单网站亚马逊论述农产品电商网站建设
  • 免费商城网站制作博客网站程序
  • 网站建设数据库软件英文网站做游戏活动策划方案
  • 上海医疗网站备案表动易网站安装子目录中
  • 校园网站建设网站wordpress区块链插件
  • cn网站建设多少钱聊城广告设计公司
  • 宿迁明远建设有限公司网站男女做那些事免费网站
  • 沧州网站优化零件加工网上接订单
  • 网站开发公司云鲸互创实惠深圳网站建设售后服务怎样
  • 厦门 网站建设 网站开发郑州专业做网站企业
  • 网站标签中的图片怎么做的樱花jsq30q211
  • 网站编程学习wordpress媒体库素材打不开
  • 装饰网站建设多少钱网址之家大全
  • 手机网站建设的费用福州网站建设索q479185700
  • 电商网站开发fd网址大全12345