summaryrefslogtreecommitdiff
path: root/tvapi/android/libtvbinder/ITv.cpp (plain)
blob: aa813451c79380d0f79185a1c00e9e8be169e508
1//#define LOG_NDEBUG 0
2#define LOG_TAG "ITv"
3#include <utils/Log.h>
4#include <stdint.h>
5#include <sys/types.h>
6#include <binder/Parcel.h>
7#include <include/ITv.h>
8
9enum {
10 DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
11 START_PREVIEW,
12 SEND_COMMAND,
13 CONNECT,
14 LOCK,
15 UNLOCK,
16 TV_CMD,
17 TV_CREATE_SUBTITLE,
18 TV_CREATE_VIDEO_FRAME,
19};
20
21class BpTv: public BpInterface<ITv>
22{
23public:
24 BpTv(const sp<IBinder> &impl)
25 : BpInterface<ITv>(impl)
26 {
27 }
28
29 // disconnect from tv service
30 void disconnect()
31 {
32 Parcel data, reply;
33 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
34 remote()->transact(DISCONNECT, data, &reply);
35 }
36
37 status_t processCmd(const Parcel &p, Parcel *r)
38 {
39 Parcel data, reply;
40 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
41 data.write(p.data(), p.dataSize());
42 remote()->transact(TV_CMD, data, &reply);
43 r->write(reply.data(), reply.dataSize());
44 r->setDataPosition(0);
45 return 0;
46 }
47
48 virtual status_t createVideoFrame(const sp<IMemory> &share_mem)
49 {
50 Parcel data, reply;
51 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
52 data.writeStrongBinder(share_mem->asBinder());
53 remote()->transact(TV_CREATE_VIDEO_FRAME, data, &reply);
54 return reply.readInt32();
55 }
56
57 virtual status_t createSubtitle(const sp<IMemory> &share_mem)
58 {
59 Parcel data, reply;
60 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
61 data.writeStrongBinder(share_mem->asBinder());
62 remote()->transact(TV_CREATE_SUBTITLE, data, &reply);
63 return reply.readInt32();
64 }
65 virtual status_t connect(const sp<ITvClient> &tvClient)
66 {
67 Parcel data, reply;
68 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
69 data.writeStrongBinder(tvClient->asBinder());
70 remote()->transact(CONNECT, data, &reply);
71 return reply.readInt32();
72 }
73 virtual status_t lock()
74 {
75 Parcel data, reply;
76 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
77 remote()->transact(LOCK, data, &reply);
78 return reply.readInt32();
79 }
80 virtual status_t unlock()
81 {
82 Parcel data, reply;
83 data.writeInterfaceToken(ITv::getInterfaceDescriptor());
84 remote()->transact(UNLOCK, data, &reply);
85 return reply.readInt32();
86 }
87};
88
89IMPLEMENT_META_INTERFACE(Tv, "android.amlogic.ITv");
90
91status_t BnTv::onTransact(
92 uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
93{
94 switch (code) {
95 case DISCONNECT: {
96 CHECK_INTERFACE(ITv, data, reply);
97 disconnect();
98 return NO_ERROR;
99 }
100 break;
101 case CONNECT: {
102 CHECK_INTERFACE(ITv, data, reply);
103 sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
104 reply->writeInt32(connect(tvClient));
105 return NO_ERROR;
106 }
107 break;
108 case LOCK: {
109 CHECK_INTERFACE(ITv, data, reply);
110 reply->writeInt32(lock());
111 return NO_ERROR;
112 }
113 break;
114 case UNLOCK: {
115 CHECK_INTERFACE(ITv, data, reply);
116 reply->writeInt32(unlock());
117 return NO_ERROR;
118 }
119 break;
120 case TV_CMD: {
121 CHECK_INTERFACE(ITv, data, reply);
122 processCmd(data, reply);
123 //reply->write(tmp.data(), tmp.dataSize());
124 return NO_ERROR;
125 }
126 case TV_CREATE_SUBTITLE: {
127 CHECK_INTERFACE(ITv, data, reply);
128 sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
129 createSubtitle(buffer);
130 //reply->write(tmp.data(), tmp.dataSize());
131 return NO_ERROR;
132 }
133 case TV_CREATE_VIDEO_FRAME: {
134 CHECK_INTERFACE(ITv, data, reply);
135 sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
136 createVideoFrame(buffer);
137 //reply->write(tmp.data(), tmp.dataSize());
138 return NO_ERROR;
139 }
140 break;
141 default:
142 return BBinder::onTransact(code, data, reply, flags);
143 }
144}
145
146