[MultiDisplay] reformat msg. Add Query when app starts
bug: 135138302 128857705
Test: Manual
Change-Id: I6f5122f0ea3459ede27f686de678c677df280cfc
Merged-In: I6f5122f0ea3459ede27f686de678c677df280cfc
diff --git a/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp b/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
index 350b471..ef4a053 100644
--- a/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
+++ b/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
@@ -39,6 +39,21 @@
using namespace android;
static int gFd = 0;
+static const uint8_t ADD = 1;
+static const uint8_t DEL = 2;
+static const uint8_t QUERY = 3;
+static const uint8_t BIND = 4;
+
+static void fillMsg(std::vector<uint8_t>& buf, uint8_t cmd, uint8_t* data, uint32_t size) {
+ // msg format is size(4B) + cmd(1B) + data(size B)
+ uint32_t totalSize = size + 1;
+ uint8_t* p = (uint8_t*)&totalSize;
+ buf.insert(buf.end(), p, p + 4);
+ buf.push_back(cmd);
+ if (data) {
+ buf.insert(buf.end(), data, data + size);
+ }
+}
struct FrameListener : public ConsumerBase::FrameAvailableListener {
sp<BufferItemConsumer> mConsumer;
@@ -54,8 +69,10 @@
if (mCb != cb->hostHandle) {
ALOGI("sent cb %d", cb->hostHandle);
mCb = cb->hostHandle;
- std::vector<uint32_t> data = {8, mId, mCb};
- WriteFully(gFd, data.data(), data.size() * sizeof(uint32_t));
+ uint32_t data[] = {mId, mCb};
+ std::vector<uint8_t> buf;
+ fillMsg(buf, BIND, (uint8_t*)data, sizeof(data));
+ WriteFully(gFd, buf.data(), buf.size());
}
}
else {
@@ -93,14 +110,15 @@
if (gFd < 0) {
ALOGE("Error opening multidisplay pipe %d", gFd);
} else {
+ std::vector<uint8_t> buf;
+ fillMsg(buf, QUERY, nullptr, 0);
+ WriteFully(gFd, buf.data(), buf.size());
ALOGI("multidisplay pipe connected!!!");
}
return gFd;
}
static bool nativeReadPipe(JNIEnv* env, jobject obj, jintArray arr) {
- static const uint8_t ADD = 1;
- static const uint8_t DEL = 2;
int* arrp = env->GetIntArrayElements(arr, 0);
uint32_t length;
ReadFully(gFd, &length, sizeof(length));