Skip to content

Commit 8b172aa

Browse files
anthonypayne-GMammolitor
authored andcommitted
lib: someip-c: Re-wrote test service in C
Re-wrote the test SOME/IP service code in C, rather than in C++. Tested against fluent-bit binary with the in-someip plugin enabled. Signed-off-by: Anthony Payne <[email protected]>
1 parent 8531d63 commit 8b172aa

File tree

3 files changed

+134
-139
lines changed

3 files changed

+134
-139
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

2-
add_executable(someip_test_service test_service.cc)
2+
add_executable(someip_test_service test_service.c)
33
target_link_libraries(someip_test_service PRIVATE someip-c)
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
/* Fluent Bit
2+
* ==========
3+
* Copyright (C) 2015-2024 The Fluent Bit Authors
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
#include <stdint.h>
18+
#include <stdio.h>
19+
#include <stdlib.h>
20+
#include <string.h>
21+
#include <unistd.h>
22+
23+
#include "someip_api.h"
24+
25+
26+
static const char* NAME = "Test Service";
27+
static const uint16_t SERVICE_ID = 4;
28+
static const uint16_t INSTANCE_ID = 1;
29+
static const uint16_t METHOD_ID = 1;
30+
static const uint16_t EVENT_ID = 0x8000U;
31+
static const uint16_t EVENT_GROUP_ID = 1;
32+
33+
static uint16_t client_id = 0;
34+
35+
/*
36+
* Function to handle callback when a request is received.
37+
* @param request_ptr Pointer to the structure that has the request details.
38+
*/
39+
void HandleRequest(void*, struct some_ip_request *request_ptr) {
40+
static const char* response = "This is the response to the request";
41+
int ret = 0;
42+
if (request_ptr == NULL) {
43+
return;
44+
}
45+
printf("Received request (method = %d)\n", request_ptr->method_id);
46+
printf("Payload length = %ld\n", request_ptr->payload_len);
47+
48+
/* Normal service would Parse the request and perform/initiate some actions on it*/
49+
/* For this example just send back a canned response */
50+
51+
ret = someip_send_response(client_id, request_ptr->request_id.client_request_id,
52+
(void*)response, strlen(response));
53+
if (ret != SOMEIP_RET_SUCCESS) {
54+
printf("Failed to send response: %d\n", ret);
55+
}
56+
}
57+
58+
/*
59+
* Function to initialize the test service with the SOME/IP library.
60+
* @return 0 on success, -1 on failure.
61+
*/
62+
int Initialize() {
63+
int ret = someip_initialize(NAME, &client_id);
64+
if (ret != SOMEIP_RET_SUCCESS) {
65+
printf("Failed to initialize SOME/IP: %d\n", ret);
66+
return -1;
67+
}
68+
69+
/* Register Request Handler */
70+
ret = someip_register_request_handler(client_id, SERVICE_ID, INSTANCE_ID,
71+
METHOD_ID, NULL, HandleRequest);
72+
73+
if (ret != SOMEIP_RET_SUCCESS) {
74+
printf("Failed to register request handler: %d\n", ret);
75+
someip_shutdown(client_id);
76+
return -1;
77+
}
78+
79+
/* Offer Event */
80+
ret = someip_offer_event(client_id, SERVICE_ID, INSTANCE_ID, EVENT_ID, (uint16_t*)&EVENT_GROUP_ID, 1);
81+
if (ret != SOMEIP_RET_SUCCESS) {
82+
printf("Failed to Offer Event: %d\n", ret);
83+
someip_shutdown(client_id);
84+
return -1;
85+
}
86+
87+
/* Offer Service */
88+
ret = someip_offer_service(client_id, SERVICE_ID, INSTANCE_ID);
89+
if (ret != SOMEIP_RET_SUCCESS) {
90+
printf("Failed to Offer Service: %d\n", ret);
91+
someip_shutdown(client_id);
92+
return -1;
93+
}
94+
95+
return 0;
96+
}
97+
98+
void Teardown() {
99+
someip_shutdown(client_id);
100+
}
101+
102+
void SendEvent(const int num) {
103+
const char* base_msg = "Event Number ";
104+
char buffer[128];
105+
int ret = 0;
106+
strcpy(buffer, base_msg);
107+
sprintf(buffer + strlen(base_msg), "%d", num);
108+
109+
printf("Sending event with message %s\n", buffer);
110+
111+
ret = someip_send_event(client_id, SERVICE_ID, INSTANCE_ID, EVENT_ID,
112+
buffer, strlen(buffer));
113+
if (ret != SOMEIP_RET_SUCCESS) {
114+
printf ("Failed to send event, %d\n", ret);
115+
}
116+
}
117+
118+
119+
int main() {
120+
int num_events = 10;
121+
if (Initialize() != 0) {
122+
return EXIT_FAILURE;
123+
}
124+
125+
126+
for (int i = 0; i <= num_events; ++i) {
127+
SendEvent(i);
128+
sleep(2);
129+
}
130+
131+
Teardown();
132+
return EXIT_SUCCESS;
133+
}

lib/libsomeip-c/example/test_service.cc

Lines changed: 0 additions & 138 deletions
This file was deleted.

0 commit comments

Comments
 (0)