getopt_long长执行选项实例

main.c

//main.c
#include <stdio.h>
#include "LUX_AutomatiedTest.h"

/**
 * @description: 打印执行选项
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_Help(void)
{   
    printf("\n");
    printf("==========================================================================\n");
    printf("+         this is for automatic test                                     +\n");
    printf("+                                                                        +\n");
    printf("+         LUX_ATE_BUTTON-------------------NULL                          +\n");
    printf("+         LUX_ATE_LED----------------------RED|GREEN|BLUE_ON|OFF         +\n");
    printf("+         LUX_ATE_SDCard-------------------NULL                          +\n");
    printf("+         LUX_ATE_MLB----------------------NULL                          +\n");
    printf("+         LUX_ATE_WiFi_AP------------------NULL                          +\n");
    printf("+         LUX_ATE_FATP---------------------NULL                          +\n");
    printf("+         LUX_ATE_MOTOR--------------------VERTICAL|HORIZONTAL           +\n");
    printf("+         LUX_ATE_SPEAKER------------------NULL                          +\n");
    printf("+         LUX_ATE_MicRecorder--------------NULL                          +\n");
    printf("+         LUX_ATE_SelfAudio----------------NULL                          +\n");
    printf("+         LUX_ATE_IRMode-------------------NULL                          +\n");
    printf("+         LUX_ATE_WiFi---------------------NULL                          +\n");
    printf("+         LUX_ATE_IRCut--------------------ON|OFF                        +\n");
    printf("+         LUX_ATE_STREAM-------------------NULL                          +\n"); 
    printf("==========================================================================\n");

    printf("\n");

    return 0;
}

/**
 * @description: LED测试
 * @param[in] string 参数
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_LED(char *string)
{
    int flag = 0;
    int test;

    if (strspn(string, "R") == 1)
    {
        flag = (strcmp("RED_ON", string) == 0 ? 1 : 2);
    }
    else if (strspn(string, "G") == 1)
    {
        flag = (strcmp("GREEN_ON", string) == 0 ? 3 : 4);
    }
    else if (strspn(string, "B") == 1)
    {
        flag = (strcmp("BLUE_ON", string) == 0 ? 5 : 6);
    }
    
    switch (flag)
    {
    case 1:
        printf("red led on\n");
        break;
    
    case 2:
        printf("red led off\n");
        break;

    case 3:
        printf("green green on\n");
        break;

    case 4:
        printf("green green off\n");
        break;

    case 5:
        printf("green blue on\n");
        break;
    
    case 6:
        printf("green blue off\n");
        break;

    default:
        printf("LUX_ATE_LED input param error\n");
        break;
    }

    return 0;
}

/**
 * @description: SDCard 读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SDCard(void)
{
    printf("LUX_ATE_SDCard write\n");
    printf("LUX_ATE_SDCard read\n");

    return 0;
}

/**
 * @description: MLB 读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MLB(void)
{
    printf("LUX_ATE_MLB write\n");
    printf("LUX_ATE_MLB read\n");

    return 0;
}

/**
 * @description: 热点配网
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_WiFi_AP(void)
{
    printf("LUX_ATE_WiFi_AP\n");
    return 0;
}

/**
 * @description: FTAP的ISN读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_FATP(void)
{
    printf("LUX_ATE_FATP ISN write\n");
    printf("LUX_ATE_FATP ISN read\n");
    return 0;
}

/**
 * @description: 电机
 * @param[in] direction 方向
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MOTOR(char *direction)
{

    if (!strcmp("VERTICAL", direction))
    {
        printf("VERTICAL MOVED\n");
    }
    else if (!strcmp("HORIZONTAL", direction))
    {
        printf("HORIZONTAL MOVED\n");//水平
    }
    else
    {
        printf("LUX_ATE_MOTOR input parameter error\n");
    }

    return 0;
}

/**
 * @description: 喇叭播放
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SPEAKER(void)
{
    printf("LUX_ATE_SPEAKER\n");
    return 0;
}

/**
 * @description: 麦克风录音
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MicRecorder(void)
{
    printf("LUX_ATE_MicRecorder\n");
    return 0;
}

/**
 * @description: 1kHZ的音源自录自放
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SelfAudio(void)
{
    printf("LUX_ATE_SelfAudio\n");
    return 0;
}

/**
 * @description: 切换红外模式
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_IRMode(void)
{
    
    printf("IR MODE ON \n");
    sleep(5);
    printf("IR MODE OFF\n");
    
    return 0;
}

/**
 * @description: wifi连接、关闭
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_WiFi(void)
{
    printf("LUX_ATE_WiFi ON \n");
    sleep(5);
    printf("LUX_ATE_WiFi OFF\n");
    return 0;
}

/**
 * @description: ircut打开关闭
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_IRCut(char *irSwitch)
{
    if (!strcmp("ON", irSwitch))
    {
        printf("LUX_ATE_IRCut ON\n");
    }
    else if (!strcmp("OFF", irSwitch))
    {
        printf("LUX_ATE_IRCut OFF\n");
    }
    else
    {
        printf("LUX_ATE_IRCut input parameter error\n");
    }

    return 0;
}

/**
 * @description: 视频流存储
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_STREAM(void)
{
    printf("LUX_ATE_STREAM\n");
    return 0;
}

int main(int argc, char *argv[])
{
    int cmd;
    struct option long_options[] = 
    {
        {"help",                no_argument,        NULL, '1'},
        {"LUX_ATE_BUTTON",      no_argument,        NULL, 'a'},
        {"LUX_ATE_LED",         required_argument,  NULL, 'b'},
        {"LUX_ATE_SDCard",      no_argument,        NULL, 'c'},
        {"LUX_ATE_MLB",         no_argument,        NULL, 'd'},
        {"LUX_ATE_WiFi_AP",     no_argument,        NULL, 'e'},
        {"LUX_ATE_FATP",        no_argument,        NULL, 'f'},
        {"LUX_ATE_MOTOR",       required_argument,  NULL, 'g'},
        {"LUX_ATE_SPEAKER",     no_argument,        NULL, 'h'},
        {"LUX_ATE_MicRecorder", no_argument,        NULL, 'i'},
        {"LUX_ATE_SelfAudio",   no_argument,        NULL, 'j'},
        {"LUX_ATE_IRMode",      no_argument,        NULL, 'k'},
        {"LUX_ATE_WiFi",        no_argument,        NULL, 'l'},
        {"LUX_ATE_IRCut",       required_argument,  NULL, 'm'},
        {"LUX_ATE_STREAM",      no_argument,        NULL, 'n'},
        {NULL, 0, NULL, 0}
    };

    if (argc == 1)
    {
        LUX_ATE_Help();
        printf("\nno option , quit ! \n\n");

        return 0;
    }

    cmd = getopt_long(argc, argv, "1ab:cdefg:hijklm:", long_options, NULL);
    if (-1 == cmd)
    {
        printf("getopt_long error\n");
        return -1;
    }

    while (cmd)
    {
        switch (cmd)
        {
            /* help */
            case '1':
                LUX_ATE_Help();
                return 0;

            /* LUX_ATE_BUTTON */
            case 'a':
                printf("LUX_ATE_BUTTON\n");
               return 0;

            /* RGB LED TEST */
            case 'b':
                LUX_ATE_LED(optarg); 
                return 0; 

            /* SD Card wirte and read */
            case 'c':
                LUX_ATE_SDCard();
                return 0;

            /* MLB WRITE AND READ */
            case 'd':
                LUX_ATE_MLB();
                return 0;

            /* LUX_ATE_WiFi_AP */
            case 'e':
                LUX_ATE_WiFi_AP();
                return 0;

            /* LUX_ATE_FATP ISN WRITE AND READ */
            case 'f':
                LUX_ATE_FATP();
                return 0;

            /* MOTOR */
            case 'g':
                LUX_ATE_MOTOR(optarg);
                return 0;

            /* SPEAKER */
            case 'h':
                LUX_ATE_SPEAKER();
                return 0;

            /* MicRecoder */
            case 'i':
                LUX_ATE_MicRecorder();
                return 0;

            /* LUX_ATE_SelfAudio */
            case 'j':
                LUX_ATE_SelfAudio();
                return 0;

            /* IR Mode */
            case 'k':
                LUX_ATE_IRMode();
                return 0;

            /* WiFi */
            case 'l':
                LUX_ATE_WiFi();
                return 0;

            /* IRcut on off */
            case 'm':
                LUX_ATE_IRCut(optarg);
                return 0;

            /* IRcut on off */
            case 'n':
                LUX_ATE_STREAM();
                return 0;

            case '?':
                printf("input options error\n");
                return 0;
        }
    }
    
    //LUSHARE_test_sample_Encode_video(argc, argv[1]);



    return 0;

}

.h

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <fcntl.h>
//#include <sys/io.h>
#include <errno.h>

/**
 * @description: 打印执行选项
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_Help(void);

/**
 * @description: LED测试
 * @param[in] string 参数
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_LED(char *string);

/**
 * @description: SDCard 读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SDCard(void);

/**
 * @description: MLB 读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MLB(void);

/**
 * @description: 热点配网
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_WiFi_AP(void);

/**
 * @description: FTAP的ISN读写
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_FATP(void);

/**
 * @description: 电机上下转动
 * @param[in] direction 转动方向 
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MOTOR(char *direction);

/**
 * @description: 喇叭播放
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SPEAKER(void);

/**
 * @description: 麦克风录音
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_MicRecorder(void);

/**
 * @description: 1kHZ的音源自录自放
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_SelfAudio(void);

/**
 * @description: 切换红外模式先开后闭
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_IRMode(void);

/**
 * @description: wifi连接、关闭
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_WiFi(void);

/**
 * @description: ircut打开关闭
 * @param[in] irSwitch 开关指令 
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_IRCut(char *irSwitch);

/**
 * @description: 视频流存储
 * @return 0 成功,非零失败,返回错误码
 */
int LUX_ATE_STREAM(void);

// 1#define LUX_ATE_BUTTON              a        /* reset案件 */                 
// 1#define LUX_ATE_LED                 0x02    /* RGB三种颜色LED灯开闭 */
// 1#define LUX_ATE_SDCard              0x03    /* SD卡读写 */
// 1#define LUX_ATE_MLB                 0x04    /* MLB的ISN读写 */
// 1#define LUX_ATE_WiFi_ConnectAP      0x05    /* 连接AP */
// 1#define LUX_ATE_FATP                0x06    /* FTAP的ISN读写 */
// 1#define LUX_ATE_MotorHorrzontal     0x07    /* 电机垂直转动 */
// 1#define LUX_ATE_MotorVertical       0x08    /* 电机水平转动 */
// 1#define LUX_ATE_Speaker             0x09    /* 喇叭播放 */
// 1#define LUX_ATE_MicRecorder         0x0A    /* mic录音 */
// 1#define LUX_ATE_SelfAudio           0x0B    /* 1kHZ的音源自录自放 */
// 1#define LUX_ATE_IRMode              0x0C    /* 切换红外模式 */
// 1#define LUX_ATE_LightMode           0x0D    /* 切换正常模式 */
// 1#define LUX_ATE_WifiOn              0x0E    /* 打开无线 */
// 1#define LUX_ATE_WifiOff             0x0F    /* 关闭无线 */
// 1#define LUX_ATE_IRCutOpen           0x10    /* ircut打开 */
// 1#define LUX_ATE_IRCutCLose          0x11    /* ircut关闭 */
// 1#define LUX_ATE_Stream              0x12    /* 视频流存储 */



效果

在这里插入图片描述
框架搭完后将更能添加到相应的位置即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spark!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值