RaspberrPi project source code
guowenxue
2023-09-07 13d8a8696ac5b5b505be20f428fe64e22a134016
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
97
98
99
100
101
102
103
104
105
106
107
/*********************************************************************************
 *      Copyright:  (C) 2019 LingYun IoT System Studio
 *                  All rights reserved.
 *
 *       Filename:  main.c
 *    Description:  This file
 *
 *        Version:  1.0.0(29/01/19)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "29/01/19 15:34:41"
 *
 ********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <getopt.h>
#include <libgen.h>
#include <string.h>
#include <errno.h>
 
#include "logger.h"
#include "ds18b20.h"
#include "proc.h"
 
#define PROG_VERSION               "v1.0.0"
#define DAEMON_PIDFILE             "/tmp/.socketd.pid"
 
static void program_usage(char *progname)
{
 
    printf("Usage: %s [OPTION]...\n", progname);
    printf(" %s is LingYun studio temperature socket client program running on RaspberryPi\n", progname);
 
    printf("\nMandatory arguments to long options are mandatory for short options too:\n");
    printf(" -d[debug   ]  Running in debug mode\n");
    printf(" -h[help    ]  Display this help information\n");
    printf(" -v[version ]  Display the program version\n");
 
    printf("\n%s version %s\n", progname, PROG_VERSION);
    return;
}
 
int main (int argc, char **argv)
{
    int                daemon = 1;
    int                opt;
    char              *progname=NULL;
    char              *logfile="client.log";
    int                loglevel=LOG_LEVEL_INFO;
    int                logsize=10; /* logfile size max to 10K */
 
    struct option long_options[] = {
        {"debug", no_argument, NULL, 'd'},
        {"version", no_argument, NULL, 'v'},
        {"help", no_argument, NULL, 'h'},
        {NULL, 0, NULL, 0}
    };
 
    progname = (char *)basename(argv[0]);
 
    /* Parser the command line parameters */
    while ((opt = getopt_long(argc, argv, "dvh", long_options, NULL)) != -1)
    {
        switch (opt)
        {
            case 'd': /* Set debug running */
                daemon = 0;
                logfile="console";
                loglevel=LOG_LEVEL_DEBUG;
                break;
 
            case 'v':  /* Get software version */
                printf("%s version %s\n", progname, PROG_VERSION);
                return 0;
 
            case 'h':  /* Get help information */
                program_usage(progname);
                return 0;
 
            default:
                break;
        }
 
    }
 
    if( log_open(logfile, loglevel, logsize, THREAD_LOCK_NONE) < 0 )
    {
        fprintf(stderr, "Initial log system failed\n");
        return 1;
    }
 
    install_default_signal();
 
    if( check_set_program_running(daemon, DAEMON_PIDFILE) < 0 )
        goto cleanup;
 
    while( ! g_signal.stop )
    {
        msleep(1000);
    }
 
cleanup:
    log_close();
 
    return 0;
}