Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Side by Side Diff: content/browser/geolocation/libgps_wrapper_linux.h

Issue 8463022: Make chrome communicate with gpsd through libgps/shared memory (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: fixing nits Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Defines a wrapper around the C libgps API (gps.h). Similar to the libgpsmm.h 5 // Defines a wrapper around the C libgps API (gps.h). Similar to the libgpsmm.h
6 // API provided by that package, but adds: 6 // API provided by that package.
7 // - shared object dynamic loading
8 // - support for (and abstraction from) different libgps.so versions
9 // - configurable for testing
10 // - more convenient error handling.
11 7
12 #ifndef CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_ 8 #ifndef CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_
13 #define CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_ 9 #define CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_
14 #pragma once 10 #pragma once
15 11
16 #include <string> 12 #include "base/basictypes.h"
13 #include "content/common/content_export.h"
14 #include "third_party/gpsd/release-3.1/gps.h"
joth 2011/11/11 18:40:40 could we keep this #include in the .cc ? even if w
Yufeng Shen (Slow to review) 2011/11/11 21:11:35 Done.
17 15
18 #include "base/memory/scoped_ptr.h" 16 COMPILE_ASSERT(GPSD_API_MAJOR_VERSION == 5, GPSD_API_version_is_not_5);
joth 2011/11/11 18:40:40 ...so this would have to go to the .cc too which s
Yufeng Shen (Slow to review) 2011/11/11 21:11:35 Done.
19 #include "base/time.h" 17 #define LIBGPS_VERSION "libgps.so.20"
joth 2011/11/11 18:40:40 use const char[] in anon namespace in the cc
Yufeng Shen (Slow to review) 2011/11/11 21:11:35 Done.
20 #include "content/common/content_export.h"
21 18
22 struct Geoposition; 19 struct Geoposition;
23 class LibGpsLibraryWrapper;
24 20
25 class CONTENT_EXPORT LibGps { 21 class CONTENT_EXPORT LibGps {
26 public: 22 public:
27 virtual ~LibGps(); 23 virtual ~LibGps();
28 // Attempts to dynamically load the libgps.so library, and creates and 24 // Attempts to dynamically load the libgps.so library and returns NULL on
29 // appropriate LibGps instance for the version loaded. Returns NULL on
30 // failure. 25 // failure.
31 static LibGps* New(); 26 static LibGps* New();
32 27
33 bool Start(); 28 bool Start();
34 void Stop(); 29 void Stop();
35 bool Poll(); 30 bool Read(Geoposition* position);
36 bool GetPosition(Geoposition* position);
37 31
38 protected: 32 protected:
39 // Takes ownership of |dl_wrapper|. 33 typedef int (*gps_open_fn)(const char*, const char*, struct gps_data_t*);
40 explicit LibGps(LibGpsLibraryWrapper* dl_wrapper); 34 typedef int (*gps_close_fn)(struct gps_data_t*);
35 typedef int (*gps_read_fn)(struct gps_data_t*);
41 36
42 LibGpsLibraryWrapper& library() { 37 explicit LibGps(void* dl_handle,
43 return *library_; 38 gps_open_fn gps_open,
44 } 39 gps_close_fn gps_close,
45 // Called be start Start after successful |gps_open| to setup streaming. 40 gps_read_fn gps_read);
46 virtual bool StartStreaming() = 0; 41
47 virtual bool DataWaiting() = 0;
48 // Returns false if there is not fix available. 42 // Returns false if there is not fix available.
49 virtual bool GetPositionIfFixed(Geoposition* position) = 0; 43 virtual bool GetPositionIfFixed(Geoposition* position);
50
51 private:
52 // Factory functions to create instances of LibGps using the corresponding
53 // libgps API versions (v2.38 => libgps.so.17, v2.94 => libgps.so.19).
54 // See LibGps::New() for the public API to this.
55 // Takes ownership of |dl_wrapper|.
56 static LibGps* NewV294(LibGpsLibraryWrapper* dl_wrapper);
57
58 scoped_ptr<LibGpsLibraryWrapper> library_;
59 std::string last_error_;
60
61 DISALLOW_COPY_AND_ASSIGN(LibGps);
62 };
63
64 struct gps_data_t;
65
66 // Wraps the low-level shared object, binding C++ member functions onto the
67 // underlying C functions obtained from the library.
68 class CONTENT_EXPORT LibGpsLibraryWrapper {
69 public:
70 typedef gps_data_t* (*gps_open_fn)(const char*, const char*);
71 typedef int (*gps_close_fn)(gps_data_t*);
72 typedef int (*gps_poll_fn)(gps_data_t*);
73 // v2.90+
74 typedef int (*gps_stream_fn)(gps_data_t*, unsigned int, void*);
75 typedef bool (*gps_waiting_fn)(gps_data_t*);
76
77 LibGpsLibraryWrapper(void* dl_handle,
78 gps_open_fn gps_open,
79 gps_close_fn gps_close,
80 gps_poll_fn gps_poll,
81 gps_stream_fn gps_stream,
82 gps_waiting_fn gps_waiting);
83 ~LibGpsLibraryWrapper();
84
85 // Analogs of gps_xxx methods in gps.h
86 bool open(const char* host, const char* port);
87 void close();
88 int poll();
89 int stream(int flags);
90 bool waiting();
91 const gps_data_t& data() const;
92 bool is_open() const;
93 44
94 private: 45 private:
95 void* dl_handle_; 46 void* dl_handle_;
96 gps_open_fn gps_open_; 47 gps_open_fn gps_open_;
97 gps_close_fn gps_close_; 48 gps_close_fn gps_close_;
98 gps_poll_fn gps_poll_; 49 gps_read_fn gps_read_;
99 gps_stream_fn gps_stream_;
100 gps_waiting_fn gps_waiting_;
101 50
102 gps_data_t* gps_data_; 51 gps_data_t gps_data_;
52 bool is_open_;
103 53
104 DISALLOW_COPY_AND_ASSIGN(LibGpsLibraryWrapper); 54 DISALLOW_COPY_AND_ASSIGN(LibGps);
105 }; 55 };
106 56
107 #endif // CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_ 57 #endif // CONTENT_BROWSER_GEOLOCATION_LIBGPS_WRAPPER_LINUX_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698