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