Final version
This commit is contained in:
parent
3ec3db11c9
commit
a452f2e27c
40
Makefile
40
Makefile
@ -6,12 +6,21 @@
|
||||
#
|
||||
|
||||
#
|
||||
# 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/
|
||||
|
||||
# === Compilation related stuff ===
|
||||
CXXFLAGS := -std=c11 -Wall -Wextra -Werror
|
||||
CXXFEXTR := -c -fmessage-length=0
|
||||
LDFLAGS := -lm -lpthread
|
||||
@ -21,6 +30,21 @@ 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
|
||||
|
||||
|
@ -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
|
||||
|
Binary file not shown.
BIN
report/resources/rtes_listener.png
Executable file
BIN
report/resources/rtes_listener.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
report/resources/stats.ods
Executable file
BIN
report/resources/stats.ods
Executable file
Binary file not shown.
BIN
report_rtes_Choutouridis_8997.pdf
Executable file
BIN
report_rtes_Choutouridis_8997.pdf
Executable file
Binary file not shown.
@ -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;
|
||||
|
18
src/main.c
18
src/main.c
@ -30,7 +30,7 @@ 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
|
||||
@ -38,9 +38,10 @@ const char *short_opt = "v:i:m:p:s:w:th";
|
||||
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'},
|
||||
{"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'},
|
||||
@ -71,16 +72,19 @@ 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 ("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, --msginterval sec: Set the interval of the client 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");
|
||||
|
@ -17,14 +17,13 @@
|
||||
#include <netinet/in.h>
|
||||
|
||||
/*!
|
||||
* 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}, \
|
||||
|
Loading…
x
Reference in New Issue
Block a user