From 22912422c2876665cb74959593b630ffd96d0beb Mon Sep 17 00:00:00 2001 From: Roland Jax Date: Thu, 26 Jun 2014 18:38:55 +0200 Subject: [PATCH] ebusdump merged into ebusctl. --- .gitignore | 1 - ChangeLog | 3 + Makefile.am | 9 +-- NEWS | 3 +- README | 3 +- lib/appl.cpp | 2 +- tools/ebusctl.cpp | 156 ++++++++++++++++++++++++++++++--------------- tools/ebusdump.cpp | 100 ----------------------------- 8 files changed, 111 insertions(+), 166 deletions(-) delete mode 100644 tools/ebusdump.cpp diff --git a/.gitignore b/.gitignore index aa56c6a4..ec26f947 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,3 @@ *.o *.dirstamp /ebusctl -/ebusdump diff --git a/ChangeLog b/ChangeLog index 183d0dc6..f5c2d5fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ ebusd - ChangeLog ----------------- +2014-06-26 Roland Jax +* ebusdump merged into ebusctl. + 2014-06-25 Roland Jax * ebusctl added (includes ebusd_scan and ebusd_send) * Version changed from 0.2.1 to 0.3.0 diff --git a/Makefile.am b/Makefile.am index 1a693daf..13e1884a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,8 +5,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} AM_CXXFLAGS = $(LIBEBUS_CFLAGS) -I$(top_srcdir)/lib -fpic -Wall -Wextra bin_PROGRAMS = ebusd \ - ebusctl \ - ebusdump + ebusctl ebusd_SOURCES = src/main.cpp \ src/baseloop.cpp \ @@ -31,9 +30,3 @@ ebusctl_SOURCES = tools/ebusctl.cpp \ ebusctl_LDADD = $(LIBEBUS_LIBS) - -ebusdump_SOURCES = tools/ebusdump.cpp \ - lib/appl.cpp - -ebusdump_LDADD = $(LIBEBUS_LIBS) - diff --git a/NEWS b/NEWS index 1c593c1d..e5b68241 100644 --- a/NEWS +++ b/NEWS @@ -1,8 +1,9 @@ ebusd - NEWS ------------ -2014-06-25 Roland Jax +2014-06-26 Roland Jax * ebusctl added (includes ebusd_scan and ebusd_send) +* ebusdump merged into ebusctl. * Version changed from 0.2.1 to 0.3.0 2014-06-03 Roland Jax diff --git a/README b/README index bd4e04e3..fcd94877 100644 --- a/README +++ b/README @@ -48,8 +48,7 @@ See ./ebusd -h Tools ----- -ebusctl - client for ebusd. -ebusdump - send dump files (virtual serial device) to server for development. +ebusctl - client program for ebusd. For usage and further information take a look on help page. diff --git a/lib/appl.cpp b/lib/appl.cpp index 20ce04e1..4d12fef1 100644 --- a/lib/appl.cpp +++ b/lib/appl.cpp @@ -67,7 +67,7 @@ void Appl::printArgs() if (m_argTxt.size() != 0) std::cerr << " " << m_argTxt; - std::cerr << std::endl << std::endl; + std::cerr << std::endl << std::endl << "Options:" << std::endl << std::endl; for (a_it = m_args.begin(); a_it < m_args.end(); a_it++) { const char* c = (strlen(a_it->shortname) == 1) ? a_it->shortname : " "; diff --git a/tools/ebusctl.cpp b/tools/ebusctl.cpp index 6551d2e3..06e506df 100644 --- a/tools/ebusctl.cpp +++ b/tools/ebusctl.cpp @@ -21,9 +21,12 @@ #include "appl.h" #include "tcpsocket.h" #include +#include +#include #include #include #include +#include using namespace libebus; @@ -33,10 +36,24 @@ void define_args() { A.addArgs("COMMAND {ARGS...}\n\n" " local commands:\n" - " 'scan' scans the bus and identifies the participant\n\n" + " 'scan' scans the bus and identifies the participants\n\n" + " 'feed' sends a dump file to a local virtual serial device\n" + " (hint: socat -d -d pty,raw,echo=0 pty,raw,echo=0)\n\n" " remote commands:\n" " send 'help' to server", 1); + A.addItem("p_device", Appl::Param("/dev/ttyUSB60"), "d", "device", + "virtual serial device (/dev/ttyUSB60)", + Appl::type_string, Appl::opt_mandatory); + + A.addItem("p_file", Appl::Param(""), "f", "file", + "dump file with raw data", + Appl::type_string, Appl::opt_mandatory); + + A.addItem("p_time", Appl::Param(10000), "t", "time", + "delay between 2 bytes in 'us' (10000)\n", + Appl::type_long, Appl::opt_mandatory); + A.addItem("p_server", Appl::Param("localhost"), "s", "server", "name or ip (localhost)", Appl::type_string, Appl::opt_mandatory); @@ -163,78 +180,111 @@ int main(int argc, char* argv[]) exit(EXIT_SUCCESS); } - addManufacturer(); + if (strcasecmp(A.getArg(0).c_str(), "feed") == 0) { + std::string dev(A.getParam("p_device")); + Port port(dev, true); - TCPClient* client = new TCPClient(); - TCPSocket* socket = client->connect(A.getParam("p_server"), A.getParam("p_port")); + port.open(); + if(port.isOpen() == true) + std::cout << "openPort successful." << std::endl; - if (socket != NULL) { - if (strcasecmp(A.getArg(0).c_str(), "scan") != 0) { - // build message - std::string message(A.getArg(0)); - for (size_t i = 1; i < A.numArg(); i++) { - message += " "; - message += A.getArg(i); + std::fstream file(A.getParam("p_file"), std::ios::in | std::ios::binary); + + if(file.is_open() == true) { + + while (file.eof() == false) { + unsigned char byte = file.get(); + std::cout << std::hex << std::setw(2) << std::setfill('0') + << static_cast(byte) << std::endl; + + port.send(&byte, 1); + usleep(A.getParam("p_time")); } - socket->send(message.c_str(), message.size()); + file.close(); + } - char data[1024]; - size_t datalen; + port.close(); + if(port.isOpen() == false) + std::cout << "closePort successful." << std::endl; - datalen = socket->recv(data, sizeof(data)-1); - data[datalen] = '\0'; + } else { - std::cout << data; - } else { - // send command to all slaves - for (size_t i = 0; i < s.size(); i++) { + TCPClient* client = new TCPClient(); + TCPSocket* socket = client->connect(A.getParam("p_server"), A.getParam("p_port")); + + if (socket != NULL) { + + if (strcasecmp(A.getArg(0).c_str(), "scan") == 0) { + addManufacturer(); + + // 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"; + + socket->send(message.c_str(), message.size()); + + 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::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); + } + } else { // 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::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); + std::cout << data; } + + delete socket; } - delete socket; - } + delete client; - delete client; + } return 0; diff --git a/tools/ebusdump.cpp b/tools/ebusdump.cpp deleted file mode 100644 index ba479937..00000000 --- a/tools/ebusdump.cpp +++ /dev/null @@ -1,100 +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 "libebus.h" -#include "appl.h" -#include -#include -#include -#include -#include -#include - -using namespace libebus; - -Appl& A = Appl::Instance(); - -void define_args() -{ - A.addArgs("", 0); - - A.addItem("p_device", Appl::Param("/dev/ttyUSB60"), "d", "device", - "dummy serial device (/dev/ttyUSB60)\n\t\t(hint: socat -d -d pty,raw,echo=0 pty,raw,echo=0)", - Appl::type_string, Appl::opt_mandatory); - - A.addItem("p_file", Appl::Param(""), "f", "file", - "dump file with raw data", - Appl::type_string, Appl::opt_mandatory); - - A.addItem("p_time", Appl::Param(10000), "t", "time", - "wait time [ms] (10000)\n", - Appl::type_long, 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); - } - - std::string dev(A.getParam("p_device")); - Port port(dev, true); - - port.open(); - if(port.isOpen() == true) - std::cout << "openPort successful." << std::endl; - - std::fstream file(A.getParam("p_file"), std::ios::in | std::ios::binary); - - if(file.is_open() == true) { - - while (file.eof() == false) { - unsigned char byte = file.get(); - std::cout << std::hex << std::setw(2) << std::setfill('0') - << static_cast(byte) << std::endl; - - port.send(&byte, 1); - usleep(A.getParam("p_time")); - } - - file.close(); - } - - port.close(); - if(port.isOpen() == false) - std::cout << "closePort successful." << std::endl; - - return 0; - -}