为了方便查阅,本文汇集了我在学习鸿蒙驱动子系统过程中,曾经遇到过的HDF驱动框架提供的API。 同时,还加入了一些对这些API的个人理解和解读。
另外,大家也可以去阅读这些API的源码或官方文档:
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073
上一篇: 《HDF驱动框架的API》(1)
从缓冲区(第1个参数)读出一个8bit无符号整数,存入指针(第2个参数)指向的变量中。如果执行成功,返回值为true;否则,返回值为false。
bool HdfSbufReadUint8 (struct HdfSBuf * sbuf, uint8_t * value )
1、头文件
drivers/framework/ability/sbuf/include/hdf_sbuf.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga07d93e6bcd8a6a8646067783d6f46e74
向缓冲区(第1个参数)写一个8bit的无符号整数(第2个参数)。如果执行成功,返回值为true;否则,返回值为false。
bool HdfSbufWriteUint8(struct HdfSBuf *sbuf, uint8_t value)
1、头文件
drivers/framework/ability/sbuf/include/hdf_sbuf.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga3913510d670da2f8ffa3103b5ff293f1
创建一个256字节的缓冲区,返回指向缓冲区的指针。
struct HdfSBuf* HdfSBufObtainDefaultSize (void)
1、头文件
drivers/framework/ability/sbuf/include/hdf_sbuf.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga479315c09d0d927aa211de829388122d
向缓冲区(第1个参数)写入一个字符串(第2个参数)。如果执行成功,返回值为true;否则,返回值为false。
bool HdfSbufWriteString (struct HdfSBuf * sbuf, const char * value )
1、头文件
drivers/framework/ability/sbuf/include/hdf_sbuf.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gaf782f8a08dcd81f4038ab9d9bbc1cf9b
驱动程序上报事件(消息),所有用户态应用程序都可以监听并接收到。第1个参数deviceObject
:指向HdfDeviceObject
结构体的指针;第2个参数id
:事件的编号;第3个参数data
:指针,指向存放上报消息的缓冲区。如果执行成功,返回值为0。
int32_t HdfDeviceSendEvent (const struct HdfDeviceObject * deviceObject, uint32_t id, const struct HdfSBuf * data )
1、头文件
drivers/framework/include/core/hdf_device_desc.h
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gac9670df1316b5ddd651a50ebee0b6557
驱动程序上报事件(消息)给指定的客户端对象(第1个参数),只有指定的客户端对象才能监听并接收到。第1个参数client
:指向HdfDeviceIoClient
结构体的指针;第2个参数id
:事件的编号;第3个参数data
:指针,指向存放上报消息的缓冲区。如果执行成功,返回值为0。
int32_t HdfDeviceSendEventToClient (const struct HdfDeviceIoClient * client, uint32_t id, const struct HdfSBuf * data)
1、头文件
drivers/framework/include/core/hdf_device_desc.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga9c47da8d82820bce2d32051324480f45
回收缓冲区所占的内存空间。
void HdfSBufRecycle (struct HdfSBuf * sbuf)
1、头文件
drivers/framework/ability/sbuf/include/hdf_sbuf.h
2、官方文档
https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gaa0041d238cfc7cf00779191aa58e7ee0
根据设备配置文件的类型(参数type
,见3.2节),取得HDF创建的那个DeviceResourceIface
结构体(见1.9节)的地址。
struct DeviceResourceIface *DeviceResourceGetIfaceInstance(DeviceResourceType type)
1、头文件
drivers/framework/include/config/device_resource_if.h
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/driverconfig-0000001055678040#ZH-CN_TOPIC_0000001055678040__gabfbfb1ffec32f04e8f3660eadb7677a0
根据驱动服务的名称(参数serviceName
),获得一个驱动服务对象,一个指向HdfIoService
结构体(见1.10节)的指针。正常情况下,函数返回值是指向这个结构体的指针;否则,返回一个空指针NULL
。
struct HdfIoService* HdfIoServiceBind (const char * serviceName)
1、头文件
drivers/framework/include/core/hdf_io_service_if.h:228
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga31198b68423805193274d3973c178ab5
注册驱动事件监听器。第1个参数target
:指向驱动服务对象的指针(见1.10节);第2个参数listener
:指向驱动事件监听器(结构体HdfDevEventlistener
,见1.12节)的指针。如果注册成功,返回值为0;否则,返回值是负值。
int HdfDeviceRegisterEventListener(struct HdfIoService *target, struct HdfDevEventlistener *listener)
1、头文件
drivers/framework/include/core/hdf_io_service_if.h
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gaa7855b3930b5378954927548e5623663
释放HdfIoService
结构体占用的资源。
void HdfIoServiceRecycle (struct HdfIoService * service)
1、头文件
drivers/framework/include/core/hdf_io_service_if.h
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gada2867af690aac9e6c3b2c8812b3037c
注销驱动事件监听器。第1个参数target
:指向驱动服务对象的指针(见1.10节);第2个参数listener
:指向驱动事件监听器(结构体HdfDevEventlistener
,见1.12节)的指针。如果注销成功,返回值为0;否则,返回值是负值。
int HdfDeviceUnregisterEventListener(struct HdfIoService *target, struct HdfDevEventlistener *listener)
1、头文件
drivers/framework/include/core/hdf_io_service_if.h
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gab95668359f0b6a47f48c47541caed7fd
根据驱动服务的名称(参数svcName
),获得驱动服务对象,一个指向HdfObject
结构体(见1.6节)的指针。这个指针实际上也指向IdeviceIoService
结构体(见1.3节),因为IdeviceIoService
结构体的第一个成员就是HdfObject
结构体。如果有自定义的驱动入口结构体,这个指针同时也指向自定义的驱动入口结构体,因为自定义的驱动入口结构体的第一个成员必须是IdeviceIoService
结构体。
这个函数与函数HdfIoServiceBind
(见2.9节)的区别:
const struct HdfObject* DevSvcManagerClntGetService (const char * svcName)
1、头文件
drivers/framework/include/core/hdf_device_desc.h:247
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__gab28c6481fc79bd055e2551abebb841bf
订阅驱动服务。第1个参数:指向HdfDeviceObject
结构体(见1.2节)的指针;第2个参数:驱动服务的名称;第三个参数:SubscriberCallback
结构体(见1.13节)。如果订阅成功,返回值是0。
int32_t HdfDeviceSubscribeService (struct HdfDeviceObject * deviceObject, const char * serviceName, struct SubscriberCallback callback )
1、头文件
drivers/framework/include/core/hdf_device_desc.h:275
2、官方文档
https://device.harmonyos.com/cn/docs/develop/apiref/core-0000001054718073#ZH-CN_TOPIC_0000001054718073__ga224908f55daa1b9553841735e5f1f65c
下一篇: 《HDF驱动框架的API》(3)