GPSD_JSON(5) مستندات GPSD GPSD_JSON(5)

gpsd_json - پروتکل درخواست و پاسخ gpsd

برنامه gpsd یک دیمن سرویس است که می‌تواند برای نظارت بر گیرنده‌های GPS، گیرنده‌های DGPS، پخش‌های سامانه شناسایی خودکار دریایی (Marine AIS) و حسگرهای گوناگون دیگر مربوط به موقعیت‌یابی و کینماتیک مورد استفاده قرار گیرد.

کلاینت‌ها می‌توانند از طریق درخواست‌ها و پاسخ‌های متنی بر بستر یک سوکت با gpsd ارتباط برقرار کنند. ارتباط مستقیم برنامه‌ها با این پروتکل ایده مناسبی نیست؛ در عوض، آن‌ها باید از کتابخانه کلاینت libgps (برای C؛ اتصالات برای زبان‌های دیگر نیز وجود دارد) استفاده کرده و با دقت در کد خود، نسخه‌های اصلی (major) و فرعی (minor) مورد انتظار پروتکل را بررسی کنند.

پروتکل GPSD بر پایه JSON (نشانه‌گذاری اشیاء جاوااسکریپت)، مطابق با مشخصات [RFC-7159] (قالب تبادل داده نشانه‌گذاری اشیاء جاوااسکریپت)، مشابه با ECMA 404 ساخته شده است.

استفاده GPSD از JSON به روش‌هایی محدود شده است که تجزیه آن را در زبان‌هایی با دامنه ایستا (مانند C) آسان‌تر می‌کند.

یک خط درخواست با علامت «?» آغاز می‌شود و می‌تواند شامل چندین دستور باشد. دستورها با یک شناسه دستور شروع می‌شوند که پس از آن یا یک نویسه پایانی ';' می‌آید یا یک علامت مساوی «=» و یک شیء JSON که به عنوان آرگومان در نظر گرفته می‌شود. هرگونه ';' یا نویسه خط جدید (LF یا CR-LF) پس از پایان یک دستور نادیده گرفته می‌شود. تمامی خطوط درخواست باید از نویسه‌های US-ASCII تشکیل شده باشند و طول آن‌ها بدون احتساب خط جدید پایانی، نباید بیش از ۸۰ نویسه باشد.

پاسخ‌ها اشیاء تکی JSON هستند که دارای یک ویژگی «class» می‌باشند که مقدار آن نشان‌دهنده نوع شیء است. انواع شیء شامل «TPV»، «SKY»، «DEVICE» و «ERROR» می‌شوند، اما محدود به این موارد نیستند. اشیاء هم در پاسخ به دستورها و هم به‌صورت دوره‌ای هنگام ارسال گزارش‌های gpsd فرستاده می‌شوند. هر شیء با نویسه‌های بازگشت به ابتدای سطر و خط جدید (CR-NL) پایان می‌یابد.

ترتیب ویژگی‌های JSON درون یک شیء پاسخ هرگز دارای اهمیت نیست و شما می‌توانید ویژگی‌های دستور را به هر ترتیبی مشخص کنید. پاسخ‌ها هرگز حاوی مقدار ویژه JSON یعنی null نیستند؛ در عوض، ویژگی‌های با مقادیر خالی یا تعریف‌نشده حذف می‌شوند. محدودیت طول برای پاسخ‌ها و گزارش‌ها در حال حاضر ۱۰۲۴۰ نویسه با احتساب CR-NL پایانی است. پاسخ‌های طولانی‌تر بریده خواهند شد، بنابراین کد کلاینت باید برای احتمال دریافت قطعات ناقص JSON آماده باشد.

حداکثر طول پیش‌فرض پیام توسط GPS_JSON_RESPONSE_MAX در فایل include/gpsd_json.h در زمان کامپایل تنظیم می‌شود.

در گزارش‌های JSON، اگر وجود یک ویژگی مشروط به وجود ویژگی والد یا قرار داشتن آن در یک محدوده خاص باشد، ویژگی والد ابتدا صادر می‌شود.

یک قید در مورد ترتیبی که ویژگی‌ها حذف می‌شوند وجود دارد: اگر یک ویژگی اختیاری تنها در صورتی وجود داشته باشد که ویژگی والد دارای مقدار یا محدوده‌ای از مقادیر مشخص باشد، ویژگی والد ابتدا صادر خواهد شد تا تجزیه آن آسان‌تر شود.

بخش بعدی پروتکل اصلی GPSD را مستند می‌کند. افزونه‌ها در بخش‌های پس از آن مستند شده‌اند. اگر نمونه gpsd شما با مجموعه‌ای محدود از ویژگی‌ها کامپایل شده باشد، ممکن است این افزونه‌ها پشتیبانی نشوند.

این پروتکل توسط اریک اس. ریموند (Eric S. Raymond) طراحی و مستند شده است.

پاسخ‌های پروتکل اصلی در ادامه آمده است:

شیء TPV یک گزارش زمان-موقعیت-سرعت (time-position-velocity) است. فیلدهای «class» و «mode» به‌طور مطمئن همیشه وجود خواهند داشت. هنگامی که «mode» برابر با 0 (نامشخص) باشد، احتمالاً هیچ داده قابل استفاده‌ای در جمله وجود ندارد. بقیه فیلدها اختیاری هستند و حضور آن‌ها به داده‌هایی که گیرنده GNSS ارسال کرده و آنچه gpsd ممکن است از آن داده‌ها محاسبه کند بستگی دارد.

یک شیء TPV معمولاً حداقل یک بار برای هر دوره اندازه‌گیری (epoch) که توسط فیلد «time» تعیین می‌شود، ارسال خواهد شد. مگر اینکه گیرنده یک تثبیت موقعیت (fix) پایدار داشته باشد و از ثانیه کبیسه جاری مطلع باشد، ممکن است مقدار زمان تصادفی باشد.

اغلب در هر دوره چندین شیء TPV ارسال می‌شود. هنگامی که گیرنده داده‌ها را به مرور و قطره‌چکانی به gpsd می‌دهد، gpsd چاره‌ای ندارد جز اینکه آن را در چندین پیام TPV به کلاینت منتقل کند.

فیلد اختیاری «status» (نوع تثبیت)، یک توصیف‌کننده برای mode است. این فیلد جایگزین یا فرامجموعه‌ای از فیلد «mode» نیست. این مقدار تقریباً (اما نه کاملاً) مشابه مقادیر شاخص کیفیت GPS در NMEA 4.x xxGGA است. بسیاری از گیرنده‌های GNSS آن را ارائه نمی‌دهند. آن‌هایی هم که ارائه می‌دهند، مشخصات را به روش‌های ناسازگار مختلفی تفسیر می‌کنند. برای صرفه‌جویی در فضای خروجی و جلوگیری از سردرگمی، JSON هرگز شامل مقادیر وضعیت 0 یا 1 نمی‌شود.

تمام تخمین‌های خطا (epc, epd, epe, eph, ept, epv, epx, epy) با اطمینان ۹۵٪ حدس زده می‌شوند، اما ممکن است اطمینان ۵۰٪، یک سیگما یا دو سیگما نیز باشند. بسیاری از گیرنده‌های GNSS سطح اطمینان را مشخص نمی‌کنند و هیچ‌کدام نحوه محاسبه مقدار را مشخص نمی‌سازند. از تخمین‌های خطا با احتیاط و صرفاً به عنوان نشانگرهای نسبی «کیفیت» استفاده کنید. اگر GPS مقداری را به gpsd گزارش دهد، gpsd همان مقدار را گزارش خواهد کرد؛ در غیر این صورت gpsd تلاش می‌کند مقدار را از نمای آسمان محاسبه کند.

برای یادداشت‌های تکمیلی در مورد موارد و مقادیر موجود در پیام TPV، به فایل include/gps.h، به‌ویژه struct gps_data_t مراجعه کنید.

جدول ۱. شیء TPV

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "TPV"
device خیر string نام دستگاه مبدا.
mode بله numeric حالت NMEA: 0=نامشخص، 1=بدون تثبیت، 2=دوبعدی (2D)، 3=سه‌بعدی (3D).
alt خیر numeric منسوخ شده. تعریف‌نشده. از altHAE یا altMSL استفاده کنید.
altHAE خیر numeric ارتفاع، بلندی از روی بیضی‌گون مبنا بر حسب متر. احتمالاً WGS84.
altMSL خیر numeric ارتفاع از سطح متوسط دریا (MSL) بر حسب متر. ژئوئید استفاده شده به ندرت مشخص می‌شود و اغلب نادقیق است. توضیحات زیر در مورد geoidSep را ببینید. مقدار altMSL برابر است با altHAE منهای geoidSep.
ant خیر numeric وضعیت آنتن: 2=اتصال کوتاه، 3=مدار باز.
antPwr خیر numeric وضعیت برق آنتن: 0=نامشخص، 1=خاموش، 2=روشن.
climb خیر numeric نرخ صعود (مثبت) یا فرود (منفی) بر حسب متر بر ثانیه.
clockbias خیر numeric انحراف ساعت محلی GNSS نسبت به UTC بر حسب نانوثانیه. همچنین با نام انحراف ساعت (Clock Offset) شناخته می‌شود. گاهی به عنوان بخش در میلیارد (ppb) ارائه می‌شود که معادل نانوثانیه است.
clockdrift خیر numeric نرخ رانش ساعت محلی بر حسب ns/s.
datum خیر string مبدأ مختصاتی (Datum) جاری. ترجیحاً WGS84.
depth خیر numeric عمق بر حسب متر. احتمالاً عمق زیر تیر اصلی کف کشتی (keel)...
dgpsAge خیر numeric سن داده‌های DGPS بر حسب ثانیه.
dgpsSta خیر numeric ایستگاه داده‌های DGPS.
ecefx خیر numeric موقعیت X در مختصات ECEF بر حسب متر.
ecefy خیر numeric موقعیت Y در مختصات ECEF بر حسب متر.
ecefz خیر numeric موقعیت Z در مختصات ECEF بر حسب متر.
ecefpAcc خیر numeric خطای موقعیت ECEF بر حسب متر. قطعیت نامشخص.
ecefvx خیر numeric سرعت X در مختصات ECEF بر حسب متر بر ثانیه.
ecefvy خیر numeric سرعت Y در مختصات ECEF بر حسب متر بر ثانیه.
ecefvz خیر numeric سرعت Z در مختصات ECEF بر حسب متر بر ثانیه.
ecefvAcc خیر numeric خطای سرعت ECEF بر حسب متر بر ثانیه. قطعیت نامشخص.
epc خیر numeric تخمین خطای صعود بر حسب متر بر ثانیه. قطعیت نامشخص.
epd خیر numeric تخمین خطای مسیر (جهت) بر حسب درجه. قطعیت نامشخص.
eph خیر numeric تخمین خطای موقعیت افقی (2D) بر حسب متر. همچنین با عنوان تخمین خطای موقعیت (epe) شناخته می‌شود. قطعیت نامشخص.
eps خیر numeric تخمین خطای سرعت بر حسب متر بر ثانیه. قطعیت نامشخص.
ept خیر numeric تخمین خطای برچسب زمان بر حسب ثانیه. قطعیت نامشخص.
epx خیر numeric تخمین خطای طول جغرافیایی بر حسب متر. قطعیت نامشخص.
epy خیر numeric تخمین خطای عرض جغرافیایی بر حسب متر. قطعیت نامشخص.
epv خیر numeric تخمین خطای عمودی بر حسب متر. قطعیت نامشخص.
geoidSep خیر numeric جدایی ژئوئید، تفاوت بین بیضی‌گون مرجع WGS84 و ژئوئید (سطح متوسط دریا) بر حسب متر است. تقریباً هیچ گیرنده GNSS نحوه محاسبه ژئوئید خود را مشخص نمی‌کند. هنگامی که گیرنده جدایی ژئوئید را ارائه نمی‌دهد، gpsd ژئوئید را از یک جدول ۵×۵ درجه‌ای از مقادیر EGM2008 درون‌یابی می‌کند. مقدار geoidSep محاسبه‌شده توسط gpsd معمولاً با مقدار «واقعی» اختلافی در حد یک متر دارد، اما ممکن است تا ۱۲ متر نیز خطا داشته باشد.
jam خیر numeric شاخص پارازیت (Jamming) 0 (بدون پارازیت) تا 255 (پارازیت شدید). -1 به معنی تنظیم‌نشده است.
lat خیر numeric عرض جغرافیایی بر حسب درجه: +/- نشان‌دهنده شمال/جنوب است.
leapseconds خیر integer ثانیه‌های کبیسه جاری.
lon خیر numeric طول جغرافیایی بر حسب درجه: +/- نشان‌دهنده شرق/غرب است.
magtrack خیر numeric مسیر روی زمین بر حسب درجه مغناطیسی.
magvar خیر numeric تغییرات مغناطیسی بر حسب درجه. همچنین با عنوان انحراف مغناطیسی (جهت مؤلفه افقی میدان مغناطیسی که در جهت عقربه‌های ساعت از شمال اندازه گرفته می‌شود) بر حسب درجه شناخته می‌شود؛ مقادیر مثبت نشان‌دهنده تغییرات به سمت غرب و مقادیر منفی نشان‌دهنده تغییرات به سمت شرق است.
relD خیر numeric مؤلفه پایین (Down) بردار موقعیت نسبی بر حسب متر.
relE خیر numeric مؤلفه شرق (East) بردار موقعیت نسبی بر حسب متر.
relN خیر numeric مؤلفه شمال (North) بردار موقعیت نسبی بر حسب متر.
sep خیر numeric تخمین خطای موقعیت کروی (3D) بر حسب متر. با اطمینان ۹۵٪ حدس زده می‌شود، اما از آنجا که بسیاری از گیرنده‌های GNSS آن را مشخص نمی‌کنند، قطعیت نامشخص است.
speed خیر numeric سرعت روی زمین بر حسب متر بر ثانیه.
status خیر numeric وضعیت تثبیت GPS: 0=نامشخص، 1=عادی، 2=DGPS، 3=RTK ثابت (Fixed)، 4=RTK شناور (Floating)، 5=DR، 6=GNSSDR، 7=زمان (نقشه‌برداری‌شده)، 8=شبیه‌سازی‌شده، 9=P(Y)
temp خیر numeric دمای گیرنده بر حسب درجه سلسیوس.
time خیر string برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. در صورتی که حالت 2D یا 3D نباشد ممکن است وجود نداشته باشد. اگر تثبیت موقعیت وجود نداشته باشد ممکن است موجود اما نامعتبر باشد. قبل از اطمینان از اینکه زمان UTC است، ۳ تثبیت 3D متوالی را بررسی کنید. حتی در آن صورت نیز ممکن است تا زمان مشخص شدن ثانیه‌های کبیسه جاری، چندین ثانیه خطا داشته باشد.
track خیر numeric مسیر روی زمین، درجه نسبت به شمال حقیقی.
velD خیر numeric مؤلفه سرعت به سمت پایین بر حسب متر.
velE خیر numeric مؤلفه سرعت به سمت شرق بر حسب متر.
velN خیر numeric مؤلفه سرعت به سمت شمال بر حسب متر.
wanglem خیر numeric زاویه مغناطیسی باد بر حسب درجه.
wangler خیر numeric زاویه نسبی باد بر حسب درجه.
wanglet خیر numeric زاویه واقعی باد بر حسب درجه.
wspeedr خیر numeric سرعت نسبی باد بر حسب متر بر ثانیه.
wspeedt خیر numeric سرعت واقعی باد بر حسب متر بر ثانیه.
wtemp خیر numeric دمای آب بر حسب درجه سلسیوس.

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت‌های اعتبار را در عضو set سطح بالا برای هر فیلد دریافت‌شده فعال می‌کند؛ برای نام‌ها و مقادیر ماسک بیتی به gps.h مراجعه کنید.

مقادیر ممیز شناور نامعتبر یا ناشناخته روی NAN تنظیم خواهند شد. همواره مقادیر ممیز شناور را پیش از استفاده با isfinite() بررسی کنید؛ تابع isnan() کافی نیست.

نمونه‌ای از یک جمله TPV:

{"class":"TPV","device":"/dev/pts/1",
    "time":"2005-06-08T10:34:48.283Z","ept":0.005,
    "lat":46.498293369,"lon":7.567411672,"alt":1343.127,
    "eph":36.000,"epv":32.321,
    "track":10.3788,"speed":0.091,"climb":-0.085,"mode":3}

شیء SKY نمایی از موقعیت‌های ماهواره‌های GPS در آسمان را گزارش می‌دهد. اگر هیچ دستگاه GPS در دسترس نباشد، یا هنوز هیچ نمای آسمانی گزارش نشده باشد، تنها فیلد «class» به‌صورت معتبر حضور خواهد داشت.

جدول ۲. شیء SKY

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "SKY"
device خیر string نام دستگاه مبدا
nSat خیر numeric تعداد اشیاء ماهواره در آرایه "satellites".
gdop خیر numeric کاهش دقت هندسی (ابرکُروی)، ترکیبی از PDOP و TDOP. یک ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید.
hdop خیر numeric کاهش دقت افقی، یک ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطای دایره‌ای به دست آید.
pdop خیر numeric کاهش دقت موقعیت (کُروی/3D)، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید.
pr خیر numeric شبه‌فاصله (Pseudorange) بر حسب متر.
prRate خیر numeric نرخ تغییر شبه‌فاصله بر حسب متر بر ثانیه.
prRes خیر numeric باقیمانده شبه‌فاصله بر حسب متر.
qual خیر numeric شاخص کیفیت 0=بدون سیگنال 1=در حال جستجوی سیگنال 2=سیگنال دریافت شد 3=سیگنال شناسایی شد اما غیرقابل استفاده است 4=قفل کد و زمان همگام‌سازی شده است 5, 6, 7=قفل کد و حامل و زمان همگام‌سازی شده است
satellites خیر list فهرست اشیاء ماهواره در نمای آسمان
tdop خیر numeric کاهش دقت زمانی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید.
time خیر string برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد.
uSat خیر numeric تعداد ماهواره‌های استفاده شده در محاسبات ناوبری.
vdop خیر numeric کاهش دقت عمودی (ارتفاع)، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید.
xdop خیر numeric کاهش دقت طولی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. همچنین به عنوان Northing DOP شناخته می‌شود.
ydop خیر numeric کاهش دقت عرضی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. همچنین به عنوان Easting DOP شناخته می‌شود.

بسیاری از دستگاه‌ها ضرایب کاهش دقت را محاسبه می‌کنند اما آن‌ها را در گزارش‌های خود لحاظ نمی‌نمایند. بسیاری از آن‌هایی هم که DOP را گزارش می‌دهند، تنها HDOP (خطای دایره‌ای دوبعدی) را گزارش می‌کنند. برنامه gpsd همیشه هر آنچه را که دستگاه گزارش دهد مستقیماً عبور می‌دهد و سپس تلاش می‌کند با محاسبه دترمینان‌های مناسب در ماتریس کوواریانس بر اساس نمای ماهواره‌ها، سایر مقادیر DOP را پر کند. اگر برخی از این دترمینان‌ها منفرد (singular) باشند، ممکن است مقادیر DOP وجود نداشته باشند. حتی ممکن است پیش بیاید که دستگاه یک تخمین خطا را بر حسب متر گزارش دهد در حالی که DOP متناظر در دسترس نیست؛ چرا که برخی دستگاه‌ها از مدل‌سازی خطای پیشرفته‌تری نسبت به محاسبات کوواریانس استفاده می‌کنند.

اشیاء فهرست ماهواره دارای عناصر زیر هستند:

جدول ۳. شیء ماهواره (Satellite)

نام همواره؟ نوع توضیحات
PRN بله numeric شناسه PRN ماهواره. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید.
az خیر numeric سمت (Azimuth)، درجه نسبت به شمال حقیقی.
el خیر numeric زاویه ارتفاع (Elevation) بر حسب درجه.
freqid خیر numeric تنها برای ماهواره‌های GLONASS: شناسه فرکانس سیگنال، مطابق با تعریف u-blox در محدوده 0 تا 13. مقدار freqid برابر با شماره اسلات فرکانس به علاوه ۷ است.
gnssid خیر numeric شناسه GNSS. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید.
health خیر numeric وضعیت سلامت این ماهواره؛ 0 نامشخص، 1 سالم و 2 ناسالم است.
ss خیر numeric نسبت سیگنال به نویز بر حسب dBHz.
sigid خیر numeric شناسه سیگنال این سیگنال. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید. بر اساس u-blox و نه NMEA. برای جزئیات به مستندات u-blox مراجعه کنید.
svid خیر numeric شناسه ماهواره (PRN) در منظومه خود. به بخش «PRNs» مراجعه کنید.
used بله boolean آیا در راه‌حل ناوبری جاری استفاده شده است؟ (ماهواره‌های SBAS/WAAS/EGNOS اگر تصحیحات آن‌ها در راه‌حل استفاده شده باشد ممکن است به عنوان استفاده‌شده نشانه‌گذاری شوند، اما همه درایورها این اطلاعات را ارائه نمی‌دهند.)

توجه داشته باشید که اشیاء ماهواره فاقد فیلد «class» هستند، زیرا هرگز خارج از یک شیء SKY ارسال نمی‌شوند.

هنگامی که کتابخانه کلاینت C یک پاسخ SKY را تجزیه می‌کند، بیت SATELLITE_SET را در عضو set سطح بالا فعال می‌سازد.

نمونه:

{"class":"SKY","device":"/dev/pts/1",
    "time":"2005-07-08T11:28:07.114Z",
    "xdop":1.55,"hdop":1.24,"pdop":1.99,
    "satellites":[
        {"PRN":23,"el":6,"az":84,"ss":0,"used":false},
        {"PRN":28,"el":7,"az":160,"ss":0,"used":false},
        {"PRN":8,"el":66,"az":189,"ss":44,"used":true},
        {"PRN":29,"el":13,"az":273,"ss":0,"used":false},
        {"PRN":10,"el":51,"az":304,"ss":29,"used":true},
        {"PRN":4,"el":15,"az":199,"ss":36,"used":true},
        {"PRN":2,"el":34,"az":241,"ss":43,"used":true},
        {"PRN":27,"el":71,"az":76,"ss":43,"used":true}]}

شیء GST یک گزارش نویز شبه‌فاصله است.

جدول ۴. شیء GST

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "GST"
device خیر string نام دستگاه مبدا
time خیر string برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد.
rms خیر numeric مقدار انحراف معیار ورودی‌های برد به فرآیند ناوبری (ورودی‌های برد شامل شبه‌فاصله‌ها و تصحیحات DGPS است).
major خیر numeric انحراف معیار نیم‌قطر بزرگ بیضی خطا بر حسب متر.
minor خیر numeric انحراف معیار نیم‌قطر کوچک بیضی خطا بر حسب متر.
orient خیر numeric جهت‌گیری نیم‌قطر بزرگ بیضی خطا، بر حسب درجه نسبت به شمال حقیقی.
alt خیر numeric انحراف معیار خطای ارتفاع بر حسب متر.
lat خیر numeric انحراف معیار خطای عرض جغرافیایی بر حسب متر.
lon خیر numeric انحراف معیار خطای طول جغرافیایی بر حسب متر.
ve خیر numeric انحراف معیار خطای سرعت شرق بر حسب متر بر ثانیه.
vn خیر numeric انحراف معیار خطای سرعت شمال بر حسب متر بر ثانیه.
vu خیر numeric انحراف معیار خطای سرعت بالا (Up) بر حسب متر بر ثانیه.

نمونه:

{"class":"GST","device":"/dev/ttyUSB0",
        "time":"2010-12-07T10:23:07.096Z","rms":2.440,
        "major":1.660,"minor":1.120,"orient":68.989,
        "lat":1.600,"lon":1.200,"alt":2.520}

شیء ATT یک گزارش وضعیت سمتی/جهت‌گیری بدنه (vehicle-attitude) است. این گزارش توسط حسگرهای قطب‌نمای دیجیتال و ژیروسکوپ بازگردانده می‌شود؛ بسته به دستگاه، ممکن است شامل موارد زیر باشد: جهت قطب‌نما (heading)، گام (pitch)، غلتش (roll)، انحراف سمت (yaw)، قرائت‌های ژیروسکوپ و میدان مغناطیسی. از آنجا که چنین حسگرهایی اغلب به عنوان بخشی از سامانه‌های ناوبری دریایی بسته‌بندی می‌شوند، پاسخ ATT ممکن است شامل عمق آب نیز باشد.

فیلدهای «class» و «mode» همیشه به طور معتبر وجود خواهند داشت. سایر فیلدها ممکن است بسته به نوع دستگاه خاص گزارش شوند یا نشوند.

شیء ATT با دوره GNSS همگام است. برخی از دستگاه‌ها اطلاعات جهت‌گیری را با مقیاس‌های زمانی دلخواه یا حتی نامنظم گزارش می‌کنند. برنامه gpsd آن‌ها را در یک شیء IMU گزارش می‌دهد. اشیاء ATT و IMU دارای فیلدهای یکسانی هستند، اما اشیاء IMU در سریع‌ترین زمان ممکن خروجی داده می‌شوند. برخی از دستگاه‌ها هر دو نوع را با درهم‌آمیزی اختیاری خروجی می‌دهند.

جدول ۵. شیء ATT

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "ATT"
device بله string نام دستگاه مبدا
time خیر string برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد.
timeTag خیر string برچسب زمانی اختیاری اندازه‌گیری.
heading خیر numeric جهت، درجه نسبت به شمال حقیقی.
mag_st خیر string وضعیت مغناطیس‌سنج.
mheading خیر numeric جهت، درجه نسبت به شمال مغناطیسی.
pitch خیر numeric زاویه پیچ (Pitch) بر حسب درجه.
pitch_st خیر string وضعیت حسگر پیچ.
rot خیر numeric نرخ چرخش (Rate of Turn) بر حسب درجه در دقیقه.
yaw خیر numeric زاویه یاو (Yaw) بر حسب درجه.
yaw_st خیر string وضعیت حسگر یاو.
roll خیر numeric زاویه رول (Roll) بر حسب درجه.
roll_st خیر string وضعیت حسگر رول.
dip خیر numeric میل مغناطیسی محلی، بر حسب درجه، هنگامی که میدان مغناطیسی به سمت پایین (درون زمین) اشاره می‌کند مثبت است.
mag_len خیر numeric شدت اسکالر میدان مغناطیسی.
mag_x خیر numeric مؤلفه X شدت میدان مغناطیسی.
mag_y خیر numeric مؤلفه Y شدت میدان مغناطیسی.
mag_z خیر numeric مؤلفه Z شدت میدان مغناطیسی.
acc_len خیر numeric شتاب اسکالر.
acc_x خیر numeric مؤلفه X شتاب (m/s^2).
acc_y خیر numeric مؤلفه Y شتاب (m/s^2).
acc_z خیر numeric مؤلفه Z شتاب (m/s^2).
gyro_x خیر numeric مؤلفه X سرعت زاویه‌ای (deg/s).
gyro_y خیر numeric مؤلفه Y سرعت زاویه‌ای (deg/s).
gyro_z خیر numeric مؤلفه Z سرعت زاویه‌ای (deg/s).
depth خیر numeric عمق آب بر حسب متر.
temp خیر numeric دما در محل حسگر، بر حسب درجه سانتی‌گراد.

کدهای وضعیت heading، pitch و roll (در صورت وجود) بسته به دستگاه متفاوت است. برای قطب‌نماهای دیجیتال TNT Revolution، آن‌ها به شرح زیر کدگذاری می‌شوند:

جدول ۶. پرچم‌های دستگاه

کد توضیحات
C هشدار کالیبراسیون مغناطیس‌سنج
L هشدار سطح پایین
M اخطار سطح پایین
N عادی
O اخطار سطح بالا
P هشدار سطح بالا
V هشدار سطح ولتاژ مغناطیس‌سنج

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، مقدار ATT_IS را فعال می‌سازد.

نمونه:

{"class":"ATT","time":1270938096.843,
    "heading":14223.00,"mag_st":"N",
    "pitch":169.00,"pitch_st":"N", "roll":-43.00,"roll_st":"N",
    "dip":13641.000,"mag_x":2454.000}

شیء IMU نسبت به دوره GNSS ناهمگام است. این شیء با مقیاس‌های زمانی اختیاری یا حتی جابه‌جا گزارش می‌شود.

اشیاء ATT و IMU دارای فیلدهای یکسانی هستند، اما اشیاء IMU در سریع‌ترین زمان ممکن در خروجی صادر می‌شوند.

برای جزئیات فیلدها به توضیحات شیء ATT مراجعه کنید.

این پیام در هر چرخه صادر می‌شود و اختلاف بین زمان ساعت میزبان و زمان GPS را در ابتدای ثانیه گزارش می‌دهد (در واقع، زمانی که اولین داده برای چرخه گزارش دریافت می‌شود).

این پیام دقیقاً بازتاب‌دهنده پیام PPS است.

پیام TOFF زمان GPS به دست آمده از جریان داده‌های سریالی GPS را گزارش می‌کند. پیام PPS زمان GPS به دست آمده از پالس PPS مربوط به GPS را گزارش می‌دهد.

یک شیء TOFF دارای عناصر زیر است:

جدول ۷. شیء TOFF

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "TOFF"
device بله string نام دستگاه مبدا
real_sec بله numeric ثانیه‌ها از ساعت GPS
real_nsec بله numeric نانوثانیه‌ها از ساعت GPS
clock_sec بله numeric ثانیه‌ها از ساعت سیستم
clock_nsec بله numeric نانوثانیه‌ها از ساعت سیستم

این پیام یک بار در ثانیه برای ناظران یک دستگاه صادر می‌شود و هدف آن گزارش برچسب‌های زمانی گزارش درون‌باندی GPS و ثانیه‌های گزارش‌شده توسط ساعت سیستم (که ممکن است با NTP تصحیح شده باشد) در زمان مشاهده اولین برچسب زمانی معتبر از چرخه گزارش است.

این پیام شامل دو جفت ثانیه/نانوثانیه است: real_sec و real_nsec حاوی زمانی هستند که GPS تصور می‌کند در شروع چرخه جاری بوده است؛ clock_sec و clock_nsec حاوی زمانی هستند که ساعت سیستم تصور می‌کند هنگام دریافت اولین پیام زمان‌بندی چرخه بوده است. مقدار real_nsec همیشه با دقت نانوثانیه است. مقدار clock_nsec در اکثر سیستم‌ها دارای دقت نانوثانیه است.

نمونه:

{"class":"TOFF","device":"/dev/ttyUSB0",
     "real_sec":1330212592, "real_nsec":343182,
     "clock_sec":1330212592,"clock_nsec":343184,
     "precision":-2}

این پیام هر بار که دیمن یک پالس PPS (پالس در ثانیه) معتبر را از یک دستگاه شناسایی کند صادر می‌شود.

این پیام دقیقاً بازتاب‌دهنده پیام TOFF است.

پیام TOFF زمان GPS حاصل از جریان داده‌های سریالی GPS را گزارش می‌دهد. پیام PPS زمان GPS مشتق‌شده از پالس PPS سخت‌افزاری GPS را گزارش می‌کند.

منابع مختلفی برای خطا در زمان‌های گزارش‌شده ساعت وجود دارد. سرعت اتصال سریال بین GPS و سیستم، تأخیری را در تشخیص شروع چرخه ایجاد می‌کند. خطای بزرگ‌تری نیز به دلیل زمان متغیر محاسبات درون GPS اضافه می‌شود. در مجموع، زمان به دست آمده از شروع چرخه GPS می‌تواند دارای انحراف‌های ۱۰ میلی‌ثانیه تا ۷۰۰ میلی‌ثانیه و لغزش و تغییرات ترکیبی ۱۰۰ تا ۳۰۰ میلی‌ثانیه باشد.

برای تعریف دقت (precision)، به مستندات NTP مراجعه کنید.

یک شیء PPS دارای عناصر زیر است:

جدول ۸. شیء PPS

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "PPS"
device بله string نام دستگاه مبدا
real_sec بله numeric ثانیه‌ها از منبع PPS
real_nsec بله numeric نانوثانیه‌ها از منبع PPS
clock_sec بله numeric ثانیه‌ها از ساعت سیستم
clock_nsec بله numeric نانوثانیه‌ها از ساعت سیستم
precision بله numeric تخمین به سبک NTP از دقت PPS
shm بله string کلید حافظه اشتراکی (shm) این PPS
qErr خیر numeric خطای کوانتیزاسیون PPS بر حسب پیکوثانیه. گاهی اوقات خطای «دندانه‌اره‌ای» (sawtooth) نامیده می‌شود.

این پیام یک بار در ثانیه برای ناظران دستگاهی که PPS ارسال می‌کند صادر می‌شود و زمان شروع ثانیه GPS (زمانی که 1PPS می‌رسد) و ثانیه‌های گزارش‌شده توسط ساعت سیستم (که ممکن است با NTP تصحیح شده باشد) را در آن لحظه گزارش می‌کند.

پیام شامل دو جفت ثانیه/نانوثانیه است: real_sec و real_nsec حاوی زمانی هستند که GPS تصور می‌کند در لبه پالس PPS بوده است؛ clock_sec و clock_nsec حاوی زمانی هستند که ساعت سیستم تصور می‌کند در لبه پالس PPS بوده است. مقدار real_nsec همیشه با دقت نانوثانیه است. مقدار clock_nsec در اکثر سیستم‌ها دارای دقت نانوثانیه است.

منابع مختلفی برای خطا در زمان‌های گزارش‌شده ساعت وجود دارد. برای PPS که از طریق یک خط سریال واقعی ارسال می‌شود، تأخیر وقفه سریال به علاوه زمان پردازش تا فراخوانی تایمر باید از بالا به حدود ۱۰ میکروثانیه محدود شود؛ اگر هسته شما از [RFC-2783] پشتیبانی کند، این مقدار می‌تواند به کمتر از ۱ میکروثانیه کاهش یابد. شبیه‌سازی خط کنترل USB1.1 به سریال به حدود ۱ میلی‌ثانیه محدود است.

نمونه:

{"class":"PPS","device":"/dev/ttyUSB0",
     "real_sec":1330212592, "real_nsec":343182,
     "clock_sec":1330212592,"clock_nsec":343184,
     "precision":-3}

این پیام وضعیت یک نوسان‌ساز منضبط‌شده با GPS (GPSDO) را گزارش می‌دهد. خروجی GPS PPS (که پایداری بلندمدت فوق‌العاده‌ای دارد) معمولاً برای منضبط کردن یک نوسان‌ساز محلی با پایداری کوتاه‌مدت بسیار بهتر (مانند یک ساعت اتمی روبیدیوم) استفاده می‌شود.

یک شیء OSC دارای عناصر زیر است:

جدول ۹. شیء OSC

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "OSC"
device بله string نام دستگاه مبدا.
running بله boolean اگر مقدار true باشد، نوسان‌ساز در حال حاضر در حال اجرا است. نوسان‌سازها ممکن است در ابتدای روز نیاز به زمان گرم شدن داشته باشند.
reference بله boolean اگر مقدار true باشد، نوسان‌ساز در حال دریافت سیگنال GPS PPS است.
disciplined بله boolean اگر مقدار true باشد، سیگنال GPS PPS به اندازه کافی پایدار است و برای منضبط کردن نوسان‌ساز محلی استفاده می‌شود.
delta بله numeric اختلاف زمانی (بر حسب نانوثانیه) بین پالس خروجی PPS نوسان‌ساز منضبط‌شده و آخرین پالس ورودی GPS PPS.

نمونه:

{"class":"OSC","running":true,"device":"/dev/ttyUSB0",
    "reference":true,"disciplined":true,"delta":67}

دستورهایی که می‌توانید به gpsd ارسال کنید در ادامه آمده است.

شیئی با ویژگی‌های زیر را بازمی‌گرداند:

جدول ۱۰. شیء VERSION

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "VERSION"
release بله string سطح انتشار عمومی
rev بله string سطح بازبینی داخلی در کنترل نسخه.
proto_major بله numeric سطح بازبینی اصلی (major) رابط برنامه‌نویسی API.
proto_minor بله numeric سطح بازبینی فرعی (minor) رابط برنامه‌نویسی API.
remote خیر string آدرس اینترنتی (URL) دیمن راه دور که این نسخه را گزارش می‌کند. اگر خالی باشد، این نسخه متعلق به دیمن محلی است.

هنگامی که کلاینت برای نخستین بار متصل می‌شود، دیمن یک پاسخ VERSION به هر کلاینت ارسال می‌کند.

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت VERSION_SET را در عضو set سطح بالا فعال می‌سازد.

نمونه:

{"class":"VERSION","version":"2.40dev",
    "rev":"06f62e14eae9886cde907dae61c124c53eb1101f",
    "proto_major":3,"proto_minor":1
}

یک شیء فهرست دستگاه با عناصر زیر را بازمی‌گرداند:

جدول ۱۱. شیء DEVICES

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "DEVICES"
devices بله list فهرستی از توضیحات دستگاه‌ها
remote خیر string آدرس اینترنتی (URL) دیمن راه دور که مجموعه دستگاه‌ها را گزارش می‌کند. اگر خالی باشد، این یک پاسخ DEVICES از دیمن محلی است.

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت DEVICELIST_SET را در عضو set سطح بالا فعال می‌سازد.

نمونه:

{"class"="DEVICES","devices":[
    {"class":"DEVICE","path":"/dev/pts/1","flags":1,"driver":"SiRF binary"},
    {"class":"DEVICE","path":"/dev/pts/3","flags":4,"driver":"AIVDM"}]}

دیمن گاهی یک شیء DEVICE تکی (یعنی شیئی که درون یک پوشش DEVICES قرار ندارد) به کلاینت ارسال می‌کند. محتوای داده‌های این اشیاء بعداً به عنوان پاسخ به دستور ?DEVICE شرح داده خواهد شد.

این دستور حالت نظاره‌گر (watcher mode) را تنظیم می‌کند. همچنین خط‌مشی به ازای هر مشترک و بیت داده خام را تنظیم کرده یا گزارشی از آن را دریافت می‌کند. شیء WATCH به عنوان آرگومان، خط‌مشی مشترک را تغییر می‌دهد. پاسخ ارائه‌شده، خط‌مشی مشترک را شرح می‌دهد و همچنین شامل یک شیء DEVICES خواهد بود.

یک شیء WATCH دارای عناصر زیر است:

جدول ۱۲. شیء WATCH

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "WATCH"
enable خیر boolean فعال‌سازی (true) یا غیرفعال‌سازی (false) حالت نظاره‌گر. پیش‌فرض true است.
json خیر boolean فعال‌سازی (true) یا غیرفعال‌سازی (false) ارسال گزارش‌های JSON. پیش‌فرض false است.
nmea خیر boolean فعال‌سازی (true) یا غیرفعال‌سازی (false) تبدیل بسته‌های باینری به شبه-NMEA. پیش‌فرض false است.
raw خیر integer حالت داده خام ('raw') را کنترل می‌کند. هنگامی که این ویژگی برای یک کانال روی 1 تنظیم شود، gpsd جریان داده پردازش‌نشده NMEA یا AIVDM را از هر دستگاه متصل گزارش می‌کند. بسته‌های باینری GPS به صورت هگزادسیمال نمایش داده می‌شوند. بسته‌های RTCM2 و RTCM3 در حالت خام نمایش داده نمی‌شوند. هنگامی که این ویژگی برای کانالی که داده‌های باینری را پردازش می‌کند روی 2 تنظیم شود، gpsd داده‌های دریافتی را به طور مستقیم و بدون تبدیل به هگزادسیمال گزارش می‌دهد.
scaled خیر boolean در صورت مقدار true، مقسوم‌علیه‌های مقیاس‌پذیری را پیش از ارسال در خروجی اعمال می‌کند؛ پیش‌فرض false است.
split24 خیر boolean در صورت مقدار true، بخش‌های جملات AIS نوع 24 را تجمیع می‌کند. در صورت false، هر بخش را به عنوان یک شیء JSON جداگانه گزارش می‌دهد و تطبیق MMSIها و تجمیع را به کلاینت واگذار می‌کند. پیش‌فرض false است. فقط در گزارش‌های AIS کاربرد دارد.
pps خیر boolean در صورت مقدار true، پیام JSON مربوط به TOFF را در هر چرخه و پیام JSON مربوط به PPS را هنگام صدور 1PPS توسط دستگاه ارسال می‌کند. پیش‌فرض false است.
device خیر string در صورت وجود، نظارت را تنها برای دستگاه مشخص‌شده به جای تمام دستگاه‌ها فعال می‌کند. در حالت‌های raw و NMEA که پاسخ‌های دستگاه برچسب‌گذاری نشده‌اند مفید است. هنگامی که همراه با enable:false استفاده شود، هیچ تأثیری ندارد.
remote خیر string آدرس اینترنتی (URL) دیمن راه دور که مجموعه نظارت را گزارش می‌کند. اگر خالی باشد، این یک پاسخ WATCH از دیمن محلی است.

یک ویژگی بولی اضافی به نام «timing» نیز وجود دارد که مستند نشده است، زیرا این بخش از رابط ناپایدار بوده و صرفاً برای استفاده توسعه‌دهندگان است.

در حالت نظاره‌گر، گزارش‌های GPS به صورت پاسخ‌های TPV و SKY ارسال می‌شوند. گزارش‌دهی AIS، Subframe و RTCM در بخش بعدی شرح داده شده است.

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت POLICY_SET را در عضو set سطح بالا فعال می‌سازد.

نمونه:

{"class":"WATCH", "raw":1,"scaled":true}

دستور POLL داده‌های آخرین تثبیت‌های مشاهده‌شده را در تمامی دستگاه‌های فعال GPS درخواست می‌کند. دستگاه‌ها برای اینکه قابل نظرسنجی (poll) باشند باید قبلاً توسط ?WATCH فعال شده باشند.

استفاده از نظرسنجی در دستگاه‌هایی مانند NMEA GPS که در آن‌ها تثبیت کامل باید از چندین جمله جمع‌آوری شود، ممکن است نتایج غیرمنتظره‌ای به همراه داشته باشد. اگر در حین ارسال این جملات نظرسنجی انجام دهید، پاسخ تنها شامل داده‌های تثبیتی خواهد بود که تاکنون در دوره جاری جمع‌آوری شده است و ممکن است به اندازه یک چرخه زمانی (معمولاً ۱ ثانیه) قدیمی باشد.

پاسخ POLL شامل یک فهرست زمان‌دار از اشیاء TPV (داده‌های کش‌شده) و یک فهرست زمان‌دار از اشیاء SKY (پیکربندی ماهواره‌ها) خواهد بود. اگر دستگاهی تثبیت موقعیتی ندیده باشد، با فیلد mode برابر با صفر گزارش می‌شود.

جدول ۱۳. شیء POLL

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "POLL"
time بله Numeric برچسب زمان در قالب ISO 8601. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد.
active بله Numeric تعداد دستگاه‌های فعال.
tpv بله JSON array فهرستی از اشیاء TPV جدا شده با کاما.
sky بله JSON array فهرستی از اشیاء SKY جدا شده با کاما.

نمونه‌ای از پاسخ POLL:

{"class":"POLL","time":"2010-06-04T10:31:00.289Z","active":1,
    "tpv":[{"class":"TPV","device":"/dev/ttyUSB0",
            "time":"2010-09-08T13:33:06.095Z",
            "ept":0.005,"lat":40.035093060,
            "lon":-75.519748733,"track":99.4319,"speed":0.123,"mode":2}],
    "sky":[{"class":"SKY","device":"/dev/ttyUSB0",
            "time":1270517264.240,"hdop":9.20,
            "satellites":[{"PRN":16,"el":55,"az":42,"ss":36,"used":true},
                          {"PRN":19,"el":25,"az":177,"ss":0,"used":false},
                          {"PRN":7,"el":13,"az":295,"ss":0,"used":false},
                          {"PRN":6,"el":56,"az":135,"ss":32,"used":true},
                          {"PRN":13,"el":47,"az":304,"ss":0,"used":false},
                          {"PRN":23,"el":66,"az":259,"ss":0,"used":false},
                          {"PRN":20,"el":7,"az":226,"ss":0,"used":false},
                          {"PRN":3,"el":52,"az":163,"ss":32,"used":true},
                          {"PRN":31,"el":16,"az":102,"ss":0,"used":false}
]}]}

نکته

نرم‌افزار کلاینت نباید فرض کند که فهرست فیلدهای پاسخ POLL برای همیشه ثابت است. با جمع‌آوری و کش کردن داده‌های بیشتر از انواع حسگرهای مختلف توسط gpsd، احتمالاً آن داده‌ها نیز راه خود را به این پاسخ باز خواهند کرد.

این دستور وضعیت یک دستگاه را گزارش می‌دهد (اگر پس از آن ';' بیاید)، یا بیت‌های کنترلی خاص دستگاه، به‌ویژه سرعت دستگاه، حالت سریال و بیت حالت بومی را تنظیم می‌کند (اگر پس از آن '=' و یک شیء DEVICE بیاید). اگر بیش از یک کلاینت به کانال متصل باشد و مسیر دستگاه مشخص نشده باشد، فرم تنظیم پارامتر رد خواهد شد.

به پاسخ توجه کنید، زیرا اگر GPS از یک دستور پشتیبانی نکند یا فقط از برخی ترکیبات حالت‌ها پشتیبانی نماید، ممکن است این دستور با شکست مواجه شود. در صورت شکست، دیمن و GPS به برقراری ارتباط با همان سرعت قبلی ادامه خواهند داد.

از فرم تنظیم پارامتر با احتیاط استفاده کنید. در گیرنده‌های GPS مبتنی بر USB و بلوتوث نیز امکان دارد تنظیم حالت سریال با شکست مواجه شود؛ یا به این دلیل که تراشه مبدل سریال از حالت‌های غیر 8N1 پشتیبانی نمی‌کند، یا به این دلیل که سفت‌افزار دستگاه هنگام تغییر سرعت، تراشه مبدل سریال را با UART روی چیپ‌ست GPS به درستی همگام نمی‌کند. این خرابی‌ها می‌تواند دستگاه شما را متوقف (hang) کند و احتمالاً نیاز به قطع و وصل تغذیه GPS یا (در موارد حاد) قطع فیزیکی باتری پشتیبان NVRAM داشته باشد.

یک شیء DEVICE دارای عناصر زیر است:

جدول ۱۴. شیء DEVICE

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "DEVICE"
activated خیر string زمان فعال شدن دستگاه به صورت یک برچسب زمانی ISO8601. اگر دستگاه غیرفعال باشد این ویژگی وجود ندارد.
bps خیر integer سرعت دستگاه بر حسب بیت بر ثانیه.
cycle خیر real زمان چرخه دستگاه بر حسب ثانیه.
driver خیر string نام درایور دستگاه در GPSD. تا زمانی که gpsd بسته‌های قابل شناسایی از دستگاه ندیده باشد، گزارش نخواهد شد.
flags خیر integer بردار بیتی از پرچم‌های ویژگی. پرچم‌های تعریف‌شده فعلی انواع بسته‌های دیده‌شده تاکنون (GPS, RTCM2, RTCM3, AIS) را توصیف می‌کنند. اگر خالی باشد گزارش نخواهد شد (مثلاً قبل از اینکه gpsd بسته‌های قابل شناسایی را از دستگاه ببیند).
hexdata خیر string داده‌ها به صورت هگزادسیمال خالص برای ارسال به گیرنده GNSS.
mincycle خیر real حداقل زمان چرخه دستگاه بر حسب ثانیه. تنها در صورتی از طریق ?DEVICE گزارش می‌شود که نرخ قابل تغییر باشد. این مقدار فقط‌خواندنی است و قابل تنظیم نیست.
native خیر integer مقدار 0 به معنای حالت NMEA و 1 به معنای حالت جایگزین است (در صورت وجود، حالت باینری به‌ویژه برای چیپ‌ست‌های SiRF و Evermore). تلاش برای تنظیم این حالت روی یک دستگاه غیر GPS منجر به خطا می‌شود.
parity خیر string مقادیر N، O یا E برای بدون توازن (no parity)، فرد (odd)، یا زوج (even).
path خیر string نام دستگاهی که بیت‌های کنترلی برای آن گزارش می‌شوند، یا قرار است روی آن اعمال گردند. این ویژگی تنها زمانی می‌تواند حذف شود که دقیقاً یک کانال اشتراک وجود داشته باشد.
readonly خیر boolean در صورت فقط‌خواندنی بودن دستگاه، مقدار true است.
sernum خیر string شماره سریال سخت‌افزاری (در صورتی که درایور دستگاه آن مقدار را بازگرداند).
stopbits بله integer بیت‌های توقف (1 یا 2).
subtype خیر string هرگونه اطلاعات نسخه‌ای که درایور دستگاه بازگردانده است.
subtype1 خیر string اطلاعات نسخه بیشتری که درایور دستگاه بازگردانده است.

پارامترهای سریال (bps, parity, stopbits) در پاسخی که یک منبع TCP/IP مانند جریان Ntrip، DGPSIP یا AIS را توصیف می‌کند حذف خواهند شد؛ در یک دستگاه سریال، آن‌ها همیشه حضور خواهند داشت.

محتوای فیلد flags باید به صورت زیر تفسیر شود:

جدول ۱۵. پرچم‌های دستگاه

تعریف در C مقدار توضیحات
SEEN_GPS 0x01 داده‌های GPS روی این دستگاه دیده شده است
SEEN_RTCM2 0x02 داده‌های RTCM2 روی این دستگاه دیده شده است
SEEN_RTCM3 0x04 داده‌های RTCM3 روی این دستگاه دیده شده است
SEEN_AIS 0x08 داده‌های AIS روی این دستگاه دیده شده است

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت DEVICE_SET را در عضو set سطح بالا فعال می‌سازد.

نمونه:

{"class":"DEVICE","bps":4800,"parity":"N","stopbits":1,"native":0}

هنگامی که کلاینت در حالت نظاره‌گر باشد، در زمان اضافه شدن دستگاهی به استخر یا غیرفعال شدن آن، دیمن اعلان‌های DEVICE را برای آن ارسال می‌کند.

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت DEVICE_SET را در عضو set سطح بالا فعال می‌سازد.

اعلان مربوط به یک دستگاه غیرفعال‌شده:

{"class":"DEVICE","path":"/dev/pts1","activated":0}

ارسال یک درخواست برای پیام UBX-MON-VER به یک گیرنده u-blox در مسیر /dev/ttyUSB2:

?DEVICE={"path":"/dev/ttyUSB2","hexdata":"b5620a0400000e34"}

دیمن gpsd در صورت موفقیت با یک ACK پاسخ خواهد داد:

{"class":"ACK"}

دیمن ممکن است در پاسخ به یک خط فرمان با نحو نامعتبر یا یک دستور ناشناخته، یک شیء خطا ارسال کند. این شیء دارای عناصر زیر است:

جدول ۱۶. شیء اعلان ERROR

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "ERROR"
message بله string پیام خطای متنی

نمونه:

{"class":"ERROR","message":"Unrecognized request '?FOO'"}

هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه می‌کند، بیت ERR_SET را در عضو set سطح بالا فعال می‌سازد.

استاندارد RTCM-104 خانواده‌ای از پروتکل‌های سریال است که برای پخش تصحیحات شبه‌فاصله از ایستگاه‌های مرجع GPS تفاضلی (DGPS) استفاده می‌شود. بسیاری از گیرنده‌های GPS می‌توانند این تصحیحات را برای بهبود دقت گزارش‌دهی خود بپذیرند.

پروتکل RTCM-104 در دو ساختار اصلی و ناسازگار 2.x و 3.x عرضه می‌شود. هر ساختار اصلی دارای بازبینی‌های فرعی (سازگار) است.

استاندارد قابل اعمال برای RTCM نسخه 2.x سند استانداردهای پیشنهادی RTCM برای سرویس تفاضلی NAVSTAR GPS تحت عنوان RTCM Paper 194-93/SC 104-STD است. برای RTCM 3.1 این سند RTCM Paper 177-2006-SC104-STD می‌باشد. دستورالعمل‌های سفارش هر دو استاندارد از وب‌سایت کمیسیون فنی رادیویی خدمات دریایی (RTCM) https://www.rtcm.org/ تحت بخش "Publications" در دسترس است.

ایستگاه‌های تصحیح تفاضلی GPS شامل یک گیرنده مرجع GPS متصل به یک فرستنده فرکانس پایین (LF) هستند. گیرنده مرجع GPS یک GPS با دقت نقشه‌برداری است که ردیابی حامل GPS را انجام می‌دهد و می‌تواند موقعیت خود را تا چند میلی‌متر مشخص کند. این گیرنده تصحیحات برد و نرخ برد را تولید کرده و آن‌ها را به RTCM104 کدگذاری می‌کند، سپس RTCM104 را بر روی سیگنال سریال RS-232 با سرعت ۱۰۰ یا ۲۰۰ بود (بسته به نیاز فرستنده) به فرستنده LF ارسال می‌نماید.

فرستنده LF سیگنال رادیویی تقریباً ۳۰۰ کیلوهرتز را پخش می‌کند که گیرنده‌های رادیویی GPS تفاضلی آن را دریافت می‌کنند. فرستنده‌هایی که قرار است برد بیشتری داشته باشند، باید با نرخ کمتری ارسال کنند. هرچه نرخ داده بالاتر باشد، دریافت سیگنال با نسبت سیگنال به نویز مناسب برای گیرنده رادیویی راه دور سخت‌تر خواهد بود (سیگنال‌های با نرخ داده بالاتر را نمی‌توان در بازه زمانی طولانی میانگین‌گیری کرد، از این رو پرنویزتر به نظر می‌رسند).

یک پیام RTCM 2.x شامل دنباله‌ای از حداکثر ۳۳ کلمه ۳۰ بیتی است. ۲۴ بیت با ارزش‌تر هر کلمه، داده و شش بیت کم‌ارزش‌تر، بیت‌های توازن (Parity) هستند. الگوریتم توازن مورد استفاده همان ISGPS-2000 است که در لینک‌های رو به پایین ماهواره‌های GPS استفاده می‌شود. هر پیام RTCM 2.x بسته به نوع پیام، از دو کلمه سرآیند و به دنبال آن صفر یا چند کلمه داده تشکیل شده است.

یک پیام RTCM 3.x با یک بایت راهنمای ثابت 0xD3 آغاز می‌شود. پس از آن شش بیت اطلاعات نسخه و ۱۰ بیت اطلاعات طول بار داده (payload) قرار دارد. پس از آن بار داده و به دنبال آن یک جمع‌آزمایی ۳ بایتی از بار داده با استفاده از الگوریتم Qualcomm CRC-24Q قرار گرفته است.

هر پیام RTCM2 به عنوان یک شیء JSON تکی به ازای هر پیام تخلیه می‌شود و فیلدهای پیام به عنوان ویژگی‌های آن شیء قرار می‌گیرند. آرایه‌های آمار ماهواره، ایستگاه و منظومه به آرایه‌هایی از زیر-اشیاء JSON تبدیل می‌شوند. هر جمله معمولاً دارای یک فیلد «device» نیز خواهد بود که حاوی مسیر دستگاه مبدا است.

تمام ویژگی‌ها به جز فیلد device اجباری هستند. ویژگی‌های سرآیند قبل از سایر ویژگی‌ها صادر می‌شوند.

جدول ۱۷. شیء سرآیند RTCM2

نام نوع توضیحات
class string مقدار ثابت: "RTCM2".
type integer نوع پیام (1-9).
station_id integer شناسه گیرنده مرجع GPS. فرستنده‌های LF نیز دارای شماره‌های شناسه (متفاوت) هستند.
zcount real زمان مرجع تصحیحات در پیام بر حسب ثانیه در ساعت جاری. توجه داشته باشید که این زمان بر مبنای زمان GPS است که چند ثانیه جلوتر از UTC است (جدول [UTC-TAU] مربوط به تصحیحات ثانیه کبیسه در رصدخانه نیروی دریایی ایالات متحده را ببینید).
seqnum integer شماره توالی. تنها ۳ بیت است و پس از ۷ مجدداً دور می‌زند.
length integer تعداد کلمات پس از سرآیند که پیام را تشکیل می‌دهند.
station_health integer وضعیت انتقال ایستگاه. سلامت بیکن را به عنوان یک منبع مرجع نشان می‌دهد. هر مقدار غیر صفر به این معنی است که ماهواره احتمالاً داده‌های نادرست ارسال می‌کند و نباید در تثبیت استفاده شود. مقدار 6 یعنی انتقال نظارت نمی‌شود. مقدار 7 یعنی ایستگاه به درستی کار نمی‌کند. مقادیر دیگر توسط اپراتور بیکن تعریف می‌شوند.

مقدار <message type> یکی از موارد زیر است:

1

تصحیحات کامل — یک پیام حاوی تصحیحات برای تمام ماهواره‌های GPS در دید. این مورد رایج نیست.

3

پارامترهای ایستگاه مرجع — موقعیت آنتن GPS ایستگاه مرجع.

4

مبدأ مختصاتی (Datum) — مبدأ مختصاتی که داده‌های DGPS به آن ارجاع داده می‌شوند.

5

سلامت منظومه — اطلاعاتی درباره ماهواره‌هایی که بیکن می‌تواند ببیند.

6

پیام تهی (Null) — صرفاً برای پر کردن فضا.

7

تقویم نجومی بیکن رادیویی — اطلاعاتی درباره این بیکن یا سایر بیکن‌ها.

9

تصحیحات زیرمجموعه — پیامی حاوی تصحیحات تنها برای زیرمجموعه‌ای از ماهواره‌های GPS در دید.

16

پیام ویژه — یک پیام متنی از طرف اپراتور بیکن.

31

تصحیحات زیرمجموعه GLONASS — پیامی حاوی تصحیحات برای مجموعه‌ای از ماهواره‌های GLONASS در دید.

یک یا چند شیء ماهواره پس از سرآیند برای پیام‌های نوع ۱ یا نوع ۹ قرار می‌گیرند. قالب آن بدین شرح است:

جدول ۱۸. شیء ماهواره

نام نوع توضیحات
ident integer شماره PRN ماهواره‌ای که این داده تصحیح برای آن است. به بخش «PRNs» مراجعه کنید.
udre integer خطای برد تفاضلی کاربر (0-3). مقادیر آن را در جدول زیر مشاهده کنید.
iod integer شماره صدور داده (Issue Of Data)، مطابق با IOD برای تقویم مداری جاری این ماهواره، همان‌طور که توسط ماهواره ارسال شده است. IOD یک برچسب منحصر به فرد است که تقویم مداری را مشخص می‌کند؛ GPS استفاده‌کننده از تصحیح DGPS و سامانه DGPS تولیدکننده داده باید از موقعیت‌های مداری یکسانی برای ماهواره استفاده کنند.
prc real خطای شبه‌فاصله بر حسب متر برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخص‌شده توسط z_count در رکورد والد اندازه‌گیری شده است.
rrc real نرخ تغییر خطای شبه‌فاصله بر حسب متر بر ثانیه برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخص‌شده توسط فیلد z_count در رکورد والد اندازه‌گیری شده است. در صورت نیاز گیرنده GPS، از این فیلد برای محاسبه خطاهای شبه‌فاصله در دوره‌های دیگر استفاده می‌شود.

مقادیر خطای برد تفاضلی کاربر (UDRE) به شرح زیر است:

جدول ۱۹. مقادیر UDRE

0 خطای ۱ سیگما ⇐ ۱ متر
1 خطای ۱ سیگما ⇐ ۴ متر
2 خطای ۱ سیگما ⇐ ۸ متر
3 خطای ۱ سیگما > ۸ متر

نمونه:

{"class":"RTCM2","type":1,
    "station_id":688,"zcount":843.0,"seqnum":5,"length":19,"station_health":6,
    "satellites":[
        {"ident":10,"udre":0,"iod":46,"prc":-2.400,"rrc":0.000},
        {"ident":13,"udre":0,"iod":94,"prc":-4.420,"rrc":0.000},
        {"ident":7,"udre":0,"iod":22,"prc":-5.160,"rrc":0.002},
        {"ident":2,"udre":0,"iod":34,"prc":-6.480,"rrc":0.000},
        {"ident":4,"udre":0,"iod":47,"prc":-8.860,"rrc":0.000},
        {"ident":8,"udre":0,"iod":76,"prc":-7.980,"rrc":0.002},
        {"ident":5,"udre":0,"iod":99,"prc":-8.260,"rrc":0.002},
        {"ident":23,"udre":0,"iod":81,"prc":-8.060,"rrc":0.000},
        {"ident":16,"udre":0,"iod":70,"prc":-11.740,"rrc":0.000},
        {"ident":30,"udre":0,"iod":4,"prc":-18.960,"rrc":-0.006},
        {"ident":29,"udre":0,"iod":101,"prc":-24.960,"rrc":-0.002}
]}

اعضای بار داده یک پیام نوع ۳ (پارامترهای ایستگاه مرجع) به شرح زیر است:

جدول ۲۰. پارامترهای ایستگاه مرجع

نام نوع توضیحات
x real مختصات ECEF X.
y real مختصات ECEF Y.
z real مختصات ECEF Z.

مختصات شامل موقعیت ایستگاه بر حسب متر با دو رقم اعشار، در مختصات زمین‌مرکز زمین‌ثابت (ECEF) است. این مقادیر معمولاً به چارچوب مرجع WGS84 ارجاع داده می‌شوند، اما ممکن است در ایالات متحده به NAD83 (که اساساً برای همه به جز متخصصان ژئودزی با WGS84 یکسان است) یا چارچوب‌های مرجع دیگر در سایر نقاط جهان ارجاع داده شوند.

یک پیام مرجع نامعتبر با یک سرآیند نوع ۳ بدون فیلدهای بار داده نمایش داده می‌شود.

نمونه:

{"class":"RTCM2","type":3,
    "station_id":652,"zcount":1657.2,"seqnum":2,"length":4,"station_health":6,
    "x":3878620.92,"y":670281.40,"z":5002093.59
}

اعضای بار داده یک پیام نوع ۴ (مبدأ مختصاتی) به شرح زیر است:

جدول ۲۱. مبدأ مختصاتی (Datum)

نام نوع توضیحات
dgnss_type string یکی از مقادیر "GPS"، "GLONASS"، "GALILEO" یا "UNKNOWN".
dat integer مقدار 0 یا 1 بوده و جهت تغییر انتقال ارائه‌شده توسط dx, dy, dz را نشان می‌دهد. مقدار dat = 0 به این معنی است که مختصات ایستگاه (در پیام مرجع) به یک مبدأ محلی ارجاع داده شده و افزودن dx, dy, dz به آن موقعیت، آن را در مختصات GNSS (برای GPS برابر با WGS84) قرار می‌دهد. اگر dat = 1 باشد، موقعیت ایستگاه مرجع در مختصات GNSS است و افزودن dx, dy, dz آن را به مبدأ محلی تبدیل می‌کند.
datum_name string یک نام استاندارد برای مبدأ مختصاتی.
dx real انحراف در راستای محور X.
dy real انحراف در راستای محور Y.
dz real انحراف در راستای محور Z.

مقادیر <dx> <dy> <dz> انحرافاتی برای تبدیل از مبدأ محلی به مبدأ GNSS یا برعکس هستند. این فیلدها اختیاری می‌باشند.

یک پیام مبدأ مختصاتی نامعتبر با یک سرآیند نوع ۴ بدون فیلدهای بار داده نمایش داده می‌شود.

یک یا چند مورد از این موارد پس از سرآیند برای پیام‌های نوع ۵ قرار می‌گیرند — یکی برای هر ماهواره.

قالب آن به شرح زیر است:

جدول ۲۲. سلامت منظومه

نام نوع توضیحات
ident integer شماره PRN ماهواره. به بخش «PRNs» مراجعه کنید.
iodl bool مقدار True نشان می‌دهد که این اطلاعات مربوط به اطلاعات ماهواره در یک پیام نوع ۱ یا نوع ۹ همراه است.
health integer مقدار 0 نشان می‌دهد که ماهواره سالم است. هر مقدار دیگر نشان‌دهنده یک مشکل است (نحوه کدگذاری مشخص نیست).
snr integer نسبت حامل به نویز سیگنال دریافتی در محدوده ۲۵ تا ۵۵ dB(Hz).
health_en bool اگر روی True تنظیم شده باشد نشان می‌دهد که ماهواره سالم است حتی اگر داده‌های ناوبری ماهواره بگویند ناسالم است.
new_data bool مقدار True نشان می‌دهد که IOD برای این ماهواره به‌زودی در پیام‌های نوع ۱ یا ۹ به‌روزرسانی خواهد شد.
los_warning bool هشدار خط دید (Line-of-sight). مقدار True نشان می‌دهد که ماهواره به‌زودی ناسالم خواهد شد.
tou integer زمان سالم باقی‌مانده بر حسب ثانیه.

این نوع صرفاً یک پیام تهی را نشان می‌دهد و فاقد فیلدهای بار داده است.

این قالب برای نمایش کلمات پیام به صورت هگزادسیمال زمانی استفاده می‌شود که فیلد نوع پیام با هیچ‌یک از انواع شناخته‌شده مطابقت نداشته باشد.

قالب آن بدین شرح است:

جدول ۲۳. پیام ناشناخته

نام نوع توضیحات
data list فهرستی از رشته‌ها.

هر رشته در آرایه یک عبارت هگزادسیمال است که ۳۰ بیت اطلاعات را پس از بررسی توازن و وارون‌سازی نشان می‌دهد. دو بیت با ارزش‌تر باید نادیده گرفته شوند.

قالب آن بدین شرح است:

جدول ۲۴. تقویم نجومی بیکن رادیویی

نام نوع توضیحات
lat real عرض جغرافیایی بر حسب درجه برای آنتن فرستنده LF ایستگاهی که این تقویم نجومی برای آن است. مقادیر شمال مثبت هستند.
lon real طول جغرافیایی بر حسب درجه برای آنتن فرستنده LF ایستگاهی که این تقویم نجومی برای آن است. مقادیر شرق مثبت هستند.
range integer برد منتشرشده ایستگاه بر حسب کیلومتر.
frequency real فرکانس پخش ایستگاه بر حسب کیلوهرتز (kHz).
health integer مقدار <health> وضعیت سلامت ایستگاهی است که این تقویم نجومی برای آن است. اگر غیر صفر باشد، ایستگاه داده‌های مشکوک ارسال می‌کند و نباید برای تثبیت استفاده شود. استانداردهای ITU و RTCM104 در مورد تفسیر دقیق‌تر فیلد <health> و حتی پهنای بیتی آن تفاوت دارند.
station_id integer شناسه فرستنده. این مقدار با شناسه مرجع در سرآیند یکسان نیست، چرا که مورد دوم شناسه گیرنده مرجع است.
bitrate integer نرخ بیت ارسال شده.

نمونه:

{"class":"RTCM2","type":9,"station_id":268,"zcount":252.6,
        "seqnum":4,"length":5,"station_health":0,
        "satellites":[
            {"ident":13,"udre":0,"iod":3,"prc":-25.940,"rrc":0.066},
            {"ident":2,"udre":0,"iod":73,"prc":0.920,"rrc":-0.080},
            {"ident":8,"udre":0,"iod":22,"prc":23.820,"rrc":0.014}
]}

اعضای بار داده یک پیام نوع ۱۳ (پارامترهای فرستنده زمینی) به شرح زیر است:

جدول ۲۵. پارامترهای فرستنده زمینی

نام نوع توضیحات
lat real درجه عرض جغرافیایی علامت‌دار؛ مثبت یعنی شمال (N)، منفی یعنی جنوب (S).
lon real درجه طول جغرافیایی علامت‌دار؛ مثبت یعنی شرق (E)، منفی یعنی غرب (W).
range integer برد ارسال بر حسب کیلومتر (1-1024).
rangeflag bool در صورت True، نشان می‌دهد که برد تخمینی با مقدار یافت‌شده در پیام نوع ۷ (که شامل برد فهرست‌شده بیکن است) متفاوت است. عموماً نشان‌دهنده کاهش برد به دلیل عواملی مانند شرایط نامساعد یونوسفر یا کاهش توان ارسال است.
status bool در صورت True، به کاربر علامت می‌دهد که منتظر یک پیام توضیحی نوع ۱۶ مرتبط با این ایستگاه باشد. احتمالاً نشان‌دهنده وقوع یک رویداد غیرعادی است.

این نوع پیام در RTCM 2.3 جایگزین پیام نوع ۳ (پارامترهای ایستگاه مرجع) شده است.

اعضای بار داده یک پیام نوع ۱۴ (زمان هفته GPS) به شرح زیر است:

جدول ۲۶. زمان هفته GPS

نام نوع توضیحات
hour integer ساعت از هفته (0-167).
leapsecs integer ثانیه‌های کبیسه (0-63).
week integer هفته GPS (0-123).

نمونه:

{"class":"RTCM2","type":14,"station_id":652,"zcount":1657.2,
        "seqnum":3,"length":1,"station_health":6,"week":601,"hour":109,
        "leapsecs":15}

جدول ۲۷. پیام ویژه

نام نوع توضیحات
message string یک پیام متنی ارسال شده توسط اپراتور بیکن.

یک یا چند شیء ماهواره GLONASS پس از سرآیند برای پیام‌های نوع ۱ یا نوع ۹ قرار می‌گیرند. قالب آن بدین شرح است:

جدول ۲۸. شیء ماهواره

نام نوع توضیحات
ident integer شماره PRN ماهواره‌ای که این داده تصحیح برای آن است. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید.
udre integer خطای برد تفاضلی کاربر (0-3). مقادیر آن را در جدول‌های قبلی ببینید.
change boolean بیت تغییر تقویم مداری (Change-of-ephemeris).
tod uinteger تعداد دوره‌های ۳۰ ثانیه‌ای از ابتدای ساعت.
prc real خطای شبه‌فاصله بر حسب متر برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخص‌شده توسط z_count در رکورد والد اندازه‌گیری شده است.
rrc real نرخ تغییر خطای شبه‌فاصله بر حسب متر بر ثانیه برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخص‌شده توسط فیلد z_count در رکورد والد اندازه‌گیری شده است. در صورت نیاز گیرنده GPS، از این مقدار برای محاسبه خطاهای شبه‌فاصله در دوره‌های دیگر استفاده می‌شود.

نمونه:

{"class":"RTCM2","type":31,"station_id":652,"zcount":1642.2,
    "seqnum":0,"length":14,"station_health":6,
    "satellites":[
        {"ident":5,"udre":0,"change":false,"tod":0,"prc":132.360,"rrc":0.000},
        {"ident":15,"udre":0,"change":false,"tod":0,"prc":134.840,"rrc":0.002},
        {"ident":14,"udre":0,"change":false,"tod":0,"prc":141.520,"rrc":0.000},
        {"ident":6,"udre":0,"change":false,"tod":0,"prc":127.000,"rrc":0.000},
        {"ident":21,"udre":0,"change":false,"tod":0,"prc":128.780,"rrc":0.000},
        {"ident":22,"udre":0,"change":false,"tod":0,"prc":125.260,"rrc":0.002},
        {"ident":20,"udre":0,"change":false,"tod":0,"prc":117.280,"rrc":-0.004},
        {"ident":16,"udre":0,"change":false,"tod":17,"prc":113.460,"rrc":0.018}
]}

پشتیبانی از خروجی RTCM104v3 ناقص و دارای باگ است. تلاش نکنید از آن برای محیط‌های عملیاتی استفاده کنید! هر کسی که به آن علاقه‌مند است باید کد منبع را مطالعه کند.

پشتیبانی از AIS یک افزونه است. اگر نمونه gpsd شما با مجموعه‌ای از ویژگی‌های محدود ساخته شده باشد، ممکن است وجود نداشته باشد.

بسته‌های AIS به صورت اشیاء JSON با کلاس "AIS" خارج می‌شوند. هر شیء گزارش AIS شامل یک فیلد «type» است که نوع پیام AIS را مشخص می‌کند و یک فیلد «scaled» که نشان می‌دهد آیا بقیه فیلدها در قالب مقیاس‌بندی‌شده یا مقیاس‌بندی‌نشده صادر شده‌اند (این فیلدها قبل از هرگونه فیلد مخصوص نوع صادر می‌شوند). همچنین شامل یک فیلد «device» خواهد بود که منبع داده را نام می‌برد. سایر فیلدها دارای نام‌ها و انواعی هستند که در سند AIVDM/AIVDO Protocol Decoding در وب‌سایت پروژه GPSD مشخص شده است؛ جدول فیلد هر پیام ممکن است مستقیماً به عنوان مشخصاتی برای اعضای نوع شیء JSON متناظر تفسیر شود.

به طور پیش‌فرض، برخی عملیات‌های مقیاس‌بندی و تبدیل برای خروجی JSON انجام می‌شود. عرض‌ها و طول‌های جغرافیایی به جای واحد بومی AIS یعنی ۱/۱۰۰۰۰ دقیقه قوسی، به درجات اعشاری تبدیل می‌شوند. سرعت‌های کشتی (و نه هوایی) به جای واحدهای یک‌دهم گره، به گره مقیاس‌بندی می‌شوند. نرخ چرخش در صورت در دسترس نبودن ممکن است به صورت "nan" ظاهر شود، یا در صورتی که خارج از محدوده کدگذاری AIS باشد به صورت یکی از رشته‌های "fastright" یا "fastleft" نشان داده شود؛ در غیر این صورت به صورت درجه دوم به عدد حسگر چرخش بر حسب درجه در دقیقه نگاشت می‌شود. آبخور شناور به جای دسی‌مترهای بومی AIS به مترهای اعشاری تبدیل می‌شود. تبدیلات مقیاس‌بندی مختلف دیگری نیز در سند "AIVDM/AIVDO Protocol Decoding" شرح داده شده است.

پشتیبانی از Subframe همواره در gpsd کامپایل می‌شود، اما بسیاری از GPSها داده‌های subframe را خروجی نمی‌دهند یا ممکن است درایور gpsd از subframeها پشتیبانی نکند.

بسته‌های Subframe به صورت اشیاء JSON با کلاس "SUBFRAME" تخلیه می‌شوند. هر شیء گزارش subframe شامل یک فیلد «frame» است که شماره subframe را مشخص می‌کند، یک فیلد «tSV» برای شماره ماهواره ارسال‌کننده، یک فیلد «TOW17» حاوی ۱۷ بیت باارزش‌تر شروع پیام ۱۲ ثانیه‌ای بعدی و یک فیلد «scaled» که مشخص می‌کند آیا بقیه فیلدها به صورت مقیاس‌بندی‌شده تخلیه می‌شوند یا خیر. این شیء همچنین شامل یک فیلد «device» خواهد بود که نام منبع داده را مشخص می‌سازد. هر شیء SUBFRAME دارای یک زیر-شیء مختص به آن نوع صفحه subframe خواهد بود. فیلدهای آن زیر-شیء دارای نام‌ها و انواعی شبیه به موارد مشخص‌شده در سند IS-GPS-200 هستند؛ جدول فیلد هر پیام می‌تواند مستقیماً به عنوان مشخصاتی برای اعضای نوع شیء JSON متناظر تفسیر گردد.

جدول ۲۹. شیء SUBFRAME

نام همواره؟ نوع توضیحات
class بله string مقدار ثابت: "SUBFRAME"
device بله string نام دستگاه مبدا.
frame خیر integer شماره فریم
gnssId بله integer منظومه ماهواره ارسال‌کننده
scaled بله boolean در صورت مقیاس‌بندی مقادیر مقدار True است
tSV بله integer شناسه ماهواره ارسال‌کننده (نه PRN)
TOW17 خیر integer مقدار ۱۷ بیت زمان هفته GPS بعدی

این ساختار JSON به ماهواره‌های تکی بر اساس PRN، و با ترکیب شناسه منظومه (gnssid) و شناسه ماهواره (svid) اشاره می‌کند.

توجه داشته باشید: آنچه بیشتر افراد به عنوان PRN در نظر می‌گیرند، همان PRN نیست که هر منظومه (GPS, GLONASS, BeiDou و غیره) در مستندات خود استفاده می‌کند.

هر منظومه شماره‌گذاری PRNهای خود را از ۱ آغاز می‌کند. سامانه GPS تمام PRNها را تا ۱۰۲۳ رزرو کرده است. آنچه بیشتر کاربران به عنوان PRN می‌شناسند چیزی است که NMEA آن را PRN می‌نامد، که همان PRN استاندارد و بومی نیست. مقادیر NMEA PRN در ابتدا همان PRNهای GPS بودند، اما با در دسترس قرار گرفتن منظومه‌های دیگر، سازندگان گیرنده‌های GNSS آن فیلد NMEA را بارگذاری مضاعف (overload) کردند؛ بدون اینکه میان خود استانداردسازی یا هماهنگی انجام دهند. برخی گیرنده‌ها بسته به پیکربندی زمان اجرا، از نگاشت‌های مختلف PRN استفاده می‌کنند. انتظار هیچ‌گونه صراحت و قطعیتی در یک PRN متعلق به NMEA نداشته باشید؛ هیچ معنای مورد اجماعی برای آن وجود ندارد.

برای پشت سر گذاشتن این آشفتگی، سازندگان گیرنده‌ها اکنون به هر ماهواره با منظومه آن (GPS, GLONASS و غیره) و PRN آن (شروع از ۱) در آن منظومه اشاره می‌کنند.

برنامه gpsd به هر منظومه با gnssid و به هر ماهواره درون آن منظومه با PRN بومی آن (svid) اشاره می‌کند. البته هیچ استانداردسازی یا اجماعی روی این شناسه‌ها وجود ندارد، بنابراین gpsd خود در این باره تصمیم‌گیری کرده است. این شناسه‌ها تا حدی بر اساس کاربرد u-blox تعیین شده‌اند:

جدول ۳۰. جدول gnssid و svid

منظومه ماهواره‌ای اختصار gnssid svid (PRN بومی)
BeiDou BD 3 1-37
Galileo GA 2 1-36
GLONASS GL 6 1-32, 255
GPS GP 0 1-32
IMES IM 4 1-10
NavIC (IRNSS) IR 7 1-11
QZSS QZ 5 1-7
SBAS SB 1 120-158

البته ماجرا به اینجا ختم نمی‌شود. ماهواره‌های مدرن بر روی بیش از یک باند فرکانسی (L1, L2, L5 و غیره) و با استفاده از بیش از یک مدولاسیون سیگنال (C/a, CM, CL, P و غیره) ارسال می‌کنند. بنابراین یک ماهواره GPS با (gnssid = 0) و PRN بومی ۳ با (svid = 3) ممکن است روی باندهای L2 و L5 با استفاده از چندین مدولاسیون ارسال انجام دهد. هر یک از این‌ها ممکن است به صورت جداگانه توسط گیرنده شما با شناسه سیگنال (sigid) به همراه داده‌های مربوط به سلامت، SNR، وضعیت استفاده و غیره گزارش شوند.

اگر یک گیرنده چندبانده دارید و واقعاً می‌خواهید شناسه‌های sigid آن را درک کنید، برای صرف زمان زیادی با مستندات آن آماده باشید. با ظهور گیرنده‌های جدید با باندها و مدولاسیون‌های نوین، همگام ماندن با همه آن‌ها ناممکن است. در اینجا جدولی از برخی sigidهای شناخته‌شده برای gpsd آمده است:

جدول ۳۱. جدول sigid

منظومه ماهواره‌ای sigid نام سیگنال
BeiDou 0 B1I D1
1 B1I D2
2 B2I D1
3 B2I D2
7 B2a
Galileo 0 E1 C
1 E1 B
3 E5 aI
4 E5 aQ
5 E5 bl
6 E5 bQ
GLONASS 0 L1 OF
2 L2 OF
GPS 0 L1C/A
3 L2 CL
4 L2 CM
6 L5 I
7 L5 Q
IRNSS ??
QZSS 0 L1C/A
4 L2 CM
5 L2 CL
SBAS 0 L1C/A
? L5I

خواندن خروجی خام JSON می‌تواند خسته‌کننده باشد. شما می‌توانید برای خوانایی آسان‌تر، JSON خود را با ابزار [jq] زیباسازی و رنگ‌آمیزی کنید. استفاده از jq برای مرتب‌سازی و چاپ زیبای یک فایل JSON می‌تواند به سادگی زیر باشد:

$ jq .  GPSD.json

برای دریافت ۱۰ ثانیه از خروجی زنده JSON مربوط به gpsd و نمایش مرتب آن:

$ gpspipe -w -x 10 | jq .

اگر می‌خواهید فقط پیام‌های TPV را ببینید:

$ gpspipe -w -x 10 | fgrep TPV | jq .

gpsd(8), libgps(3), libgpsmm(3), jq(1)

تارنمای پروژه: https://gpsd.io/


[RFC 2783]: https://datatracker.ietf.org/doc/html/rfc2783
Pulse-Per-Second API for UNIX-like Operating Systems


[RFC 7159]: https://datatracker.ietf.org/doc/html/rfc7159
The JavaScript Object Notation (JSON) Data Interchange Format


[jq]: https://github.com/stedolan/jq

: https://maia.usno.navy.mil/ser7/tai-utc.dat جدول تصحیحات
UTC به TAI در USNO.

کپی‌رایت این فایل متعلق به پروژه GPSD است
SPDX-License-Identifier: BSD-2-clause

اریک اس. ریموند (Eric S. Raymond)

2025-11-08 GPSD, نسخه 3.27.5