你好,
我们有一个外设解决方案,其中DA14580连接在UART到我们的微控制器。DA14580查询用于GATT特性的值,控制器读/从中央写请求。
我们赶上读(ATTS_READ_REQ_IND)和写(GATTC_WRITE_CMD_IND)在user_catch_rest_hndl事件()
有没有用,我们可以阻止,直到我们得到来自控制器的响应在UART的读或写请求,然后把从user_catch_rest_hndl响应机制()
总之,我们需要传送user_catch_rest_hndl读/写请求(),等到收到响应(UART中断),然后从user_catch_rest_hndl发送响应数据()。能否请你让我们知道如何才能做到这一点。任何指针,实例将是有益的。
谢谢,
Hrishikesh
设备:
嗨dhrishi,
我不太理解用例,你提到580是附加到外部MCU(我认为这是你所说的控制器的意思),控制器提供了特性的值。
那么,上述情况descibe你想做些什么?
由于MT_dialog
是的。确切地。这是正确的。
我们如何做
嗨dhrishi,
没有例子,你正在做什么,因为数据库的值是保持在内部数据库的580,我也不太确定块,你提到,因为一旦你得到指示(一个中心已经读或写了一个特征),SDK就会报告给应用程序,这取决于你要做什么。据我所知,关于你想要做什么,BLE规范中使用的大多数命令都是顺序的,这意味着大多数的命令(包括读请求和写请求)当中央他们应该出具确认外围这意味着中央无能为力发送一个额外的请求如果多恩得不到回应前面的命令(这请求/响应计划就像一个祝福的流控制协议实现)。所以你可以读或写请求的指示,抓住他们的catch_rest功能,开始你的UART事务,中央不会发出任何额外的请求,直到你发送一条确认消息,所以一旦你的UART事务完成可以发送确认链接的另一边。还请注意,并不是所有的命令按照请求/响应计划,例如写命令无响应(写)将触发你的迹象但是中央不会等待响应,它仍然可以发出一个额外的命令在处理之前,需要一个额外的流量控制方案。
因此,基于上述,您可以通过UART时写指示写发生,当读指示来自中央从UART读取。对于发送的值,你已经从UART读,因为我已经在不同的文章中提到,你不能只是发送值已通过UART直接获得,但你必须在内部数据库中设置的值,只要你有读指示,然后发送确认的读取。所以在读取接收触发的UART交易调用,以便设置在数据库中的值,然后dg_atts_read_cfm的attmdb_att_set_value()()送价值。
此外,要知道,当你从UART读,你必须保持清醒,所以为了不眠有XTAL16。
由于MT_dialog
我已经在我的implementation.My关注有attmdb_att_set_value()和dg_atts_read_cfm()是,当ATTS_READ_REQ_IND将在user_catch_rest_hndl()被接收,我必须先发送请求到在UART外部MCU来获取特征值和上的数据的接收,调用上述两个功能。对?
现在,从外部MCU的UART响应将从中断上下文。那么,如何才能让当前执行的线程在user_catch_rest_hndl()要等到适当的响应,从外部MCU接收。否则它会通过调用调用上面的垃圾/不正确的值两个函数和读取响应中央是不正确的返回。
总之,我们应该等到从UART响应(从中断上下文中)被接收,同样是保存在GATT数据库,然后将读确认发送出去。
嗨dhrishi,
是的,这我在想什么,得到的指示,启动UART交易,获取数据,并与由UART得到的值发送确认。
580不是一个基于线程的系统,它只是有一个调度程序,每当rwip_schedule()函数从主循环运行时,调度消息并执行相应的回调。所以你可以试试是什么,一旦你得到阅读指示,启动UART事务或设置的UART接收数据从外部单片机(这取决于你的实现和交互将如何),要么离开catch_rest处理程序(通过设置一个读取中断)或呆在那里(执行UART transastion,在这种情况下,你不能停留在你想要执行UART事务,因为你会开始丢失BLE事件,最终你会断开连接,因为你不会执行调度函数,因为你不会通过主循环),只要交互完成。当UART中断到达或事务完成时,只需向客户端发送确认消息。
由于MT_dialog