0

movesense デバイスで DataLogger と Logbook を動作させようとしています。私がやろうとしているのは、この質問で尋ねられていることと同様/継続です。デバイスが接続しているときにサービスを構成しているとき、残りのコードの実行を続行する前に、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 が true かどうかを検出したいと考えています。これは私が少し迷っているところです。データロガーを待っている間にコードがクラッシュしないことを期待して、while ループで待機し、movesense-device-lib でスリープ機能を探してみました (運がなかった)。始めること。while ループの結果、無限ループが発生しました。sleep 関数が見つかった場合は、sleep 関数もブロックされていると思います。

これは間違ったアプローチですか、それとも私は正しい軌道に乗っていますか?もしそうなら、進歩を助けていただければ幸いです。

編集:データロガーへのパスを追加するための更新されたコード。古いコードを使用すると、パスに対して 404 not found が返されます。

4

1 に答える 1