> 文档中心 > HDF驱动框架的API(2)

HDF驱动框架的API(2)


引言

为了方便查阅,本文汇集了我在学习鸿蒙驱动子系统过程中,曾经遇到过的HDF驱动框架提供的API。 同时,还加入了一些对这些API的个人理解和解读。

另外,大家也可以去阅读这些API的源码或官方文档:

https://device.harmonyos.com/cn/docs/documentation/apiref/core-0000001054718073  

二、接口函数

2.1 HdfSbufReadUint8

从缓冲区(第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

2.2 HdfSbufWriteUint8

向缓冲区(第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

2.3 HdfSBufObtainDefaultSize

创建一个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

2.4 HdfSbufWriteString

向缓冲区(第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

2.5 HdfDeviceSendEvent

驱动程序上报事件(消息),所有用户态应用程序都可以监听并接收到。第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

2.6 HdfDeviceSendEventToClient

驱动程序上报事件(消息)给指定的客户端对象(第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

2.7 HdfSBufRecycle

回收缓冲区所占的内存空间。

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

2.8 DeviceResourceGetIfaceInstance

根据设备配置文件的类型(参数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

2.9 HdfIoServiceBind

根据驱动服务的名称(参数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

2.10 HdfDeviceRegisterEventListener

注册驱动事件监听器。第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

2.11 HdfIoServiceRecycle

释放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

2.12 HdfDeviceUnregisterEventListener

注销驱动事件监听器。第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

2.13 DevSvcManagerClntGetService

根据驱动服务的名称(参数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

2.14 HdfDeviceSubscribeService

订阅驱动服务。第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

书本网