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

📄 main.cpp

📁 事件驱动程序设计很好的框架
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Product: Quantum Spy -- Host resident component, main entry point// Last Updated for Version: 4.0.00// Date of the Last Update:  Apr 07, 2008////                    Q u a n t u m     L e a P s//                    ---------------------------//                    innovating embedded systems//// Copyright (C) 2002-2008 Quantum Leaps, LLC. All rights reserved.//// This software may be distributed and modified under the terms of the GNU// General Public License version 2 (GPL) as published by the Free Software// Foundation and appearing in the file GPL.TXT included in the packaging of// this file. Please note that GPL Section 2[b] requires that all works based// on this software must also be made publicly available under the terms of// the GPL ("Copyleft").//// Alternatively, this software may be distributed and modified under the// terms of Quantum Leaps commercial licenses, which expressly supersede// the GPL and are specifically designed for licensees interested in// retaining the proprietary status of their code.//// Contact information:// Quantum Leaps Web site:  http://www.quantum-leaps.com// e-mail:                  info@quantum-leaps.com//////////////////////////////////////////////////////////////////////////////#include <stdint.h>#include <stddef.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include "qspy.h"#include "hal.h"#include "getopt.h"//............................................................................#define FNAME_SIZE 256#define BUF_SIZE   1024enum TargetLink {    NO_LINK,    FILE_LINK,    SERIAL_LINK,    TCP_LINK};//............................................................................int main(int argc, char *argv[]) {    int optChar;    char comPort[FNAME_SIZE];    char inpFileName[FNAME_SIZE];    char outFileName[FNAME_SIZE];    char savFileName[FNAME_SIZE];    char matFileName[FNAME_SIZE];    TargetLink link = NO_LINK;                                              // default configuration options    strcpy(inpFileName, "qs.bin");    strcpy(comPort, "COM1");    int tcpPort          = 6601;    int baudRate         = 38400;    uint8_t quiet        = 0;    uint8_t tstampSize   = 4;    uint8_t objPtrSize   = 4;    uint8_t funPtrSize   = 4;    uint8_t sigSize      = 1;    uint8_t evtSize      = 2;    uint8_t queueCtrSize = 1;    uint8_t poolCtrSize  = 2;    uint8_t poolBlkSize  = 2;    uint8_t tevtCtrSize  = 2;    outFileName[0]       = '\0';                  // Output file not specified    savFileName[0]       = '\0';                    // Save file not specified    matFileName[0]       = '\0';                  // Matlab file not specified    time_t now = time(NULL);    printf("QSPY host application 4.0.00\n"           "Copyright (c) Quantum Leaps, LLC.\n"           "%s\n", ctime(&now));    static char const help[] =        "Syntax is: qspy [options]          * = default\n\n"        "OPTION                    DEFAULT  COMMENT\n"        "----------------------------------------------------------------\n"        "-h                                 help (this message)\n"        "-q                                 quiet mode (no stdout output)\n"        "-o<File_name>                      produce output to a file\n"        "-s<File_name>                      save the binary data to a file\n"        "-m<File_name>                      produce a Matlab file\n"        "-c<COM_port>  *           COM1     com port input\n"        "-b<Baud_rate>             38400    baud rate selection\n"        "-f<File_name>             qs.bin   file input\n"        "-t                                 TCP/IP input\n"        "-p<TCP_Port_number>       6601     TCP/IP server port\n"        "-T<tstamp_size>           4        QS timestamp size (bytes)\n"        "-O<pointer_size>          4        object pointer size (bytes)\n"        "-F<pointer_size>          4        function pointer size (bytes)\n"        "-S<signal_size>           1        signal size (bytes)\n"        "-E<event_size>            2        event size size (bytes)\n"        "-Q<queue_counter_size>    1        queue counter size (bytes)\n"        "-P<pool_counter_size>     2        pool counter size (bytes)\n"        "-B<pool_blocksize_size>   2        pool blocksize size (bytes)\n"        "-C<QTimeEvt_counter_size> 2        QTimeEvt counter size\n";    while ((optChar = getopt(argc, argv,                             "hqo:s:m:c:b:tp:f:T:O:F:S:E:Q:P:B:C:")) != -1)    {        switch (optChar) {            case 'q': {                                          // quiet mode                quiet = 1;                break;            }            case 'o': {                                         // file output                strncpy(outFileName, optarg, sizeof(outFileName));                printf("-o %s\n", outFileName);                break;            }            case 's': {                          // save binary data to a file                strncpy(savFileName, optarg, sizeof(savFileName));                printf("-s %s\n", savFileName);                break;            }            case 'm': {                                  // Matlab file output                strncpy(matFileName, optarg, sizeof(matFileName));                printf("-m %s\n", matFileName);                break;            }            case 'c': {                                            // COM port                if ((link != NO_LINK) && (link != SERIAL_LINK)) {                    printf("The -c option is incompatible with -p/-f\n");                    return -1;                                      // failure                }                strncpy(comPort, optarg, sizeof(comPort));                printf("-c %s\n", comPort);                link = SERIAL_LINK;                break;            }            case 'b': {                                           // baud rate                if ((link != NO_LINK) && (link != SERIAL_LINK)) {                    printf("The -b option is incompatible with -p/-f\n");                    return -1;                                      // failure                }                if (sscanf(optarg, "%d", &baudRate) != 1) {                    printf("incorrect baud rate: %s\n", optarg);                    return -1;                                      // failure                }                printf("-b %d\n", baudRate);                link = SERIAL_LINK;                break;            }            case 'f': {                                          // File input                if (link != NO_LINK) {                    printf("The -f option is incompatible with -c/-b/-p\n");                    return -1;                                      // failure                }                strncpy(inpFileName, optarg, sizeof(inpFileName));                printf("-f %s\n", inpFileName);                link = FILE_LINK;                break;            }            case 't': {                                        // TCP/IP input                if ((link != NO_LINK) && (link != TCP_LINK)) {                    printf("The -t option is incompatible with -c/-b/-f\n");                    return -1;                }                printf("-t\n");                link = TCP_LINK;                break;            }            case 'p': {                                         // TCP/IP port                if ((link != NO_LINK) && (link != TCP_LINK)) {                    printf("The -p option is incompatible with -c/-b/-f\n");                    return -1;                }                tcpPort = (int)strtoul(optarg, NULL, 10);                printf("-p %d\n", tcpPort);                link = TCP_LINK;                break;            }            case 'T': {                                      // timestamp size                tstampSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'F': {                               // function pointer size                funPtrSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'O': {                                 // object pointer size                objPtrSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'S': {                                         // signal size                sigSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'E': {                                         // event size                evtSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'Q': {                                  // Queue counter size                queueCtrSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'P': {                            // Memory-pool counter size                poolCtrSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'B': {                          // Memory-pool blocksize size                poolBlkSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'C': {                             // Time event counter size                tevtCtrSize = (uint8_t)strtoul(optarg, 0, 10);                break;            }            case 'h':                                                  // help            default: {                                       // unknown option                printf(help);                return -1;                                     // error return            }        }    }    if (argc != optind) {        printf(help);        return -1;    }    // configure the Quantum Spy    FILE *outFile = (outFileName[0] != '\0'                     ? fopen(outFileName, "w")                     : (FILE *)0);    FILE *matFile = (matFileName[0] != '\0'                     ? fopen(matFileName, "w")                     : (FILE*)0);    FILE *savFile = (savFileName[0] != '\0'                     ? fopen(savFileName, "wb")     // open for writing binary                     : (FILE*)0);    qsConfig(quiet,             objPtrSize,             funPtrSize,             tstampSize,             sigSize,             evtSize,             queueCtrSize,             poolCtrSize,             poolBlkSize,             tevtCtrSize,             outFile,             matFile);    static unsigned char buf[BUF_SIZE];    int n;    switch (link) {        case NO_LINK:                            // intentionally fall through        case SERIAL_LINK: {           // input trace data from the serial port            if (!comOpen(comPort, baudRate)) {                return -1;            }            else {                printf("\nSerial port %s opened, hit any key to quit...\n\n",                       comPort);            }            while ((n = comRead(buf, sizeof(buf))) != -1) {                if (n > 0) {                    qsParse(buf, n);                    if (savFile != (FILE *)0) {                        fwrite(buf, 1, n, savFile);                    }                }            }            comClose();            break;        }        case FILE_LINK: {                      // input trace data from a file            FILE *f = fopen(inpFileName, "rb");     // open for reading binary            if (f == (FILE *)0) {                printf("file %s not found\n", inpFileName);                return -1;            }            do {                n = fread(buf, 1, sizeof(buf), f);                qsParse(buf, n);            } while (n == sizeof(buf));            fclose(f);            break;        }        case TCP_LINK: {                 // input trace data from the TCP port            if (!tcpOpen(tcpPort)) {                return -1;            }            else {                printf("\nTCP/IP port %d opened, "                       "hit any key to quit...\n"                       "(the target must be stopped)\n",                       tcpPort);            }            while ((n = tcpRead(buf, sizeof(buf))) != -1) {                if (n > 0) {                    qsParse(buf, n);                    if (savFile != (FILE *)0) {                        fwrite(buf, 1, n, savFile);                    }                }            }            tcpClose();            break;        }    }    if (savFile != (FILE *)0) {        fclose(savFile);    }    if (matFile != (FILE *)0) {        fclose(matFile);    }    printf("\nDone.\n");    return 0;                                                       // success}

⌨️ 快捷键说明

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