• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 
16 #include "napi/native_api.h"
17 #include <native_buffer/native_buffer.h>
18 #include <climits>
19 
20 #define SUCCESS 0
21 #define FAIL (-1)
22 #define ERROR_NUMBER 40001000
23 
getBuffer()24 static OH_NativeBuffer *getBuffer()
25 {
26     OH_NativeBuffer_Config config = {
27         .width = 0x100,
28         .height = 0x100,
29         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
30         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
31     };
32     OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(&config);
33     return buffer;
34 }
OHNativeBufferAlloc(napi_env env,napi_callback_info info)35 static napi_value OHNativeBufferAlloc(napi_env env, napi_callback_info info)
36 {
37 
38     napi_value result = nullptr;
39     int backInfo = FAIL;
40     OH_NativeBuffer *buffer = getBuffer();
41     if (buffer != nullptr) {
42         backInfo = SUCCESS;
43     }
44     napi_create_int32(env, backInfo, &result);
45     return result;
46 }
OHNativeBufferAllocAbnormal(napi_env env,napi_callback_info info)47 static napi_value OHNativeBufferAllocAbnormal(napi_env env, napi_callback_info info)
48 {
49     napi_value result = nullptr;
50     int backInfo = FAIL;
51     OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(nullptr);
52 
53     if (buffer != nullptr) {
54         backInfo = SUCCESS;
55     }
56     napi_create_int32(env, backInfo, &result);
57 
58     return result;
59 }
OHNativeBufferReference(napi_env env,napi_callback_info info)60 static napi_value OHNativeBufferReference(napi_env env, napi_callback_info info)
61 {
62     int backInfo = FAIL;
63     OH_NativeBuffer *buffer = getBuffer();
64     if (buffer != nullptr) {
65         int32_t ret = OH_NativeBuffer_Reference(buffer);
66         backInfo = ret;
67     }
68     napi_value result = nullptr;
69     napi_create_int32(env, backInfo, &result);
70     return result;
71 }
OHNativeBufferReferenceAbnormal(napi_env env,napi_callback_info info)72 static napi_value OHNativeBufferReferenceAbnormal(napi_env env, napi_callback_info info)
73 {
74     int backInfo = FAIL;
75     int32_t ret = OH_NativeBuffer_Reference(nullptr);
76     if (ret == 0) {
77         backInfo = SUCCESS;
78     }
79     napi_value result = nullptr;
80     napi_create_int32(env, backInfo, &result);
81     return result;
82 }
OHNativeBufferUnreference(napi_env env,napi_callback_info info)83 static napi_value OHNativeBufferUnreference(napi_env env, napi_callback_info info)
84 {
85     int backInfo = FAIL;
86     OH_NativeBuffer *buffer = getBuffer();
87 
88     if (buffer != nullptr) {
89         int32_t ret = OH_NativeBuffer_Unreference(buffer);
90         backInfo = ret;
91     }
92     napi_value result = nullptr;
93     napi_create_int32(env, backInfo, &result);
94     return result;
95 }
96 
OHNativeBufferUnreferenceAbnormal(napi_env env,napi_callback_info info)97 static napi_value OHNativeBufferUnreferenceAbnormal(napi_env env, napi_callback_info info)
98 {
99     int backInfo = FAIL;
100 
101     int32_t ret = OH_NativeBuffer_Unreference(nullptr);
102     if (ret == 0) {
103         backInfo = SUCCESS;
104     }
105     napi_value result = nullptr;
106     napi_create_int32(env, backInfo, &result);
107     return result;
108 }
109 
OHNativeBufferGetConfig(napi_env env,napi_callback_info info)110 static napi_value OHNativeBufferGetConfig(napi_env env, napi_callback_info info)
111 {
112     int backInfo = FAIL;
113     OH_NativeBuffer *buffer = getBuffer();
114     if (buffer != nullptr) {
115         OH_NativeBuffer_Config checkConfig = {};
116         checkConfig.width = 0x0;
117         checkConfig.height = 0x0;
118         checkConfig.format = 0x0;
119         checkConfig.usage = 0x0;
120         OH_NativeBuffer_GetConfig(buffer, &checkConfig);
121         if (&checkConfig != nullptr) {
122             backInfo = SUCCESS;
123         }
124     }
125     napi_value result = nullptr;
126     napi_create_int32(env, backInfo, &result);
127     return result;
128 }
129 
OHNativeBufferMap(napi_env env,napi_callback_info info)130 static napi_value OHNativeBufferMap(napi_env env, napi_callback_info info)
131 {
132     int backInfo = FAIL;
133     OH_NativeBuffer *buffer = getBuffer();
134 
135     if (buffer != nullptr) {
136         void *virAddr = nullptr;
137         int32_t ret = OH_NativeBuffer_Map(buffer, &virAddr);
138         backInfo = ret;
139     }
140     napi_value result = nullptr;
141     napi_create_int32(env, backInfo, &result);
142     return result;
143 }
OHNativeBufferMapAbnormal(napi_env env,napi_callback_info info)144 static napi_value OHNativeBufferMapAbnormal(napi_env env, napi_callback_info info)
145 {
146     int backInfo = FAIL;
147     void *virAddr = nullptr;
148     int32_t ret = OH_NativeBuffer_Map(nullptr, &virAddr);
149     if (ret == 0) {
150         backInfo = SUCCESS;
151     }
152     napi_value result = nullptr;
153     napi_create_int32(env, backInfo, &result);
154     return result;
155 }
OHNativeBufferUnmap(napi_env env,napi_callback_info info)156 static napi_value OHNativeBufferUnmap(napi_env env, napi_callback_info info)
157 {
158     int backInfo = FAIL;
159     OH_NativeBuffer *buffer = getBuffer();
160 
161     if (buffer != nullptr) {
162         int32_t ret = OH_NativeBuffer_Unmap(buffer);
163         backInfo = ret;
164     }
165     napi_value result = nullptr;
166     napi_create_int32(env, backInfo, &result);
167     return result;
168 }
OHNativeBufferUnmapAbnormal(napi_env env,napi_callback_info info)169 static napi_value OHNativeBufferUnmapAbnormal(napi_env env, napi_callback_info info)
170 {
171     int backInfo = FAIL;
172     int32_t ret = OH_NativeBuffer_Unmap(nullptr);
173     if (ret == 0) {
174         backInfo = SUCCESS;
175     }
176     napi_value result = nullptr;
177     napi_create_int32(env, backInfo, &result);
178     return result;
179 }
OHNativeBufferGetSeqNum(napi_env env,napi_callback_info info)180 static napi_value OHNativeBufferGetSeqNum(napi_env env, napi_callback_info info)
181 {
182     int backInfo = FAIL;
183     OH_NativeBuffer *buffer = getBuffer();
184 
185     if (buffer != nullptr) {
186         uint32_t id = OH_NativeBuffer_GetSeqNum(buffer);
187         if (id > 0) {
188             backInfo = SUCCESS;
189         }
190     }
191     napi_value result = nullptr;
192     napi_create_int32(env, backInfo, &result);
193     return result;
194 }
OHNativeBufferGetSeqNumAbnormal(napi_env env,napi_callback_info info)195 static napi_value OHNativeBufferGetSeqNumAbnormal(napi_env env, napi_callback_info info)
196 {
197     int backInfo = FAIL;
198     uint32_t id = OH_NativeBuffer_GetSeqNum(nullptr);
199     if (id > 0 && id != UINT_MAX) {
200         backInfo = SUCCESS;
201     }
202     napi_value result = nullptr;
203     napi_create_int32(env, backInfo, &result);
204     return result;
205 }
206 EXTERN_C_START
Init(napi_env env,napi_value exports)207 static napi_value Init(napi_env env, napi_value exports)
208 {
209     napi_property_descriptor desc[] = {
210         {"oHNativeBufferAlloc", nullptr, OHNativeBufferAlloc, nullptr, nullptr, nullptr, napi_default, nullptr},
211         {"oHNativeBufferReference", nullptr, OHNativeBufferReference, nullptr, nullptr, nullptr, napi_default, nullptr},
212         {"oHNativeBufferUnreference", nullptr, OHNativeBufferUnreference, nullptr, nullptr, nullptr, napi_default,
213          nullptr},
214         {"oHNativeBufferGetConfig", nullptr, OHNativeBufferGetConfig, nullptr, nullptr, nullptr, napi_default, nullptr},
215         {"oHNativeBufferMap", nullptr, OHNativeBufferMap, nullptr, nullptr, nullptr, napi_default, nullptr},
216         {"oHNativeBufferUnmap", nullptr, OHNativeBufferUnmap, nullptr, nullptr, nullptr, napi_default, nullptr},
217         {"oHNativeBufferGetSeqNum", nullptr, OHNativeBufferGetSeqNum, nullptr, nullptr, nullptr, napi_default, nullptr},
218         {"oHNativeBufferAllocAbnormal", nullptr, OHNativeBufferAllocAbnormal, nullptr, nullptr, nullptr, napi_default,
219          nullptr},
220         {"oHNativeBufferReferenceAbnormal", nullptr, OHNativeBufferReferenceAbnormal, nullptr, nullptr, nullptr,
221          napi_default, nullptr},
222         {"oHNativeBufferUnreferenceAbnormal", nullptr, OHNativeBufferUnreferenceAbnormal, nullptr, nullptr, nullptr,
223          napi_default, nullptr},
224         {"oHNativeBufferMapAbnormal", nullptr, OHNativeBufferMapAbnormal, nullptr, nullptr, nullptr, napi_default,
225          nullptr},
226         {"oHNativeBufferUnmapAbnormal", nullptr, OHNativeBufferUnmapAbnormal, nullptr, nullptr, nullptr, napi_default,
227          nullptr},
228         {"oHNativeBufferGetSeqNumAbnormal", nullptr, OHNativeBufferGetSeqNumAbnormal, nullptr, nullptr, nullptr,
229          napi_default, nullptr},
230 
231     };
232     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
233     return exports;
234 }
235 EXTERN_C_END
236 
237 static napi_module demoModule = {
238     .nm_version = 1,
239     .nm_flags = 0,
240     .nm_filename = nullptr,
241     .nm_register_func = Init,
242     .nm_modname = "nativebuffer",
243     .nm_priv = ((void *)0),
244     .reserved = {0},
245 };
246 
RegisterModule(void)247 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
248