/** * Copyright(c) 2011 Trusted Logic. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Trusted Logic nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "s_type.h" #include "s_version.h" #include "smc_pa_ctrl_os.h" /*--------------------------------------------------------------------------- * Utility Functions *---------------------------------------------------------------------------*/ static void printUsage(bool bSuccess) { #ifdef BOOT_TIME_PA printf("usage : smc_boot_pa_ctrl <options> [command]\n"); printf(" Options:\n"); printf(" -h, --help: Print this help\n"); printf(" Commands:\n"); printf(" -c <conf> : Configuration file path\n"); printf(" start <pa_file_path>: load and start the SMC PA\n"); printf("\n"); #else printf("usage : smc_pa_ctrl <options> [command]\n"); printf(" Options:\n"); printf(" -h, --help: Print this help\n"); printf(" Commands:\n"); printf(" -c <conf> : Configuration file path\n"); printf(" start <pa_file_path>: load and start the SMC PA\n"); printf(" stop: stop the SMC PA\n"); printf("\n"); #endif exit(bSuccess ? 0 : 1); } /*--------------------------------------------------------------------------- * Application Entry-Point *---------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { char* pPAFileName = NULL; char* pConfFileName = NULL; int nCommand = SCX_SMC_PA_CTRL_NONE; int nStatus = 0; #ifdef BOOT_TIME_PA printf("SMC BOOT PA Control\n"); printf(S_VERSION_STRING "\n"); #else printf("SMC PA Control\n"); printf(S_VERSION_STRING "\n"); #endif /* Skip program name */ argv ++; argc --; while (argc != 0) { if (argv[0][0] == '-') { /* * This is an option */ if ((strcmp(argv[0], "--help") == 0) || (strcmp(argv[0], "-h") == 0)) { printUsage(true); } else if (strcmp(argv[0], "-c") == 0) { /* Next argument */ argc --; argv ++; if (argc <= 0) { printf("Missing argument for the option '-c'\n\n"); printUsage(false); } pConfFileName = malloc(strlen(argv[0]) + 1); if (pConfFileName == NULL) { printf("Out of memory\n"); exit(2); } strcpy(pConfFileName, argv[0]); } else { printf("Invalid option [%s]\n\n", argv[0]); printUsage(false); } } else { /* * This is a command */ if (strcmp(argv[0], "start") == 0) { /* Next argument */ argc --; argv ++; if (argc <= 0) { printf("Missing argument for the command 'start'\n\n"); printUsage(false); } pPAFileName = malloc(strlen(argv[0]) + 1); if (pPAFileName == NULL) { printf("Out of memory\n"); exit(2); } strcpy(pPAFileName, argv[0]); nCommand = SCX_SMC_PA_CTRL_START; } #ifndef BOOT_TIME_PA else if (strcmp(argv[0], "stop") == 0) { nCommand = SCX_SMC_PA_CTRL_STOP; } #endif else { printf("Invalid command [%s]\n\n", argv[0]); printUsage(false); } } argc --; argv ++; } switch (nCommand) { case SCX_SMC_PA_CTRL_START: /* * Load and execute the SMC PA */ if (pConfFileName == NULL) { printf("Configuration file path is missing !\n"); printUsage(false); } nStatus = smcPAStart(pPAFileName, pConfFileName); break; #ifndef BOOT_TIME_PA case SCX_SMC_PA_CTRL_STOP: /* * Stop the SMC PA */ if (pConfFileName != NULL) { printf("Configuration file cannot be used with the 'stop' command\n\n"); printUsage(false); } nStatus = smcPAStop(); break; #endif default: printf("No command specified\n\n"); printUsage(false); break; } free(pPAFileName); free(pConfFileName); return nStatus; }