use a socketpair instead of a pipe in BitTube

Bug: 6252830
Change-Id: Ia7a7b08409517214136261c05569dc5959a597ab
diff --git a/include/gui/BitTube.h b/include/gui/BitTube.h
index 76389a0..3022d05 100644
--- a/include/gui/BitTube.h
+++ b/include/gui/BitTube.h
@@ -22,6 +22,7 @@
 
 #include <utils/Errors.h>
 #include <utils/RefBase.h>
+#include <cutils/log.h>
 
 
 namespace android {
@@ -43,9 +44,27 @@
 
     status_t writeToParcel(Parcel* reply) const;
 
+    template <typename T>
+    static ssize_t sendObjects(const sp<BitTube>& tube,
+            T const* events, size_t count) {
+        return sendObjects(tube, events, count, sizeof(T));
+    }
+
+    template <typename T>
+    static ssize_t recvObjects(const sp<BitTube>& tube,
+            T* events, size_t count) {
+        return recvObjects(tube, events, count, sizeof(T));
+    }
+
 private:
     int mSendFd;
     mutable int mReceiveFd;
+
+    static ssize_t sendObjects(const sp<BitTube>& tube,
+            void const* events, size_t count, size_t objSize);
+
+    static ssize_t recvObjects(const sp<BitTube>& tube,
+            void* events, size_t count, size_t objSize);
 };
 
 // ----------------------------------------------------------------------------
diff --git a/include/gui/DisplayEventReceiver.h b/include/gui/DisplayEventReceiver.h
index 7bca8d6..e631cca 100644
--- a/include/gui/DisplayEventReceiver.h
+++ b/include/gui/DisplayEventReceiver.h
@@ -89,7 +89,7 @@
     int getFd() const;
 
     /*
-     * getEvents reads event from the queue and returns how many events were
+     * getEvents reads events from the queue and returns how many events were
      * read. Returns 0 if there are no more events or a negative error code.
      * If NOT_ENOUGH_DATA is returned, the object has become invalid forever, it
      * should be destroyed and getEvents() shouldn't be called again.
@@ -99,6 +99,13 @@
             Event* events, size_t count);
 
     /*
+     * sendEvents write events to the queue and returns how many events were
+     * written.
+     */
+    static ssize_t sendEvents(const sp<BitTube>& dataChannel,
+            Event const* events, size_t count);
+
+    /*
      * setVsyncRate() sets the Event::VSync delivery rate. A value of
      * 1 returns every Event::VSync. A value of 2 returns every other event,
      * etc... a value of 0 returns no event unless  requestNextVsync() has
diff --git a/include/gui/SensorEventQueue.h b/include/gui/SensorEventQueue.h
index ef7c6e3..759b5cb 100644
--- a/include/gui/SensorEventQueue.h
+++ b/include/gui/SensorEventQueue.h
@@ -54,7 +54,10 @@
     virtual void onFirstRef();
 
     int getFd() const;
-    ssize_t write(ASensorEvent const* events, size_t numEvents);
+
+    static ssize_t write(const sp<BitTube>& tube,
+            ASensorEvent const* events, size_t numEvents);
+
     ssize_t read(ASensorEvent* events, size_t numEvents);
 
     status_t waitForEvent() const;