2016-06-27 16 views
1

私はPiでGPSDとC++の統合を使用しようとしています。私がGPSMONを実行すると、私は問題なしで完全な修正があることを確認することができますが、私のC++プログラムではモード0の修正が得られます。これは "MODE UPDATE NOT SEEN YET"を意味します。libgpsmmでモード0を指定するGPSD

ソケット接続時にプログラムのエラーが発生していないため、何が原因で接続が切断されているのかわかりません。

+0

あなたは 'を照会した場合、あなたは何を得るのだろうデバイス;'?または?バージョン?;? – Nodak

答えて

0

あなたがlibgpsとlibgpsmmを使用しているとします。あなたの問題は、gpsdデーモンとlibgpsの間のバージョンの非互換性によって引き起こされる可能性があります。 I.クライアント(libgps)は、gpsdデーモンとは異なるバージョンの「APIプロトコル」gpsd_jsonを使用している可能性があります。 が正確にではない静的バージョンのlibgpsを、gpsdのバージョン番号と一致するように構築/リンクすることを決めた場合に発生する可能性があります。または、クライアントがgpsdサーバとは異なるマシンで動作している場合

同じ問題が発生したため、理由を理解するのに貴重な時間がかかりました。
libgpsのJSONパーサーがひどく設計されています。これは先験的に知られていない名前と値のペアを含むJSONオブジェクトを無視/破棄します。
gpsdからのTPVメッセージ全体が破棄され、クライアント実装にエラーメッセージが表示されず、libgps関数はエラーコードを返しません。残念な。

ここでは、(json.c、ライン296+、2016年7月27日@)です:

if (cursor->attribute == NULL) { 
     json_debug_trace((1, 
       "Unknown attribute name '%s' (attributes begin with '%s').\n", 
       attrbuf, attrs->attribute)); 
     /* don't update end here, leave at attribute start */ 
     return JSON_ERR_BADATTR; 
    } 

そして、ここで(2016年7月27日@libgps_json.c、ライン27+):

static int json_tpv_read(const char *buf, struct gps_data_t *gpsdata, const char **endptr) 
{ 
    const struct json_attr_t json_attrs_1[] = { 
     {"class", t_check, .dflt.check = "TPV"}, 
     {"device", t_string, .addr.string = gpsdata->dev.path, .len = sizeof(gpsdata->dev.path)}, 
     {"time", t_time, .addr.real = &gpsdata->fix.time, .dflt.real = NAN}, 
     ... 

level>=6で使用_gpsmm->enable_debug(level, stderr)とlibgpsをコンパイルし、 libgpsmmをdefine CLIENTDEBUG_ENABLEに設定して、デバッグトレース出力を取得します。 GPSD源の

のgit repositioryは私たちにgpsd_jsonプロトコルに関する最近の互換性のない変更の日付を告げる:

Gitはコミット:
2016年4月7日DGPS通知
2016用のTPVに "ステータス" を追加します。 -01-04サバンナのバグ#46804のアドレス:JSONサテライトビューの解析はやや壊れています。
2015-04-04 PPS精度のクライアントライブラリ解析を追加します。
2015-01-24クライアントライブラリでは、 "dip"メンバがATT解析から欠落していました。

リリース:
3.11 23 - 8月 - 2014
3.12 22 - 2月 - 2015 互換性のない
3.13 26 - 2月 - 2015
3.14 14日 - 3月 - 2015
3.15 03 - 6月 - 2015 互換性がありません
3.16 08-Jan-2016 互換性なし
3。17 XX-XXX-XXXX 互換性のない

GPSD開発者は、バージョン間でのクライアント・サーバとの互換性を気にしないのですか?共有libgpsライブラリのバイナリAPI/ABIの安定性はどうですか? バージョン管理機能がありません。非常に安全でもない。
(前述した2015年4月4日の変更にコメントをgitのコメントを見てください:データは現在、次のgps_data_t構造ブレイク保留、廃棄され。)

関連する問題