| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- #include "mainwindow.h"
- #include <sys/un.h>
- #include <sys/ioctl.h>
- #include <sys/socket.h>
- #include <linux/types.h>
- #include <linux/netlink.h>
- #include <errno.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <QPainter>
- #include "Setting.h"
- #include "AutoConnect.h"
- #include "carback.h"
- #include "ark_api.h"
- #include <QDebug>
- #include "Audio.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent)
- {
- resize(1920,720);
- setWindowFlags(Qt::FramelessWindowHint);
- setAttribute(Qt::WA_TranslucentBackground);
- m_SocketNotifier = NULL;
- m_bgLabel = new QLabel(this);
- m_bgLabel->setGeometry(0,0,1920,720);
- m_BgPixmap = QPixmap(QString(":/Resource/ARK1668ed/homeWidget/HomeBg.png"));
- m_bgLabel->setPixmap(m_BgPixmap);
- m_homeViewPaperWidget = new homeViewPaperWidget(this);
- m_homeViewPaperWidget->setGeometry(0,0,1920,720);
- m_multiMusicWidget = new multiMusicWidget(this);
- m_multiMusicWidget->setGeometry(0,0,1920,720);
- m_multiMusicWidget->setVisible(false);
- m_videoPicWidget = new videoPicWidget(this);
- m_videoPicWidget->setGeometry(0,0,1920,720);
- m_videoPicWidget->setVisible(false);
- m_settingWidget = new settingWidget(this);
- m_settingWidget->setGeometry(0,0,1920,720);
- m_settingWidget->setVisible(false);
- m_btTelePhoneWidget = new btTelePhoneWidget(this);
- m_btTelePhoneWidget->setGeometry(0,0,1920,720);
- m_btTelePhoneWidget->setVisible(false);
- m_phoneWidget = new phoneWidget(this);
- m_phoneWidget->setGeometry(0,0,1920,720);
- m_phoneWidget->setVisible(false);
- m_toolwidget = new toolWidget(this);
- m_toolwidget->setGeometry(0,0,160,720);
- m_avinWidget = new avinWidget(this);
- m_avinWidget->setGeometry(0, 0, 1920 , 720);
- m_avinWidget->setVisible(false);
- m_Timer = new QTimer(this);
- m_Timer->setInterval(2000);
- m_Timer->setSingleShot(true);
- QObject::connect(m_Timer,SIGNAL(timeout()),this,SLOT(onTimeout()));
- QObject::connect(m_toolwidget,SIGNAL(showMultiMusicWidget()),this,SLOT(onShowMultiMusicWidget()));
- QObject::connect(m_toolwidget,SIGNAL(closeMultiMusicWidget()),this,SLOT(onCloseMultiMusicWidget()));
- QObject::connect(m_toolwidget,SIGNAL(showVideoPicWidget()),this,SLOT(onShowVideoPicWidget()));
- QObject::connect(m_toolwidget,SIGNAL(closeVideoPicWidget()),this,SLOT(onCloseVideoPicWidget()));
- QObject::connect(m_toolwidget,SIGNAL(showSettingWidget()),this,SLOT(onShowSettingWidget()));
- QObject::connect(m_toolwidget,SIGNAL(closeSettingWidget()),this,SLOT(onCloseSettingWidget()));
- QObject::connect(m_toolwidget,SIGNAL(showBtTelWidget()),this,SLOT(onShowBtTelWidget()));
- QObject::connect(m_toolwidget,SIGNAL(closeBtTelWidget()),this,SLOT(onCloseBtTelWidget()));
- QObject::connect(m_toolwidget,SIGNAL(showPhoneWidget()),this,SLOT(onShowPhoneWidget()));
- QObject::connect(m_toolwidget,SIGNAL(closePhoneWidget()),this,SLOT(onClosePhoneWidget()));
- connectSignalAndSlotByNamesake(g_Multimedia, this, ARKRECEIVER(onDeviceWatcherStatus(const int, const int)));
- connectSignalAndSlotByNamesake(g_Carback, this, ARKRECEIVER(onCarbackStatusChange(int)));
- m_Timer->start();
- printf("*************Launcher start complete\n");
- }
- MainWindow::~MainWindow()
- {
- }
- void MainWindow::paintEvent(QPaintEvent *event)
- {
- UNUSED(event);
- QPainter painter(this);
- // 先重置整个区域为完全透明
- painter.setCompositionMode(QPainter::CompositionMode_Source);
- painter.fillRect(rect(), Qt::transparent);
- // 恢复默认混合模式
- painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
- return;
- }
- void MainWindow::onDeviceWatcherStatus(const int type, const int status) {
- if (DWT_USBDisk == type) {
- switch (status) {
- case DWS_Empty: {
- break;
- }
- case DWS_Unsupport: {
- break;
- }
- case DWS_Busy: {
- g_Setting->setWidgetType(Setting::WIDGET_MULTIMUSIC);
- m_toolwidget->setMusicBtnSelectStatus();
- break;
- }
- case DWS_Ready: {
- break;
- }
- case DWS_Remove: {
- if(g_Setting->getWidgetType() == Setting::WIDGET_MULTIMUSIC ||
- g_Setting->getWidgetType() == Setting::WIDGET_VIDEOPICTURE)
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- m_toolwidget->setHomeWidgetBtnSelectStatus();
- if(!m_toolwidget->isVisible()) {
- m_toolwidget->setVisible(true);
- }
- }
- break;
- }
- default: {
- break;
- }
- }
- }
- return;
- }
- void MainWindow::onShowMultiMusicWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_MULTIMUSIC);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onCloseMultiMusicWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onShowVideoPicWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_VIDEOPICTURE);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onCloseVideoPicWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onShowSettingWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_SETTING);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onCloseSettingWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onShowBtTelWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_BTTELEPHONE);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onCloseBtTelWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onShowPhoneWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_PHONELINK);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onClosePhoneWidget()
- {
- g_Setting->setWidgetType(Setting::WIDGET_HOME);
- setWidgetTypeVisible();
- return;
- }
- void MainWindow::onActivated()
- {
- QSocketNotifier* socket = static_cast<QSocketNotifier*>(sender());
- if (socket == m_SocketNotifier) {
- QByteArray data;
- data.resize(1024);
- size_t len = ::read(m_SocketNotifier->socket(), data.data(), 1024);
- data.resize(len);
- data = data.replace(0, '\n').trimmed();
- QString filter(data);
- //qDebug()<<"++++filter++++++"<<filter;
- if (filter.contains(QString("SUBSYSTEM=module"))
- || filter.contains(QString("SUBSYSTEM=mmc_host"))
- || filter.contains(QString("SUBSYSTEM=drivers"))
- || filter.contains(QString("SUBSYSTEM=platform"))
- || filter.contains(QString("SUBSYSTEM=sound"))
- || filter.contains(QString("SUBSYSTEM=udc"))
- || filter.contains(QString("SUBSYSTEM=net"))
- || filter.contains(QString("SUBSYSTEM=usb"))
- || filter.contains(QString("SUBSYSTEM=usb_device"))
- || filter.contains(QString("SUBSYSTEM=misc"))
- || filter.contains(QString("SUBSYSTEM=queues"))
- || filter.contains(QString("SUBSYSTEM=video4linux"))) {
- if (!filter.contains(QString("PRODUCT=5ac/"))) {
- return;
- }
- }
- if (filter.contains(QString("DEVNAME=sd"))
- || filter.contains(QString("DEVNAME=mmcblk1"))) {
- g_Multimedia->startMultimedia();
- m_SocketNotifier->setEnabled(false);
- ::close(m_SocketNotifier->socket());
- }
- }
- return;
- }
- void MainWindow::onCarbackStatusChange(int status){
- qDebug()<<"===[MainWidget::onCarbackStatusChange:status]==="<<status;
- switch (status) {
- case Carback::CBS_On:
- arkapi_display_hide_layer(g_Setting->getUIDispLayer());
- break;
- case Carback::CBS_Off:
- arkapi_display_show_layer(g_Setting->getUIDispLayer());
- break;
- default:
- break;
- }
- return;
- }
- void MainWindow::onTimeout()
- {
- qDebug()<< "************onTimeout";
- // system("insmod /lib/modules/6.12.16/kernel/drivers/usb/dwc2/dwc2.ko");
- // system("carlink &");
- CHECK_SYSTEM("echo host > /sys/devices/platform/soc/40000000.usb/usb_role/40000000.usb-role-switch/role");
- CHECK_SYSTEM("echo host > /sys/devices/platform/soc/40c00000.usb/usb_role/40c00000.usb-role-switch/role");
- initializeNetlink();
- g_Carback->initialize();
- checkDirExist();
- g_Audio->requestAudioSource(AS_Idle);
- return;
- }
- multiMusicWidget *MainWindow::getMultiMusicWidgetObjdect()
- {
- if (m_multiMusicWidget != NULL) {
- return m_multiMusicWidget;
- }
- return NULL;
- }
- videoPicWidget *MainWindow::getVideoPicWidgetObject()
- {
- if (m_videoPicWidget != NULL) {
- return m_videoPicWidget;
- }
- return NULL;
- }
- settingWidget *MainWindow::getSettingWidgetObject()
- {
- if (m_settingWidget != NULL) {
- return m_settingWidget;
- }
- return NULL;
- }
- btTelePhoneWidget *MainWindow::getBtTelePhoneWidgetObject()
- {
- if (m_btTelePhoneWidget != NULL) {
- return m_btTelePhoneWidget;
- }
- return NULL;
- }
- phoneWidget *MainWindow::getPhoneWidgetObject()
- {
- if (m_phoneWidget != NULL) {
- return m_phoneWidget;
- }
- return NULL;
- }
- toolWidget *MainWindow::getToolWidgetObject()
- {
- if ( m_toolwidget != NULL ) {
- return m_toolwidget;
- }
- return NULL;
- }
- avinWidget *MainWindow::getAvinWidgetObject()
- {
- if ( m_avinWidget != NULL ) {
- return m_avinWidget;
- }
- return NULL;
- }
- homeViewPaperWidget *MainWindow::getHomeViewPaperWidgetObject()
- {
- if ( m_homeViewPaperWidget != NULL ) {
- return m_homeViewPaperWidget;
- }
- return NULL;
- }
- QLabel *MainWindow::getbgLabelObject()
- {
- if ( m_bgLabel != NULL ) {
- return m_bgLabel;
- }
- return NULL;
- }
- void MainWindow::setWidgetTypeVisible()
- {
- int type = static_cast<int>(g_Setting->getWidgetType());
- switch (type) {
- case Setting::WIDGET_HOME:
- setWidgetVisible(true, false, false, false, false, false);
- break;
- case Setting::WIDGET_MULTIMUSIC:
- setWidgetVisible(false, true, false, false, false, false);
- break;
- case Setting::WIDGET_PHONELINK:
- setWidgetVisible(false, false, true, false, false, false);
- break;
- case Setting::WIDGET_BTTELEPHONE:
- setWidgetVisible(false, false, false, true, false, false);
- break;
- case Setting::WIDGET_VIDEOPICTURE:
- setWidgetVisible(false, false, false, false, true, false);
- break;
- case Setting::WIDGET_SETTING:
- setWidgetVisible(false, false, false, false, false, true);
- break;
- default:
- break;
- }
- return;
- }
- void MainWindow::setWidgetVisible(bool homeWidgetVisible, bool musicWidgetVisible, bool phoneWidgetVisible,
- bool btTelWidgetVisible, bool videoPicWidgetVisible, bool settingWidgetVisible)
- {
- if (m_bgLabel->isVisible() != homeWidgetVisible) {
- m_bgLabel->setVisible(homeWidgetVisible);
- m_homeViewPaperWidget->setVisible(homeWidgetVisible);
- }
- if (m_multiMusicWidget ->isVisible() != musicWidgetVisible) {
- m_multiMusicWidget->setVisible(musicWidgetVisible);
- }
- if (m_phoneWidget->isVisible() != phoneWidgetVisible) {
- m_phoneWidget->setVisible(phoneWidgetVisible);
- m_phoneWidget->setPhoneWidgetVisible(phoneWidgetVisible);
- }
- if (m_btTelePhoneWidget->isVisible() != btTelWidgetVisible) {
- m_btTelePhoneWidget->setVisible(btTelWidgetVisible);
- }
- if (m_videoPicWidget->isVisible() != videoPicWidgetVisible) {
- m_videoPicWidget->setVideoPlayStatus();
- m_videoPicWidget->setVisible(videoPicWidgetVisible);
- }
- if (m_settingWidget->isVisible() != settingWidgetVisible) {
- m_settingWidget->setVisible(settingWidgetVisible);
- }
- return;
- }
- void MainWindow::checkDirExist()
- {
- QString path = QString("/data/MultiMediaFile");
- QDir dir(path);
- if(!dir.exists()){
- mkdir("/data/MultiMediaFile",0777);
- }
- return;
- }
- void MainWindow::initializeNetlink()
- {
- if (NULL == m_SocketNotifier) {
- int socket = ::socket(PF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);
- if (-1 == socket) {
- perror("socket");
- qDebug() << "create netlink socket fail!";
- return;
- }
- struct sockaddr_nl sock_nl;
- memset(&sock_nl, 0, sizeof(struct sockaddr_nl));
- sock_nl.nl_family = AF_NETLINK;
- sock_nl.nl_groups = 1;
- int bind = ::bind(socket, (struct sockaddr*)&sock_nl, sizeof(struct sockaddr_nl));
- if (-1 == bind) {
- perror("bind");
- qDebug() << "bind netlink socket fail!";
- return;
- }
- m_SocketNotifier = new QSocketNotifier(socket, QSocketNotifier::Read, this);
- QObject::connect(m_SocketNotifier, SIGNAL(activated(int)),
- this, SLOT(onActivated()));
- }
- return;
- }
|