140c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown/* 240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * Copyright (C) 2013 The Android Open Source Project 340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * 440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * you may not use this file except in compliance with the License. 640c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * You may obtain a copy of the License at 740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * 840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * 1040c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * Unless required by applicable law or agreed to in writing, software 1140c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * See the License for the specific language governing permissions and 1440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown * limitations under the License. 1540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown */ 1640c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 1740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#define LOG_TAG "InputFlinger" 1840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 1940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#include <stdint.h> 2040c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#include <sys/types.h> 21a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn#include <unistd.h> 2240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 2340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#include <binder/IPCThreadState.h> 2440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#include <binder/PermissionCache.h> 256f783602c05c519238200fed55b0afa097737ca1Michael Wright#include <hardware/input.h> 267823e124e00576e20e47ec717cbe8bc89f0f2bf2Mark Salyzyn#include <log/log.h> 2740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown#include <private/android_filesystem_config.h> 2840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 29a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn#include "InputFlinger.h" 30a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn#include "InputDriver.h" 31a5e161b1207ef447a51e99856097d69d4a6111e1Mark Salyzyn 3240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brownnamespace android { 3340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 3440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brownconst String16 sAccessInputFlingerPermission("android.permission.ACCESS_INPUT_FLINGER"); 3540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brownconst String16 sDumpPermission("android.permission.DUMP"); 3640c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 3740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 3840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff BrownInputFlinger::InputFlinger() : 3940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown BnInputFlinger() { 4040c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown ALOGI("InputFlinger is starting"); 416f783602c05c519238200fed55b0afa097737ca1Michael Wright mHost = new InputHost(); 426f783602c05c519238200fed55b0afa097737ca1Michael Wright mHost->registerInputDriver(new InputDriver(INPUT_INSTANCE_EVDEV)); 4340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown} 4440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 4540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff BrownInputFlinger::~InputFlinger() { 4640c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown} 4740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 4840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brownstatus_t InputFlinger::dump(int fd, const Vector<String16>& args) { 4940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown String8 result; 5040c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown const IPCThreadState* ipc = IPCThreadState::self(); 5140c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown const int pid = ipc->getCallingPid(); 5240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown const int uid = ipc->getCallingUid(); 5340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown if ((uid != AID_SHELL) 5440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown && !PermissionCache::checkPermission(sDumpPermission, pid, uid)) { 5540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown result.appendFormat("Permission Denial: " 5640c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown "can't dump SurfaceFlinger from pid=%d, uid=%d\n", pid, uid); 5740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown } else { 5840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown dumpInternal(result); 5940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown } 6040c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown write(fd, result.string(), result.size()); 6140c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown return OK; 6240c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown} 6340c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 6440c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brownvoid InputFlinger::dumpInternal(String8& result) { 6540c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown result.append("INPUT FLINGER (dumpsys inputflinger)\n"); 666f783602c05c519238200fed55b0afa097737ca1Michael Wright mHost->dump(result); 6740c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown} 6840c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown 6940c9e0a3989222b4c27c88f54b6acf67b58a68cfJeff Brown}; // namespace android 70