// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Defines a wrapper around the C libgps API (gps.h). Similar to the libgpsmm.h // API provided by that package. #ifndef CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_ #define CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_ #pragma once #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "content/common/content_export.h" struct gps_data_t; struct Geoposition; class CONTENT_EXPORT LibGps { public: virtual ~LibGps(); // Attempts to dynamically load the libgps.so library and returns NULL on // failure. static LibGps* New(); bool Start(); void Stop(); bool Read(Geoposition* position); protected: typedef int (*gps_open_fn)(const char*, const char*, struct gps_data_t*); typedef int (*gps_close_fn)(struct gps_data_t*); typedef int (*gps_read_fn)(struct gps_data_t*); explicit LibGps(void* dl_handle, gps_open_fn gps_open, gps_close_fn gps_close, gps_read_fn gps_read); // Returns false if there is not fix available. virtual bool GetPositionIfFixed(Geoposition* position); private: void* dl_handle_; gps_open_fn gps_open_; gps_close_fn gps_close_; gps_read_fn gps_read_; scoped_ptr gps_data_; bool is_open_; DISALLOW_COPY_AND_ASSIGN(LibGps); }; #endif // CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_