rsThreadIO.h revision 5f27d6fb0b0b9184ba9820c629fc1354a635e515
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_THREAD_IO_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_THREAD_IO_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 201aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include "rsUtils.h" 211a4efa363916977ef9aeab756725b3bdc880a15bJason Sams#include "rsFifoSocket.h" 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass Context; 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass ThreadIO { 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ThreadIO(); 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ~ThreadIO(); 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 345f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams void init(); 358c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams void shutdown(); 368c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams 37a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Plays back commands from the client. 38a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams // Returns true if any commands were processed. 395f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams bool playCoreCommands(Context *con, bool waitForCommand, int waitFd); 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 415f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams void setTimeoutCallback(void (*)(void *), void *, uint64_t timeout); 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 431a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void * coreHeader(uint32_t, size_t dataLen); 441a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreCommit(); 451a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreSetReturn(const void *data, size_t dataLen); 461a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void coreGetReturn(void *data, size_t dataLen); 471a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 481a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 491a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientHeader(size_t *receiveLen, uint32_t *usrID); 501a4efa363916977ef9aeab756725b3bdc880a15bJason Sams RsMessageToClientType getClientPayload(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 511a4efa363916977ef9aeab756725b3bdc880a15bJason Sams bool sendToClient(RsMessageToClientType cmdID, uint32_t usrID, const void *data, size_t dataLen, bool waitForSpace); 521a4efa363916977ef9aeab756725b3bdc880a15bJason Sams void clientShutdown(); 531a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 541a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 551a4efa363916977ef9aeab756725b3bdc880a15bJason Samsprotected: 561a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct CoreCmdHeaderRec { 571a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 581a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 591a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } CoreCmdHeader; 601a4efa363916977ef9aeab756725b3bdc880a15bJason Sams typedef struct ClientCmdHeaderRec { 611a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t cmdID; 621a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t bytes; 631a4efa363916977ef9aeab756725b3bdc880a15bJason Sams uint32_t userID; 641a4efa363916977ef9aeab756725b3bdc880a15bJason Sams } ClientCmdHeader; 651a4efa363916977ef9aeab756725b3bdc880a15bJason Sams ClientCmdHeader mLastClientHeader; 661a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 675f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams bool mRunning; 681a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 695f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToClient; 705f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams FifoSocket mToCore; 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams intptr_t mToCoreRet; 731a4efa363916977ef9aeab756725b3bdc880a15bJason Sams 745f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams size_t mSendLen; 755f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams uint8_t mSendBuffer[2 * 1024]; 765f27d6fb0b0b9184ba9820c629fc1354a635e515Jason Sams 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 84