summaryrefslogtreecommitdiffstats
path: root/bcm4751_hal.c
diff options
context:
space:
mode:
authorPaulK <contact@paulk.fr>2012-03-18 17:39:18 +0100
committerPaulK <contact@paulk.fr>2012-03-18 17:39:18 +0100
commite4f94e901b9b4c5fef5642ad9580863fc2bfe336 (patch)
treee76ac49be65b47c654c953a4c30bf67577a91453 /bcm4751_hal.c
parent576f7826e43786d6293bae8887f1b6551247a092 (diff)
downloadbcm4751-e4f94e901b9b4c5fef5642ad9580863fc2bfe336.tar.gz
bcm4751-e4f94e901b9b4c5fef5642ad9580863fc2bfe336.tar.bz2
bcm4751-e4f94e901b9b4c5fef5642ad9580863fc2bfe336.zip
Added daemon, hal and lib modules and solved serial setup for bcm4751_test
Diffstat (limited to 'bcm4751_hal.c')
-rw-r--r--bcm4751_hal.c150
1 files changed, 150 insertions, 0 deletions
diff --git a/bcm4751_hal.c b/bcm4751_hal.c
new file mode 100644
index 0000000..d60bb9e
--- /dev/null
+++ b/bcm4751_hal.c
@@ -0,0 +1,150 @@
+// Copyright (C) 2012 Paul Kocialkowski, contact@paulk.fr, GNU GPLv3+
+// BCM4751 HAL code
+// This code will open the gps lib only: we can trace it that way
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <hardware/hardware.h>
+#include <hardware/gps.h>
+#include <hardware_legacy/power.h>
+
+#define WAKE_LOCK_NAME "GPS"
+
+hw_module_t* module;
+hw_device_t* device;
+
+static const GpsInterface* sGpsInterface = NULL;
+static const GpsXtraInterface* sGpsXtraInterface = NULL;
+static const AGpsInterface* sAGpsInterface = NULL;
+static const GpsNiInterface* sGpsNiInterface = NULL;
+static const GpsDebugInterface* sGpsDebugInterface = NULL;
+static const AGpsRilInterface* sAGpsRilInterface = NULL;
+
+static void location_callback(GpsLocation* location)
+{
+ printf("got a location callback!\n");
+}
+
+static void status_callback(GpsStatus* status)
+{
+ printf("got a status callback!\n");
+}
+
+static void sv_status_callback(GpsSvStatus* sv_status)
+{
+ printf("got a svstatus callback!\n");
+}
+
+static void nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)
+{
+ printf("got a nmea callback: %s!\n", nmea);
+}
+
+static void set_capabilities_callback(uint32_t capabilities)
+{
+ printf("set_capabilities_callback: %ld\n", capabilities);
+}
+
+
+static void acquire_wakelock_callback()
+{
+ acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME);
+}
+
+static void release_wakelock_callback()
+{
+ release_wake_lock(WAKE_LOCK_NAME);
+}
+
+static pthread_t create_thread_callback(const char* name, void (*start)(void *), void* arg)
+{
+ printf("doing a thread!\n");
+
+ pthread_t thread;
+ pthread_create(&thread, NULL, start, arg);
+ return thread;
+}
+
+GpsCallbacks sGpsCallbacks = {
+ sizeof(GpsCallbacks),
+ location_callback,
+ status_callback,
+ sv_status_callback,
+ nmea_callback,
+ set_capabilities_callback,
+ acquire_wakelock_callback,
+ release_wakelock_callback,
+ create_thread_callback,
+};
+
+void hal_init(void)
+{
+ int rc;
+ rc = hw_get_module("gps", (hw_module_t const**)&module);
+ printf("hw_get_module: %d\n", rc);
+
+ if(rc < 0)
+ return;
+
+ rc = module->methods->open(module, GPS_HARDWARE_MODULE_ID, &device);
+ printf("module->methods->open: %d\n", rc);
+
+ if(rc < 0)
+ return;
+
+ struct gps_device_t* gps_device = (struct gps_device_t *)device;
+ sGpsInterface = gps_device->get_gps_interface(gps_device);
+
+ if (sGpsInterface) {
+ printf("GPS interface ready\n");
+ sGpsXtraInterface =
+ (const GpsXtraInterface*)sGpsInterface->get_extension(GPS_XTRA_INTERFACE);
+ sAGpsInterface =
+ (const AGpsInterface*)sGpsInterface->get_extension(AGPS_INTERFACE);
+ sGpsNiInterface =
+ (const GpsNiInterface*)sGpsInterface->get_extension(GPS_NI_INTERFACE);
+ sGpsDebugInterface =
+ (const GpsDebugInterface*)sGpsInterface->get_extension(GPS_DEBUG_INTERFACE);
+ sAGpsRilInterface =
+ (const AGpsRilInterface*)sGpsInterface->get_extension(AGPS_RIL_INTERFACE);
+ }
+}
+
+void gps_init(void)
+{
+ int rc;
+ rc = sGpsInterface->init(&sGpsCallbacks);
+ printf("sGpsInterface->init: %d\n", rc);
+
+/*
+ // if XTRA initialization fails we will disable it by sGpsXtraInterface to null,
+ // but continue to allow the rest of the GPS interface to work.
+ if (sGpsXtraInterface && sGpsXtraInterface->init(&sGpsXtraCallbacks) != 0)
+ sGpsXtraInterface = NULL;
+ if (sAGpsInterface)
+ sAGpsInterface->init(&sAGpsCallbacks);
+ if (sGpsNiInterface)
+ sGpsNiInterface->init(&sGpsNiCallbacks);
+ if (sAGpsRilInterface)
+ sAGpsRilInterface->init(&sAGpsRilCallbacks);
+*/
+}
+
+int main(void)
+{
+ hal_init();
+ gps_init();
+
+ sleep(1);
+
+ printf("Starting GPS!\n");
+ sGpsInterface->start();
+ sleep(60);
+ printf("Stopping GPS!\n");
+ sGpsInterface->stop();
+
+ sleep(60);
+
+ return 0;
+}