void LocatoinData::timerEvent(QTimerEvent *timerevent) { bps_event_t *event = NULL; bps_get_event(&event, -1); if (event) { if (bps_event_get_domain(event) == geolocation_get_domain()) { Q_EMIT sourceUpdated(d->geoLocationEvent(event)); } else { qDebug() << Q_FUNC_INFO << "Not a Geo Info Event"; geolocation_stop_events(0); this->startGeoTracking(); } } else { qDebug() << Q_FUNC_INFO << "Event not ready"; } }
/** * The main entry point. */ int main(int argc, char *argv[]) { pthread_t accel_thread; bool exit_application = false; int rc; /* * Before we can listen for events from the BlackBerry Tablet OS platform * services, we need to initialize the BPS infrastructure */ bps_initialize(); /* * Initialize the screen so that the window group Id is properly set, * to allow the dialogs to be displayed. */ if (setup_screen() != EXIT_SUCCESS) { fprintf(stderr, "Unable to initialize screen."); exit(-1); } /* * Once the BPS infrastructure has been initialized we can register for * events from the various BlackBerry Tablet OS platform services. The * Navigator service manages and delivers application life cycle and * visibility events. * * We register a custom event domain so that we can communicate with the * the accelerometer thread. We will need to tell it to quit once we get * the NAVIGATOR_EXIT. * * We request Navigator events so that we can track when the system is * terminating the application (NAVIGATOR_EXIT event). * */ local_event_domain = bps_register_domain(); if (local_event_domain == -1) { fprintf(stderr, "Error registering custom event domain: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != navigator_request_events(0)) { fprintf(stderr, "Error requesting navigator events: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != dialog_request_events(0)) { fprintf(stderr, "Error requesting dialog events: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != geolocation_request_events(0)) { fprintf(stderr, "Error requesting geolocation events: %s", strerror(errno)); exit(-1); } geolocation_set_period(1); /* * Create and display the dialogs that will show the data. */ create_top_dialog(); show_top_dialog_message("Geolocation getting first fix"); /* * Before initializing the accelerometer service we must ensure the device * supports it. */ if (!sensor_is_supported(SENSOR_TYPE_ACCELEROMETER)) { /** * If the device does not support accelerometer then notify the user, * clean up and exit */ snprintf(msg, MSG_SIZE, "Accelerometer not supported by device!"); show_top_dialog_message(msg); /* * Destroy the dialog, if it exists and cleanup screen resources. */ destroy_top_dialog(); cleanup_screen(); bps_shutdown(); return EXIT_FAILURE; } /* * Create the accelerometer event thread. */ rc = pthread_create(&accel_thread, NULL, accel_main, NULL); if (rc != 0) { fprintf(stderr, "Error in pthread_create: %s", strerror(errno)); exit(-1); } while (!exit_application) { /* * Using a negative timeout (-1) in the call to bps_get_event(...) * ensures that we don't busy wait by blocking until an event is * available. */ bps_event_t *event = NULL; bps_get_event(&event, -1); if (event) { if (bps_event_get_domain(event) == geolocation_get_domain()) { handle_geolocation_response(event); } else if (bps_event_get_domain(event) == navigator_get_domain()) { exit_application = handle_navigator_event(event); } } } geolocation_stop_events(0); /* * Avoid a possible race condition where accel_chid has not yet * been assigned a valid channel ID. */ pthread_mutex_lock(&chidMutex); while (accel_chid == -1) { pthread_cond_wait(&chidCond, &chidMutex); } pthread_mutex_unlock(&chidMutex); bps_event_t *stop_request_event = NULL; if (BPS_SUCCESS != bps_event_create(&stop_request_event, local_event_domain, STOP_REQUEST, NULL, NULL)) { fprintf(stderr, "Unable to create event: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != bps_channel_push_event(accel_chid, stop_request_event)) { fprintf(stderr, "Unable to push event: %s", strerror(errno)); } pthread_join(accel_thread, NULL); /* * Destroy the dialog, if it exists. */ destroy_top_dialog(); bps_shutdown(); cleanup_screen(); return 0; }
/** * A sample application that demonstrates the BlackBerry(R) 10 Native SDK APIs * for geolocation. */ int main(int argc, char *argv[]) { bool exit_application = false; /* * Before we can listen for events from the BlackBerry(R) 10 OS platform * services, we need to initialize the BPS infrastructure */ bps_initialize(); /* * Initialize the screen so that the window group Id is properly set, to allow * the dialogs to be displayed. */ if (setup_screen() != EXIT_SUCCESS) { fprintf(stderr, "Unable to initialize screen."); exit(-1); } /* * Once the BPS infrastructure has been initialized we can register for * events from the various BlackBerry(R) 10 OS platform services. The * Navigator service manages and delivers application life cycle and * visibility events. * * For this sample, we request Navigator events so that we can track when * the system is terminating the application (NAVIGATOR_EXIT event). * * We request dialog events so we can be notified when the dialog service * responds to our requests/queries. * * We request geolocation events so that we can be notified of our current * geolocation. */ if (BPS_SUCCESS != navigator_request_events(0)) { fprintf(stderr, "Error requesting navigator events: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != dialog_request_events(0)) { fprintf(stderr, "Error requesting dialog events: %s", strerror(errno)); exit(-1); } if (BPS_SUCCESS != geolocation_request_events(0)) { fprintf(stderr, "Error requesting geolocation events: %s", strerror(errno)); exit(-1); } /* * Get geolocation events once a second, which is the most often that they * are capable of being reported. */ geolocation_set_period(1); /* * Create and display the dialog that will show the geolocation data. */ create_dialog(); show_dialog_message("Geolocation getting first fix"); /* * Process Geolocation, Dialog and Navigator events until we receive a * NAVIGATOR_EXIT event. */ while (!exit_application) { /* * Using a negative timeout (-1) in the call to bps_get_event(...) * ensures that we don't busy wait by blocking until an event is * available. */ bps_event_t *event = NULL; bps_get_event(&event, -1); if (event) { /* * If it is a geolocation event, determine the response code and * handle the event accordingly. */ if (bps_event_get_domain(event) == geolocation_get_domain()) { handle_geolocation_response(event); } /* * If it is a dialog event, determine the response code and handle * the event accordingly. */ else if (bps_event_get_domain(event) == dialog_get_domain()) { /* We have no buttons so we don't need to do anything. */ ; } /* * If it is a NAVIGATOR_EXIT event then set the exit_application * flag so the application will stop processing events, clean up and * exit. */ else if (bps_event_get_domain(event) == navigator_get_domain()) { exit_application = handle_navigator_event(event); } } } /* * Stop geolocation events. */ geolocation_stop_events(0); /* * Destroy the dialog, if it exists. */ destroy_dialog(); /* * Clean up the bps infrastructure and exit */ bps_shutdown(); cleanup_screen(); return 0; }
Q_DECL_EXPORT #endif int main(int argc, char *argv[]) { qsrand(QDateTime::currentDateTimeUtc().toTime_t()); #if defined(BUILD_FOR_SAILFISHOS) //To support calendar access #if defined(BUILD_FOR_OPENREPOS) qDebug()<<"openrepos.net build"; setuid(getpwnam("nemo")->pw_uid); setgid(getgrnam("privileged")->gr_gid); #endif QGuiApplication* app = SailfishApp::application(argc, argv); #elif defined(HAVE_DECLARATIVE_CACHE) QApplication* app = MDeclarativeCache::qApplication(argc, argv); #elif defined(BUILD_FOR_UBUNTU) QGuiApplication* app = new QGuiApplication(argc, argv); app->setWindowIcon(QIcon(":/fahrplan2.svg")); #else QApplication* app = new QApplication(argc, argv); #if defined(BUILD_FOR_DESKTOP) app->setWindowIcon(QIcon(":/fahrplan2_64.png")); #endif #endif QString localeName = QLocale().name(); qDebug() <<"Using "<<localeName<<" locale"; // Install translations QTranslator translator; translator.load(QString("fahrplan_%1").arg(localeName), ":/translations"); app->installTranslator(&translator); qDebug()<<"Startup"; qRegisterMetaType<Station>(); qRegisterMetaType<StationsList>(); qRegisterMetaType<TimetableEntry>(); qRegisterMetaType<TimetableEntriesList>(); qRegisterMetaType<Fahrplan::StationType>(); qRegisterMetaType<Fahrplan::Mode>(); #if defined(BUILD_FOR_HARMATTAN) || defined(BUILD_FOR_MAEMO_5) || defined(BUILD_FOR_SYMBIAN) || defined(BUILD_FOR_BLACKBERRY) || defined(BUILD_FOR_UBUNTU) || defined(BUILD_FOR_SAILFISHOS) qDebug()<<"QML"; qmlRegisterType<Fahrplan>("Fahrplan", 1, 0, "FahrplanBackend"); qmlRegisterType<ParserAbstract>("Fahrplan", 1, 0, "ParserAbstract"); qmlRegisterType<FahrplanParserThread>("Fahrplan", 1, 0, "FahrplanParserThread"); qmlRegisterType<FahrplanCalendarManager>("Fahrplan", 1, 0, "CalendarManager"); qmlRegisterUncreatableType<StationSearchResults>("Fahrplan", 1, 0, "StationSearchResults" , "StationSearchResults cannot be created from QML. " "Access it through FahrplanBackend.stationSearchResults."); qmlRegisterUncreatableType<Favorites>("Fahrplan", 1, 0, "Favorites" , "Favorites cannot be created from QML. " "Access it through FahrplanBackend.favorites."); qmlRegisterUncreatableType<Timetable>("Fahrplan", 1, 0, "Timetable" , "Timetable cannot be created from QML. " "Access it through FahrplanBackend.timetable."); qmlRegisterUncreatableType<Trainrestrictions>("Fahrplan", 1, 0, "Trainrestrictions" , "Trainrestrictions cannot be created from QML. " "Access it through FahrplanBackend.trainrestrictions."); qmlRegisterUncreatableType<Backends>("Fahrplan", 1, 0, "Backends" , "Backends cannot be created from QML. " "Access it through FahrplanBackend.backends."); qmlRegisterType<JourneyResultList>("Fahrplan", 1, 0, "JourneyResultList"); qmlRegisterType<JourneyResultItem>("Fahrplan", 1, 0, "JourneyResultItem"); qmlRegisterType<JourneyDetailResultList>("Fahrplan", 1, 0, "JourneyDetailResultList"); qmlRegisterType<JourneyDetailResultItem>("Fahrplan", 1, 0, "JourneyDetailResultItem"); #if defined(BUILD_FOR_SAILFISHOS) QQuickView *view = SailfishApp::createView(); #elif defined(HAVE_DECLARATIVE_CACHE) QDeclarativeView* view = MDeclarativeCache::qDeclarativeView(); #elif defined(BUILD_FOR_QT5) QQuickView *view = new QQuickView(); #else QDeclarativeView* view = new QDeclarativeView(); #endif #if defined(BUILD_FOR_HARMATTAN) qDebug()<<"Harmattan"; view->setSource(QUrl("qrc:/src/gui/harmattan/main.qml")); view->showFullScreen(); #elif defined(BUILD_FOR_MAEMO_5) qDebug()<<"Maemo5"; qmlRegisterType<HildonHelper>("HildonHelper", 1, 0, "HildonHelper"); view->setSource(QUrl("qrc:/src/gui/fremantle/main.qml")); view->show(); #elif defined(BUILD_FOR_SYMBIAN) qDebug()<<"Symbian"; view->setSource(QUrl("qrc:/src/gui/symbian/main.qml")); view->showFullScreen(); #elif defined(BUILD_FOR_UBUNTU) qDebug()<<"Ubuntu"; view->setSource(QUrl("qrc:/src/gui/ubuntu/main.qml")); view->setResizeMode(QQuickView::SizeRootObjectToView); view->show(); QSettings settings(FAHRPLAN_SETTINGS_NAMESPACE, "fahrplan2"); view->setGeometry(settings.value("geometry", QRect(100, 100, 400, 600)).toRect()); #elif defined(BUILD_FOR_SAILFISHOS) qDebug()<<"SailfishOs"; view->setSource(QUrl("qrc:/src/gui/sailfishos/main.qml")); view->showFullScreen(); #elif defined(BUILD_FOR_BLACKBERRY) qDebug() << "Blackberry"; // QML wrapper around Qt Mobility Subset qmlRegisterType<QtMobilitySubset::BlackBerryPositionSource>("QtMobility.location", 1, 1, "PositionSource"); qmlRegisterUncreatableType<QtMobilitySubset::BlackBerryPosition>("QtMobility.location", 1, 1, "Position", "Cant't create Position type"); qmlRegisterUncreatableType<QtMobilitySubset::BlackBerryCoordinate>("QtMobility.location", 1, 1, "Coordinate", "Cant't create Coordinate type"); QSettings *settings = new QSettings(FAHRPLAN_SETTINGS_NAMESPACE, "fahrplan2"); // Check if GPS Location permission is set // and geolocation services are enabled. int res = geolocation_request_events(0); if (res == BPS_SUCCESS) geolocation_stop_events(0); settings->setValue("enableGps", res == BPS_SUCCESS); delete settings; // Improves touch handling QApplication::setStartDragDistance(42); QGLWidget *gl = new QGLWidget(); view->setViewport(gl); view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); view->setSource(QUrl("qrc:/src/gui/symbian/main.qml")); // Hide Symbian-style status bar on BlackBerry view->rootObject()->setProperty("showStatusBar", false); view->showFullScreen(); #endif #else qDebug()<<"Desktop"; MainWindow w; w.show(); #endif qDebug()<<"Exec"; int error = app->exec(); #if defined(BUILD_FOR_UBUNTU) settings.setValue("geometry", view->geometry()); #endif #ifndef Q_OS_BLACKBERRY // For some reason, this causes a weird freeze of // Fahrplan on BlackBerry 10 so that it can only // be closed by restarting the phone. delete app; #endif return error; }
LocatoinData::~LocatoinData() { geolocation_stop_events(0); bps_shutdown(); delete d; }