1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef IPC_FFI_H 16 #define IPC_FFI_H 17 18 #include "ashmem_impl.h" 19 #include "cj_common_ffi.h" 20 #include "ffi_remote_data.h" 21 #include "message_sequence_impl.h" 22 #include "napi/native_api.h" 23 24 extern "C" { 25 FFI_EXPORT int64_t FfiRpcMessageSequenceImplCreate(); 26 FFI_EXPORT void FfiRpcMessageSequenceImplWriteInterfaceToken(int64_t id, char* token, int32_t* errCode); 27 FFI_EXPORT char* FfiRpcMessageSequenceImplReadInterfaceToken(int64_t id, int32_t* errCode); 28 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetSize(int64_t id, int32_t* errCode); 29 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetCapacity(int64_t id, int32_t* errCode); 30 FFI_EXPORT void FfiRpcMessageSequenceImplSetSize(int64_t id, uint32_t value, int32_t* errCode); 31 FFI_EXPORT void FfiRpcMessageSequenceImplSetCapacity(int64_t id, uint32_t value, int32_t* errCode); 32 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetWritableBytes(int64_t id, int32_t* errCode); 33 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetReadableBytes(int64_t id, int32_t* errCode); 34 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetReadPosition(int64_t id, int32_t* errCode); 35 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetWritePosition(int64_t id, int32_t* errCode); 36 FFI_EXPORT void FfiRpcMessageSequenceImplRewindWrite(int64_t id, uint32_t pos, int32_t* errCode); 37 FFI_EXPORT void FfiRpcMessageSequenceImplRewindRead(int64_t id, uint32_t pos, int32_t* errCode); 38 FFI_EXPORT void FfiRpcMessageSequenceImplWriteNoException(int64_t id, int32_t* errCode); 39 FFI_EXPORT char* FfiRpcMessageSequenceImplReadException(int64_t id, int32_t* errCode); 40 41 FFI_EXPORT void FfiRpcMessageSequenceImplWriteByte(int64_t id, int8_t value, int32_t* errCode); 42 FFI_EXPORT void FfiRpcMessageSequenceImplWriteShort(int64_t id, int16_t value, int32_t* errCode); 43 FFI_EXPORT void FfiRpcMessageSequenceImplWriteInt(int64_t id, int32_t value, int32_t* errCode); 44 FFI_EXPORT void FfiRpcMessageSequenceImplWriteLong(int64_t id, int64_t value, int32_t* errCode); 45 FFI_EXPORT void FfiRpcMessageSequenceImplWriteFloat(int64_t id, float value, int32_t* errCode); 46 FFI_EXPORT void FfiRpcMessageSequenceImplWriteDouble(int64_t id, double value, int32_t* errCode); 47 FFI_EXPORT void FfiRpcMessageSequenceImplWriteBoolean(int64_t id, int8_t value, int32_t* errCode); 48 FFI_EXPORT void FfiRpcMessageSequenceImplWriteChar(int64_t id, uint8_t value, int32_t* errCode); 49 FFI_EXPORT void FfiRpcMessageSequenceImplWriteString(int64_t id, char* value, int32_t* errCode); 50 FFI_EXPORT void FfiRpcMessageSequenceImplWriteByteArray(int64_t id, OHOS::CJByteArray value, int32_t* errCode); 51 FFI_EXPORT void FfiRpcMessageSequenceImplWriteShortArray(int64_t id, OHOS::CJShortArray value, int32_t* errCode); 52 FFI_EXPORT void FfiRpcMessageSequenceImplWriteIntArray(int64_t id, OHOS::CJIntArray value, int32_t* errCode); 53 FFI_EXPORT void FfiRpcMessageSequenceImplWriteLongArray(int64_t id, OHOS::CJLongArray value, int32_t* errCode); 54 FFI_EXPORT void FfiRpcMessageSequenceImplWriteFloatArray(int64_t id, OHOS::CJFloatArray value, int32_t* errCode); 55 FFI_EXPORT void FfiRpcMessageSequenceImplWriteDoubleArray(int64_t id, OHOS::CJDoubleArray value, int32_t* errCode); 56 FFI_EXPORT void FfiRpcMessageSequenceImplWriteBooleanArray(int64_t id, OHOS::CJByteArray value, int32_t* errCode); 57 FFI_EXPORT void FfiRpcMessageSequenceImplWriteCharArray(int64_t id, OHOS::CJCharArray value, int32_t* errCode); 58 FFI_EXPORT void FfiRpcMessageSequenceImplWriteStringArray(int64_t id, OHOS::CJStringArray value, int32_t* errCode); 59 FFI_EXPORT void FfiRpcMessageSequenceImplWriteArrayBuffer( 60 int64_t id, int32_t typeCode, void* value, size_t byteLength, int32_t* errCode); 61 FFI_EXPORT bool FfiRpcMessageSequenceImplWriteUint32(int64_t id, uint32_t value); 62 FFI_EXPORT void FfiRpcMessageSequenceImplWriteRawDataBuffer(int64_t id, uint8_t* data, int64_t size, int32_t* errCode); 63 FFI_EXPORT void FfiRpcMessageSequenceImplWriteRemoteObject(int64_t id, int64_t object, int32_t* errCode); 64 FFI_EXPORT void FfiRpcMessageSequenceImplWriteRemoteObjectArray( 65 int64_t id, OHOS::CJLongArray value, int32_t* errCode); 66 67 FFI_EXPORT int8_t FfiRpcMessageSequenceImplReadByte(int64_t id, int32_t* errCode); 68 FFI_EXPORT int16_t FfiRpcMessageSequenceImplReadShort(int64_t id, int32_t* errCode); 69 FFI_EXPORT int32_t FfiRpcMessageSequenceImplReadInt(int64_t id, int32_t* errCode); 70 FFI_EXPORT int64_t FfiRpcMessageSequenceImplReadLong(int64_t id, int32_t* errCode); 71 FFI_EXPORT float FfiRpcMessageSequenceImplReadFloat(int64_t id, int32_t* errCode); 72 FFI_EXPORT double FfiRpcMessageSequenceImplReadDouble(int64_t id, int32_t* errCode); 73 FFI_EXPORT int8_t FfiRpcMessageSequenceImplReadBoolean(int64_t id, int32_t* errCode); 74 FFI_EXPORT uint8_t FfiRpcMessageSequenceImplReadChar(int64_t id, int32_t* errCode); 75 FFI_EXPORT char* FfiRpcMessageSequenceImplReadString(int64_t id, int32_t* errCode); 76 FFI_EXPORT OHOS::CJByteArray FfiRpcMessageSequenceImplReadByteArray(int64_t id, int32_t* errCode); 77 FFI_EXPORT OHOS::CJShortArray FfiRpcMessageSequenceImplReadShortArray(int64_t id, int32_t* errCode); 78 FFI_EXPORT OHOS::CJIntArray FfiRpcMessageSequenceImplReadIntArray(int64_t id, int32_t* errCode); 79 FFI_EXPORT OHOS::CJLongArray FfiRpcMessageSequenceImplReadLongArray(int64_t id, int32_t* errCode); 80 FFI_EXPORT OHOS::CJFloatArray FfiRpcMessageSequenceImplReadFloatArray(int64_t id, int32_t* errCode); 81 FFI_EXPORT OHOS::CJDoubleArray FfiRpcMessageSequenceImplReadDoubleArray(int64_t id, int32_t* errCode); 82 FFI_EXPORT OHOS::CJByteArray FfiRpcMessageSequenceImplReadBooleanArray(int64_t id, int32_t* errCode); 83 FFI_EXPORT OHOS::CJCharArray FfiRpcMessageSequenceImplReadCharArray(int64_t id, int32_t* errCode); 84 FFI_EXPORT OHOS::CJStringArray FfiRpcMessageSequenceImplReadStringArray(int64_t id, int32_t* errCode); 85 FFI_EXPORT OHOS::CJByteArray FfiRpcMessageSequenceImplReadInt8ArrayBuffer(int64_t id, int32_t* errCode); 86 FFI_EXPORT OHOS::CJCharArray FfiRpcMessageSequenceImplReadUInt8ArrayBuffer(int64_t id, int32_t* errCode); 87 FFI_EXPORT OHOS::CJShortArray FfiRpcMessageSequenceImplReadInt16ArrayBuffer(int64_t id, int32_t* errCode); 88 FFI_EXPORT OHOS::CJUInt16Array FfiRpcMessageSequenceImplReadUInt16ArrayBuffer(int64_t id, int32_t* errCode); 89 FFI_EXPORT OHOS::CJIntArray FfiRpcMessageSequenceImplReadInt32ArrayBuffer(int64_t id, int32_t* errCode); 90 FFI_EXPORT OHOS::CJUInt32Array FfiRpcMessageSequenceImplReadUInt32ArrayBuffer(int64_t id, int32_t* errCode); 91 FFI_EXPORT OHOS::CJFloatArray FfiRpcMessageSequenceImplReadFloatArrayBuffer(int64_t id, int32_t* errCode); 92 FFI_EXPORT OHOS::CJDoubleArray FfiRpcMessageSequenceImplReadDoubleArrayBuffer(int64_t id, int32_t* errCode); 93 FFI_EXPORT OHOS::CJLongArray FfiRpcMessageSequenceImplReadInt64ArrayBuffer(int64_t id, int32_t* errCode); 94 FFI_EXPORT OHOS::CJUInt64Array FfiRpcMessageSequenceImplReadUInt64ArrayBuffer(int64_t id, int32_t* errCode); 95 FFI_EXPORT uint8_t* FfiRpcMessageSequenceImplReadRawDataBuffer(int64_t id, int64_t size, int32_t* errCode); 96 FFI_EXPORT RetDataI64 FfiRpcMessageSequenceImplReadRemoteObject(int64_t id, int32_t* errCode); 97 FFI_EXPORT OHOS::RemoteObjectArray FfiRpcMessageSequenceImplReadRemoteObjectArray(int64_t id, int32_t* errCode); 98 99 FFI_EXPORT void FfiRpcMessageSequenceImplCloseFileDescriptor(int32_t fd); 100 FFI_EXPORT int32_t FfiRpcMessageSequenceImplDupFileDescriptor(int32_t fd); 101 FFI_EXPORT bool FfiRpcMessageSequenceImplContainFileDescriptors(int64_t id, int32_t* errCode); 102 FFI_EXPORT void FfiRpcMessageSequenceImplWriteFileDescriptor(int64_t id, int32_t fd, int32_t* errCode); 103 FFI_EXPORT int32_t FfiRpcMessageSequenceImplReadFileDescriptor(int64_t id, int32_t* errCode); 104 FFI_EXPORT void FfiRpcMessageSequenceImplWriteAshmem(int64_t mid, int64_t aid, int32_t* errCode); 105 FFI_EXPORT int64_t FfiRpcMessageSequenceImplReadAshmem(int64_t id, int32_t* errCode); 106 FFI_EXPORT uint32_t FfiRpcMessageSequenceImplGetRawDataCapacity(int64_t id, int32_t* errCode); 107 108 FFI_EXPORT int64_t FfiRpcAshmemImplCreate(char* ashmemName, int32_t ashmemSize); 109 FFI_EXPORT int64_t FfiRpcAshmemImplCreateFromExisting(int64_t id, int32_t* errCode); 110 FFI_EXPORT void FfiRpcAshmemImplCloseAshmem(int64_t id); 111 FFI_EXPORT void FfiRpcAshmemImplUnmapAshmem(int64_t id); 112 FFI_EXPORT int32_t FfiRpcAshmemImplGetAshmemSize(int64_t id, int32_t* errCode); 113 FFI_EXPORT void FfiRpcAshmemImplMapTypedAshmem(int64_t id, uint32_t mapType, int32_t* errCode); 114 FFI_EXPORT void FfiRpcAshmemImplMapReadWriteAshmem(int64_t id, int32_t* errCode); 115 FFI_EXPORT void FfiRpcAshmemImplMapReadonlyAshmem(int64_t id, int32_t* errCode); 116 FFI_EXPORT void FfiRpcAshmemImplSetProtectionType(int64_t id, uint32_t protectionType, int32_t* errCode); 117 FFI_EXPORT void FfiRpcAshmemImplWriteDataToAshmem( 118 int64_t id, uint8_t* data, int64_t size, int64_t offset, int32_t* errCode); 119 FFI_EXPORT uint8_t* FfiRpcAshmemImplReadDataFromAshmem(int64_t id, int64_t size, int64_t offset, int32_t* errCode); 120 121 FFI_EXPORT int64_t FfiRpcRemoteObjectConstructor(char* stringValue); 122 FFI_EXPORT int32_t FfiRpcRemoteObjectSendMessageRequest( 123 int64_t id, uint32_t code, int64_t dataId, int64_t replyId, OHOS::MesOption opt, int64_t funcId); 124 FFI_EXPORT int32_t FfiRpcRemoteObjectGetCallingPid(); 125 FFI_EXPORT int32_t FfiRpcRemoteObjectGetCallingUid(); 126 FFI_EXPORT char* FfiRpcRemoteObjectGetDescriptor(int64_t id, int32_t* errCode); 127 FFI_EXPORT void FfiRpcRemoteObjectModifyLocalInterface(int64_t id, char* stringValue, int32_t* errCode); 128 129 FFI_EXPORT RetDataI64 FfiRpcIPCSkeletonGetContextObject(); 130 FFI_EXPORT int32_t FfiRpcIPCSkeletonGetCallingPid(); 131 FFI_EXPORT int32_t FfiRpcIPCSkeletonGetCallingUid(); 132 FFI_EXPORT uint32_t FfiRpcIPCSkeletonGetCallingTokenId(); 133 FFI_EXPORT char* FfiRpcIPCSkeletonGetCallingDeviceID(); 134 FFI_EXPORT char* FfiRpcIPCSkeletonGetLocalDeviceID(); 135 FFI_EXPORT bool FfiRpcIPCSkeletonIsLocalCalling(); 136 FFI_EXPORT void FfiRpcIPCSkeletonFlushCmdBuffer(int64_t object); 137 138 FFI_EXPORT int32_t FfiRpcRemoteProxySendMessageRequest( 139 int64_t id, uint32_t code, int64_t dataId, int64_t replyId, OHOS::MesOption opt, int64_t funcId); 140 FFI_EXPORT void FfiRpcRemoteProxyRegisterDeathRecipient(int64_t id, int64_t funcId, int32_t flag, int32_t* errCode); 141 FFI_EXPORT void FfiRpcRemoteProxyUnregisterDeathRecipient(int64_t id, int64_t funcId, int32_t flag, int32_t* errCode); 142 FFI_EXPORT char* FfiRpcRemoteProxyGetDescriptor(int64_t id, int32_t* errCode); 143 FFI_EXPORT bool FfiRpcRemoteProxyIsObjectDead(int64_t id); 144 145 FFI_EXPORT int32_t FfiRpcGetRemoteType(int64_t id); 146 FFI_EXPORT int64_t FfiCreateRemoteObjectFromNapi(napi_env env, napi_value object); 147 FFI_EXPORT napi_value FfiConvertRemoteObject2Napi(napi_env env, int64_t object); 148 } 149 150 #endif 151