1951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen/*
2951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * Copyright (C) 2011 The Android Open Source Project
3951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen *
4951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * Licensed under the Apache License, Version 2.0 (the "License");
5951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * you may not use this file except in compliance with the License.
6951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * You may obtain a copy of the License at
7951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen *
8951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen *      http://www.apache.org/licenses/LICENSE-2.0
9951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen *
10951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * Unless required by applicable law or agreed to in writing, software
11951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * distributed under the License is distributed on an "AS IS" BASIS,
12951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * See the License for the specific language governing permissions and
14951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen * limitations under the License.
15951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen */
16e5167f88f3734a048dc44199f3fff0432589db43Elliott Hughes
17e5167f88f3734a048dc44199f3fff0432589db43Elliott Hughes#include <sys/socket.h>
18951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
19951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen#include <common_time/ICommonTimeConfig.h>
20951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen#include <binder/Parcel.h>
21951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
22951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen#include "utils.h"
23951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
24951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chennamespace android {
25951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
26951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen/***** ICommonTimeConfig *****/
27951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
28951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chenenum {
29951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_MASTER_ELECTION_PRIORITY = IBinder::FIRST_CALL_TRANSACTION,
30951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_MASTER_ELECTION_PRIORITY,
31951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_MASTER_ELECTION_ENDPOINT,
32951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_MASTER_ELECTION_ENDPOINT,
33951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_MASTER_ELECTION_GROUP_ID,
34951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_MASTER_ELECTION_GROUP_ID,
35951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_INTERFACE_BINDING,
36951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_INTERFACE_BINDING,
37951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_MASTER_ANNOUNCE_INTERVAL,
38951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_MASTER_ANNOUNCE_INTERVAL,
39951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_CLIENT_SYNC_INTERVAL,
40951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_CLIENT_SYNC_INTERVAL,
41951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_PANIC_THRESHOLD,
42951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_PANIC_THRESHOLD,
43951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    GET_AUTO_DISABLE,
44951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    SET_AUTO_DISABLE,
45951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    FORCE_NETWORKLESS_MASTER_MODE,
46951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen};
47951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
48951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chenconst String16 ICommonTimeConfig::kServiceName("common_time.config");
49951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
50951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chenclass BpCommonTimeConfig : public BpInterface<ICommonTimeConfig>
51951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen{
52951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen  public:
53951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    BpCommonTimeConfig(const sp<IBinder>& impl)
54951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        : BpInterface<ICommonTimeConfig>(impl) {}
55951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
56951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getMasterElectionPriority(uint8_t *priority) {
57951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
58951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
59951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_MASTER_ELECTION_PRIORITY,
60951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
61951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
62951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
63951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
64951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
65951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *priority = static_cast<uint8_t>(reply.readInt32());
66951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
67951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
68951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
69951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
70951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
71951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
72951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setMasterElectionPriority(uint8_t priority) {
73951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
74951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
75951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt32(static_cast<int32_t>(priority));
76951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_MASTER_ELECTION_PRIORITY,
77951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
78951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
79951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
80951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
81951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
82951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
83951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
84951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
85951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
86951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getMasterElectionEndpoint(struct sockaddr_storage *addr) {
87951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
88951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
89951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_MASTER_ELECTION_ENDPOINT,
90951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
91951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
92951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
93951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
94951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
95951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                deserializeSockaddr(&reply, addr);
96951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
97951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
98951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
99951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
100951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
101951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
102951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setMasterElectionEndpoint(
103951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            const struct sockaddr_storage *addr) {
104951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
105951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
106951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (!canSerializeSockaddr(addr))
107951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return BAD_VALUE;
108951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (NULL == addr) {
109951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            data.writeInt32(0);
110951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } else {
111951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            data.writeInt32(1);
112951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            serializeSockaddr(&data, addr);
113951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
114951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_MASTER_ELECTION_ENDPOINT,
115951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
116951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
117951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
118951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
119951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
120951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
121951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
122951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
123951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
124951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getMasterElectionGroupId(uint64_t *id) {
125951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
126951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
127951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_MASTER_ELECTION_GROUP_ID,
128951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
129951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
130951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
131951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
132951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
133951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
134951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *id = static_cast<uint64_t>(reply.readInt64());
135951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
136951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
137951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
138951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
139951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
140951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
141951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setMasterElectionGroupId(uint64_t id) {
142951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
143951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
144951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt64(id);
145951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_MASTER_ELECTION_GROUP_ID,
146951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
147951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
148951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
149951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
150951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
151951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
152951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
153951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
154951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
155951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
156951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getInterfaceBinding(String16& ifaceName) {
157951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
158951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
159951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_INTERFACE_BINDING,
160951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
161951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
162951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
163951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
164951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
165951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                ifaceName = reply.readString16();
166951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
167951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
168951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
169951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
170951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
171951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
172951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setInterfaceBinding(const String16& ifaceName) {
173951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
174951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
175951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeString16(ifaceName);
176951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_INTERFACE_BINDING,
177951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
178951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
179951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
180951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
181951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
182951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
183951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
184951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
185951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
186951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getMasterAnnounceInterval(int *interval) {
187951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
188951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
189951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_MASTER_ANNOUNCE_INTERVAL,
190951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
191951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
192951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
193951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
194951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
195951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *interval = reply.readInt32();
196951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
197951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
198951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
199951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
200951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
201951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
202951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setMasterAnnounceInterval(int interval) {
203951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
204951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
205951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt32(interval);
206951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_MASTER_ANNOUNCE_INTERVAL,
207951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
208951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
209951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
210951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
211951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
212951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
213951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
214951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
215951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
216951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getClientSyncInterval(int *interval) {
217951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
218951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
219951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_CLIENT_SYNC_INTERVAL,
220951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
221951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
222951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
223951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
224951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
225951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *interval = reply.readInt32();
226951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
227951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
228951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
229951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
230951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
231951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
232951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setClientSyncInterval(int interval) {
233951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
234951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
235951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt32(interval);
236951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_CLIENT_SYNC_INTERVAL,
237951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
238951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
239951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
240951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
241951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
242951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
243951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
244951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
245951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
246951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getPanicThreshold(int *threshold) {
247951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
248951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
249951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_PANIC_THRESHOLD,
250951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
251951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
252951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
253951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
254951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
255951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *threshold = reply.readInt32();
256951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
257951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
258951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
259951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
260951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
261951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
262951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setPanicThreshold(int threshold) {
263951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
264951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
265951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt32(threshold);
266951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_PANIC_THRESHOLD,
267951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
268951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
269951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
270951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
271951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
272951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
273951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
274951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
275951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
276951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t getAutoDisable(bool *autoDisable) {
277951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
278951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
279951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(GET_AUTO_DISABLE,
280951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
281951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
282951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
283951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
284951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
285951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                *autoDisable = (0 != reply.readInt32());
286951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
287951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
288951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
289951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
290951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
291951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
292951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t setAutoDisable(bool autoDisable) {
293951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
294951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
295951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInt32(autoDisable ? 1 : 0);
296951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(SET_AUTO_DISABLE,
297951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
298951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
299951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
300951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
301951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
302951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
303951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
304951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
305951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
306951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
307951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    virtual status_t forceNetworklessMasterMode() {
308951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        Parcel data, reply;
309951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        data.writeInterfaceToken(ICommonTimeConfig::getInterfaceDescriptor());
310951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        status_t status = remote()->transact(FORCE_NETWORKLESS_MASTER_MODE,
311951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             data,
312951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                             &reply);
313951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
314951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        if (status == OK) {
315951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status = reply.readInt32();
316951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        }
317951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
318951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        return status;
319951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
320951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen};
321951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
322951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. ChenIMPLEMENT_META_INTERFACE(CommonTimeConfig, "android.os.ICommonTimeConfig");
323951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
324951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chenstatus_t BnCommonTimeConfig::onTransact(uint32_t code,
325951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                   const Parcel& data,
326951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                   Parcel* reply,
327951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                                   uint32_t flags) {
328951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    switch(code) {
329951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_MASTER_ELECTION_PRIORITY: {
330951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
331951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            uint8_t priority;
332951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getMasterElectionPriority(&priority);
333951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
334951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
335951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt32(static_cast<int32_t>(priority));
336951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
337951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
338951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
339951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
340951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_MASTER_ELECTION_PRIORITY: {
341951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
342951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            uint8_t priority = static_cast<uint8_t>(data.readInt32());
343951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setMasterElectionPriority(priority);
344951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
345951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
346951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
347951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
348951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_MASTER_ELECTION_ENDPOINT: {
349951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
350951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            struct sockaddr_storage addr;
351951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getMasterElectionEndpoint(&addr);
352951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
353951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if ((status == OK) && !canSerializeSockaddr(&addr)) {
354951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                status = UNKNOWN_ERROR;
355951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
356951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
357951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
358951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
359951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
360951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                serializeSockaddr(reply, &addr);
361951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
362951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
363951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
364951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
365951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
366951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_MASTER_ELECTION_ENDPOINT: {
367951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
368951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            struct sockaddr_storage addr;
369951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int hasAddr = data.readInt32();
370951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
371951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status;
372951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (hasAddr) {
373951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                deserializeSockaddr(&data, &addr);
374951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                status = setMasterElectionEndpoint(&addr);
375951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            } else {
376951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                status = setMasterElectionEndpoint(&addr);
377951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
378951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
379951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
380951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
381951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
382951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
383951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_MASTER_ELECTION_GROUP_ID: {
384951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
385951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            uint64_t id;
386951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getMasterElectionGroupId(&id);
387951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
388951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
389951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt64(id);
390951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
391951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
392951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
393951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
394951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_MASTER_ELECTION_GROUP_ID: {
395951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
396951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            uint64_t id = static_cast<uint64_t>(data.readInt64());
397951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setMasterElectionGroupId(id);
398951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
399951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
400951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
401951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
402951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_INTERFACE_BINDING: {
403951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
404951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            String16 ret;
405951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getInterfaceBinding(ret);
406951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
407951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
408951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeString16(ret);
409951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
410951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
411951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
412951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
413951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_INTERFACE_BINDING: {
414951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
415951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            String16 ifaceName;
416951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            ifaceName = data.readString16();
417951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setInterfaceBinding(ifaceName);
418951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
419951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
420951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
421951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
422951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_MASTER_ANNOUNCE_INTERVAL: {
423951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
424951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int interval;
425951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getMasterAnnounceInterval(&interval);
426951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
427951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
428951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt32(interval);
429951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
430951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
431951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
432951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
433951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_MASTER_ANNOUNCE_INTERVAL: {
434951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
435951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int interval = data.readInt32();
436951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setMasterAnnounceInterval(interval);
437951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
438951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
439951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
440951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
441951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_CLIENT_SYNC_INTERVAL: {
442951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
443951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int interval;
444951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getClientSyncInterval(&interval);
445951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
446951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
447951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt32(interval);
448951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
449951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
450951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
451951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
452951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_CLIENT_SYNC_INTERVAL: {
453951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
454951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int interval = data.readInt32();
455951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setClientSyncInterval(interval);
456951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
457951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
458951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
459951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
460951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_PANIC_THRESHOLD: {
461951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
462951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int threshold;
463951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getPanicThreshold(&threshold);
464951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
465951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
466951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt32(threshold);
467951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
468951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
469951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
470951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
471951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_PANIC_THRESHOLD: {
472951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
473951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            int threshold = data.readInt32();
474951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setPanicThreshold(threshold);
475951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
476951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
477951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
478951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
479951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case GET_AUTO_DISABLE: {
480951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
481951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            bool autoDisable;
482951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = getAutoDisable(&autoDisable);
483951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
484951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            if (status == OK) {
485951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen                reply->writeInt32(autoDisable ? 1 : 0);
486951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            }
487951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
488951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
489951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
490951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case SET_AUTO_DISABLE: {
491951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
492951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            bool autoDisable = (0 != data.readInt32());
493951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = setAutoDisable(autoDisable);
494951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
495951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
496951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
497951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
498951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        case FORCE_NETWORKLESS_MASTER_MODE: {
499951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            CHECK_INTERFACE(ICommonTimeConfig, data, reply);
500951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            status_t status = forceNetworklessMasterMode();
501951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            reply->writeInt32(status);
502951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen            return OK;
503951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen        } break;
504951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    }
505951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen    return BBinder::onTransact(code, data, reply, flags);
506951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen}
507951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
508951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen}; // namespace android
509951bd8d1ad9581a414e171ad8605a9515d0ad667Mike J. Chen
510