From 3509b6dfaad073c2b7887031c917c12b8ed5caa1 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Mon, 19 Nov 2018 23:01:46 +0800
Subject: [PATCH] Add iotd program

---
 src/nbiotd/iotd.c            |  249 +++++++++++++++++
 src/nbiotd/mqtt/makefile     |   82 +++++
 src/nbiotd/mqtt/mqtt_api.c   |    0 
 src/nbiotd/core/iotd_conf.c  |    0 
 src/nbiotd/core/makefile     |   82 +++++
 src/nbiotd/makefile          |  176 ++++++++++++
 src/nbiotd/lora/lora_api.c   |    0 
 src/nbiotd/nbiot/makefile    |   82 +++++
 src/nbiotd/nbiot/nbiot_api.c |    0 
 src/nbiotd/lora/makefile     |   82 +++++
 src/nbiotd/etc/iotd.conf     |   32 ++
 11 files changed, 785 insertions(+), 0 deletions(-)

diff --git a/src/nbiotd/core/iotd_conf.c b/src/nbiotd/core/iotd_conf.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/nbiotd/core/iotd_conf.c
diff --git a/src/nbiotd/core/makefile b/src/nbiotd/core/makefile
new file mode 100644
index 0000000..6283f73
--- /dev/null
+++ b/src/nbiotd/core/makefile
@@ -0,0 +1,82 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+#TOP_COMPILE=YES
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+CROSS_COMPILE?=/opt/rpi/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/src/nbiotd/etc/iotd.conf b/src/nbiotd/etc/iotd.conf
new file mode 100644
index 0000000..43376f0
--- /dev/null
+++ b/src/nbiotd/etc/iotd.conf
@@ -0,0 +1,32 @@
+# uited program configure file
+[log]
+file=/var/log/nbiotd.log
+
+#Loglevel: 0:Disable 1:Fatal 2:ERROR 3:warnning 4:Normal 5:Debug 6:Infor 7:Trace
+level=5
+
+#Unit Kib
+size=1024
+
+[nbiot]
+enable=1
+comport="/dev/ttyUSB0"
+baudrate=9600
+
+#Settings format is: Databit[8/7],Parity[O/E/S/N],StopBit[1/0],FlowControl[S/H/N]
+settings="8N1N"
+
+[lora]
+enable=0
+comport="/dev/ttyS1"
+baudrate=115200
+
+#Settings format is: Databit[8/7],Parity[O/E/S/N],StopBit[1/0],FlowControl[S/H/N]
+settings="8N1N"
+
+[mqtt]
+enable=1
+hostname=master.iot-yun.com
+port=8107
+
+
diff --git a/src/nbiotd/iotd.c b/src/nbiotd/iotd.c
new file mode 100644
index 0000000..d901ab4
--- /dev/null
+++ b/src/nbiotd/iotd.c
@@ -0,0 +1,249 @@
+/*********************************************************************************       
+ * Copyright:  (C) 2018 LingYun IoT Studio  
+ *                  All rights reserved.  
+ *       Filename:  iotd_main.c
+ *    Description:  This file is iotd (Internet of Things daemon) program main() entry point, 
+ *
+ *        Version:  1.0.0(2018/11/19)
+ *         Author:  Guo Wenxue <guowenxue@aliyun.com>
+ *      ChangeLog:  1, Release initial version on "2018/11/19 22:05:56 CST"
+ *                 
+ ********************************************************************************/
+#include <stdio.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <linux/input.h>
+#include <linux/kd.h>
+#include <linux/keyboard.h>
+#include <linux/watchdog.h>
+#include <libgen.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "cp_logger.h"
+#include "cp_proc.h"
+
+#define DEF_LOG_FILE         "/var/log/iotd.log"
+#define DEF_LOG_LEVEL        LOG_LEVEL_NRML
+
+void *watchdog_worker(void *arg);
+
+
+
+typedef struct iotd_conf_s 
+{
+    cp_logger       logger;
+    
+} iotd_conf_t;  
+
+
+typedef struct iotd_ctx_s 
+{
+    iotd_conf_t     conf;
+} iotd_ctx_t;  
+
+
+void banner(const char *program)
+{
+    printf("Copyright (C) 2018 LingYun IoT Studio.\n");
+    printf("%s Version 1.0.0 Build on @ %s %s\n", program, __DATE__, __TIME__);
+}
+
+static void program_usage(const char *progname)
+{
+    banner(progname); 
+    
+    printf("Usage: %s [OPTION]...\n", progname); 
+    printf(" %s is a daemon program running on the device, which used to \n", progname); 
+    printf("receive date from serial and transfer the data to remote server by socket\n"); 
+
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); 
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+
+    return;
+}
+
+int main(int argc, char **argv)
+{
+    int                   opt;
+    int                   i = 0;
+    int                   rv = 0;
+    int                   debug = 0;
+    const char           *progname=NULL;
+
+    char                  pid_file[64] = { 0 }; /*  The file used to record the PID */
+    char                 *conf_file = "iotd.conf";
+    char                 *log_file = DEF_LOG_FILE;
+    int                   log_level = DEF_LOG_LEVEL;
+    iotd_ctx_t            iotd_ctx;
+
+    pthread_t             tid;
+    iotd_conf_t          *conf; 
+    cp_logger            *logger;
+
+    memset(&iotd_ctx, 0, sizeof(iotd_ctx));
+    conf = &iotd_ctx.conf;
+    logger = &conf->logger;
+
+    struct option long_options[] = {
+        {"conf", required_argument, NULL, 'c'},
+        {"debug", no_argument, NULL, 'd'},
+        {"level", required_argument, NULL, 'l'},
+        {"version", no_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    progname = basename(argv[0]);
+    /*  Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "c:dl:vh", long_options, NULL)) != -1)
+    {
+        switch (opt)
+        {
+            case 'c':  /*  Set configure file */
+                conf_file = optarg;
+                break;
+
+            case 'd': /*  Set debug running */
+                debug = 1;
+                log_file = DBG_LOG_FILE;
+                break;
+
+            case 'l': /*  Set the log level */
+                i = atoi(optarg);
+                log_level = i>LOG_LEVEL_MAX ? LOG_LEVEL_MAX-1 : i;
+                logger->flag |= CP_LOGGER_LEVEL_OPT;
+                break;
+
+            case 'v':  /*  Get software version */
+                banner(progname); /*  Defined in version.h */
+                return EXIT_SUCCESS;
+
+            case 'h':  /*  Get help information */
+                program_usage(progname);
+                return 0;
+
+            default:
+                break;
+        } /*   end of "switch(opt)" */
+    }
+
+    snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname);
+    if( !debug )
+    {
+        if( check_daemon_running(pid_file) )
+        {
+            printf("Programe already running, exit now.\n");
+            return -1;
+        }
+    }
+
+    if ( !cp_log_init(logger, log_file, log_level, 1024/*KB*/) || cp_log_open() )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    /*  Parser configure file and start the initialize log */
+    rv = parser_iotd_conf(conf_file, conf);
+    if(rv < 0)
+    {
+        log_fatal("Parse configure file %s failure, rv=%d\n", conf_file, rv);
+        goto CleanUp;
+    }
+
+    /* If configure file logger is not same as default one, then reopen the logger system */
+    if(  !debug && strncmp(logger->file, DEF_LOG_FILE, strlen(DEF_LOG_FILE)) )
+    {
+        log_warn("Reinitiase logger to [%s]\n", logger->file);
+        cp_log_close();
+
+        if( cp_log_open() )
+        {
+            printf("Logger reopen failure with file: %s\n", logger->file);
+            return -1;
+        }
+        printf("Open logger ok\n");
+    }
+
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            goto CleanUp;
+        }
+    }
+
+    cp_install_proc_signal();
+
+    /* start watchdog thread worker  */
+    thread_start(&tid, watchdog_worker, NULL);
+
+    /* Start MQTT thread worker */
+    log_nrml("start MQTT socket process thread\n");
+    //thread_start(&tid, mqtt_worker, (void *)&iotd_ctx );
+
+    /* Start NB-IoT thread worker */
+    log_nrml("start NB-IoT process thread\n");
+    //thread_start(&tid, nbiot_worker, (void *)&iotd_ctx );
+
+    /* Start LoRa thread worker */
+    log_nrml("start LoRa AP process thread\n");
+    //thread_start(&tid, nbiot_worker, (void *)&iotd_ctx );
+
+    while( !g_cp_signal.stop )
+    {
+        sleep(1);
+    }
+
+CleanUp:
+    log_warn("Terminate main program \"%s\".\n", progname);
+    unlink(pid_file);
+    cp_log_term();
+    return rv;
+}
+
+
+#define WTD_DEV          "/dev/watchdog"
+void *watchdog_worker(void *arg)
+{
+    int                      wtd_fd = -1;
+    int                      timeout = 120; /* 2 minutes */
+    int                      times = 0;
+
+    log_nrml("start watchdog thread\n");
+
+    if( (wtd_fd=open(WTD_DEV, O_RDWR)) < 0 )
+    {
+        log_err("Open watchdog '%s' failure: %s\n", WTD_DEV, strerror(errno));
+        return NULL;
+    }
+
+    ioctl(wtd_fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
+    ioctl(wtd_fd, WDIOC_SETTIMEOUT, &timeout);
+    log_nrml("Start watchdog on timeout %d seconds\n", timeout);
+
+    while( !g_cp_signal.stop )
+    {
+        if( times++ > 20 )
+        {
+            log_dbg("start feed watchdog now\n");
+            ioctl(wtd_fd, WDIOC_KEEPALIVE, NULL); 
+            times = 0;
+        }
+
+        sleep(1);
+    }
+
+    close(wtd_fd);
+    printf("watchdog thread worker exit\n");
+
+    return NULL;
+}
diff --git a/src/nbiotd/lora/lora_api.c b/src/nbiotd/lora/lora_api.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/nbiotd/lora/lora_api.c
diff --git a/src/nbiotd/lora/makefile b/src/nbiotd/lora/makefile
new file mode 100644
index 0000000..6283f73
--- /dev/null
+++ b/src/nbiotd/lora/makefile
@@ -0,0 +1,82 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+#TOP_COMPILE=YES
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+CROSS_COMPILE?=/opt/rpi/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/src/nbiotd/makefile b/src/nbiotd/makefile
new file mode 100644
index 0000000..d570f3c
--- /dev/null
+++ b/src/nbiotd/makefile
@@ -0,0 +1,176 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common top Makefile which used to call function to 
+#                  Cross compile the subdir source code and link all the libs to 
+#                  excutable binary file.
+#    
+#        Version:  1.0.0(10/08/2011~)
+#         Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                 
+#********************************************************************************/
+
+APP_BINARY_NAME=iotd
+INST_PATH=/tftp
+TOP_PATH=$(shell pwd)
+LIBS_PATH=${TOP_PATH}/.libs
+
+#Excutable binary file runs on platform
+ARCH?=arm
+#ARCH?=i386
+
+#Static linked or Dynamic link
+LINK_MODE=STATIC
+
+CFLAGS+=-Werror -Wall
+
+ifeq ("${LINK_MODE}", "STATIC")
+	CFLAGS+=--static
+	LDFLAGS+=-static
+else
+	LDFLAGS+=-ldl
+endif
+
+# ==================================
+# **   Cross Compiler Setting     **
+# ==================================
+
+export CROSS_COMPILE=/opt/rpi/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
+
+# Get alll the source code folder, all the source code in the subdir will be compiled and
+# archive to a static library, named lib${subdir_name}.a
+OBJFILES = $(patsubst %.c,%,$(wildcard *.c))
+SUBSRCS = $(shell find . -follow  -maxdepth 1 -type d|sed -n 's/.\///p'|grep -v 'libs' \
+		  |grep -v 'etc' | grep -v '.svn'|grep -v '.git'|grep -v 'include'|grep -v 'bin')
+
+# Add the subdir compiled static library into LDFLAGS
+#LDFLAGS+=$(patsubst %,-L%,$(SUBSRCS)) 
+#LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) 
+
+LDFLAGS+=-L${LIBS_PATH}
+LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) 
+LIBS=$(patsubst %,${LIBS_PATH}/lib%.a,$(SUBSRCS))
+LDFLAGS+=-Xlinker "-(" $(LIBS) -Xlinker "-)"
+
+CFLAGS+=$(patsubst %,-I${TOP_PATH}/%,$(SUBSRCS))
+CFLAGS+=-I$(TOP_PATH) 
+LDFLAGS+=-lpthread
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}gcc
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export LD=${CROSS_COMPILE}ld
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+export ARCH
+export LINK_MODE
+export LIBS_PATH
+
+#A function used to goes into the sub-folder to compile
+MAKEFUNC = @MakeSubDir() \
+    { \
+        for DIR in ${SUBSRCS}; do \
+            if [ -d $${DIR} ] ; then \
+                cd $${DIR}; \
+                MakeSubDir; \
+                if [ -f makefile -o -f Makefile ]; then \
+                    pwd; \
+                    make $(1); \
+                    if [ "$$?" != "0" ]; then \
+                        exit 1; \
+                    fi; \
+                fi; \
+                cd ..; \
+            fi; \
+        done; \
+        if [ -f makefile -o -f Makefile ]; then \
+            make $(1); \
+            if [ "$$?" != "0" ]; then \
+                exit 1; \
+            fi; \
+        fi; \
+    }; \
+
+MAKEME = cd $(2); MakeSubDir $(1); cd ..;
+LOOPMAKEFUNC = $(MAKEFUNC) $(foreach dir,$(SUBSRCS),$(call MAKEME,$(1),$(dir)))
+
+.PHONY: all
+
+all: entry version prepare binary install
+
+prepare:
+	@if [ ! -L cp_library  ] ; then \
+		ln -s ../cp_library; \
+	fi
+
+entry:
+	@echo $(SUBSRCS)
+	@echo " ";
+	@echo " =========================================================";
+	@echo " ** Come into compile ${APP_BINARY_NAME} for ARCH $(ARCH) ";
+	@echo " =========================================================";
+	@echo " ";
+	@make clean
+
+version:
+	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h
+	@echo '#define DATE "$(COMPILE_DATE)"' >> version.h
+	@echo "#define MAJOR 1" >>version.h
+	@echo "#define MINOR 0" >>version.h
+	@echo "#define REVER 0" >>version.h
+	@if [ -f .svn/entries ] ; then \
+		echo "#define SVNVER `sed -n -e 4p .svn/entries`" >>version.h; \
+	else \
+		echo "#define SVNVER 0" >>version.h; \
+	fi;
+	@echo "" >> version.h
+	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h
+	@echo '#define copyright() printf("Copyright (C) 2012 CoherentPlus Sdn. Bhd.\\n")' >>version.h
+	@echo '#define banner(progname) {version(progname); copyright(); printf("\\n");}' >>version.h
+	@echo "" >> version.h
+
+subdir:
+	@$(call LOOPMAKEFUNC,all)
+	@echo " ";
+	@echo " =========================================================";
+	@echo " ** Compile and linking ${APP_BINARY_NAME} for ${ARCH} now";
+	@echo " =========================================================";
+
+%: %.c
+	$(CC) $< $(CFLAGS) -c -o $@.o
+
+binary: subdir $(OBJFILES)
+	$(CC) $(CFLAGS) -o $(APP_BINARY_NAME) *.o $(LDFLAGS) 
+	$(STRIP) $(APP_BINARY_NAME)
+	
+tag:
+	@cscope -Rbq
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .
+
+install:
+	cp $(APP_BINARY_NAME) ${INST_PATH}
+
+uninstall:
+	rm -f ${INST_PATH}/$(APP_BINARY_NAME)
+
+clean:
+	@$(call LOOPMAKEFUNC,clean)
+	@rm -rf ${LIBS_PATH}
+	@rm -f version.h
+	@rm -f *.o $(APP_BINARY_NAME)
+	@rm -f *.elf*
+	@rm -f *.gdb
+	@rm -f cp_library
+
+distclean: clean
+	@$(call LOOPMAKEFUNC,distclean)
+
+clear: distclean
+	@rm -f tags  cscope*
+
diff --git a/src/nbiotd/mqtt/makefile b/src/nbiotd/mqtt/makefile
new file mode 100644
index 0000000..6283f73
--- /dev/null
+++ b/src/nbiotd/mqtt/makefile
@@ -0,0 +1,82 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+#TOP_COMPILE=YES
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+CROSS_COMPILE?=/opt/rpi/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/src/nbiotd/mqtt/mqtt_api.c b/src/nbiotd/mqtt/mqtt_api.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/nbiotd/mqtt/mqtt_api.c
diff --git a/src/nbiotd/nbiot/makefile b/src/nbiotd/nbiot/makefile
new file mode 100644
index 0000000..6283f73
--- /dev/null
+++ b/src/nbiotd/nbiot/makefile
@@ -0,0 +1,82 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+#TOP_COMPILE=YES
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+CROSS_COMPILE?=/opt/rpi/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/src/nbiotd/nbiot/nbiot_api.c b/src/nbiotd/nbiot/nbiot_api.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/nbiotd/nbiot/nbiot_api.c

--
Gitblit v1.9.1