5

我希望在我的自定义 movesense 固件中将日志记录集成到 EEPROM。阅读日志服务上的文档,我已经验证了我的日志系统配置了我的自定义白板对象,并且启用了日志记录(日志记录状态设置为 3),代码如下:

WB_RES::DataLoggerConfig dConfig;
WB_RES::DataEntry dEntry, dEntry1;
WB_RES::DataLoggerStateValues::Type dlstate = WB_RES::DataLoggerStateValues::Type::DATALOGGER_LOGGING;

dEntry.path = "/App/Object1";
dEntry1.path = "/App/Object2";
dConfig.dataEntries.dataEntry = {dEntry, dEntry1};

result = asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_CONFIG(), AsyncRequestOptions::Empty, dConfig);
if(!wb::RETURN_OKC(result))
  DebugLogger::info("asyncPut::datalogger config threw error: %u", result);

result = asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_STATE(), AsyncRequestOptions::Empty, dlstate);
if(!wb::RETURN_OKC(result))
  DebugLogger::info("asyncPut::datalogger start threw error: %u", result);

我在yaml文件中配置的白板对象路径为:

paths: /App/Object1/Subscription:
  <blah, post/delete actions defined>
paths: /App/Object2/Subscription:
  <blah, post/delete actions defined>

首先,在让 movesense 固件记录这些白板对象时,这是否正确?yaml文件中定义的白板路径和我们在代码中配置的数据输入路径是什么关系?它们必须完全匹配吗?

其次,如果我有上述正确的,那么当我向订阅的消费者发布通知时会自动记录条目(当前在 onNotify() 方法中完成),还是我必须创建一个特定的 wb::LogEntry 对象,然后填充它,然后对 MEM_LOGBOOK_ENTRIES() 目标执行 asyncPost,如下所示:

wb::LogEntry foo;
result = asyncPost(WB_RES::LOCAL::MEM_LOGBOOK_ENTRIES(), AsyncRequestOptions::Empty, foo);

如果是这种情况,它们是否有任何帮助函数来帮助填充 wb::LogEntry 对象,因为看起来您需要一个 id、时间戳,然后是白板数据对象?还是我们必须自己生成这些?

4

1 回答 1

4

您的基本想法是正确的,但有些细节有点偏离。

首先划分两个组件,DataLoggerLogbook

  • DataLogger负责将数据存储到 EEPROM 存储器中
  • 日志可用于从 EEPROM 存储器中读取数据(并将其擦除为干净状态)

DataLogger的工作方式是订阅/Mem/DataLogger/Config中给出的路径,然后存储这些订阅的通知(无需对 /Logbook/Entries 执行任何操作)。

简单流程:

  1. PUT 路径以记录到/Mem/DataLogger/Config
  2. PUT 3 到/Mem/DataLogger/State开始记录

--- 记录发生在这里 ---

  1. PUT 2 到/Mem/DataLogger/State以停止记录

但是,您的代码中有一些细节错误。Config 和 State PUT 操作的结果来自onPutResult()回调。因此,为了确保配置正确,您必须在 /Config PUT 的回调中获得 status = 200 后触发状态更改。

此外,可以记录的内容也有一些限制。主要是:

  • 如果有多个数组,它们的长度必须相同(如 /Meas/IMU9)
  • 不支持字符串

要查看通知值对象如何存储到 EEPROM 中,请参见/generated/sbem-code/sbem_definitions.cpp。如果您的类型没有出现在那里,那么您的服务 yaml 中的某些内容正在阻止序列化。

要试用 DataLogger 和 Logbook API,请参阅movesense-mobile-lib 存储库中的DataLoggerSample Android 应用程序。

于 2018-05-24T06:49:03.830 回答