如题,萌新一直卡在这个HDF框架这里,这个框架和linux的驱动还是有点不一样的。
先梳理一下框架,如有错,请指出

驱动层函数入口,定义了这个驱动的服务名称叫 sample_driver 然后用户层可以通过这个服务名称来获取到对应的驱动,

然后这里是驱动层绑定驱动函数的地方,HdfSampleDriverDispatch这个函数就是用来处理用户层下发的消息

#define SAMPLE_SERVICE_NAME "sample_service"
然后这里是用户层,也就是应用层的获取驱动的地方,用户通过这个服务名称来获取到对应的驱动

这里是用户层下发数据到应用层,这里的这个Dispatch应该就是上图的HdfSampleDriverDispatch函数,是这样吧
OK,如果我理解没有错的话,那么正常通过消息发送到驱动层,可以这样写:
serv->dispatcher->Dispatch(&serv->object, SAMPLE_WRITE_READ, data, reply);
SAMPLE_WRITE_READ是控制ID,比如SAMPLE_WRITE_READ = 1,对应的是打印字符串
那么在驱动层就通过一个判断来获取用户发过来的数据,
如果SAMPLE_WRITE_READ = 2 ,对应下发uint8类型的数据,那么代码可以这样

OK,到这里,如果框架思路正确的话,那我就有问题了
先看下官方文档

这里自定义了一个结构体,应该是用户自行实现的例子,实现了两个驱动子函数并封装在自定义结构体里边

然后将这个自定义的结构体注册到框架中,这里跟开头的绑定没有什么区别。
Q1:这么做应该是可以方便让用户在用户层可以动过这个服务框架获取到这个结构体的句柄,然后直接操作这些子函数,对吧?
那么如何获取?
方式1:

Q2:看到这里,按照一般人的思路,应该是我在用户层获取到了这个句柄,然后就操作这个子函数了,对吧?要不然,如果在驱动层使用的话,写个5传进去,没有意义。
方式2:

Q3: 这里订阅的获取,应该是用户层订阅的吧?如果是,那这段代码应该是在用户层代码出现的吧?
OK,那么,我如何在用户层获取呢?官方能给个例子?一个例子应该用不了太多时间吧
然后现在这样的,按照上面的获取服务的思路,我在用户层代码的main函数中调用了这个函数会报错

会报错,错误是无法找到这个DevSvcManagerClntGetService函数,
Q4: 这个函数是不是只在内核态也就是驱动层有效?
Q5:当明确驱动已经加载完成时,(获取方式1)获取该驱动的服务可以通过HDF框架提供的能力接口直接获取,这里的明确加载完成是如何判断的? (获取方式2) 当对驱动(同一个host)加载的时机不感知时,可以通过HDF框架提供的订阅机制来订阅该驱动,怎么理解这个加载时机不感知?
Q6:如果使用回调函数来获取,那我如何实现?
Q7:以上所有问题,希望能提供一个例子,结合例子,才能更加理解这个框架,谢谢!
我之前问过一次,但是还是有点困惑,希望能详细解答,谢谢





























你看,这都是已经设置了的












苏公安网备 32011402010933号