blob: d56a1c99a1e1f0b312829d25d6c993ec56ffe665 [file] [log] [blame]
Jason Sams326e0dd2009-05-22 14:03:28 -07001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_RS_THREAD_IO_H
18#define ANDROID_RS_THREAD_IO_H
19
Jason Sams1aa5a4e2009-06-22 17:15:15 -070020#include "rsUtils.h"
Jason Sams1a4efa32011-05-17 15:01:29 -070021#include "rsFifoSocket.h"
Jason Sams326e0dd2009-05-22 14:03:28 -070022
23// ---------------------------------------------------------------------------
24namespace android {
25namespace renderscript {
26
27class Context;
28
29class ThreadIO {
30public:
31 ThreadIO();
32 ~ThreadIO();
33
Jason Sams5f27d6f2012-02-07 15:32:08 -080034 void init();
Jason Sams8c0ee652009-08-25 14:49:07 -070035 void shutdown();
36
Jason Samsa44cb292009-06-04 17:58:03 -070037 // Plays back commands from the client.
38 // Returns true if any commands were processed.
Jason Sams5f27d6f2012-02-07 15:32:08 -080039 bool playCoreCommands(Context *con, bool waitForCommand, int waitFd);
Jason Sams326e0dd2009-05-22 14:03:28 -070040
Jason Sams5f27d6f2012-02-07 15:32:08 -080041 void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout);
Jason Sams326e0dd2009-05-22 14:03:28 -070042
Jason Sams1a4efa32011-05-17 15:01:29 -070043 void * coreHeader(uint32_t, size_t dataLen);
Jason Sams1a4efa32011-05-17 15:01:29 -070044 void coreCommit();
Jason Sams1a4efa32011-05-17 15:01:29 -070045 void coreSetReturn(const void *data, size_t dataLen);
46 void coreGetReturn(void *data, size_t dataLen);
47
48
49 RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID);
50 RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen);
51 bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace);
52 void clientShutdown();
53
54
55protected:
56 typedef struct CoreCmdHeaderRec {
57 uint32_t cmdID;
58 uint32_t bytes;
59 } CoreCmdHeader;
60 typedef struct ClientCmdHeaderRec {
61 uint32_t cmdID;
62 uint32_t bytes;
63 uint32_t userID;
64 } ClientCmdHeader;
65 ClientCmdHeader mLastClientHeader;
66
Jason Sams5f27d6f2012-02-07 15:32:08 -080067 bool mRunning;
Jason Sams1a4efa32011-05-17 15:01:29 -070068
Jason Sams5f27d6f2012-02-07 15:32:08 -080069 FifoSocket mToClient;
70 FifoSocket mToCore;
Jason Sams326e0dd2009-05-22 14:03:28 -070071
72 intptr_t mToCoreRet;
Jason Sams1a4efa32011-05-17 15:01:29 -070073
Jason Sams5f27d6f2012-02-07 15:32:08 -080074 size_t mSendLen;
75 uint8_t mSendBuffer[2 * 1024];
76
Jason Sams326e0dd2009-05-22 14:03:28 -070077};
78
Jason Sams326e0dd2009-05-22 14:03:28 -070079
80}
81}
82#endif
83