| /* |
| * |
| * Copyright 2019-2020 NXP |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file |
| * |
| * ex_sss_boot_connectstring.c: *The purpose and scope of this file* |
| * |
| * Project: SecureIoTMW-Debug@appboot-top-eclipse_x86 |
| * |
| * $Date: Mar 10, 2019 $ |
| * $Author: ing05193 $ |
| * $Revision$ |
| */ |
| |
| /* ***************************************************************************************************************** |
| * Includes |
| * ***************************************************************************************************************** */ |
| #include <ex_sss_boot.h> |
| #include <nxLog_App.h> |
| #include <sm_types.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| /* ***************************************************************************************************************** |
| * Internal Definitions |
| * ***************************************************************************************************************** */ |
| |
| /* ***************************************************************************************************************** |
| * Type Definitions |
| * ***************************************************************************************************************** */ |
| |
| /* ***************************************************************************************************************** |
| * Global and Static Variables |
| * Total Size: NNNbytes |
| * ***************************************************************************************************************** */ |
| |
| const char gszCOMPortDefault[] = EX_SSS_BOOT_SSS_COMPORT_DEFAULT; |
| const char gszSocketPortDefault[] = EX_SSS_BOOT_SSS_SOCKETPORT_DEFAULT; |
| const char gszReaderDefault[] = EX_SSS_BOOT_SSS_PCSC_READER_DEFAULT; |
| |
| /* ***************************************************************************************************************** |
| * Private Functions Prototypes |
| * ***************************************************************************************************************** */ |
| |
| /* ***************************************************************************************************************** |
| * Public Functions |
| * ***************************************************************************************************************** */ |
| |
| sss_status_t ex_sss_boot_connectstring(int argc, const char *argv[], const char **pPortName) |
| { |
| const char *portName = NULL; |
| sss_status_t status = kStatus_SSS_Success; |
| #if defined(_WIN32) && defined(WIN32) && defined(DEBUG) |
| _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); |
| _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); |
| #endif |
| |
| #if !AX_EMBEDDED |
| bool last_is_help = FALSE; |
| if (argv != NULL) { |
| LOG_I("Running %s", argv[0]); |
| } |
| if (argc > 1 /* Alteast 1 cli argument */ |
| && argv != NULL /* argv not null */ |
| && argv[argc - 1] != NULL /* Last parameter exists */ |
| ) { |
| if (0 == strncmp("--help", argv[argc - 1], sizeof("--help"))) { |
| last_is_help = TRUE; |
| } |
| } |
| if (TRUE == last_is_help) { |
| *pPortName = argv[argc - 1]; /* --help */ |
| return kStatus_SSS_Success; |
| } |
| if (argc > 1 /* Alteast 1 cli argument */ |
| && argv != NULL /* argv not null */ |
| && argv[argc - 1] != NULL /* Last parameter exists */ |
| && argv[argc - 1][0] != '-' /* Not something like -h / --help */ |
| ) { |
| portName = argv[argc - 1]; /* last entry, deemed as port name */ |
| LOG_I("Using PortName='%s' (CLI)", portName); |
| } |
| else |
| #endif |
| { |
| const char *portName_env = getenv(EX_SSS_BOOT_SSS_PORT); |
| if (portName_env != NULL) { |
| portName = portName_env; |
| LOG_I("Using PortName='%s' (ENV: %s=%s)", portName, EX_SSS_BOOT_SSS_PORT, portName); |
| } |
| } |
| |
| if (portName == NULL) { |
| #if RJCT_VCOM |
| portName = gszCOMPortDefault; |
| LOG_I("Using PortName='%s' (gszCOMPortDefault)", portName); |
| #elif SMCOM_JRCP_V1 || SMCOM_JRCP_V2 |
| portName = gszSocketPortDefault; |
| LOG_I("Using PortName='%s' (gszSocketPortDefault)", portName); |
| #elif SMCOM_PCSC |
| portName = gszReaderDefault; |
| #else |
| status = kStatus_SSS_Success; |
| #endif |
| |
| #if AX_EMBEDDED |
| /* FINE. To be moved to boot direct */ |
| #else |
| LOG_I( |
| "If you want to over-ride the selection, use ENV=%s or pass in " |
| "command line arguments.", |
| EX_SSS_BOOT_SSS_PORT); |
| #endif |
| } |
| |
| if (status == kStatus_SSS_Success && pPortName != NULL) { |
| *pPortName = portName; |
| } |
| return status; |
| } |
| |
| bool ex_sss_boot_isSerialPortName(const char *portName) |
| { |
| bool is_vcom = FALSE; |
| #if RJCT_VCOM |
| if (portName == NULL) { |
| is_vcom = FALSE; |
| } |
| else if (0 == strncmp("COM", portName, sizeof("COM") - 1)) { |
| is_vcom = TRUE; |
| } |
| else if (0 == strncmp("\\\\.\\COM", portName, sizeof("\\\\.\\COM") - 1)) { |
| is_vcom = TRUE; |
| } |
| else if (0 == strncmp("/tty/", portName, sizeof("/tty/") - 1)) { |
| is_vcom = TRUE; |
| } |
| else if (0 == strncmp("/dev/tty", portName, sizeof("/dev/tty") - 1)) { |
| is_vcom = TRUE; |
| } |
| #endif |
| return is_vcom; |
| } |
| |
| bool ex_sss_boot_isSocketPortName(const char *portName) |
| { |
| bool is_socket = FALSE; |
| #if SMCOM_JRCP_V1 || SMCOM_JRCP_V2 |
| if (portName == NULL) { |
| is_socket = FALSE; |
| } |
| else if (NULL != strchr(portName, ':')) { |
| is_socket = TRUE; |
| } |
| #endif |
| return is_socket; |
| } |
| |
| bool ex_sss_boot_isHelp(const char *argname) |
| { |
| bool last_is_help = FALSE; |
| |
| if (NULL != argname && (0 == strncmp("--help", argname, sizeof("--help")))) { |
| last_is_help = TRUE; |
| } |
| return last_is_help; |
| } |
| |
| /* ***************************************************************************************************************** |
| * Private Functions |
| * ***************************************************************************************************************** */ |