Compare commits
37 Commits
bd685f3f85
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 3576461e03 | |||
| 9603093b62 | |||
| 20eda9fc42 | |||
| 516551f15d | |||
| aef92e33e8 | |||
| 2f9937867b | |||
| e8686cbe35 | |||
| 6249dd6074 | |||
| 4ea8ce944f | |||
| 790dcd2259 | |||
| 5043618bf8 | |||
| d8fb6cae01 | |||
| bc113e2015 | |||
| 31db3b78d6 | |||
| e314980c10 | |||
| 64a821bea1 | |||
| 09abf3e122 | |||
| 4d8ab68b81 | |||
| ebaf682151 | |||
| 9ee21ed8a8 | |||
| 9fcdfaf618 | |||
| aaf71e77c9 | |||
| 9524e29a2c | |||
| b6faa146fa | |||
| cd16fcc579 | |||
| 085c1a482e | |||
| bf7482317e | |||
| f276d41f72 | |||
| 155addc239 | |||
| ffaa44ceb4 | |||
| 5b0610cc44 | |||
| dbc6e38be7 | |||
| 8130f8e582 | |||
| 2a529f224a | |||
| 1021893844 | |||
| 7996cf50b0 | |||
| 7c2ad33e75 |
@@ -16,4 +16,5 @@ target_link_libraries(usbserial-dw ${Boost_LIBRARIES})
|
||||
#target_link_libraries(usbserial-dw ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
## Install
|
||||
install(TARGETS usbserial-dw DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS usbserial-dw
|
||||
RUNTIME DESTINATION bin ${CMAKE_INSTALL_BINDIR})
|
||||
3
TODO
3
TODO
@@ -1 +1,2 @@
|
||||
Code 0x41 A1 stage lookup in RS PRO problem
|
||||
Pravdepodobne nejaky bug v TimeoutSerial read v tom ze cita s oneskorenim 1
|
||||
Length 1 a potom este pise TimeoutSerial
|
||||
@@ -88,13 +88,21 @@ void TimeoutSerial::writeString(const std::string& s)
|
||||
{
|
||||
asio::write(port,asio::buffer(s.c_str(),s.size()));
|
||||
}
|
||||
|
||||
void TimeoutSerial::dump(char *data, size_t size)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "Size = " << size;
|
||||
for (int i=0; i < size; i++) {
|
||||
BOOST_LOG_TRIVIAL(debug) << i << "(" << int(data[i]) << ")";
|
||||
}
|
||||
}
|
||||
size_t TimeoutSerial::read(char *data, size_t size)
|
||||
{
|
||||
size_t toRead = 0;
|
||||
if(readData.size()>0)//If there is some data from a previous read
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "UNCONSUMED DATA " << readData.size();
|
||||
istream is(&readData);
|
||||
size_t toRead=min(readData.size(),size);//How many bytes to read?
|
||||
toRead=min(readData.size(),size);//How many bytes to read?
|
||||
is.read(data,toRead);
|
||||
data+=toRead;
|
||||
size-=toRead;
|
||||
@@ -113,7 +121,7 @@ size_t TimeoutSerial::read(char *data, size_t size)
|
||||
asio::placeholders::error));
|
||||
|
||||
result=resultInProgress;
|
||||
bytesTransferred=0;
|
||||
bytesTransferred=toRead;
|
||||
for(;;)
|
||||
{
|
||||
io.run_one();
|
||||
@@ -121,6 +129,7 @@ size_t TimeoutSerial::read(char *data, size_t size)
|
||||
{
|
||||
case resultSuccess:
|
||||
timer.cancel();
|
||||
dump(data,size);
|
||||
return this->bytesTransferred;
|
||||
case resultTimeoutExpired:
|
||||
port.cancel();
|
||||
@@ -235,10 +244,12 @@ void TimeoutSerial::timeoutExpired(const boost::system::error_code& error)
|
||||
void TimeoutSerial::readCompleted(const boost::system::error_code& error,
|
||||
const size_t bytesTransferred)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "Error = " << error.value() << " Message = " << error.message();
|
||||
|
||||
if(!error)
|
||||
{
|
||||
result=resultSuccess;
|
||||
this->bytesTransferred=bytesTransferred;
|
||||
this->bytesTransferred+=bytesTransferred;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -257,7 +268,7 @@ void TimeoutSerial::readCompleted(const boost::system::error_code& error,
|
||||
#else //Linux
|
||||
if(error.value()==125) return; //Linux outputs error 125
|
||||
if (error.value()==158) {
|
||||
performReadSetup(setupParameters);
|
||||
//performReadSetup(setupParameters);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -127,7 +127,7 @@ public:
|
||||
* \throws timeout_exception in case of timeout
|
||||
*/
|
||||
size_t read(char *data, size_t size);
|
||||
|
||||
void dump(char *data, size_t size);
|
||||
/**
|
||||
* Read some data, blocking
|
||||
* \param size how much data to read
|
||||
|
||||
11
Ymodem.cpp
11
Ymodem.cpp
@@ -268,7 +268,9 @@ Ymodem::Code Ymodem::receivePacket()
|
||||
BOOST_LOG_TRIVIAL(debug) << "RX = " << int(rxBuffer[0]);
|
||||
if(rxBuffer[0] == CodeSoh)
|
||||
{
|
||||
uint32_t len = read(&(rxBuffer[1]), YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - 1);
|
||||
int32_t len = read(&(rxBuffer[1]), YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - 1);
|
||||
|
||||
BOOST_LOG_TRIVIAL(debug) << "Len = " << len << " Start = " << rxBuffer[1];
|
||||
|
||||
if(len < (YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - 1))
|
||||
{
|
||||
@@ -284,7 +286,7 @@ Ymodem::Code Ymodem::receivePacket()
|
||||
}
|
||||
else if(rxBuffer[0] == CodeStx)
|
||||
{
|
||||
uint32_t len = read(&(rxBuffer[1]), YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - 1);
|
||||
int32_t len = read(&(rxBuffer[1]), YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - 1);
|
||||
|
||||
if(len < (YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - 1))
|
||||
{
|
||||
@@ -305,6 +307,7 @@ Ymodem::Code Ymodem::receivePacket()
|
||||
}
|
||||
else
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "RET <= 0";
|
||||
return CodeNone;
|
||||
}
|
||||
}
|
||||
@@ -312,7 +315,7 @@ Ymodem::Code Ymodem::receivePacket()
|
||||
{
|
||||
if(code == CodeSoh)
|
||||
{
|
||||
uint32_t len = read(&(rxBuffer[rxLength]), YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - rxLength);
|
||||
int32_t len = read(&(rxBuffer[rxLength]), YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - rxLength);
|
||||
|
||||
if(len < (YMODEM_PACKET_SIZE + YMODEM_PACKET_OVERHEAD - rxLength))
|
||||
{
|
||||
@@ -329,7 +332,7 @@ Ymodem::Code Ymodem::receivePacket()
|
||||
}
|
||||
else if(code == CodeStx)
|
||||
{
|
||||
uint32_t len = read(&(rxBuffer[rxLength]), YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - rxLength);
|
||||
int32_t len = read(&(rxBuffer[rxLength]), YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - rxLength);
|
||||
|
||||
if(len < (YMODEM_PACKET_1K_SIZE + YMODEM_PACKET_OVERHEAD - rxLength))
|
||||
{
|
||||
|
||||
4
Ymodem.h
4
Ymodem.h
@@ -115,8 +115,8 @@ private:
|
||||
|
||||
virtual Code callback(Status status, uint8_t *buff, uint32_t *len) = 0;
|
||||
|
||||
virtual uint32_t read(uint8_t *buff, uint32_t len) = 0;
|
||||
virtual uint32_t write(uint8_t *buff, uint32_t len) = 0;
|
||||
virtual int32_t read(uint8_t *buff, uint32_t len) = 0;
|
||||
virtual int32_t write(uint8_t *buff, uint32_t len) = 0;
|
||||
|
||||
uint32_t timeDivide;
|
||||
uint32_t timeMax;
|
||||
|
||||
@@ -253,12 +253,13 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t YmodemFileReceive::read(uint8_t *buff, uint32_t len)
|
||||
int32_t YmodemFileReceive::read(uint8_t *buff, uint32_t len)
|
||||
{
|
||||
|
||||
return serialPort->read((char *)buff, len);
|
||||
}
|
||||
|
||||
uint32_t YmodemFileReceive::write(uint8_t *buff, uint32_t len)
|
||||
int32_t YmodemFileReceive::write(uint8_t *buff, uint32_t len)
|
||||
{
|
||||
return serialPort->write((char *)buff, len);
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ public:
|
||||
private:
|
||||
Code callback(Status status, uint8_t *buff, uint32_t *len);
|
||||
|
||||
uint32_t read(uint8_t *buff, uint32_t len);
|
||||
uint32_t write(uint8_t *buff, uint32_t len);
|
||||
int32_t read(uint8_t *buff, uint32_t len);
|
||||
int32_t write(uint8_t *buff, uint32_t len);
|
||||
|
||||
ofstream file;
|
||||
boost::asio::io_service io; ///< Io service object
|
||||
|
||||
76
main.cpp
76
main.cpp
@@ -30,6 +30,7 @@
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
|
||||
#include <boost/program_options.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include "TimeoutSerial.h"
|
||||
#include "YmodemFileReceive.h"
|
||||
@@ -38,11 +39,12 @@
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
using boost::format;
|
||||
namespace po = boost::program_options;
|
||||
|
||||
typedef vector< string > split_vector_type;
|
||||
|
||||
static void init_log(void)
|
||||
static void init_log(bool debug = false)
|
||||
{
|
||||
/* init boost log
|
||||
* 1. Add common attributes
|
||||
@@ -89,6 +91,10 @@ static void init_log(void)
|
||||
boost::log::keywords::min_free_space = 30 * 1024 * 1024,
|
||||
boost::log::keywords::open_mode = std::ios_base::app);
|
||||
fsSink->set_formatter(logFmt);
|
||||
if (!debug)
|
||||
fsSink->set_filter(
|
||||
boost::log::trivial::severity >= boost::log::trivial::warning
|
||||
);
|
||||
fsSink->locked_backend()->auto_flush(true);
|
||||
}
|
||||
|
||||
@@ -108,23 +114,26 @@ int main(int argc, char* argv[])
|
||||
float pressure = NAN;
|
||||
po::variables_map vm;
|
||||
std::string port,path,filename;
|
||||
int speed;
|
||||
|
||||
init_log();
|
||||
int speed,brightness = 0,saturation = 0 ,contrast = 0;
|
||||
|
||||
po::options_description desc("Allowed options");
|
||||
desc.add_options()
|
||||
("help", "produce help message")
|
||||
("measure", "get and print values")
|
||||
("debug", "debug output to file")
|
||||
("verbose", po::value<string>()->implicit_value("0"), "verbosity level")
|
||||
("file", po::value<string>(&filename)->default_value("camera.jpg"),"filename of capture filename")
|
||||
("path", po::value<string>(&path)->default_value("/tmp"),"directory for file of capture")
|
||||
("capture", "capture photo of camera")
|
||||
("port", po::value<string>(&port)->default_value("/dev/ttyUSB0"), "port to read from")
|
||||
("speed", po::value<int>(&speed)->default_value(115200), "speed read from port")
|
||||
("speed", po::value<int>(&speed)->default_value(460800), "speed read from port")
|
||||
("brightness", po::value<int>(&brightness)->implicit_value(0), "set brightness")
|
||||
("saturation", po::value<int>(&saturation)->implicit_value(0), "set saturation")
|
||||
("contrast", po::value<int>(&contrast)->implicit_value(0), "set contrast")
|
||||
("temperature", "get and print temprature")
|
||||
("humidity", "get and print humidity")
|
||||
("pressure", "get and print pressure")
|
||||
("reboot", "reboot ESP32 CAM")
|
||||
("noraw", "do not set raw mode")
|
||||
("noreset", "do not set zero on lines DTR a RST")
|
||||
;
|
||||
@@ -139,6 +148,8 @@ int main(int argc, char* argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
init_log(vm.count("debug"));
|
||||
|
||||
} catch(std::exception& e) {
|
||||
cerr << "error: " << e.what() << "\n";
|
||||
return 1;
|
||||
@@ -156,13 +167,28 @@ int main(int argc, char* argv[])
|
||||
serial.setDTR(false);
|
||||
serial.setRTS(false);
|
||||
}
|
||||
|
||||
if (! vm.count("noraw")) {
|
||||
serial.setRAW();
|
||||
}
|
||||
|
||||
if (vm.count("reset")) {
|
||||
serial.setDTR(true);
|
||||
serial.setRTS(true);
|
||||
|
||||
serial.writeString("reboot\r\n");
|
||||
boost::this_thread::sleep(posix_time::milliseconds(1000));
|
||||
|
||||
serial.setDTR(false);
|
||||
serial.setRTS(false);
|
||||
|
||||
}
|
||||
|
||||
boost::this_thread::sleep(posix_time::milliseconds(5000));
|
||||
|
||||
if (! vm.count("noreset")) {
|
||||
serial.writeString("\r\n\r\n");
|
||||
boost::this_thread::sleep(posix_time::milliseconds(300));
|
||||
line = serial.readStringUntil("\n");
|
||||
trim(line);
|
||||
BOOST_LOG_TRIVIAL(debug) << line;
|
||||
@@ -170,6 +196,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
if (vm.count("measure") || vm.count("temperature") || vm.count("pressure") || vm.count("humidity")) {
|
||||
serial.writeString("measure\r\n");
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
|
||||
for (;;) {
|
||||
line = serial.readStringUntil("\n");
|
||||
@@ -195,6 +222,7 @@ int main(int argc, char* argv[])
|
||||
cout << "tlak = " << pressure << endl;
|
||||
}
|
||||
|
||||
|
||||
if (vm.count("temperature")) {
|
||||
cout << temperature << endl;
|
||||
}
|
||||
@@ -210,26 +238,46 @@ int main(int argc, char* argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (vm.count("brightness")) {
|
||||
string s = str(format("bright %d\r\n") % brightness);
|
||||
BOOST_LOG_TRIVIAL(debug) << "SET " << s ;
|
||||
serial.writeString(s);
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
}
|
||||
|
||||
if (vm.count("saturation")) {
|
||||
string s = str(format("satur %d\r\n") % saturation);
|
||||
BOOST_LOG_TRIVIAL(debug) << "SET " << s ;
|
||||
serial.writeString(s);
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
}
|
||||
|
||||
if (vm.count("contrast")) {
|
||||
string s = str(format("contr %d\r\n") % contrast);
|
||||
BOOST_LOG_TRIVIAL(debug) << "SET " << s ;
|
||||
serial.writeString(s);
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
}
|
||||
|
||||
if (vm.count("capture")) {
|
||||
|
||||
|
||||
serial.writeString("capture\r\n");
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
|
||||
serial.setTimeout(posix_time::milliseconds(500));
|
||||
|
||||
try {
|
||||
for (;;) {
|
||||
line = serial.readStringUntil("\r\n");
|
||||
if (line.rfind("[OK]",0) == 0)
|
||||
cout << line << endl;
|
||||
}
|
||||
} catch (...) {
|
||||
for (;;) {
|
||||
line = serial.readStringUntil("\r\n");
|
||||
if (line.rfind("[OK]",0) == 0)
|
||||
cout << line << endl;
|
||||
}
|
||||
} catch (...) {
|
||||
|
||||
}
|
||||
|
||||
serial.writeString("rb\r\n");
|
||||
boost::this_thread::sleep(posix_time::milliseconds(100));
|
||||
//serial.readChar(1);
|
||||
//serial.readChar(1);
|
||||
|
||||
modem.setSerialPort(&serial);
|
||||
modem.setFilePath(path);
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=usbserial-dw
|
||||
PKG_VERSION:=0.2.4
|
||||
PKG_RELEASE:=5
|
||||
PKG_VERSION:=0.3.7
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://git.bh.ttx.sk/jaro/usbserial-dw.git
|
||||
PKG_MIRROR_HASH:=
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=a6da98cf7f2e7d6c42799608b35a30eff207a992
|
||||
PKG_SOURCE_VERSION:=9603093b622b972c321e10982fa881f922dca690
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
|
||||
@@ -64,6 +64,7 @@ define Package/usbserial-dw/install
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/usbserial-dw $(1)/usr/bin/usbserial-dw
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/usbserial-dw.config $(1)/etc/config/usbserial
|
||||
$(INSTALL_BIN) ./files/usbserial-dw.sh $(1)/usr/bin/usbserial.sh
|
||||
endef
|
||||
|
||||
define Package/usbserial-dw/conffiles
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config capture
|
||||
option port /dev/ttyUSB0
|
||||
option speed 115200
|
||||
option speed 460800
|
||||
option directory /tmp
|
||||
option file camera.jpg
|
||||
option url https://meranie.bh.ttx.sk/upload/image
|
||||
|
||||
@@ -15,13 +15,15 @@ parse_capture() {
|
||||
|
||||
config_get _port "$section" "port"
|
||||
config_get _speed "$section" "speed"
|
||||
config_get _dir "$section" "dir"
|
||||
config_get _dir "$section" "directory"
|
||||
config_get _file "$section" "file"
|
||||
config_get _url "$section" "url"
|
||||
|
||||
$PROG --port $_port --speed $_speed --dir $_dir --file $_file
|
||||
echo $PROG --port $_port --speed $_speed --path $_dir --file $_file --capture
|
||||
$PROG --port $_port --speed $_speed --path $_dir --file $_file --capture
|
||||
cd $_dir
|
||||
$CURL -v -X POST -F "submit=OK" -F "file=@camera.jpg" $_url
|
||||
echo $CURL -X POST -F "submit=OK" -F "file=@camera.jpg" $_url
|
||||
$CURL -X POST -F "submit=OK" -F "file=@camera.jpg" $_url
|
||||
rm $_file
|
||||
}
|
||||
|
||||
@@ -39,13 +41,22 @@ parse_post() {
|
||||
_hum=`$PROG --humidity`
|
||||
_pre=`$PROG --pressure`
|
||||
|
||||
$_mqtt_prg -h $_host -t $_topic/temperature -m N:$_tmp
|
||||
$_mqtt_prg -h $_host -t $_topic/humidity -m N:$_hum
|
||||
$_mqtt_prg -h $_host -t $_topic/pressure -m N:$_pre
|
||||
|
||||
echo $_mqtt_prg -h $_host -t $_topic/temperature -m N:${_tmp}
|
||||
$_mqtt_prg -h $_host -t $_topic/temperature -m N:${_tmp}
|
||||
echo $_mqtt_prg -h $_host -t $_topic/humidity -m N:${_hum}
|
||||
$_mqtt_prg -h $_host -t $_topic/humidity -m N:${_hum}
|
||||
echo $_mqtt_prg -h $_host -t $_topic/pressure -m N:${_pre}
|
||||
$_mqtt_prg -h $_host -t $_topic/pressure -m N:${_pre}}
|
||||
}
|
||||
|
||||
config_load usbserial
|
||||
config_foreach parse_capture capture
|
||||
config_foreach parse_post post
|
||||
start() {
|
||||
echo "[OK] Starting USB serial"
|
||||
config_load usbserial
|
||||
config_foreach parse_capture capture
|
||||
config_foreach parse_post post
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo "[OK] Stoping USB serial"
|
||||
killall -9 $PROG
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user