ISensorEventConnection.cpp revision 589ce85ee4174829cfedce91b6b2509d2a4002eb
1589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian/*
2589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Copyright (C) 2010 The Android Open Source Project
3589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
4589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * you may not use this file except in compliance with the License.
6589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * You may obtain a copy of the License at
7589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
8589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
10589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Unless required by applicable law or agreed to in writing, software
11589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * See the License for the specific language governing permissions and
14589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * limitations under the License.
15589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian */
16589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
17589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <stdint.h>
18589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <sys/types.h>
19589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
20589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/Errors.h>
21589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/RefBase.h>
22589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/Timers.h>
23589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
24589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <binder/Parcel.h>
25589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <binder/IInterface.h>
26589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
27589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <gui/ISensorEventConnection.h>
28589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <gui/SensorChannel.h>
29589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
30589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiannamespace android {
31589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
32589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
33589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianenum {
34589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    GET_SENSOR_CHANNEL = IBinder::FIRST_CALL_TRANSACTION,
35589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    ENABLE_DISABLE,
36589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    SET_EVENT_RATE
37589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian};
38589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
39589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianclass BpSensorEventConnection : public BpInterface<ISensorEventConnection>
40589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
41589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianpublic:
42589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    BpSensorEventConnection(const sp<IBinder>& impl)
43589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        : BpInterface<ISensorEventConnection>(impl)
44589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    {
45589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    }
46589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
47589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    virtual sp<SensorChannel> getSensorChannel() const
48589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    {
49589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        Parcel data, reply;
50589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        remote()->transact(GET_SENSOR_CHANNEL, data, &reply);
51589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        return new SensorChannel(reply);
52589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    }
53589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
54589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    virtual status_t enableDisable(int handle, bool enabled)
55589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    {
56589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        Parcel data, reply;
57589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        data.writeInt32(handle);
58589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        data.writeInt32(enabled);
59589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        remote()->transact(ENABLE_DISABLE, data, &reply);
60589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        return reply.readInt32();
61589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    }
62589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
63589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    virtual status_t setEventRate(int handle, nsecs_t ns)
64589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    {
65589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        Parcel data, reply;
66589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        data.writeInt32(handle);
67589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        data.writeInt64(ns);
68589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        remote()->transact(SET_EVENT_RATE, data, &reply);
69589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        return reply.readInt32();
70589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    }
71589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian};
72589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
73589ce85ee4174829cfedce91b6b2509d2a4002ebMathias AgopianIMPLEMENT_META_INTERFACE(SensorEventConnection, "android.gui.SensorEventConnection");
74589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
75589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
76589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
77589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatus_t BnSensorEventConnection::onTransact(
78589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
79589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
80589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    switch(code) {
81589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        case GET_SENSOR_CHANNEL: {
82589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            CHECK_INTERFACE(ISensorEventConnection, data, reply);
83589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            sp<SensorChannel> channel(getSensorChannel());
84589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            channel->writeToParcel(reply);
85589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            return NO_ERROR;
86589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        } break;
87589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        case ENABLE_DISABLE: {
88589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            CHECK_INTERFACE(ISensorEventConnection, data, reply);
89589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            int handle = data.readInt32();
90589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            int enabled = data.readInt32();
91589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            status_t result = enableDisable(handle, enabled);
92589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            reply->writeInt32(result);
93589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            return NO_ERROR;
94589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        } break;
95589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        case SET_EVENT_RATE: {
96589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            CHECK_INTERFACE(ISensorEventConnection, data, reply);
97589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            int handle = data.readInt32();
98589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            int ns = data.readInt64();
99589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            status_t result = setEventRate(handle, ns);
100589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            reply->writeInt32(result);
101589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            return NO_ERROR;
102589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        } break;
103589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    }
104589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return BBinder::onTransact(code, data, reply, flags);
105589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
106589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
107589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
108589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}; // namespace android
109