User Tools

Site Tools


First project

The first test project, our “Hello World!”, will be an application that connect and then logon to a remote VSCP daemon and then execute the NOOP (No Operation) command and then disconnects. Not very exciting in terms of usability but usable as a start point for further development.

The project source is here.

The makefile look like this

CC = `wx-config --cc`
CXX = `wx-config --cxx`
CFLAGS = -g -O0 -pthread -D MG_ENABLE_THREADS -I../../src/vscp/common -I../../src/common
CXXFLAGS = -g -O0 
CPPFLAGS =  -I../../src/vscp/common -I../../src/common 
CPPFLAGS += `wx-config --cxxflags base `
EXTRALIBS =  -lz -lrt -lm -lcrypto -lpthread
EXTRALIBS += `wx-config --libs base`
TEST_OBJECTS =  noop.o \
TEST_SPECIALS = vscphelper.o \
	vscpremotetcpif.o \
	guid.o \
	mongoose.o \
	crc8.o \
	crc.o \
all:	noop
vscphelper.o: ../..//src/vscp/common/vscphelper.o ../../src/vscp/common/vscphelper.h
	$(CXX)  $(CXXFLAGS) $(CPPFLAGS) -c ../../src/vscp/common/vscphelper.cpp -o $@
vscpremotetcpif.o: ../../src/vscp/common/vscpremotetcpif.o ../../src/vscp/common/vscpremotetcpif.h
	$(CXX)  $(CXXFLAGS) $(CPPFLAGS) -c ../../src/vscp/common/vscpremotetcpif.cpp -o $@
guid.o: ../../src/vscp/common/guid.o ../../src/vscp/common/guid.h
	$(CXX)  $(CXXFLAGS) $(CPPFLAGS) -c ../../src/vscp/common/guid.cpp -o $@
crc.o: ../../src/common/crc.o ../../src/common/crc.h 
	$(CC) $(CFLAGS) -c ../../src/common/crc.c -o $@
crc8.o: ../../src/common/crc8.o ../../src/common/crc8.h
	$(CC) $(CFLAGS) -c ../../src/common/crc8.c -o $@	
mongoose.o: ../../src/common/mongoose.o ../../src/common/mongoose.h
	$(CC) $(CFLAGS) $(MONGOOSE_CFLAGS) -c ../../src/common/mongoose.c -o $@ 	
	rm -f noop
	rm -f *.o

Noting strange. The wx-config is a program that comes with wxWidgets that give paths and other information needed to compile programs. Several of the files are compiled separately because they are built by other parts of the VSCP & Friends system also and if we don't do this we may have them linked together in versions we did not intend to use. You may not need this in your own project.

The code for the program looks like this

// noop.cpp 
//   Grodans Paradis AB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vscpremotetcpif.h>
#include <vscphelper.h>
// Output text for happy moments if set to one
#define verbose_success         0
// Output text for sad moments if set to one
#define verbose_error           1
// Output text for talky moments if set to 1
#define verbose_info            1
// Standard connection (a VSCP daemon must be running here)
#define INTERFACE1_HOST         ""
#define INTERFACE1_USER         "admin"
#define INTERFACE1_PASSWORD     "secret"
// Count errors in the test
int error_cnt = 0;
int main(int argc, char* argv[])
    int rv;
    char *pHost = (char *)INTERFACE1_HOST;
    char *pUser = (char *)INTERFACE1_USER;
    char *pPassword = (char *)INTERFACE1_PASSWORD;
    VscpRemoteTcpIf m_vscpif;
    if ( !::wxInitialize() ) {
        fprintf(stderr, "Failed to initialize the wxWindows library, aborting.");
        return -1;
    if ( argc > 1 ) {
        // Host ("localhost:9598"")
        if ( argc >= 2 ) {
            pHost = argv[1];
        // Username ("admin)
        if ( argc >= 3 ) {
            pUser = argv[2];
        // Password ("secret")
        if ( argc >= 4 ) {
            pPassword = argv[3];
    if ( verbose_info ) {
       printf("- VSCP remote interface class test program\n");
       printf("- ========================================\n\n\n");
    // Open the interface
    if ( CANAL_ERROR_SUCCESS != m_vscpif.doCmdOpen( pHost, pUser, pPassword ) ) {
        printf("Error: Failed to open interface - closing.\n");
        return -1;
    if ( verbose_info ) printf("- Connected to server.\n");
    // ------ Do work here ------
    // NOOP command
    if ( verbose_info ) printf("- Executing NOOP command on server.\n");
    if ( CANAL_ERROR_SUCCESS != m_vscpif.doCmdNOOP() ) {
        printf("Error: Failed to run NOOP command.\n");
    // ------ Do work here ------
    // Close the connection
    if ( verbose_info ) printf("- Disconnecting from server.\n");
    if ( CANAL_ERROR_SUCCESS != m_vscpif.doCmdClose() ) {
        printf("Error: Failed to close interface\n");
    printf("\n\nHit ENTER to terminate Error Count= %d\n", error_cnt );
    return 0;

Nothing strange here either. You can run the program as

./noop host:port user admin


./noop admin secret

or just


which will use the default connection parameters as of above.

As you can see a connection is made, the noop command is executed and the connection is closed. To do fancy stuff just add your own code instead of the noop. It could not be easier.

All methods in the VscpRemoteTcpIf class is described here.

Grodans Paradis AB

classes_start.txt · Last modified: 2017/05/29 22:02 by admin