我正在尝试让 DataLogger 和 Logbook 在movesense 设备上工作。我正在尝试做的是与这个问题中提出的类似/延续。当我在设备连接时配置我的服务时,我想等待 DataLogger 启动(返回状态代码 200),然后再继续执行我的其余代码。
作为 onSubscribe() 函数的一部分,我执行以下代码来配置 DataLogger:
WB_RES::DataLoggerConfig logConfig;
WB_RES::DataEntry entry;
WB_RES::DataLoggerStateValues::Type logState = WB_RES::DataLoggerStateValues::Type::DATALOGGER_LOGGING;
entry.path = <pathToService>;
<del>logConfig.dataEntries.dataEntry= {entry}; </del>
logConfig.dataEntries.dataEntry = whiteboard::MakeArray<WB_RES::DataEntry>(&entry, 1);
result = asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_CONFIG(), AsyncRequestOptions::Empty, logConfig);
我在这个命令之后得到的状态码是 202 Accepted。我从上一个问题中了解到,我需要检查这个函数在 onPutResult() 函数中是否返回返回码 200。
这是我做的
switch(resourceId.localResourceId)
{
case WB_RES::LOCAL::MEM_DATALOGGER_CONFIG::LID:
{
if(resultCode == whiteboard::HTTP_CODE_OK)
{
asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_STATE(), AsyncRequestOptions::Empty,WB_RES::DataLoggerStateValues::Type::DATALOGGER_LOGGING);
}
}
break;
再次在 onPutResult() 中,我使用这段代码检查数据记录器是否设置为正确状态
case WB_RES::LOCAL::MEM_DATALOGGER_STATE::LID:
{
if(resultCode == whiteboard::HTTP_CODE_OK)
{
// Boolean variable that indicate that the dataLogger is running.
DataLoggerRunning = true;
}
else
{
DEBUGLOG("onPutResult::MEM_DATALOGGER_STATE::
SomethingIsNotRight");
}
}
break;
现在我想在启动我的服务之前检测变量 DataLoggerRunning 是否为真。这是我有点迷茫的地方,我尝试在一个while循环中等待,并在movesense-device-lib中寻找一个睡眠函数(没有运气),希望在等待数据记录器时不会崩溃代码开始。while 循环导致了一个无限循环,我假设如果我能找到一个 sleep 函数也会阻塞。
这是错误的方法还是我在正确的轨道上,如果有帮助,我们将不胜感激。
编辑:更新了添加数据记录器路径的代码。如果使用旧代码,我们将得到 404 not found 路径。