
【FFH】BearPi_Micro业务和驱动代码_GPIO口使用 原创 精华
业务代码and驱动代码框架
业务代码
-
.c文件编写业务代码
-
BUILD.gn把第一步中的业务代码打包成可执行文件,再把可执行文件打包成小组件
-
applications.json将小组件打包成名为my_sample组件
-
/vendor/…/config.json编译构建组件
驱动的使用
业务代码
1.获取驱动
HdfIoServiceBind(驱动名称)
#驱动对外发布服务的名称,在device_info.hcs里查询
2. 申请内存
HdfSBufObtainDefaultSize()
申请发送数据data和接受数据reply的内存
3.将业务代码的数据翻译成驱动代码的数据(翻译数据)
HdfSbufWriteUint8(1,2)
将参数二写入参数一,参数一将被步骤四带到驱动代码中
4. 发送和接受驱动的数据
serv->dispatcher->Dispatch(&serv->object,操作确认符, data, reply)
数据通过Dispatch发送接收数据
*serv是第一步HdfIoServiceBind()
的返回值
5. 翻译驱动代码发来的数据(翻译数据)
HdfSbufReadInt32(1, &2)
将参数一(驱动在步骤四发送来的数据)写入参数二,参数二为业务代码可以查看的数据(参数二为地址)
6. 释放申请的内存
HdfSBufRecycle()
将第二步申请的data和reply内存释放
代码如下:
驱动代码
新建代码:device\st\drivers\新建代码文件夹\驱动代码+BUILD.gn
- 将驱动入口注册到HDF框架中
HDF_INIT(驱动入口的对象)
驱动入口的对象必须为HdfDriverEntry类型的全局变量
-
在Dispatch中处理用户态发下来的消息
LedDriverDispatch(struct HdfDeviceIoClient *client, int cmdCode, struct HdfSBuf *data, struct HdfSBuf *reply)
对应参数为业务代码中的第四步- 翻译业务代码带来的数据(翻译数据)
HdfSbufReadUint8(data,&2);
将data数据转换成驱动代码可以使用的数据,完成相应动作(参数二为地址) - 将驱动代码的数据发送到业务代码(翻译数据)
HdfSbufWriteInt32(reply,2)
将参数2写入参数1的reply中,reply可被带至业务程序
PS:当需要翻译的数据为字符串时,用函数HdfSbufWriteString(1, 2);
和2=HdfSbufReadString(1)
- 翻译业务代码带来的数据(翻译数据)
-
驱动的BUILD.gn把驱动代码编译成可执行文件
-
系统驱动的BUILD.gn中的依赖库添加入驱动代码的所在文件夹
/device/st/drivers/BUILD.gn -
驱动配置(LED灯为例子)
- 驱动设备描述
device\st\bearpi_hm_micro\liteos_a\hdf_config\device_info\device_info.hcs
- 驱动的私有配置信息
驱动的私有(只有该驱动使用)配置可以添加一个配置文件,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject 中的property里面,通过Bind和Init传递给驱动,在device\st\bearpi_hm_micro\liteos_a\hdf_config\led\led_config.hcs中添加有配置描述。
配置信息定义之后,需要将该配置文件添加到板级配置入口文件device\st\bearpi_hm_micro\liteos_a\hdf_config\hdf.hcs,示例如下:
- 驱动设备描述
GPIO口使用
GPIO口写入操作
GPIO口一组16个,按顺序排列。
例如当使用到GPIOA0时,IO口设置为16*0+0=0;当使用GPIOB1时,IO口设置为16*1+1=17
在驱动代码中添加以下代码:
IO口设置和操作函数的调用
GPIO口模式设置
