127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <stdint.h> 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <sys/types.h> 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/Parcel.h> 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/IPCThreadState.h> 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <drm/drm_framework_common.h> 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <drm/DrmInfoEvent.h> 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "IDrmServiceListener.h" 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiusing namespace android; 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t BpDrmServiceListener::notify(const DrmInfoEvent& event) { 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Parcel data, reply; 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data.writeInterfaceToken(IDrmServiceListener::getInterfaceDescriptor()); 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data.writeInt32(event.getUniqueId()); 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data.writeInt32(event.getType()); 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi data.writeString8(event.getMessage()); 3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi remote()->transact(NOTIFY, data, &reply); 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return reply.readInt32(); 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiIMPLEMENT_META_INTERFACE(DrmServiceListener, "drm.IDrmServiceListener"); 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t BnDrmServiceListener::onTransact( 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi switch (code) { 4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi case NOTIFY: 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi { 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi CHECK_INTERFACE(IDrmServiceListener, data, reply); 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int uniqueId = data.readInt32(); 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int type = data.readInt32(); 5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const String8& message = data.readString8(); 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 524585e8f0ff47580fdb81ed8652bde32db1770050Jeff Tinker status_t status = notify(DrmInfoEvent(uniqueId, type, message)); 5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi reply->writeInt32(status); 5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return DRM_NO_ERROR; 5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi default: 5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi return BBinder::onTransact(code, data, reply, flags); 5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 62