📄 xgps.c
字号:
(void)XtVaCreateManagedWidget("Latitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Longitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Altitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Speed", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); text_1 = XtVaCreateManagedWidget("time", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_2 = XtVaCreateManagedWidget("latitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_3 = XtVaCreateManagedWidget("longitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_4 = XtVaCreateManagedWidget("altitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_5 = XtVaCreateManagedWidget("speed", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); (void)XtVaCreateManagedWidget("EPH", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("EPV", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Climb", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Track", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Status", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); text_7 = XtVaCreateManagedWidget("eph", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_8 = XtVaCreateManagedWidget("epv", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_9 = XtVaCreateManagedWidget("climb", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_6 = XtVaCreateManagedWidget("track", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_10 = XtVaCreateManagedWidget("status", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); XtManageChild(gps_data); XtManageChild(sat_frame); XtManageChild(sky_frame); XtManageChild(gps_frame); XtVaSetValues(main_w, XmNmenuBar, menubar, XmNworkWindow, form, NULL); XtRealizeWidget(toplevel); /*@ -type -nullpass @*/ delw = XmInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", (Boolean)False); (void)XmAddWMProtocolCallback(toplevel, delw, (XtCallbackProc)quit_cb, NULL); /*@ +type +onlytrans @*/ /* create empty list items to be replaced on update */ string = XmStringCreateSimple(" "); for (i = 0; i <= MAXCHANNELS; i++) XmListAddItem(satellite_list, string, 0); XmStringFree(string);}/*@ +mustfreefresh -ignoresigns +immediatetrans @*//* runs when there is no data for a while */static voidhandle_time_out(XtPointer client_data, XtIntervalId *ignored){ XmTextFieldSetString(text_10, "UNKNOWN");}static voidhandle_input(XtPointer client_data, int *source, XtInputId *id){ if (gps_poll(gpsdata) < 0) { XtRemoveInput(gps_input); (void)gps_close(gpsdata); XtRemoveTimeOut(timeout); XmTextFieldSetString(text_10, "No GPS data available"); (void)err_dialog(toplevel, "No GPS data available.\n\n" "Check the connection to gpsd and if gpsd is running"); gps_lost = true; gps_timeout = XtAppAddTimeOut(app, 3000, handle_gps, app); }}/* runs on each sentence */static voidupdate_panel(struct gps_data_t *gpsdata, char *message, size_t len UNUSED, int level UNUSED){ unsigned int i; int newstate; XmString string[MAXCHANNELS + 1]; char s[128], *latlon, *sp; /* the raw data sisplay */ if (message[0] != '\0') while (isspace(*(sp = message + strlen(message) - 1))) *sp = '\0'; XmTextFieldSetString(status, message); /* This is for the satellite status display */ if (gpsdata->satellites) { string[0] = XmStringCreateSimple( "PRN: Elev: Azim: SNR: Used:"); for (i = 0; i < MAXCHANNELS; i++) { if (i < (unsigned int)gpsdata->satellites) { (void)snprintf(s, sizeof(s), " %3d %2d %3d %2d %c", gpsdata->PRN[i], gpsdata->elevation[i], gpsdata->azimuth[i], gpsdata->ss[i], gpsdata->used[i] ? 'Y' : 'N'); } else (void)strlcpy(s, " ", sizeof(s)); string[i + 1] = XmStringCreateSimple(s); } XmListReplaceItemsPos(satellite_list, string, (int)sizeof(string), 1);#ifndef S_SPLINT_S for (i = 0; i < (sizeof(string)/sizeof(string[0])); i++) XmStringFree(string[i]);#endif /* S_SPLINT_S */ } /* here are the value fields */ if (isnan(gpsdata->fix.time)==0) { (void)unix_to_iso8601(gpsdata->fix.time, s, sizeof(s)); XmTextFieldSetString(text_1, s); } else XmTextFieldSetString(text_1, "n/a"); if (gpsdata->fix.mode >= MODE_2D) { latlon = deg_to_str(deg_type, fabs(gpsdata->fix.latitude)); (void)snprintf(s, sizeof(s), "%s %c", latlon, (gpsdata->fix.latitude < 0) ? 'S' : 'N'); XmTextFieldSetString(text_2, s); } else XmTextFieldSetString(text_2, "n/a"); if (gpsdata->fix.mode >= MODE_2D) { latlon = deg_to_str(deg_type, fabs(gpsdata->fix.longitude)); (void)snprintf(s, sizeof(s), "%s %c", latlon, (gpsdata->fix.longitude < 0) ? 'W' : 'E'); XmTextFieldSetString(text_3, s); } else XmTextFieldSetString(text_3, "n/a"); if (gpsdata->fix.mode == MODE_3D) { (void)snprintf(s, sizeof(s), "%f %s", gpsdata->fix.altitude * altunits->factor, altunits->legend); XmTextFieldSetString(text_4, s); } else XmTextFieldSetString(text_4, "n/a"); if (gpsdata->fix.mode >= MODE_2D && isnan(gpsdata->fix.track)==0) { (void)snprintf(s, sizeof(s), "%f %s", gpsdata->fix.speed * speedunits->factor, speedunits->legend); XmTextFieldSetString(text_5, s); } else XmTextFieldSetString(text_5, "n/a"); if (gpsdata->fix.mode >= MODE_2D && isnan(gpsdata->fix.track)==0) { (void)snprintf(s, sizeof(s), "%f degrees",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -