|
- #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;
- }
- };
|