mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Added sending the image command
This commit is contained in:
parent
a04af1242c
commit
baba35c998
@ -27,6 +27,8 @@ Connection::Connection(const std::string & a, bool printJson) :
|
|||||||
{
|
{
|
||||||
throw std::runtime_error("Unable to connect to host");
|
throw std::runtime_error("Unable to connect to host");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "Connected to " << a << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Connection::~Connection()
|
Connection::~Connection()
|
||||||
@ -37,15 +39,60 @@ Connection::~Connection()
|
|||||||
bool Connection::setColor(QColor color, int priority, int duration)
|
bool Connection::setColor(QColor color, int priority, int duration)
|
||||||
{
|
{
|
||||||
std::cout << "Set color to " << color.red() << " " << color.green() << " " << color.blue() << std::endl;
|
std::cout << "Set color to " << color.red() << " " << color.green() << " " << color.blue() << std::endl;
|
||||||
sendMessage("Set color message");
|
|
||||||
return false;
|
// create command
|
||||||
|
Json::Value command;
|
||||||
|
command["command"] = "color";
|
||||||
|
command["priority"] = priority;
|
||||||
|
Json::Value & rgbValue = command["color"];
|
||||||
|
rgbValue[0] = color.red();
|
||||||
|
rgbValue[1] = color.green();
|
||||||
|
rgbValue[2] = color.blue();
|
||||||
|
if (duration > 0)
|
||||||
|
{
|
||||||
|
command["duration"] = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send command message
|
||||||
|
Json::Value reply = sendMessage(command);
|
||||||
|
|
||||||
|
// parse reply message
|
||||||
|
return parseReply(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Connection::setImage(QImage image, int priority, int duration)
|
bool Connection::setImage(QImage image, int priority, int duration)
|
||||||
{
|
{
|
||||||
std::cout << "Set image has size: " << image.width() << "x" << image.height() << std::endl;
|
std::cout << "Set image has size: " << image.width() << "x" << image.height() << std::endl;
|
||||||
return false;
|
|
||||||
|
// ensure the image has RGB888 format
|
||||||
|
image = image.convertToFormat(QImage::Format_RGB888);
|
||||||
|
QByteArray binaryImage;
|
||||||
|
binaryImage.reserve(image.width() * image.height() * 3);
|
||||||
|
for (int i = 0; i < image.height(); ++i)
|
||||||
|
{
|
||||||
|
binaryImage.append(reinterpret_cast<const char *>(image.constScanLine(i)), image.width() * 3);
|
||||||
}
|
}
|
||||||
|
const QByteArray base64Image = binaryImage.toBase64();
|
||||||
|
|
||||||
|
// create command
|
||||||
|
Json::Value command;
|
||||||
|
command["command"] = "image";
|
||||||
|
command["priority"] = priority;
|
||||||
|
command["width"] = image.width();
|
||||||
|
command["height"] = image.height();
|
||||||
|
command["data"] = std::string(base64Image.data(), base64Image.size());
|
||||||
|
if (duration > 0)
|
||||||
|
{
|
||||||
|
command["duration"] = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send command message
|
||||||
|
Json::Value reply = sendMessage(command);
|
||||||
|
|
||||||
|
// parse reply message
|
||||||
|
return parseReply(reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Connection::listPriorities()
|
bool Connection::listPriorities()
|
||||||
{
|
{
|
||||||
@ -102,7 +149,7 @@ Json::Value Connection::sendMessage(const Json::Value & message)
|
|||||||
Json::Value reply;
|
Json::Value reply;
|
||||||
if (!jsonReader.parse(serializedReply, reply))
|
if (!jsonReader.parse(serializedReply, reply))
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Error while parsing reply:" + serializedReply);
|
throw std::runtime_error("Error while parsing reply: invalid json");
|
||||||
}
|
}
|
||||||
|
|
||||||
// print reply if requested
|
// print reply if requested
|
||||||
@ -114,3 +161,26 @@ Json::Value Connection::sendMessage(const Json::Value & message)
|
|||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Connection::parseReply(const Json::Value &reply)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
std::string reason = "No error info";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
success = reply.get("success", false).asBool();
|
||||||
|
if (!success)
|
||||||
|
reason = reply.get("error", reason).asString();
|
||||||
|
}
|
||||||
|
catch (const std::runtime_error &)
|
||||||
|
{
|
||||||
|
// Some json paring error: ignore and set parsing error
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Error while paring reply: " + reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
@ -44,6 +44,8 @@ private:
|
|||||||
/// Send a json command message and receive its reply
|
/// Send a json command message and receive its reply
|
||||||
Json::Value sendMessage(const Json::Value & message);
|
Json::Value sendMessage(const Json::Value & message);
|
||||||
|
|
||||||
|
bool parseReply(const Json::Value & reply);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _printJson;
|
bool _printJson;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user