#include #include #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 BpAndroidShm::getBuffer(int index) { Parcel data, reply; sp memHeap = NULL; data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor()); data.writeInt32(index); remote()->transact(HW_GETBUFFER, data, &reply); memHeap = interface_cast (reply.readStrongBinder()); return memHeap; } BpAndroidShm::BpAndroidShm( const sp& impl) : BpInterface(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 BpAndroidShm::InitSemaphore(const char* name) { Parcel data, reply; sp memHeap = NULL; data.writeInterfaceToken(IAndroidShm::getInterfaceDescriptor()); data.writeCString(name); status_t status = remote()->transact(HW_INIT_SEMAPHORE, data, &reply); memHeap = interface_cast (reply.readStrongBinder()); return memHeap; } };