1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 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;
}
};
|