add interface to allow for night mode control (#2)

This commit is contained in:
Robert Stanley Judka 2020-04-25 23:49:33 -05:00 committed by GitHub
parent 5f8d5f4f6a
commit 464da85686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 6 deletions

View File

@ -33,7 +33,7 @@ namespace service
class SensorService: public aasdk::channel::sensor::ISensorServiceChannelEventHandler, public IService, public std::enable_shared_from_this<SensorService>
{
public:
SensorService(boost::asio::io_service& ioService, aasdk::messenger::IMessenger::Pointer messenger);
SensorService(boost::asio::io_service& ioService, aasdk::messenger::IMessenger::Pointer messenger, bool nightMode = false);
void start() override;
void stop() override;
@ -41,6 +41,7 @@ public:
void onChannelOpenRequest(const aasdk::proto::messages::ChannelOpenRequest& request) override;
void onSensorStartRequest(const aasdk::proto::messages::SensorStartRequestMessage& request) override;
void onChannelError(const aasdk::error::Error& e) override;
void setNightMode(bool nightMode);
private:
using std::enable_shared_from_this<SensorService>::shared_from_this;
@ -49,6 +50,7 @@ private:
boost::asio::io_service::strand strand_;
aasdk::channel::sensor::SensorServiceChannel::Pointer channel_;
bool nightMode_;
};
}

View File

@ -23,6 +23,7 @@
#include <f1x/openauto/autoapp/Projection/InputDevice.hpp>
#include <f1x/openauto/autoapp/Projection/OMXVideoOutput.hpp>
#include <f1x/openauto/autoapp/Projection/QtVideoOutput.hpp>
#include <f1x/openauto/autoapp/Service/SensorService.hpp>
namespace f1x
{
@ -36,10 +37,11 @@ namespace service
class ServiceFactory: public IServiceFactory
{
public:
ServiceFactory(boost::asio::io_service& ioService, configuration::IConfiguration::Pointer configuration, QWidget* activeArea=nullptr, std::function<void(bool)> activeCallback=nullptr);
ServiceFactory(boost::asio::io_service& ioService, configuration::IConfiguration::Pointer configuration, QWidget* activeArea=nullptr, std::function<void(bool)> activeCallback=nullptr, bool nightMode = false);
ServiceList create(aasdk::messenger::IMessenger::Pointer messenger) override;
void setOpacity(unsigned int alpha);
void resize();
void setNightMode(bool nightMode);
static QRect mapActiveAreaToGlobal(QWidget* activeArea);
#ifdef USE_OMX
static projection::DestRect QRectToDestRect(QRect rect);
@ -62,6 +64,8 @@ private:
#else
projection::QtVideoOutput *qtVideoOutput_;
#endif
bool nightMode_;
std::shared_ptr<SensorService> sensorService_;
};
}

View File

@ -29,9 +29,10 @@ namespace autoapp
namespace service
{
SensorService::SensorService(boost::asio::io_service& ioService, aasdk::messenger::IMessenger::Pointer messenger)
SensorService::SensorService(boost::asio::io_service& ioService, aasdk::messenger::IMessenger::Pointer messenger, bool nightMode)
: strand_(ioService)
, channel_(std::make_shared<aasdk::channel::sensor::SensorServiceChannel>(strand_, std::move(messenger)))
, nightMode_(nightMode)
{
}
@ -121,7 +122,7 @@ void SensorService::sendDrivingStatusUnrestricted()
void SensorService::sendNightData()
{
aasdk::proto::messages::SensorEventIndication indication;
indication.add_night_mode()->set_is_night(false);
indication.add_night_mode()->set_is_night(nightMode_);
auto promise = aasdk::channel::SendPromise::defer(strand_);
promise->then([]() {}, std::bind(&SensorService::onChannelError, this->shared_from_this(), std::placeholders::_1));
@ -133,6 +134,12 @@ void SensorService::onChannelError(const aasdk::error::Error& e)
OPENAUTO_LOG(error) << "[SensorService] channel error: " << e.what();
}
void SensorService::setNightMode(bool nightMode)
{
nightMode_ = nightMode;
this->sendNightData();
}
}
}
}

View File

@ -49,7 +49,7 @@ namespace autoapp
namespace service
{
ServiceFactory::ServiceFactory(boost::asio::io_service& ioService, configuration::IConfiguration::Pointer configuration, QWidget *activeArea, std::function<void(bool)> activeCallback)
ServiceFactory::ServiceFactory(boost::asio::io_service& ioService, configuration::IConfiguration::Pointer configuration, QWidget *activeArea, std::function<void(bool)> activeCallback, bool nightMode)
: ioService_(ioService)
, configuration_(std::move(configuration))
, activeArea_(activeArea)
@ -58,6 +58,7 @@ ServiceFactory::ServiceFactory(boost::asio::io_service& ioService, configuration
#ifdef USE_OMX
, omxVideoOutput_(std::make_shared<projection::OMXVideoOutput>(configuration_, this->QRectToDestRect(screenGeometry_), activeCallback_))
#endif
, nightMode_(nightMode)
{
}
@ -69,7 +70,8 @@ ServiceList ServiceFactory::create(aasdk::messenger::IMessenger::Pointer messeng
projection::IAudioInput::Pointer audioInput(new projection::QtAudioInput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
serviceList.emplace_back(std::make_shared<AudioInputService>(ioService_, messenger, std::move(audioInput)));
this->createAudioServices(serviceList, messenger);
serviceList.emplace_back(std::make_shared<SensorService>(ioService_, messenger));
sensorService_ = std::make_shared<SensorService>(ioService_, messenger, nightMode_);
serviceList.emplace_back(sensorService_);
serviceList.emplace_back(this->createVideoService(messenger));
serviceList.emplace_back(this->createBluetoothService(messenger));
serviceList.emplace_back(this->createInputService(messenger));
@ -182,6 +184,12 @@ void ServiceFactory::resize()
#endif
}
void ServiceFactory::setNightMode(bool nightMode)
{
nightMode_ = nightMode;
if (sensorService_ != nullptr) sensorService_->setNightMode(nightMode_);
}
QRect ServiceFactory::mapActiveAreaToGlobal(QWidget* activeArea)
{
if (activeArea == nullptr)