PlottWare/PlottWareControl/printer.cpp
2019-08-08 17:02:07 +03:00

144 lines
3.2 KiB
C++

#include "printer.h"
Printer::Printer(){
position=Point(-1, -1);
length=0;
width=0;
pencount=0;
port=0;
}
Printer::Printer(long int _length, long int _width, int _pencount, std::map<int, std::string> _pens, int _port, long int _baudrate){
length=_length;
width=_width;
pencount=_pencount;
pens=_pens;
port=_port;
baudrate=_baudrate;
com=Serial();
}
Point Printer::getPosition(){
//get head position
send("M114\n");
std::string r=recv();
position=Point(std::stoi(r.substr(r.find("X:")+2, r.find(" ", r.find("X:")))), std::stoi(r.substr(r.find("Y:")+2, r.find(" ", r.find("Y:")))));
return position;
}
long int Printer::getLength(){
return length;
}
long int Printer::getWidth(){
return width;
}
int Printer::getPenCount(){
return pencount;
}
std::map<int, std::string> Printer::getPens(){
return pens;
}
bool Printer::getPowerState(){
return power;
}
std::string Printer::getPort(){
return "COM"+std::to_string(port);
}
int Printer::getPortInt(){
return port;
}
long int Printer::getBaudRate(){
return baudrate;
}
bool Printer::setSettings(long int _length, long int _width, int _pencount, std::map<int, std::string> _pens, int _port, long int _baudrate){
length=_length;
width=_width;
pencount=_pencount;
pens=_pens;
port=_port;
baudrate=_baudrate;
}
bool Printer::setComParameters(int _port, long int _baudrate){
port=_port;
baudrate=_baudrate;
}
bool Printer::connect(){
std::string p="\\\\.\\COM"+std::to_string(port);
if(!com.conn(p.c_str(), baudrate)){
return false;
}
//get pwr state
send("M115\n");
std::string r=recv();
try{
nlohmann::json j=nlohmann::json::parse(r);
power=j["power"];
}
catch(nlohmann::json::parse_error &e){
fprintf(stderr, "ERROR> Can not parse JSON response from printer for M115. Message: %s; position: %i. At: Printer::autoDetect() (file: %s, line: %i)\n", e.what(), e.byte, __FILE__, __LINE__);
return false;
}
//get head position
getPosition();
return true;
}
void Printer::disconnect(){
com.disconn();
}
bool Printer::isConnected(){
return com.IsConnected();
}
bool Printer::send(std::string s){
if(!isConnected()){
return false;
}
com.WriteData(s.c_str(), s.size());
return true;
}
std::string Printer::recv(){
char buff[501];
com.ReadData(buff, 500);
return std::string(buff);
}
bool Printer::autoDetect(){
if(isConnected()){
send("M115\n"); //get info from the firmware
std::string r=recv();
try{
nlohmann::json j=nlohmann::json::parse(r);
length=j["length"];
width=j["width"];
pencount=j["pencount"];
pens.clear();
for(int i=0; i<pencount; i++){
pens[i]=j["pens"][i];
}
}
catch(nlohmann::json::parse_error &e){
fprintf(stderr, "ERROR> Can not parse JSON response from printer for M115. Message: %s; position: %i. At: Printer::autoDetect() (file: %s, line: %i)\n", e.what(), e.byte, __FILE__, __LINE__);
return false;
}
return true;
}
return false;
}