From c0b4ff038fd0d769056eb237aa88cf341c76d5c4 Mon Sep 17 00:00:00 2001 From: Roland Jax Date: Wed, 25 Jun 2014 19:13:52 +0200 Subject: [PATCH] ebusctl added. Version changed from 0.2.1 to 0.3.0 --- .gitignore | 5 +- ChangeLog | 4 + Makefile.am | 24 +++--- NEWS | 4 + README | 6 +- configure.ac | 2 +- tools/{ebusd_scan.cpp => ebusctl.cpp} | 111 +++++++++++++++---------- tools/ebusd_send.cpp | 91 -------------------- tools/{ebusd_feed.cpp => ebusdump.cpp} | 0 9 files changed, 93 insertions(+), 154 deletions(-) rename tools/{ebusd_scan.cpp => ebusctl.cpp} (80%) delete mode 100644 tools/ebusd_send.cpp rename tools/{ebusd_feed.cpp => ebusdump.cpp} (100%) diff --git a/.gitignore b/.gitignore index ee1570f7..aa56c6a4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,5 @@ .deps/ *.o *.dirstamp -/ebusd_feed -/ebusd_send -/ebusd_scan +/ebusctl +/ebusdump diff --git a/ChangeLog b/ChangeLog index d6b5513d..183d0dc6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ ebusd - ChangeLog ----------------- +2014-06-25 Roland Jax +* ebusctl added (includes ebusd_scan and ebusd_send) +* Version changed from 0.2.1 to 0.3.0 + 2014-06-22 Roland Jax * 'stop' daemon command added. diff --git a/Makefile.am b/Makefile.am index bb2867b9..1a693daf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,9 +5,8 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} AM_CXXFLAGS = $(LIBEBUS_CFLAGS) -I$(top_srcdir)/lib -fpic -Wall -Wextra bin_PROGRAMS = ebusd \ - ebusd_feed \ - ebusd_send \ - ebusd_scan + ebusctl \ + ebusdump ebusd_SOURCES = src/main.cpp \ src/baseloop.cpp \ @@ -25,17 +24,16 @@ ebusd_LDADD = $(LIBEBUS_LIBS) \ dist_noinst_SCRIPTS = autogen.sh -ebusd_feed_SOURCES = tools/ebusd_feed.cpp \ - lib/appl.cpp -ebusd_feed_LDADD = $(LIBEBUS_LIBS) +ebusctl_SOURCES = tools/ebusctl.cpp \ + lib/appl.cpp \ + lib/tcpsocket.cpp -ebusd_send_SOURCES = tools/ebusd_send.cpp \ - lib/appl.cpp \ - lib/tcpsocket.cpp +ebusctl_LDADD = $(LIBEBUS_LIBS) -ebusd_scan_SOURCES = tools/ebusd_scan.cpp \ - lib/appl.cpp \ - lib/tcpsocket.cpp -ebusd_scan_LDADD = $(LIBEBUS_LIBS) +ebusdump_SOURCES = tools/ebusdump.cpp \ + lib/appl.cpp + +ebusdump_LDADD = $(LIBEBUS_LIBS) + diff --git a/NEWS b/NEWS index 2471d11c..1c593c1d 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,10 @@ ebusd - NEWS ------------ +2014-06-25 Roland Jax +* ebusctl added (includes ebusd_scan and ebusd_send) +* Version changed from 0.2.1 to 0.3.0 + 2014-06-03 Roland Jax * ebusd_send, ebusd_scan added. * Version changed from 0.2.0 to 0.2.1 diff --git a/README b/README index 778adfb7..bd4e04e3 100644 --- a/README +++ b/README @@ -48,9 +48,9 @@ See ./ebusd -h Tools ----- -ebusd_feed - send dump files via virtual serial device for debugging purpose. -ebusd_send - small client for sending commands to ebusd. -ebusd_scan - scans the bus and identifies the participant. +ebusctl - client for ebusd. +ebusdump - send dump files (virtual serial device) to server for development. + For usage and further information take a look on help page. diff --git a/configure.ac b/configure.ac index de168361..112a05f3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([ebusd], [0.2.1], [roland.jax@liwest.at], [ebusd], [https://github.com/yuhu-/ebusd]) +AC_INIT([ebusd], [0.3.0], [roland.jax@liwest.at], [ebusd], [https://github.com/yuhu-/ebusd]) AC_CONFIG_SRCDIR([src/main.cpp]) AC_CONFIG_AUX_DIR([build]) diff --git a/tools/ebusd_scan.cpp b/tools/ebusctl.cpp similarity index 80% rename from tools/ebusd_scan.cpp rename to tools/ebusctl.cpp index 0733a156..6551d2e3 100644 --- a/tools/ebusd_scan.cpp +++ b/tools/ebusctl.cpp @@ -29,6 +29,28 @@ using namespace libebus; Appl& A = Appl::Instance(); +void define_args() +{ + A.addArgs("COMMAND {ARGS...}\n\n" + " local commands:\n" + " 'scan' scans the bus and identifies the participant\n\n" + " remote commands:\n" + " send 'help' to server", 1); + + A.addItem("p_server", Appl::Param("localhost"), "s", "server", + "name or ip (localhost)", + Appl::type_string, Appl::opt_mandatory); + + A.addItem("p_port", Appl::Param(8888), "p", "port", + "port (8888)\n", + Appl::type_int, Appl::opt_mandatory); + + A.addItem("p_help", Appl::Param(false), "h", "help", + "print this message", + Appl::type_bool, Appl::opt_none); +} + + templateT * end(T (&ra)[N]) { return ra + N; } const char *sinit[] = {"02", "04", "05", "06", "08", "09", "0A", "0B", "0C", @@ -90,23 +112,6 @@ static void addManufacturer() manufacturer.insert(std::make_pair("b5", "Joh. Vaillant GmbH & Co.")); } -void define_args() -{ - A.addArgs("", 0); - - A.addItem("p_server", Appl::Param("localhost"), "s", "server", - "name or ip (localhost)", - Appl::type_string, Appl::opt_mandatory); - - A.addItem("p_port", Appl::Param(8888), "p", "port", - "port (8888)\n", - Appl::type_int, Appl::opt_mandatory); - - A.addItem("p_help", Appl::Param(false), "h", "help", - "print this message", - Appl::type_bool, Appl::opt_none); -} - void scanVaillant(TCPSocket* socket, const std::string address) { Decode* help = NULL; @@ -140,6 +145,7 @@ void scanVaillant(TCPSocket* socket, const std::string address) std::cout << " s/n: '" << sstr.str().substr(1,28) << "' item: '" << sstr.str().substr(7,10) << "'"; } + int main(int argc, char* argv[]) { // define Arguments and Application variables @@ -163,47 +169,66 @@ int main(int argc, char* argv[]) TCPSocket* socket = client->connect(A.getParam("p_server"), A.getParam("p_port")); if (socket != NULL) { - // send command to all slaves - for (size_t i = 0; i < s.size(); i++) { + if (strcasecmp(A.getArg(0).c_str(), "scan") != 0) { // build message - std::string message("hex ms "); - message += s[i]; - message += "070400"; + std::string message(A.getArg(0)); + for (size_t i = 1; i < A.numArg(); i++) { + message += " "; + message += A.getArg(i); + } socket->send(message.c_str(), message.size()); - char data[256]; + char data[1024]; size_t datalen; datalen = socket->recv(data, sizeof(data)-1); data[datalen] = '\0'; - // decode answer - if (strncmp(&data[0], "-", 1) != 0) { - std::string item(data); + std::cout << data; + } else { + // send command to all slaves + for (size_t i = 0; i < s.size(); i++) { + // build message + std::string message("hex ms "); + message += s[i]; + message += "070400"; - std::ostringstream ident; - Decode* help = NULL; + socket->send(message.c_str(), message.size()); - help = new DecodeSTR(item.substr(18,10)); - ident << help->decode(); - delete help; + char data[256]; + size_t datalen; - std::cout << s[i] << ": '" << manufacturer.find(item.substr(16,2))->second - << "' ident: '" << std::setw(5) << std::setfill(' ') << ident.str() - << "' sw: '" << item.substr(28,2) - << "." << item.substr(30,2) - << "' hw: '" << item.substr(32,2) - << "." << item.substr(34,2) - << "'"; + datalen = socket->recv(data, sizeof(data)-1); + data[datalen] = '\0'; - if (item.substr(16,2) == "b5") - scanVaillant(socket, s[i]); + // decode answer + if (strncmp(&data[0], "-", 1) != 0) { + std::string item(data); - std::cout << std::endl; + std::ostringstream ident; + Decode* help = NULL; + + help = new DecodeSTR(item.substr(18,10)); + ident << help->decode(); + delete help; + + std::cout << s[i] << ": '" << manufacturer.find(item.substr(16,2))->second + << "' ident: '" << std::setw(5) << std::setfill(' ') << ident.str() + << "' sw: '" << item.substr(28,2) + << "." << item.substr(30,2) + << "' hw: '" << item.substr(32,2) + << "." << item.substr(34,2) + << "'"; + + if (item.substr(16,2) == "b5") + scanVaillant(socket, s[i]); + + std::cout << std::endl; + } + + sleep(2); } - - sleep(2); } delete socket; diff --git a/tools/ebusd_send.cpp b/tools/ebusd_send.cpp deleted file mode 100644 index aff81c5d..00000000 --- a/tools/ebusd_send.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) Roland Jax 2012-2014 - * - * This file is part of ebusd. - * - * ebusd is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ebusd is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ebusd. If not, see http://www.gnu.org/licenses/. - */ - -#include "appl.h" -#include "tcpsocket.h" -#include -#include - -Appl& A = Appl::Instance(); - -void define_args() -{ - A.addArgs("COMMAND {ARGS...}\n\n" - " send 'help' for available commands", 1); - - A.addItem("p_server", Appl::Param("localhost"), "s", "server", - "name or ip (localhost)", - Appl::type_string, Appl::opt_mandatory); - - A.addItem("p_port", Appl::Param(8888), "p", "port", - "port (8888)\n", - Appl::type_int, Appl::opt_mandatory); - - A.addItem("p_help", Appl::Param(false), "h", "help", - "print this message", - Appl::type_bool, Appl::opt_none); -} - -int main(int argc, char* argv[]) -{ - // define Arguments and Application variables - define_args(); - - // parse Arguments - if (A.parseArgs(argc, argv) == false) { - A.printArgs(); - exit(EXIT_FAILURE); - } - - // print Help - if (A.getParam("p_help") == true) { - A.printArgs(); - exit(EXIT_SUCCESS); - } - - TCPClient* client = new TCPClient(); - TCPSocket* socket = client->connect(A.getParam("p_server"), A.getParam("p_port")); - - if (socket != NULL) { - // build message - std::string message(A.getArg(0)); - for (size_t i = 1; i < A.numArg(); i++) { - message += " "; - message += A.getArg(i); - } - - socket->send(message.c_str(), message.size()); - - char data[1024]; - size_t datalen; - - datalen = socket->recv(data, sizeof(data)-1); - data[datalen] = '\0'; - - std::cout << data; - - delete socket; - } - - delete client; - - return 0; - -} - diff --git a/tools/ebusd_feed.cpp b/tools/ebusdump.cpp similarity index 100% rename from tools/ebusd_feed.cpp rename to tools/ebusdump.cpp