This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/TRF7970A:无法通过 neard 关闭电源。

Guru**** 2551110 points
Other Parts Discussed in Thread: TRF7970A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/620758/linux-trf7970a-unable-to-power-off-through-neard

器件型号:TRF7970A

工具/软件:Linux

你(们)好。

我目前正在使用 Neard 在 C++应用程序中与 TRF7970a 连接。 我使用低级 dbus API 与 NFC 总线通信。 到目前为止、我可以执行我需要的所有操作(开始/停止轮询、从标签读取/写入)、但关闭适配器电源除外(我可以读取适配器电源状态良好并可以打开电源、我只是无法关闭)。

适配器 NFC API 具有适配器供电属性、因此我使用 org.freedesktop.DBus 接口的 Set 方法来设置通过 NFC 总线的通电/断电。

用于执行此操作的代码如下所示:

int setBoolProperty (DBusConnection *连接、const char*属性、const int 值、DBusError *错误)
{
DBusMessage *queryMessage =空;
DBusMessage *replyMessage =空;
DBusMessageIter ITER;
DBusMessageIter 子项;

如果(值!= 0 &&值!= 1)
{
printf ("不是有效的布尔类型。\n");
返回-1;
}

queryMessage = dbus_message_new_method_call ("org.neard"、
"/org/neard/nfc0 "、
" org.freedesktop.DBus.Properties"、
"设置");

//将参数附加到 set()方法。 (字符串接口、字符串属性、值)
dbbus_message_iter_init_append (queryMessage、&iter);

dbas_message_iter_append_basic (&iter、DBUS_TYPE_string、&adapterName);
dbas_message_iter_append_basic (&iter、DBUS_TYPE_string、&property);

dbus_message_iter_open_container (&itER、DBUS_TYPE_变体、DBUS_TYPEOLED_AS_string、⊂);
//设置 bool 值。
dbus_message_iter_append_basic (⊂、DBUS_type_Boolean、&value);

dbus_message_iter_close_container (&iter、⊂);

replyMessage = dbus_connection_send_wo_reply_and_block (连接、
查询消息、
1000、
错误);

dbbus_message_unef (queryMessage);
ABORT_ON_ERROR (错误);
dbbus_message_nREF (replyMessage);

返回0;
} 

每当我尝试关闭电源时、我首先停止轮询(在 org.neard.Adapter 接口上使用 StopPollLoop 方法)。 然后、我将 Powered 属性设置为0。 收到消息后、我从 dbus 收到"Unknown error -16 (未知错误-16)"、电源状态不变。 我希望我缺少一些简单的东西、并希望有人能够对可能导致此问题的原因有一定的了解。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    解决了这个问题。 事实上、我意外地调用了与 StartPollLoop 相同的 StopPollLoop、也就是说、即使 StopPollLoop 方法没有任何参数、我也传递了一个参数。 因此、在尝试断电之前、我实际上没有停止轮询、这导致了未知错误-16。 在我调用没有参数的 StopPollLoop 方法后、事情开始按预期工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您分享。

    此致、
    Yordan