Program Analysis
Program Analysis
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <MQTTClient.h> // Include the Paho MQTT library
#include "test.h"
#include "wpc.h"
// MQTT Configuration
#define MQTT_ADDRESS "tcp://demo.thingsboard.io:1883" // ThingsBoard Cloud MQTT broker
#define MQTT_CLIENTID "WirepasGateway"
#define MQTT_TOPIC "v1/devices/me/telemetry" // ThingsBoard telemetry topic
#define MQTT_QOS 1
#define MQTT_TIMEOUT 10000L
MQTTClient mqtt_client;
if (argc > 1)
{
port_name = argv[1];
}
if (argc > 2)
{
bitrate = strtoul(argv[2], NULL, 0);
}
// Clean up
WPC_close();
MQTTClient_disconnect(mqtt_client, 10000);
MQTTClient_destroy(&mqtt_client);
return GetFailedTestCount();
}
test.h
/**
* \brief Run all the tests
*/
int Test_runAll();
/**
* \brief Test scratchpad functionality
*/
int Test_scratchpad();
/**
* \brief Returns number of passed test cases
*/
int GetPassedTestCount();
/**
* \brief Returns number of failed test cases
*/
int GetFailedTestCount();
test.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "wpc.h"
if (WPC_set_node_address(id) != APP_RES_OK)
return false;
if (WPC_set_role(role) != APP_RES_OK)
return false;
if (WPC_set_network_address(network_add) != APP_RES_OK)
return false;
if (WPC_set_network_channel(network_channel) != APP_RES_OK)
return false;
return true;
}
if (WPC_set_node_address(0x123456) != APP_RES_OK)
{
LOGE("Cannot set node address\n");
return false;
}
if (WPC_do_factory_reset() != APP_RES_OK)
{
LOGE("Cannot do factory reset\n");
return false;
}
return true;
}
int GetPassedTestCount()
{
return passedTestCount;
}
int GetFailedTestCount()
{
return failedTestCount;
}
int Test_runAll()
{
RUN_TEST(testFactoryReset, true);
return 0;
}
int Test_scratchpad()
{
// Configure node as a sink
setInitialState(APP_ROLE_SINK, 1234, 0x654321, 5, false);
return 0;
}
Makefile
# Toolchain
CC := gcc
AS := as
LD := ld
AR := ar
# Paths, including trailing path separator
SOURCEPREFIX := ./
BUILDPREFIX := build/
# Targets definition
MAIN_APP := meshAPItest
TARGET_APP := $(BUILDPREFIX)$(MAIN_APP)
# Test app needs some platform abstraction (It is a hack as not really part of lib API)
CFLAGS += -I$(MESH_LIB_FOLDER)platform
# Main app
SOURCES := $(SOURCEPREFIX)app.c
# Test cases
CFLAGS += -I$(SOURCEPREFIX)
SOURCES += $(SOURCEPREFIX)test.c
# Functions
define LINK
echo " Linking $(1)"
$(CC) $(CFLAGS) $(LDFLAGS) -o $(1) $(2) $(MESH_LIB)
endef
define CLEAN
echo " Cleaning up"
$(RM) -r $(BUILDPREFIX)
endef
# Target rules
ifeq ($(V),1)
# "V=1" on command line, print commands.
else
# Default, do not print commands.
.SILENT:
endif
.PHONY: all
all: app
app: $(TARGET_APP)
.PHONY: clean
clean:
$(call CLEAN)
make -C $(MESH_LIB_FOLDER) clean
$(MESH_LIB):
make -C $(MESH_LIB_FOLDER)
$(BUILDPREFIX)%.o: $(SOURCEPREFIX)%.c
$(call COMPILE,$@,$<)