2 * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 /*************************************************************************
19 * FILENAME : nsapi_sharedmem.cpp
21 * DESCRIPTION : TestApp - NS_SharedMem
23 ************************************************************************/
25 #include <native_service/ns_logger_if.h>
26 #include <native_service/ns_version_if.h>
27 #include <native_service/ns_sharedmem.h>
28 #include <native_service/ns_shared_mem_if.h>
29 #include <native_service/ns_transmit_log.h>
35 #include "ss_version.h"
36 #include "ns_unittest_internal.h"
39 #if defined(AVAILABLE_API)
40 static CNSSharedMem *g_pTransmitLogSharedBuf = NULL;
42 ////////////////////////////////////////////////////////////////////////////////////////////
43 /// NSSharedMemTransmitLogOpen
44 /// Open the shared memory for transmit logging
45 ////////////////////////////////////////////////////////////////////////////////////////////
46 EFrameworkunifiedStatus NSSharedMemTransmitLogOpen() {
47 EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
49 if (NULL == g_pTransmitLogSharedBuf) {
50 // Create the instance
51 g_pTransmitLogSharedBuf = new(std::nothrow) CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
54 if (NULL != g_pTransmitLogSharedBuf) {
55 if (!g_pTransmitLogSharedBuf->IsOpen()) {
56 // maps the shared memory buffer
57 l_eStatus = g_pTransmitLogSharedBuf->Open();
60 l_eStatus = eFrameworkunifiedStatusNullPointer;
66 ////////////////////////////////////////////////////////////////////////////////////////////
67 /// NSSharedMemTransmitLogClose
68 /// Close the transmit logging shared memory
69 ////////////////////////////////////////////////////////////////////////////////////////////
70 EFrameworkunifiedStatus NSSharedMemTransmitLogClose() {
71 EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
73 if (NULL != g_pTransmitLogSharedBuf) {
74 // un-map the shared memory object
75 l_eStatus = g_pTransmitLogSharedBuf->Close();
77 delete g_pTransmitLogSharedBuf;
78 g_pTransmitLogSharedBuf = NULL;
80 l_eStatus = eFrameworkunifiedStatusNullPointer;
86 ////////////////////////////////////////////////////////////////////////////////////////////
87 /// NSSharedMemReadTransmitLog
88 /// Reads transmit log from the shared memory buffer.
89 ////////////////////////////////////////////////////////////////////////////////////////////
90 SI_32 NSSharedMemReadTransmitLog(PSTR f_pBuffer, const UI_32 f_uiLength, const BOOL f_bBlock) {
92 SI_32 l_iReadSize = NS_SHM_ERROR;
94 if (NULL != g_pTransmitLogSharedBuf && NULL != f_pBuffer) {
95 // Writes log data into shared memory buffer
96 l_iReadSize = g_pTransmitLogSharedBuf->Read(f_pBuffer, f_uiLength, f_bBlock);
102 ////////////////////////////////////////////////////////////////////////////////////////////
103 /// NSSharedMemWriteTransmitLog
104 /// Write transmit log into the shared memory buffer.
105 ////////////////////////////////////////////////////////////////////////////////////////////
106 SI_32 NSSharedMemWriteTransmitLog(PCSTR f_pBuffer, const UI_32 f_uiLength) {
108 SI_32 l_iWriteSize = NS_SHM_ERROR;
110 if (NULL != g_pTransmitLogSharedBuf && NULL != f_pBuffer) {
111 // Writes log data into shared memory buffer
112 l_iWriteSize = g_pTransmitLogSharedBuf->Write(f_pBuffer, f_uiLength);
121 CFrameworkunifiedVersion g_FrameworkunifiedVersion(MAJORNO, MINORNO, REVISION);
122 #define ZONE_INIT ZONEMASK(10)
123 #define ZONE_FUNC ZONEMASK(11)
124 #define ZONE_MEM ZONEMASK(12)
125 #define ZONE_INFO ZONEMASK(29)
126 #define ZONE_WARN ZONEMASK(30)
127 #define ZONE_ERR ZONEMASK(31)
128 #define FRAMEWORKUNIFIEDLOGAPPZONES ZONE_INFO, ZONE_WARN, ZONE_ERR
129 FRAMEWORKUNIFIEDLOGPARAM g_FrameworkunifiedLogParams = {
132 "Init", "Function", "Memory",
139 "Info", "Warning", "Error"
141 FRAMEWORKUNIFIEDLOGZONES
146 sleep_msec(int msec) {
147 struct timespec ts, rem;
148 ts.tv_sec = msec / 1000;
149 ts.tv_nsec = (msec % 1000) * 1000000;
152 ret = nanosleep(&ts, &rem);
153 if (ret == 0 || (ret < 0 && errno != EINTR)) {
163 printf("nsapi_sharedmem [command] [option]\n");
164 printf(" command: preset\n");
165 #if !defined(AVAILABLE_API)
166 printf(" preset service_write\n");
167 printf(" preset service_write_read n\n");
169 printf(" preset sharedmem_write\n");
170 printf(" preset sharedmem_write_read n\n");
171 printf(" preset write_6_A\n");
172 printf(" preset write_6_B\n");
173 printf(" preset write_7_A\n");
174 printf(" preset write_7_B\n");
175 printf(" command: manual\n");
176 printf(" manual ***\n");
180 int main(int argc, char *argv[]) {
183 FRAMEWORKUNIFIED_SET_ZONES();
189 char *command = argv[1];
192 /* Execute command */
193 if (strcmp(command, "preset") == 0) {
195 char *preset = argv[2];
197 option = atoi(argv[3]);
200 #if defined(AVAILABLE_API)
201 if (strcmp(preset, "sharedmem_write") == 0) {
202 NSUT_ASSERT(NSSharedMemTransmitLogOpen() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogOpen() error.");
203 SI_32 size = NSSharedMemWriteTransmitLog(argv[2], static_cast<UI_32>(strlen(argv[2]) + 1));
204 NSUT_ASSERT(size == (SI_32)(strlen(argv[2]) + 1), "NSSharedMemWriteTransmitLog() error.");
205 NSUT_ASSERT(NSSharedMemTransmitLogClose() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogClose() error.");
206 if (size != (SI_32)(strlen(argv[2]) + 1)) {
209 } else if (strcmp(preset, "sharedmem_write_read") == 0) {
210 for (int i = 0; i < option; i++) {
211 NSUT_ASSERT(NSSharedMemTransmitLogOpen() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogOpen() error.");
212 SI_32 size = NSSharedMemWriteTransmitLog(argv[2], static_cast<UI_32>(strlen(argv[2]) + 1));
213 NSUT_ASSERT(size == (SI_32)(strlen(argv[2]) + 1), "NSSharedMemWriteTransmitLog() error.");
214 char f_pBuffer[100] = {0};
215 NSSharedMemReadTransmitLog(f_pBuffer, sizeof(f_pBuffer), FALSE);
216 NSUT_ASSERT(NSSharedMemTransmitLogClose() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogClose() error.");
220 if (strcmp(preset, "service_write") == 0) {
221 TMemID id = SetDataToShared(argv[2], strlen(argv[2]) + 1);
222 NSUT_ASSERT(id != BAD_MEM_ID, "SetDataToShared() error.");
223 if (id == BAD_MEM_ID) {
226 } else if (strcmp(preset, "service_write_read") == 0) {
227 for (int i = 0; i < option; i++) {
228 EFrameworkunifiedStatus status;
229 TMemID id = SetDataToShared(argv[2], strlen(argv[2]) + 1);
230 NSUT_ASSERT(id != BAD_MEM_ID, "SetDataToShared() error.");
231 UI_32 size = GetLengthOfDataFromShared(id);
232 NSUT_ASSERT(size == (strlen(argv[2]) + 1), "NSSharedMemWriteTransmitLog() error.");
233 void *data[100] = { 0 };
234 status = GetDataFromShared(id, data, sizeof(data));
235 NSUT_ASSERT(eFrameworkunifiedStatusOK == status, "GetDataFromShared()");
236 status = DiscardDataFromShared(id);
237 NSUT_ASSERT(eFrameworkunifiedStatusOK == status, "DiscardDataFromShared()");
239 } else if (strcmp(preset, "sharedmem_write") == 0) {
240 NSUT_ASSERT(NSSharedMemTransmitLogOpen() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogOpen() error.");
241 SI_32 size = NSSharedMemWriteTransmitLog(argv[2], strlen(argv[2]) + 1);
242 NSUT_ASSERT(size == (SI_32)(strlen(argv[2]) + 1), "NSSharedMemWriteTransmitLog() error.");
243 NSUT_ASSERT(NSSharedMemTransmitLogClose() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogClose() error.");
244 if (size != (SI_32)(strlen(argv[2]) + 1)) {
247 } else if (strcmp(preset, "sharedmem_write_read") == 0) {
248 for (int i = 0; i < option; i++) {
249 NSUT_ASSERT(NSSharedMemTransmitLogOpen() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogOpen() error.");
250 SI_32 size = NSSharedMemWriteTransmitLog(argv[2], strlen(argv[2]) + 1);
251 NSUT_ASSERT(size == (SI_32)(strlen(argv[2]) + 1), "NSSharedMemWriteTransmitLog() error.");
252 char f_pBuffer[100] = {0};
253 NSSharedMemReadTransmitLog(f_pBuffer, sizeof(f_pBuffer), FALSE);
254 NSUT_ASSERT(NSSharedMemTransmitLogClose() == eFrameworkunifiedStatusOK, "NSSharedMemTransmitLogClose() error.");
258 else if (strcmp(preset, "write_6_A") == 0) { // NOLINT (readability/nolint)
259 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
260 if (testObj->Open() != eFrameworkunifiedStatusOK) {
264 char f_pBuffer[100] = {0};
265 if (testObj->Read(f_pBuffer, sizeof(f_pBuffer), FALSE) != 7) {
268 if (memcmp(f_pBuffer, "ABCDEFG", 7) != 0) {
269 printf("memcmp() error.");
272 if (testObj->Close() != eFrameworkunifiedStatusOK) {
276 } else if (strcmp(preset, "write_6_B") == 0) {
277 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
278 if (testObj->Open() != eFrameworkunifiedStatusOK) {
281 if (testObj->Write("ABCDEFG", static_cast<UI_32>(strlen("ABCDEFG"))) != 7) {
284 if (testObj->Close() != eFrameworkunifiedStatusOK) {
288 } else if (strcmp(preset, "write_7_A") == 0) {
289 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
290 if (testObj->Open() != eFrameworkunifiedStatusOK) {
294 char f_pBuffer[100] = {0};
295 if (testObj->Read(f_pBuffer, sizeof(f_pBuffer), FALSE) == 7) {
298 if (testObj->Close() != eFrameworkunifiedStatusOK) {
302 } else if (strcmp(preset, "write_7_B") == 0) {
303 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
304 if (testObj->Open() == eFrameworkunifiedStatusOK) {
307 if (testObj->Write("ABCDEFG", static_cast<UI_32>(strlen("ABCDEFG"))) == 7) {
310 if (testObj->Close() == eFrameworkunifiedStatusOK) {
314 } else if (strcmp(preset, "stress_4") == 0) {
316 char *writeBuffer = new char[0x400]();
317 for (i = 0; i < 0x400; i++) {
318 writeBuffer[i] = static_cast<char>(i);
321 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
322 if (testObj->Open() != eFrameworkunifiedStatusOK) {
327 while ((timeout < 10) && (test_count < option)) {
328 if (testObj->GetSize() > (SI_32)(TRANSMIT_LOG_SHAREDMEM_SIZE - 0x800)) {
331 // printf("timeout = %d\n", timeout);
334 if (testObj->ClearBuf() != eFrameworkunifiedStatusOK) {
337 if (testObj->SetReadPtrToWritePtr() != eFrameworkunifiedStatusOK) {
340 if (testObj->Write(writeBuffer, 0x400) != 0x400) {
346 if (testObj->Close() != eFrameworkunifiedStatusOK) {
351 delete[] writeBuffer;
352 } else if (strcmp(preset, "stress_5") == 0) {
354 char *writeBuffer = new char[0x100]();
355 for (i = 0; i < 0x100; i++) {
356 writeBuffer[i] = static_cast<char>(0xff - i);
359 CNSSharedMem *testObj = new CNSSharedMem(TRANSMIT_LOG_SHAREDMEM_NAME, TRANSMIT_LOG_SHAREDMEM_SIZE);
360 if (testObj->Open() != eFrameworkunifiedStatusOK) {
365 while (timeout < 10) {
366 int size = (count % 0xff) + 1;
367 if (testObj->GetSize() > (SI_32)(TRANSMIT_LOG_SHAREDMEM_SIZE - 0x800)) {
372 if (testObj->Write(&writeBuffer[0xff - size], size) != size) {
378 if (testObj->Close() != eFrameworkunifiedStatusOK) {
383 delete[] writeBuffer;
390 } else if (strcmp(command, "manual") == 0) {
396 printf(" ----- imageapi ----------\n");
397 printf(" 0: debug_test()\n");
398 printf(" 1: gfx_ut_image_api()\n");
399 printf(" 2: gfx_ut_image_csv()\n");
400 printf(" q: quit\n");
401 printf(" -------------------------\n");
403 fgets(buf, sizeof(buf), stdin);
404 if (buf[0] == '\n') {
406 } else if (buf[0] == 'q' || buf[0] == 'Q') {
417 // gfx_ut_image_api();
420 // gfx_ut_image_csv((char *)"it_image.csv");