⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.c

📁 含有完整TCP/IP PPP协议的嵌入式操作系统
💻 C
字号:
/* * Copyright (C) 2000-2004 by ETH Zurich * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the copyright holders nor the names of *    contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY ETH ZURICH 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 ETH ZURICH *  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. * * For additional information see http://www.ethernut.de/ * *//* * unix_options.c - parsing of command line options * * 2002.11.13 Oliver Kasten <oliver.kasten@inf.ethz.ch> * 2003.06.09 Jan Beutel <j.beutel@ieee.org>  * 2004.04.01 Matthias Ringwald <matthias.ringwald@inf.ethz.ch> * *//**\file arch/unix/os/options.c\brief Parsing of command line options. NOTE: Unix emulation only!*/#include <compiler.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <getopt.h>/* the command line options are stored here */emulation_options_t emulation_options;// default optionsstatic uart_options_t uart_0_opt = { "stdio", 0, 0, -1 };static uart_options_t uart_1_opt = { "stdio", 0, 0, -1 };static uart_options_t uart_2_opt = { "stdio", 0, 0, -1 };static void emulation_options_usage(void);static void emulation_options_print_all(void);static void emulation_options_print_uart(int);/* ------------------------------------------------------------------------- * Parse command line parameters * syntax: -uN (M|hci:O) -h -v *  N: uart nr (0/1) *  M: unix device name *  O: usb bluetooth number: 0.. * ------------------------------------------------------------------------- */void emulation_options_parse(int argc, char *argv[]){    int opt;    // set default values    emulation_options.verbose = 0;    emulation_options.uart_options[0] = uart_0_opt;    emulation_options.uart_options[1] = uart_1_opt;    emulation_options.uart_options[2] = uart_2_opt;    // parse args     while ((opt = getopt(argc, argv, "u:hv::")) != -1) {        switch (opt) {        case 'u':            {                int devno = 0, bautrate = 0, flowctrl = 0;                char *device = NULL;                devno = atoi(optarg);                // printf( "Parsing options for UART %i\n", devno );                if ((devno < 0) || (devno > 2)) {                    printf("ERROR parsing arguments for UART device: " "device number out of range [0..2]\n");                    exit(1);                }                device = strdup(argv[optind++]);                // printf( "  device: %s\n", device );                // terminal stdio?                if (strcmp(device, "stdio") == 0) {                // usb device ? hci:x                } else if (strncmp(device, "hci", 3) == 0) {                    emulation_options.uart_options[devno].usbnum = atoi(device + 3);				} else {					// tcp/ip ? host:port                    // tty                }                emulation_options.uart_options[devno].device = device;                emulation_options.uart_options[devno].bautrate = bautrate;                emulation_options.uart_options[devno].flowcontrol = flowctrl;            }            break;        case 'v':            // verbose mode: -v [on|off]            if (optarg) {                if (strcmp(argv[optind], "off") == 0)                    emulation_options.verbose = 0;                else if (strcmp(argv[optind], "on") == 0)                    emulation_options.verbose = 1;                else {                    printf("ERROR parsing verboseness (-v [on|off])option.\n");                    exit(1);                }            } else {                // -v without options turnes verbose mode on                emulation_options.verbose = 1;            }            break;        case 'h':            emulation_options_usage();            exit(0);            break;        default:            printf("unrecognized option:\n");            emulation_options_usage();            exit(1);            break;        }    }    if (emulation_options.verbose)        emulation_options_print_all();}void emulation_options_print_all(){    int i = 0;    if (!emulation_options.verbose)        // not in verbose mode        return;    printf("OPTIONS SUMMARY:\n");    printf("  verbose: %i\n", emulation_options.verbose);    for (i = 0; i < 3; i++) {        emulation_options_print_uart(i);    }}                               // end _btn_options_print()void emulation_options_print_uart(int no){    uart_options_t uart_opt = emulation_options.uart_options[no];    printf("Options for UART %i\n", no);    printf("  device: %s\n", uart_opt.device);    if (uart_opt.usbnum >= 0) {        printf("  hci num : %i\n", (int) uart_opt.usbnum);    } else {        printf("  bautrate: %i\n", (int) uart_opt.bautrate);        printf("  flowcontrol: %i\n", (int) uart_opt.flowcontrol);    }}                               // end _btn_uart_options_print()static void emulation_options_usage(){    printf("To properly run an emulated Nut/OS app, some hardware might need to be connected.\n"           "With the following options you can specify how the uarts are mapped.\n");    printf("  -h  prints this help.\n");    printf("  -v  verbose mode. print the options parsed.\n");    printf("  -u<N> DEVICE \n");    printf("     map uart N to unix DEVICE \n");    printf("     example: ./prog -u0 /dev/ttyS0 \n");    printf("  -u<N> HOST:PORT \n");    printf("     map uart N to TCP/IP socket with HOST at PORT \n");    printf("     example: ./prog -u0 localhost:7007 \n");//    printf("  -u<N> hci<M> \n");//    printf("     map uart N to the USB BT dongle nr. M\n");//    printf("     example: ./prog -u0 hci0\n");    printf("  \n");    printf("  \n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -