我希望在我的自定义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,timestamp,然后是whiteboard数据对象?或者我们必须自己生成这些产品吗?
答案 0 :(得分:3)
你的基本想法是正确的,但有一些细节有点偏。
首先划分两个组件, DataLogger 和 Logbook :
DataLogger 通过订阅 / Mem / DataLogger / Config 中给出的路径,然后存储这些订阅的通知(不需要做任何事情来工作) / Logbook / Entries)。
简单流程:
---记录发生在这里---
但是代码中有一些细节错误。 Config和State PUT操作的结果来自 onPutResult()回调。因此,为确保配置正确,必须在/ Config PUT的回调中获得status = 200后触发状态更改。
对于可以记录的内容也存在一些限制。主要是:
要了解通知值对象如何存储到EEPROM中,请参阅 /generated/sbem-code/sbem_definitions.cpp 。如果您的类型没有出现在那里,那么服务yaml中的某些内容就会阻止序列化。
试用DataLogger&amp; Logbook API请参阅movesense-mobile-lib存储库中的DataLoggerSample Android app。