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

网站关键词排名优化电话沧县做网站价格

网站关键词排名优化电话,沧县做网站价格,做机械网站,医药网站源代码By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述I2C平台驱动I2C平台驱动HDF框架I2C平台驱动的使用I2C应用开发接口说明代码目录i2ctest.cBUILD.gnbundle.json修改config.json文件… By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述I2C平台驱动I2C平台驱动HDF框架I2C平台驱动的使用I2C应用开发接口说明代码目录i2ctest.cBUILD.gnbundle.json修改config.json文件测试程序导入设备运行测试 概述 我们鸿蒙3.2设备上连接了sensor,如accel和gyro,是通过i2c总线连接的,在鸿蒙HDF的设备私有信息配置文件如下描述: vendor/sprd/uis7885/hdf_config/khdf/sensor/accel/qmi8658_config.hcs sensorBusConfig :: sensorBusInfo {busType = 0; // 0:i2c 1:spibusNum = 2;busAddr = 0x6b;regWidth = 1; // 1byte } sensorIdAttr :: sensorIdInfo {chipName = "qmi8658";chipIdRegister = 0x00;chipIdValue = 0x05; }即总线是i2c2,从设备的sensor地址是0x6b,chip id的寄存器地址是0x00。chip id值是0x5。 我们先研究下如何通过测试程序来操作I2C,读取这个chip id值。 I2C平台驱动 鸿蒙标准系统中,使用的是Linux内核,这个没有官网上的I2C平台驱动中描述的这样需要编写I2C平台驱动。 使用这个I2C平台驱动文件:drivers/hdf_core/adapter/khdf/linux/platform/i2c/i2c_adapter.c 比如获取对应的I2C adapter: static int LinuxI2cProbe(struct device *dev, void *data) {int32_t ret;struct I2cCntlr *cntlr = NULL;struct i2c_adapter *adapter = NULL;(void)data;if (dev == NULL) {HDF_LOGE("%s: dev is null", __func__);return HDF_ERR_INVALID_OBJECT;} if (dev-type != i2c_adapter_type) {return HDF_SUCCESS; // continue probe} HDF_LOGI("%s: Enter", __func__);adapter = to_i2c_adapter(dev); //获取i2c adaptercntlr = (struct I2cCntlr *)OsalMemCalloc(sizeof(*cntlr));if (cntlr == NULL) {HDF_LOGE("%s: malloc cntlr fail!", __func__);i2c_put_adapter(adapter);return HDF_ERR_MALLOC_FAIL;} cntlr-busId = adapter-nr;cntlr-priv = adapter;cntlr-ops = g_method;ret = I2cCntlrAdd(cntlr); //这个I2C控制器添加到HDF框架中,后面会在I2cOpen函数中调用I2cCntlrGet函数查找到对应的控制器if (ret != HDF_SUCCESS) {i2c_put_adapter(adapter);OsalMemFree(cntlr);cntlr = NULL;HDF_LOGE("%s: add controller fail:%d", __func__, ret);return ret;} HDF_LOGI("%s: i2c adapter %d add success", __func__, cntlr-busId);return HDF_SUCCESS; }参考:http://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/guide/device-driver-demo.md/ 上面我们提及to_i2c_adapter添加i2c 适配器,然后又将总线ID、适配器和操作方法等通过I2cCntlrAdd添加到HDF驱动框架中,后面在UHDF或KHDF中通过调用I2cOpen函数,间接调用了I2cCntlrGet函数,在HDF框架中找到对应的总线ID、适配器和操作方法等,然后就可以操作I2C总线了。 I2cCntlrAdd函数: //drivers/hdf_core/framework/support/platform/src/i2c/i2c_core.c int32_t I2cCntlrAdd(struct I2cCntlr *cntlr) {int32_t ret;if (cntlr == NULL) {return HDF_ERR_INVALID_OBJECT;} if (cntlr-ops == NULL) {HDF_LOGE("I2cCntlrAdd: no ops supplied!");return HDF_ERR_INVALID_OBJECT;} if (cntlr-lockOps == NULL) {HDF_LOGI("I2cCntlrAdd: use default lock methods!");cntlr-lockOps = g_i2cLockOpsDefault;} if (OsalMutexInit(cntlr-lock) != HDF_SUCCESS) {HDF_LOGE("I2cCntlrAdd: init lock fail!");return HDF_FAILURE;} ret = I2cManagerAddCntlr(cntlr);if (ret != HDF_SUCCESS) {(void)OsalMutexDestroy(cntlr-lock);return ret;} return HDF_SUCCESS; }I2cOpen函数: DevHandle I2cOpen(int16_t number) {return (DevHandle)I2cCntlrGet(number); }I2cCntlrGet函数: /** Find an i2c controller by bus number, without ref count*/ static struct I2cCntlr *I2cManagerFindCntlr(int16_t number) {struct I2cCntlr *cntlr = NULL;struct I2cManager *manager = g_i2cManager;if (number 0 || number = I2C_BUS_MAX) {HDF_LOGE("I2cManagerFindCntlr: invalid busId:%hd!", number);return NULL;}if (manager == NULL) {HDF_LOGE("I2cManagerFindCntlr: get i2c manager fail!");return NULL;}if (OsalMutexLock(manager-lock) != HDF_SUCCESS) {HDF_LOGE("I2cManagerFindCntlr: lock i2c manager fail!");return NULL;}cntlr = manager-cntlrs[number];(void)OsalMutexUnlock(manager-lock);return cntlr; }/** Find and return an i2c controller by number, with ref count*/ struct I2cCntlr *I2cCntlrGet(int16_t number) {return I2cManagerFindCntlr(number); }在drivers/hdf_core/framework/support/platform/src/i2c/i2c_core.c文件中,主要就是实现这个上述这些功能 I2C平台驱动HDF框架 I2C平台驱动既可以为其他HDF驱动提供接口,比如挂接在I2C总线上的sensor驱动,也可以为用户空间提供通用的操作接口。这些接口都是这些:I2cOpen(),I2cClose(),I2cTransfer()。所以可以在drivers/hdf_core/framework/support/platform/src/i2c/中看到有这两个文件: drivers/hdf_core/framework/support/platform/src/i2c/i2c_if.c drivers/hdf_core/framework/support/platform/src/i2c/i2c_if_u.c其中i2c_if.c就是对其他HDF驱动提供接口的: #include "i2c_if.h" #include "devsvc_manager_clnt.h" #include "hdf_base.h" #include "hdf_log.h" #include "i2c_core.h" #include "osal_mem.h" #include "securec.h"#define HDF_LOG_TAG i2c_if#define I2C_SERVICE_NAME "HDF_PLATFORM_I2C_MANAGER"DevHandle I2cOpen(int16_t number) {return (DevHandle)I2cCntlrGet(number); }void I2cClose(DevHandle handle) {if (handle != NULL) {I2cCntlrPut((struct I2cCntlr *)handle);} }int32_t I2cTransfer(DevHandle handle, struct I2cMsg *msgs, int16_t count) {if (handle == NULL) {return HDF_ERR_INVALID_OBJECT;}if (msgs == NULL || count = 0) {HDF_LOGE("I2cTransfer: err params! msgs:%s, count:%hd",(msgs == NULL) ? "0" : "x", count);return HDF_ERR_INVALID_PARAM;}return I2cCntlrTransfer((struct I2cCntlr *)handle, msgs, count); }其中i2c_if_u.c就是对用户空间提供通用的操作接口: #include "hdf_base.h" #include "hdf_io_service_if.h" #include "hdf_log.h" #include "i2c_if.h" #include "i2c_service.h"
http://www.pierceye.com/news/559025/

相关文章:

  • 做网站seo赚钱吗平面广告设计作品集
  • 购物中心网站建设六安政务中心网站
  • 做网站公司赚钱吗?抖音小程序推广怎么挂才有收益
  • 滁州网站建设建设银行租房平台网站6
  • h5自适应网站模板下载阿里云域名注册好了怎么做网站
  • 德州做网站多少钱网站实现搜索功能
  • 帝国cms7.0网站搬家换域名换空间等安装教程万网云虚拟主机上传网站
  • 网站建设推广接单语wordpress 所有文章
  • 申请域名后怎么做网站网站建设与维护中国出版社
  • 洛阳做网站那家好课程网站建设开题报告
  • 到哪里建网站商务网站建设学期总结
  • 铜陵app网站做营销招聘网站开发公司需要投入什么资源
  • 建购物的网站需要多少钱wordpress不显示头像
  • 如何做一个个人网站长春网站建设wang
  • 湖南省做网站的网站资讯建设
  • 滨江网站建设制作如何建设网站方便后期维护
  • dedecms手机网站插件wordpress模板中文
  • 网站建设合同封面模板下载天津专业网站设计
  • 毕业设计网站做几个2345浏览器网页版
  • 南阳市网站建设国家建设协会工程质量分会网站
  • 苗木网站开发需求自己做网站转发新闻违法么
  • 招商网站建设解决方案wordpress页面转移
  • 门户网站开发方案文档做网站切片
  • 中国房地产新闻关键词seo排名优化如何
  • 网站大型网页游戏上海装修公司排名统帅
  • hostinger建站wordpress互联网营销方案策划
  • 门户网站维护方案杭州网站建设公司哪家好
  • 深泽网站建设在wordpress加入文件管理器
  • 国外社交网站建设福州市工程建设质量管理网站
  • 建设网站怎样分配给用户空间做网站优化有什么方法