summaryrefslogtreecommitdiff
path: root/android/BpAndroidShm.cpp
diff options
context:
space:
mode:
authorKimJeongYeon <see2002@gmail.com>2014-02-05 00:38:12 +0900
committerKimJeongYeon <see2002@gmail.com>2014-02-05 00:38:12 +0900
commit4a94e12986b7f4925b0d457af8c3464ffbef2e2b (patch)
treeedc75c222bd44a92170e6a0c12932266061c5b84 /android/BpAndroidShm.cpp
parent0742159cfa0cf403d5ba118fbf73bd089e6f10c2 (diff)
downloadjack2-4a94e12986b7f4925b0d457af8c3464ffbef2e2b.tar.gz
jack2 supports android devices & rebase current changes to master
Diffstat (limited to 'android/BpAndroidShm.cpp')
-rw-r--r--android/BpAndroidShm.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/android/BpAndroidShm.cpp b/android/BpAndroidShm.cpp
new file mode 100644
index 00000000..49dc8c47
--- /dev/null
+++ b/android/BpAndroidShm.cpp
@@ -0,0 +1,111 @@
+#include <binder/Parcel.h>
+#include <utils/Log.h>
+#include "BpAndroidShm.h"
+
+namespace android{
+
+ int BpAndroidShm::sendCommand(const char*command) {
+ Parcel data, reply;
+ data.writeInterfaceToken(
+ IAndroidShm::getInterfaceDescriptor());
+ data.writeCString(command);
+ status_t status = remote()->transact(HW_SENDCOMMAND, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print sendCommand error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ sp<IMemoryHeap> BpAndroidShm::getBuffer(int index) {
+ Parcel data, reply;
+ sp<IMemoryHeap> memHeap = NULL;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeInt32(index);
+ remote()->transact(HW_GETBUFFER, data, &reply);
+ memHeap = interface_cast<IMemoryHeap> (reply.readStrongBinder());
+ return memHeap;
+ }
+
+ BpAndroidShm::BpAndroidShm( const sp<IBinder>& impl)
+ : BpInterface<IAndroidShm>(impl)
+ {}
+
+ BpAndroidShm::~BpAndroidShm()
+ {}
+
+ int BpAndroidShm::allocShm(const int size) { // if negative return value is error
+ Parcel data, reply;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeInt32(size);
+ status_t status = remote()->transact(HW_ALLOC_SHM, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print allocShm error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ int BpAndroidShm::removeShm(const unsigned int index) { // shared memory Á¦°Å
+ Parcel data, reply;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeInt32(index);
+ status_t status = remote()->transact(HW_REMOVE_SHM, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print removeShm error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ int BpAndroidShm::isAllocated(const unsigned int index) { // allocated ¿©ºÎ È®ÀÎ
+ Parcel data, reply;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeInt32(index);
+ status_t status = remote()->transact(HW_IS_ALLOCATED, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print isAllocated error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ int BpAndroidShm::setRegistryIndex(const unsigned int index) {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeInt32(index);
+ status_t status = remote()->transact(HW_SET_REGISTRY_INDEX, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print setRegistryIndex error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ int BpAndroidShm::getRegistryIndex() {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ status_t status = remote()->transact(HW_GET_REGISTRY_INDEX, data, &reply);
+ if(status != NO_ERROR) {
+ ALOGE("print getRegistryIndex error: %s", strerror(-status));
+ } else {
+ status= reply.readInt32();
+ }
+ return status;
+ }
+
+ sp<IMemoryHeap> BpAndroidShm::InitSemaphore(const char* name) {
+ Parcel data, reply;
+ sp<IMemoryHeap> memHeap = NULL;
+ data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor());
+ data.writeCString(name);
+ status_t status = remote()->transact(HW_INIT_SEMAPHORE, data, &reply);
+ memHeap = interface_cast<IMemoryHeap> (reply.readStrongBinder());
+ return memHeap;
+ }
+};