diff options
Diffstat (limited to 'communication/server/src/main/communication_main.cpp')
-rw-r--r-- | communication/server/src/main/communication_main.cpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/communication/server/src/main/communication_main.cpp b/communication/server/src/main/communication_main.cpp new file mode 100644 index 00000000..5fcb428a --- /dev/null +++ b/communication/server/src/main/communication_main.cpp @@ -0,0 +1,159 @@ +/* + * @copyright Copyright (c) 2016-2019 TOYOTA MOTOR CORPORATION. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/////////////////////////////////////////////////////////////////////////////// +/// \ingroup +/// \brief +/// +/// +/// +/// +/// +/////////////////////////////////////////////////////////////////////////////// + +/* + * This file has been generated automatically. + * User hand written code entry is allowed only inside protected zones. + */ + +#include <errno.h> +#include <sys/timerfd.h> +#include <unistd.h> +#include <poll.h> + +#include <native_service/frameworkunified_dispatcher.h> +#include <native_service/frameworkunified_application.h> +#include <native_service/frameworkunified_multithreading.h> + +#include <native_service/ns_version_if.h> +#include <system_service/ss_system_if.h> +#include <system_service/ss_sm_client_if.h> +#include "communication_communicationlog.h" +#include "communication_version.h" +#include "communication_cid.h" + +#include "CAN_Thread.h" +#include "Thread_Common.h" + +CFrameworkunifiedVersion g_FrameworkunifiedVersion(MAJORNO, MINORNO, REVISION); // NOLINT (readability/naming) + +FRAMEWORKUNIFIEDLOGPARAM g_FrameworkunifiedLogParams = { // NOLINT (readability/naming) + FRAMEWORKUNIFIEDLOGOPTIONS, + {ZONE_TEXT_10, ZONE_TEXT_11, ZONE_TEXT_12, + ZONE_TEXT_13, ZONE_TEXT_14, ZONE_TEXT_15, + ZONE_TEXT_16, ZONE_TEXT_17, ZONE_TEXT_18, + ZONE_TEXT_19, ZONE_TEXT_20, ZONE_TEXT_21, + ZONE_TEXT_22, ZONE_TEXT_23, ZONE_TEXT_24, + ZONE_TEXT_25, ZONE_TEXT_26, ZONE_TEXT_27, + ZONE_TEXT_28, ZONE_TEXT_29, ZONE_TEXT_30, + ZONE_TEXT_31}, + FRAMEWORKUNIFIEDLOGZONES}; + +extern HANDLE g_can_thread; + +#define COMMSYS_SND_ERR_CNT_MAX 10 + +////////////////////////////////////////// +// Function : main +////////////////////////////////////////// + +int main(int argc, char *argv[]) { + EFrameworkunifiedStatus e_status = eFrameworkunifiedStatusOK; + FrameworkunifiedDefaultCallbackHandler cb_funcs; + FRAMEWORKUNIFIED_MAKE_DEFAULT_CALLBACK(cb_funcs); // LCOV_EXCL_BR_LINE 15:marco defined in "system_service/ss_system_if.h" + HANDLE h_app; + FRAMEWORKUNIFIED_SET_ZONES(); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" + struct pollfd fds[2]; + int ret; + uint32_t dummy = 0; + uint32_t snd_err_cnt_can = 0; + BOOL capture_log_flg = FALSE; // Log save flag(Saved:TRUE, Unsaved:FALSE) + + e_status = FrameworkunifiedCreateDispatcherWithoutLoop(LAN_SERVICE_MAIN, h_app, argc, argv, &cb_funcs, TRUE); // LCOV_EXCL_BR_LINE 11:Unexpected branch // NOLINT (whitespace/line_length) + if (e_status != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedCreateDispatcherWithoutLoop: %d", e_status); // LCOV_EXCL_LINE 4: NSFW error case. + return EXIT_FAILURE; + } + + e_status = FrameworkunifiedGetDispatcherFD(h_app, &fds[0].fd); // LCOV_EXCL_BR_LINE 11:Unexpected branch + if (e_status != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedGetDispatcherFD: %d", e_status); // LCOV_EXCL_LINE 4: NSFW error case. + return EXIT_FAILURE; + } + + if ((fds[1].fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC)) == -1) { // LCOV_EXCL_BR_LINE 5: timerfd_create's error case. // NOLINT (whitespace/line_length) + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "timerfd_create: %d", errno); // LCOV_EXCL_LINE 5: timerfd_create's error case. + return EXIT_FAILURE; + } + + struct itimerspec tm; + tm.it_value.tv_sec = 0; + tm.it_value.tv_nsec = 100 * 1000 * 1000; + tm.it_interval.tv_sec = 0; + tm.it_interval.tv_nsec = 100 * 1000 * 1000; + if (timerfd_settime(fds[1].fd, 0, &tm, NULL) == -1) { // LCOV_EXCL_BR_LINE 5: timerfd_create's error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "timerfd_settime: %d", errno); // LCOV_EXCL_LINE 5: timerfd_create's error case. + return EXIT_FAILURE; + } + fds[0].events = POLLIN; + fds[1].events = POLLIN; + + while (1) { + ret = poll(fds, sizeof(fds) / sizeof(struct pollfd), -1); // LCOV_EXCL_BR_LINE 5: poll's error case. + if (ret < 0) { // LCOV_EXCL_BR_LINE 5: poll's error case. + // LCOV_EXCL_START 5: poll's error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + if (errno == EINTR) { /* signal interrupt */ + continue; + } + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "poll errno:%d", errno); + // LCOV_EXCL_STOP 5: poll's error case. + } else { + if ((fds[0].revents & POLLIN) != 0) { + e_status = FrameworkunifiedDispatchProcessWithoutLoop(h_app); // LCOV_EXCL_BR_LINE 11:Unexpected branch + if (e_status != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedDispatchProcessWithoutLoop: %d", e_status); // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length) + } + } else if ((fds[1].revents & POLLIN) != 0) { // LCOV_EXCL_BR_LINE 5: poll's error case. + // Timeout + uint64_t exp; + read(fds[1].fd, &exp, sizeof(uint64_t)); // LCOV_EXCL_BR_LINE 11:Unexpected branch + + // Timeout notification to the CAN thread + if (CommGetAvailabilityCurrent(CAN_AVAILABILITY)) { + e_status = FrameworkunifiedSendChild(h_app, g_can_thread, CID_COMMSYS_TIMEOUT, 0, &dummy); // LCOV_EXCL_BR_LINE 11:Unexpected branch // NOLINT (whitespace/line_length) + if (e_status != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case. + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + snd_err_cnt_can++; // LCOV_EXCL_LINE 4: NSFW error case. + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedSendChild(timeout for can) faild: %d", e_status); // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length) + if (!capture_log_flg && (snd_err_cnt_can >= COMMSYS_SND_ERR_CNT_MAX)) { // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length) + SendUserInvokedLoggingRequestToSystemManager(e_SS_SM_CAPTURE_DTC_LOGS, "Send CAN TimeoutNtfy Error"); // LCOV_EXCL_LINE 4: NSFW error case. // NOLINT (whitespace/line_length) + capture_log_flg = TRUE; // LCOV_EXCL_LINE 4: NSFW error case. + } + } else { + snd_err_cnt_can = 0; + } + } + } + } + } + return EXIT_SUCCESS; +} // LCOV_EXCL_LINE 10: final line |