diff --git a/Makefile b/Makefile index 0493076..d1edc60 100755 --- a/Makefile +++ b/Makefile @@ -6,21 +6,45 @@ # # -# select one of the following or edit for your environment +# Edit the paths to match your environment +# Currently supported: +# Windows (we prefer Cygwin) +# GNU/Linux # +LINUX_CXX := /usr/local/bin/cross-pi0/bin/arm-linux-gnueabihf-gcc +WIN_CXX := D:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gcc.exe -#CXX := /usr/local/arm/bin/arm-unknown-linux-gnueabi-gcc -CXX := D:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gcc.exe +# RTES related stuff for upload +SCP := scp +PIUSER := root +PI := 192.168.0.1 +RTES_PATH := /usr/local/bin/ -CXXFLAGS := -std=c11 -Wall -Wextra -Werror -CXXFEXTR := -c -fmessage-length=0 -LDFLAGS := -lm -lpthread -BUILD := ./bin -OBJ_DIR := $(BUILD)/obj -APP_DIR := $(BUILD) -TARGET := rtes_final -SRC := $(wildcard src/*.c) +# === Compilation related stuff === +CXXFLAGS := -std=c11 -Wall -Wextra -Werror +CXXFEXTR := -c -fmessage-length=0 +LDFLAGS := -lm -lpthread +BUILD := ./bin +OBJ_DIR := $(BUILD)/obj +APP_DIR := $(BUILD) +TARGET := rtes_final +SRC := $(wildcard src/*.c) +# === OS selection === +ifeq ($(OS),Windows_NT) + # Windows, select exe path + CXX := $(WIN_CXX) +else + # Linux filter [currently only GNU/Linux] + UNAME := $(shell uname) + ifeq ($(UNAME),Linux) + CXX := $(LINUX_CXX) + else + ERR := $(error Not supporting OS) + endif +endif + +# === MakeFile body === OBJECTS := $(SRC:%.c=$(OBJ_DIR)/%.o) $(OBJ_DIR)/%.o: %.c @@ -34,6 +58,10 @@ $(APP_DIR)/$(TARGET): $(OBJECTS) # === Rules === rtes_final: build $(APP_DIR)/$(TARGET) +clean: + -@rm -rvf $(OBJ_DIR)/* + -@rm -rvf $(APP_DIR)/* + build: @mkdir -p $(APP_DIR) @mkdir -p $(OBJ_DIR) @@ -45,11 +73,7 @@ release: CXXFLAGS += -O2 release: rtes_final upload: - scp $(BUILD)/$(TARGET) root@192.168.0.1:/root/ - -clean: - -@rm -rvf $(OBJ_DIR)/* - -@rm -rvf $(APP_DIR)/* + $(SCP) $(BUILD)/$(TARGET) $(PIUSER)@$(PI):$(RTES_PATH) all: clean release upload diff --git a/measurements/4_10/statistics.txt b/measurements/4_10/statistics.txt index d581c9e..7704cb3 100644 --- a/measurements/4_10/statistics.txt +++ b/measurements/4_10/statistics.txt @@ -1,20 +1,24 @@ -Statistics - total messages: 483 - duplicate messages: 277 - messages for me: 122 - messages by me: 43 - In messages direct for me: 33 - Out direct messages: 35 - Average message size: 28.6562 - Average time to me: 67.4166 - Device 7700 found on 0, last: 0 - Device 8261 found on 1570210285, last: 1570211945 - Device 8765 found on 0, last: 0 - Device 8844 found on 1570209288, last: 1570217684 - Device 8880 found on 1570209288, last: 1570216562 - Device 8861 found on 1570209288, last: 1570216904 - Device 8877 found on 0, last: 0 - Device 8941 found on 1570209289, last: 1570217461 - Device 8934 found on 0, last: 0 - Device 8997 found on 0, last: 0 + Statistics +============ +total messages: 483 +duplicate messages: 277 +messages for me: 122 +messages by me: 43 +In messages direct for me: 33 +Out direct messages: 35 +Average message size: 28.6562 +Average time to me: 67.4166 + + Device timestamps +=================== +Device 7700 found on 0, last: 0 +Device 8261 found on 1570210285, last: 1570211945 +Device 8765 found on 0, last: 0 +Device 8844 found on 1570209288, last: 1570217684 +Device 8880 found on 1570209288, last: 1570216562 +Device 8861 found on 1570209288, last: 1570216904 +Device 8877 found on 0, last: 0 +Device 8941 found on 1570209289, last: 1570217461 +Device 8934 found on 0, last: 0 +Device 8997 found on 0, last: 0 diff --git a/report/report_rtes_Choutouridis_8997.odt b/report/report_rtes_Choutouridis_8997.odt index c254a3a..c490fe3 100755 Binary files a/report/report_rtes_Choutouridis_8997.odt and b/report/report_rtes_Choutouridis_8997.odt differ diff --git a/report/resources/rtes_listener.png b/report/resources/rtes_listener.png new file mode 100755 index 0000000..985a7de Binary files /dev/null and b/report/resources/rtes_listener.png differ diff --git a/report/resources/stats.ods b/report/resources/stats.ods new file mode 100755 index 0000000..9f89e7c Binary files /dev/null and b/report/resources/stats.ods differ diff --git a/report_rtes_Choutouridis_8997.pdf b/report_rtes_Choutouridis_8997.pdf new file mode 100755 index 0000000..5f1432c Binary files /dev/null and b/report_rtes_Choutouridis_8997.pdf differ diff --git a/src/client.c b/src/client.c index b55c160..7027d93 100644 --- a/src/client.c +++ b/src/client.c @@ -205,7 +205,10 @@ static void client (void) { msg_t msg; // new message buffer while (true) { // Idle until the time comes - sleep (settings.msgInterval + (rand()%(5*settings.msgInterval))); + sleep ( + settings.msgIntervalMin + + (rand() % (settings.msgIntervalMax - settings.msgIntervalMin)) + ); memset ((void*)&msg, 0, sizeof (msg)); // create a new message cMsg_make (&msg.cMsg); msg.sender = settings.me; diff --git a/src/main.c b/src/main.c index 5d9eb0d..c9f88b7 100644 --- a/src/main.c +++ b/src/main.c @@ -30,21 +30,22 @@ stats_t stats; //!< Statistical data /*! * CLI short options */ -const char *short_opt = "v:i:m:p:s:w:th"; +const char *short_opt = "v:i:m:M:p:s:w:th"; /*! * CLI long options */ const struct option long_opt[] = { - {"outlevel", required_argument, NULL, 'v'}, - {"interval", required_argument, NULL, 'i'}, - {"msginterval", required_argument, NULL, 'm'}, - {"pingtimeout",required_argument, NULL, 'p'}, - {"sendtimeout",required_argument, NULL, 's'}, - {"who", required_argument, NULL, 'w'}, - {"tracktime", no_argument, NULL, 't'}, - {"help", no_argument, NULL, 'h'}, - {NULL, 0, NULL, 0} + {"outlevel", required_argument, NULL, 'v'}, + {"interval", required_argument, NULL, 'i'}, + {"msgintervalmin", required_argument, NULL, 'm'}, + {"msgintervalmax", required_argument, NULL, 'M'}, + {"pingtimeout", required_argument, NULL, 'p'}, + {"sendtimeout", required_argument, NULL, 's'}, + {"who", required_argument, NULL, 'w'}, + {"tracktime", no_argument, NULL, 't'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} }; /*! @@ -71,21 +72,24 @@ int parse_args (settings_t *s, int argc, char const *argv[]) { if (s->outLevel < OUTLEVEL_0) s->outLevel = OUTLEVEL_0; break; case 'i': s->seekerInterval = atoi (optarg); break; - case 'm': s->msgInterval = atoi (optarg); break; + case 'm': s->msgIntervalMin = atoi (optarg); break; + case 'M': s->msgIntervalMax = atoi (optarg); break; case 'p': s->pingTimeout = atoi (optarg); break; case 's': s->sendTimeout.tv_sec = atoi (optarg); break; case 'w': s->me = atoi (optarg); break; case 't': s->trackTime = true; break; case 'h': - printf ("Syntax:\nrtes_final [-t] [-v num] [-i num] [-p num] [-s num] [-w num]\n\n"); - printf ("-v, --outlevel num: Change the verbosity of the program, num can be 0, 1 or 2\n"); - printf ("-i, --interval sec: Set the interval of the seeker in [sec]\n"); - printf ("-m, --msginterval sec: Set the interval of the client in [sec]\n"); - printf ("-p, --pingtimeout sec: Set the ping timeout in [sec]\n"); - printf ("-s, --sendtimeout sec: Set the connect/send timeout in [sec]\n"); - printf ("-w, --who AEM: Select the AEM of the device\n"); - printf ("-t, --tracktime: Enables time tracking in statistics\n"); - printf ("-h, --help: Print this and exit\n"); + printf ("Syntax:\n"); + printf ("rtes_final [-t] [-h] [-v num] [-i num] [-m num] [-M num] [-p num] [-s num] [-w num]\n\n"); + printf ("-v, --outlevel num: Change the verbosity of the program, num can be 0, 1 or 2\n"); + printf ("-i, --interval sec: Set the interval of the seeker in [sec]\n"); + printf ("-m, --msgintervalmin sec: Set the interval of the client in [sec]\n"); + printf ("-M, --msgintervalmax sec: Set the interval of the client in [sec]\n"); + printf ("-p, --pingtimeout sec: Set the ping timeout in [sec]\n"); + printf ("-s, --sendtimeout sec: Set the connect/send timeout in [sec]\n"); + printf ("-w, --who AEM: Select the AEM of the device\n"); + printf ("-t, --tracktime: Enables time tracking in statistics\n"); + printf ("-h, --help: Print this and exit\n"); exit(1); case ':': default: diff --git a/src/msg_impl.h b/src/msg_impl.h index 1c9e811..4b11229 100644 --- a/src/msg_impl.h +++ b/src/msg_impl.h @@ -17,14 +17,13 @@ #include /*! - * AEM list + * Hard-coded AEM list */ -#define AEMLIST_SIZE (6) - #define AEMLIST_0 { 7700, 8261, 8765, 8844, 8880, 8861, 8877, 8941, 8934, 8997 } #define AEMLIST_1 { 8918, 8929, 8997, 8880, 8844, 8861 } -#define AEMLIST AEMLIST_1 +#define AEMLIST AEMLIST_0 +#define AEMLIST_SIZE (10) /*! * General options @@ -32,7 +31,7 @@ //! @{ #define MSG_TEXT_SIZE 256 //!< Maximum size of each message #define MSG_LIST_SIZE 2000 //!< Maximum size of message history buffer -#define DEVICE_LIST_SIZE 100 //!< Maximum size of the device list +#define DEVICE_LIST_SIZE 200 //!< Maximum number of the device in listener's queue #define MSG_DELIMITER '_' //!< Message delimiter #define ADHOC_NET_A 10 //!< [A.B.C.D] @@ -71,7 +70,7 @@ typedef aem_t devAEM_t; //!< device as AEM type * device as IP type */ typedef struct { - uint16_t A, B, C, D; + uint16_t A, B, C, D; //!< IP octets }devIP_t; typedef double fpdata_t; //!< Select floating point data type for the application @@ -79,15 +78,16 @@ typedef double fpdata_t; //!< Select floating point data type for the // Syntactic sugar types typedef struct sockaddr_in sockaddr_in_t; //!< internet socket address type definition typedef struct sockaddr sockaddr_t; //!< general socket address type definition -typedef struct timeval timeval_t; +typedef struct timeval timeval_t; //!< general timeval type definition + /*! * AEM list for our mesh network */ typedef struct { - devAEM_t dev; - bool_t onRange; - tstamp_t begin; - tstamp_t end; + devAEM_t dev; //!< The device + bool_t onRange; //!< Flag to indicate if the device is on range + tstamp_t begin; //!< First time we had answer from the device on ping + tstamp_t end; //!< Last time we had answer from the device on ping } devList_t; extern devList_t devList[]; @@ -199,6 +199,9 @@ typedef struct { extern stats_t stats; +/*! + * Verbose level enumerator for settings + */ typedef enum { OUTLEVEL_0, //!< Output only results [default] OUTLEVEL_1, //!< Output results and every message also @@ -206,24 +209,32 @@ typedef enum { }outLevel_en; +/*! + * Application settings + */ typedef struct { - devAEM_t me; - uint16_t port; - time_t seekerInterval; - time_t msgInterval; - outLevel_en outLevel; - time_t pingTimeout; - timeval_t sendTimeout; - bool_t trackTime; + devAEM_t me; //!< Who Am I + uint16_t port; //!< Application port + time_t seekerInterval; //!< sleep time for seeker + time_t msgIntervalMin; //!< minimum sleep time for client + time_t msgIntervalMax; //!< maximum sleep time for client + outLevel_en outLevel; //!< Verbose level + time_t pingTimeout; //!< Ping timeout + timeval_t sendTimeout; //!< Send and select timeout + bool_t trackTime; //!< Track message timing flag }settings_t; extern settings_t settings; +/*! + * Helper macro to setup default settings to application + */ #define settings_init(s) s = { \ .me = 8997, \ .port = 2288, \ .seekerInterval = 30, \ - .msgInterval = 60, \ + .msgIntervalMin = 60, \ + .msgIntervalMax = 300, \ .outLevel = OUTLEVEL_1, \ .pingTimeout = 1, \ .sendTimeout = {4, 0}, \