📄 startup.c
字号:
} } else if (strEqualsIgnoreCase(argv[argp], "-pfile") || strEqualsIgnoreCase(argv[argp], "-pf")) { // -pf[ile] <propertyFile> [<propertyCache>] argp++; if ((argp < argc) && (*argv[argp] != '-')) { memset(propertyFile , 0, sizeof(propertyFile)); memset(propertyCache, 0, sizeof(propertyCache)); strncpy(propertyFile, argv[argp], sizeof(propertyFile) - 1); if (((argp + 1) < argc) && (*argv[argp + 1] != '-')) { argp++; strncpy(propertyCache, argv[argp], sizeof(propertyCache) - 1); } else { // set property cache // (note: 'propertyCache' buffer is larger than 'propertyFile') int len = strlen(propertyFile); strcpy(propertyCache, propertyFile); if (strEndsWith(propertyCache,".conf")) { int dot = len - 5; // - strlen(".conf"); strcpy(&propertyCache[dot], ".dat"); } else { strcpy(&propertyCache[len], ".dat"); } } logINFO(LOGSRC,"Property file set to '%s'" , propertyFile); logINFO(LOGSRC,"Property cache set to '%s'", propertyCache); } else { // default property file not changed } } else if (strEqualsIgnoreCase(argv[argp], "-nopc")) { // -nopc ("no property cache") loadPropCache = utFalse; } else if (strEqualsIgnoreCase(argv[argp], "-reboot")) { // may not be supported on this platform osReboot(); // command-line reboot does not need "startupReboot()" return 1; } else { break; } } /* check for existance of 'config' directory */ if (!ioIsDirectory(CONFIG_DIR)) { if (!ioExists(CONFIG_DIR)) { if (ioMakeDirs(CONFIG_DIR, utFalse)) { logDEBUG(LOGSRC,"Created CONFIG_DIR: %s ...", CONFIG_DIR); } else { logERROR(LOGSRC,"Unable to create directory: %s", CONFIG_DIR); return 1; // ExitProcess(1); } } else { logERROR(LOGSRC,"CONFIG_DIR is NOT a directory: %s", CONFIG_DIR); return 1; // ExitProcess(1); } } /* init WSA Windows extensions */#if defined(TARGET_WINCE) osInitWSAStartup();#endif /* initialize properties */ // since we need to use the property manager before the main run loop starts // we need to initialize the property manager here. startupPropInitialize(loadPropCache); /* debug header */#if defined(DEBUG_COMPILE) // issue warning so it can't be missed // ("DEBUG_COMPILE" should not be enabled in production mode!) logWARNING(LOGSRC,"***** Compiled with 'DEBUG_COMPILE' on!!! *****\n"); logPRINTF(LOGSRC,SYSLOG_WARNING, "***** Compiled with 'DEBUG_COMPILE' on!!! *****");#endif /* command line arguments */ for (; argp < argc; argp++) { if (strEqualsIgnoreCase(argv[argp],"-help") || strEqualsIgnoreCase(argv[argp],"-h")) { // -h[elp] _usage(pgmName); return 0; } else if (strStartsWithIgnoreCase(argv[argp],"-ver") || strEqualsIgnoreCase(argv[argp],"-v")) { // -v[ersion] _printBanner(); return 0; // ExitProcess(0); } else if (strEqualsIgnoreCase(argv[argp], "-printprops") || strEqualsIgnoreCase(argv[argp],"-pp")) { // -printprops propPrintProperties(stdout, utTrue); return 0; // ExitProcess(0); } else if (strStartsWithIgnoreCase(argv[argp],"-enc")) { // -enc[oding] <encoding> argp++; if ((argp < argc) && (*argv[argp] != '-')) { int enc = atoi(argv[argp]); switch (ENCODING_VALUE(enc)) { case ENCODING_BINARY: case ENCODING_BASE64: case ENCODING_HEX: case ENCODING_CSV: dftEncoding = enc; logINFO(LOGSRC,"Encoding set to %d\n", dftEncoding); break; default: logCRITICAL(LOGSRC,"Unsupported encoding ...\n"); _usage(pgmName); return 2; } } else { logCRITICAL(LOGSRC,"Missing encoding ...\n"); _usage(pgmName); return 2; } } else if (strEqualsIgnoreCase(argv[argp], "-cksum")) { // -cksum dftEncoding = ENCODING_CHECKSUM(dftEncoding); } else#if !defined(TRANSPORT_MEDIA_FILE) && !defined(TRANSPORT_MEDIA_SERIAL) if (strEqualsIgnoreCase(argv[argp], "-duplex") || strEqualsIgnoreCase(argv[argp], "-dup")) { // -duplex // WARNING: this does not verify that duplex connections are appropriate for the transport type propSetUInt32(PROP_COMM_MAX_SIM_EVENTS , 0L); UInt32 maxDupEvents = propGetUInt32(PROP_COMM_MAX_DUP_EVENTS, 1L); if (maxDupEvents <= 0L) { // make duplex connections at-least '1' propSetUInt32(PROP_COMM_MAX_DUP_EVENTS , 1L); } } else#endif#if !defined(TRANSPORT_MEDIA_SERIAL) && !defined(TRANSPORT_MEDIA_FILE) if (strEqualsIgnoreCase(argv[argp], "-simplex") || strEqualsIgnoreCase(argv[argp], "-sim")) { // -simplex // WARNING: this does not verify that simplex connections are appropriate for the transport type propSetUInt32(PROP_COMM_MAX_DUP_EVENTS , 0L); UInt32 maxDupEvents = propGetUInt32(PROP_COMM_MAX_SIM_EVENTS, 1L); if (maxDupEvents <= 0L) { // make simplex connections at-least '1' propSetUInt32(PROP_COMM_MAX_SIM_EVENTS , 1L); } } else#endif if (strEqualsIgnoreCase(argv[argp], "-comlog")) { // -comlog comLog = utTrue; } else if (strEqualsIgnoreCase(argv[argp], "-gps")) { // -gps <port> [<model>] argp++; if ((argp < argc) && (*argv[argp] != '-')) { propSetString(PROP_CFG_GPS_PORT, argv[argp]); // parse 'model', if specified (ie. 'garmin', etc). if (((argp + 1) < argc) && (*argv[argp + 1] != '-')) { argp++; propSetString(PROP_CFG_GPS_MODEL, argv[argp]); } if (comLog) { propSetBoolean(PROP_CFG_GPS_DEBUG, utTrue); } } else { logCRITICAL(LOGSRC,"Missing GPS port ...\n"); _usage(pgmName); return 3; } } else #if defined(TRANSPORT_MEDIA_SOCKET) || defined(TRANSPORT_MEDIA_GPRS) if (strEqualsIgnoreCase(argv[argp], "-server")) { // -server <host> [<port>] argp++; if ((argp < argc) && (*argv[argp] != '-')) { propInitFromString(PROP_COMM_HOST, argv[argp]); // parse 'port', if specified if (((argp + 1) < argc) && (*argv[argp + 1] != '-')) { argp++; propInitFromString(PROP_COMM_PORT, argv[argp]); } } else { logCRITICAL(LOGSRC,"Missing host ...\n"); _usage(pgmName); return 3; } } else#endif#if defined(TRANSPORT_MEDIA_SERIAL) if (strEqualsIgnoreCase(argv[argp], "-serial")) { // -server <port> [<bps>] argp++; if ((argp < argc) && (*argv[argp] != '-')) { propSetString(PROP_CFG_XPORT_PORT, argv[argp]); // parse 'bps', if specified if (((argp + 1) < argc) && (*argv[argp + 1] != '-')) { argp++; propInitFromString(PROP_CFG_XPORT_BPS, argv[argp]); } // debug logging if (comLog) { propSetBoolean(PROP_CFG_XPORT_DEBUG, utTrue); } // display config logINFO(LOGSRC,"Setting serial protocol port: %s [%lu]\n", propGetString(PROP_CFG_XPORT_PORT,"?"), propGetUInt32(PROP_CFG_XPORT_BPS,0L)); } else { logCRITICAL(LOGSRC,"Missing serial protocol port ...\n"); _usage(pgmName); return 1; } } else#endif#if defined(TRANSPORT_MEDIA_GPRS) if (strEqualsIgnoreCase(argv[argp], "-gprs")) { // -gprs <port> [<bps>] argp++; if ((argp < argc) && (*argv[argp] != '-')) { propSetString(PROP_CFG_XPORT_PORT, argv[argp]); // parse 'bps', if specified if (((argp + 1) < argc) && (*argv[argp + 1] != '-')) { argp++; propInitFromString(PROP_CFG_XPORT_BPS, argv[argp]); } // debug logging if (comLog) { propSetBoolean(PROP_CFG_XPORT_DEBUG, utTrue); } // display config logINFO(LOGSRC,"Setting GPRS modem port: %s [%lu]\n", propGetString(PROP_CFG_XPORT_PORT,"?"), propGetUInt32(PROP_CFG_XPORT_BPS,0L)); } else { logCRITICAL(LOGSRC,"Missing GPRS modem port ...\n"); _usage(pgmName); return 1; } } else#endif#if defined(TRANSPORT_MEDIA_FILE) if (strEqualsIgnoreCase(argv[argp], "-file")) { // -file <outfile> argp++; if ((argp < argc) && (*argv[argp] != '-')) { propSetString(PROP_CFG_XPORT_PORT, argv[argp]); logINFO(LOGSRC,"Setting output event data file: %s\n", propGetString(PROP_CFG_XPORT_PORT,"")); } else { logCRITICAL(LOGSRC,"Missing output data file ...\n"); _usage(pgmName); return 1; } } else#endif#if defined(ENABLE_GEOZONE) && defined(GEOZ_INCL_FILE_UPLOAD) if (strEqualsIgnoreCase(argv[argp], "-geoz")) { // -geoz <geozFile> argp++; if ((argp < argc) && ((*argv[argp] != '-') || isdigit(*(argv[argp]+1)))) { const char *geoZoneFile = argv[argp]; geozUploadGeozones(geoZoneFile); } else { logERROR(LOGSRC,"Missing geozone file ..."); _usage(pgmName); return 3; } return 0; // ExitProcess(0); } else#endif { logCRITICAL(LOGSRC,"Unrecognized option: %s\n", argv[argp]); _usage(pgmName); return 1; } } // "for" /* make sure we have a specified GPS port */ portName = propGetString(PROP_CFG_GPS_PORT, ""); if (!portName || !*portName) { logCRITICAL(LOGSRC,"Missing GPS port specification ...\n"); _usage(pgmName); return 1; } /* make sure we have a specified 'server' serial port */#if defined(TRANSPORT_MEDIA_SERIAL) portName = propGetString(PROP_CFG_XPORT_PORT, ""); if (!portName || !*portName) { logCRITICAL(LOGSRC,"Missing serial port specification ...\n"); _usage(pgmName); return 1; }#endif#if defined(TRANSPORT_MEDIA_GPRS) portName = propGetString(PROP_CFG_XPORT_PORT, ""); if (!portName || !*portName) { logCRITICAL(LOGSRC,"Missing GPRS port specification ...\n"); _usage(pgmName); return 1; }#endif#if defined(TRANSPORT_MEDIA_FILE) portName = propGetString(PROP_CFG_XPORT_PORT, ""); if (!portName || !*portName) { logCRITICAL(LOGSRC,"Missing output file specification ...\n"); _usage(pgmName); return 1; }#endif /* header */ _printBanner(); // ------------------------------------------------------------------------ // ***** Startup Initialization /* do we have a host:port defined? */#if defined(TRANSPORT_MEDIA_SOCKET) || defined(TRANSPORT_MEDIA_GPRS) { const char *sockHost = propGetString(PROP_COMM_HOST, ""); int sockPort = (int)propGetUInt32(PROP_COMM_PORT, 0L); hasServerHostPort = (sockHost && *sockHost && (sockPort > 0))? utTrue : utFalse; if (!hasServerHostPort) { // "--------------------------------------------------------" logWARNING(LOGSRC,"*** No host:port defined, no events will be queued! ***"); } }#endif /* save startup time */ // this must be called before any timers are defined utcMarkStartupTime(); /* make sure properties have been initialized */ // This must be called before any access is made to the property manager //propInitialize(utFalse); // only initialize here if not already initialized /* event queue initializer */ // this must be called before event packects are defined, or events are generated evInitialize(); acctInitialize(); /* custom event record */#if defined(CUSTOM_EVENT_PACKETS) // init custom event formats here (add before events can be generated)#endif /* thread initializer */ // this must be called before threads are created/started threadInitialize(); /* set threaded logging (if so configured) */ // (should be called before any threads are started) // (will return false if logging doesn't support running in a separate thread)#if !defined(TARGET_CYGWIN) logStartThread();#endif /* main loop initialization */ // This initializes/starts all the component threads. mainLoopInitialize(&_customAddEventFtn); /* property save interval */#if defined(PROPERTY_SAVE_INTERVAL) && defined(PROPERTY_FILE) // first property save expiration in FIRST_PROPERTY_SAVE_INTERVAL seconds lastSavePropertyTimer = utcGetTimer(); //startupSaveProperties(); <-- will be saved soon#endif /* other inits here */ // Add other custom initializations here /* main loop */ mainLoopRun(dftEncoding, (runInThread?utTrue:utFalse)); // run in thread return runInThread? 0 : 4;}// ----------------------------------------------------------------------------// ----------------------------------------------------------------------------// 'main' entry point#if !defined(TARGET_WINCE)// WinCE uses its own entry pointint main(int argc, char *argv[]) { return startupDMTP(argc,argv,(int)utFalse); // don't run in thread}#endif// ----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -