summaryrefslogtreecommitdiffstats
path: root/native/android/sensor.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-07-13 22:21:56 -0700
committerMathias Agopian <mathias@google.com>2010-07-13 22:21:56 -0700
commitb957b9d63c88efd3a961759424987b99219adeed (patch)
tree930432d7a5ca739d27d494734de339a938ec7fb6 /native/android/sensor.cpp
parente558010a623ead3564fe4d656a5963bf05c17edd (diff)
downloadframeworks_base-b957b9d63c88efd3a961759424987b99219adeed.zip
frameworks_base-b957b9d63c88efd3a961759424987b99219adeed.tar.gz
frameworks_base-b957b9d63c88efd3a961759424987b99219adeed.tar.bz2
first step at implementing the native sensor support
in this commit: - implemented the C stub - implemented the binder interfaces involved - implemented most of the C++ client side missing: - SensorManager cannot connect to the SensorServer yet (because there is no SensorServer yet) Change-Id: I75010cbeef31c98d6fa62fd5d388dcef87c2636b
Diffstat (limited to 'native/android/sensor.cpp')
-rw-r--r--native/android/sensor.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp
new file mode 100644
index 0000000..7a3907e
--- /dev/null
+++ b/native/android/sensor.cpp
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "sensor"
+#include <utils/Log.h>
+
+#include <android/looper.h>
+#include <android/sensor.h>
+
+#include <utils/RefBase.h>
+#include <utils/PollLoop.h>
+#include <utils/Timers.h>
+
+#include <gui/Sensor.h>
+#include <gui/SensorManager.h>
+#include <gui/SensorEventQueue.h>
+
+#include <poll.h>
+
+using android::sp;
+using android::Sensor;
+using android::SensorManager;
+using android::SensorEventQueue;
+using android::String8;
+
+/*****************************************************************************/
+
+ASensorManager* ASensorManager_getInstance()
+{
+ return &SensorManager::getInstance();
+}
+
+int ASensorManager_getSensorList(ASensorManager* manager, ASensor** list)
+{
+ Sensor* l;
+ int c = static_cast<SensorManager*>(manager)->getSensorList(&l);
+ if (list) {
+ *list = l;
+ }
+ return c;
+}
+
+ASensor* ASensorManager_getDefaultSensor(ASensorManager* manager, int type)
+{
+ return static_cast<SensorManager*>(manager)->getDefaultSensor(type);
+}
+
+ASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager,
+ ALooper* looper, ALooper_callbackFunc* callback, void* data)
+{
+ sp<SensorEventQueue> queue =
+ static_cast<SensorManager*>(manager)->createEventQueue();
+ if (queue != 0) {
+ ALooper_addFd(looper, queue->getFd(), POLLIN, callback, data);
+ queue->looper = looper;
+ queue->incStrong(manager);
+ }
+ return static_cast<ASensorEventQueue*>(queue.get());
+}
+
+int ASensorManager_destroyEventQueue(ASensorManager* manager,
+ ASensorEventQueue* inQueue)
+{
+ sp<SensorEventQueue> queue = static_cast<SensorEventQueue*>(inQueue);
+ ALooper_removeFd(queue->looper, queue->getFd());
+ queue->decStrong(manager);
+ return 0;
+}
+
+/*****************************************************************************/
+
+int ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor* sensor)
+{
+ return static_cast<SensorEventQueue*>(queue)->enableSensor(
+ static_cast<Sensor*>(sensor));
+}
+
+int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor* sensor)
+{
+ return static_cast<SensorEventQueue*>(queue)->disableSensor(
+ static_cast<Sensor*>(sensor));
+}
+
+int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor* sensor,
+ int32_t usec)
+{
+ return static_cast<SensorEventQueue*>(queue)->setEventRate(
+ static_cast<Sensor*>(sensor), us2ns(usec));
+}
+
+int ASensorEventQueue_hasEvents(ASensorEventQueue* queue)
+{
+ struct pollfd pfd;
+ pfd.fd = static_cast<SensorEventQueue*>(queue)->getFd();
+ pfd.events = POLLIN;
+ pfd.revents = 0;
+
+ int nfd = poll(&pfd, 1, 0);
+
+ if (nfd < 0)
+ return -errno;
+
+ if (pfd.revents != POLLIN)
+ return -1;
+
+ return (nfd == 0) ? 0 : 1;
+}
+
+ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue,
+ ASensorEvent* events, size_t count)
+{
+ return static_cast<SensorEventQueue*>(queue)->read(events, count);
+}
+
+
+/*****************************************************************************/
+
+const char* ASensor_getName(ASensor* sensor)
+{
+ return static_cast<Sensor*>(sensor)->getName().string();
+}
+
+const char* ASensor_getVendor(ASensor* sensor)
+{
+ return static_cast<Sensor*>(sensor)->getVendor().string();
+}
+
+int ASensor_getType(ASensor* sensor)
+{
+ return static_cast<Sensor*>(sensor)->getType();
+}
+
+float ASensor_getResolution(ASensor* sensor)
+{
+ return static_cast<Sensor*>(sensor)->getResolution();
+}
+