guowenxue
2020-08-21 02f4d9518378031c63df7a36c49d8b2eabdaab90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*********************************************************************************
 *      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
 *                  All rights reserved.
 *
 *       Filename:  fw_entry.c 
 *    Description:  This is the FWE(FL2440 Worker Engine) applets(such as gsmd, 
 *                  gpsd, zigbeed) main entry point function.
 *                 
 *        Version:  1.0.0(01/13/2013~)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "01/13/2013 02:40:36 PM"
 *                 
 ********************************************************************************/
 
#include "fwe_entry.h"
#include "gsmd.h"
#include "gpsd.h"
#include "zigd.h"
 
FWE_APPLET applets_list[] = 
{
    {"gsmd", gsmd_main},
    {"gpsd", gpsd_main},
    {"zigd", zigd_main},
    {0, 0}
};
 
static void entry_usage(void);
static void print_applist(void);
 
int main(int argc, char **argv)
{
    FWE_APPLET      *app = NULL; 
    const char       *applet_name = NULL;
    int              ind = 0;
 
    applet_name = basename(argv[0]);
 
    /* Run command like "FWE gsmd"  */
    if( !strncmp(applet_name, FWE_ENTRY_NAME, 4) )
    {
        if(argv[1] && argv[1][0]!='-') 
        { 
            applet_name = basename(argv[1]); 
            ind = 1;
        }
        else
        { 
            entry_usage();
            return 0;
        }
    }
 
    for(app=(FWE_APPLET *)&applets_list; app->name; app++)
    {
        if(!strcmp (app->name, applet_name) && app->main)
        {
            return app->main(argc-ind, argv+ind);
        }
    }
 
    printf("%s: applet not found\n\n", applet_name);
    print_applist();
 
    return 0;
}
 
static void print_applist(void)
{
    FWE_APPLET       *app;
 
    printf("Currently defined applets:\n");
    for(app=(FWE_APPLET *)&applets_list; app->name; app++)
    {
        printf("%s ", app->name);
    }
    printf("\n");
}
 
/* Just print the help information  */
static void entry_usage(void)
{
    banner(FWE_ENTRY_NAME);
 
    printf("Usage: %s [applet] [arguments]...\n", FWE_ENTRY_NAME);
    printf("   or: applet [arguments]...\n");
 
    printf("\n\t%s is a multi-call binary that combines many FL2440 Work Engine(FWE) applets\n", FWE_ENTRY_NAME);
    printf("\tinto a single executable. We can create a symbolic link to %s for each applet\n",FWE_ENTRY_NAME);
    printf("\tlike busybox work.\n\n");
 
    print_applist();
    printf("\n");
 
    return ;
}