123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "IUserLinkPlayer.h"
- #include <QMouseEvent>
- #include <linux/fb.h>
- #include <sys/ioctl.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include "UsbHostService.h"
- #include <QPushButton>
- #include <QLabel>
- //#include <QWSServer>
- #define FBPATH "/dev/fb0"
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow),mChangeMode(false),mPlayer(nullptr),mIsRunningBackGround(false),mConnectStatus(CONNECT_STATUS_DISCONNECTED)
- {
- ui->setupUi(this);
- system("ifconfig lo up");
- setWindowFlags(Qt::FramelessWindowHint);
- setAttribute(Qt::WA_TranslucentBackground);
- int screen_width = 1920;
- int screen_height = 720;
- setGeometry(0, 0, screen_width, screen_height);
- m_CarplayLink = new QPushButton(QString("Carplay"), this);
- m_CarplayLink->setGeometry(width() / 5 * 0, 0, width() / 5, height());
- QObject::connect(m_CarplayLink, SIGNAL(clicked()),
- this, SLOT(onClicked()));
- m_AutoLink = new QPushButton(QString("Auto"), this);
- m_AutoLink->setGeometry(width() / 5 * 1, 0, width() / 5, height());
- QObject::connect(m_AutoLink, SIGNAL(clicked()),
- this, SLOT(onClicked()));
- m_CarlifeLink = new QPushButton(QString("Carlife"), this);
- m_CarlifeLink->setGeometry(width() / 5 * 2, 0, width() / 5, height());
- QObject::connect(m_CarlifeLink, SIGNAL(clicked()),
- this, SLOT(onClicked()));
- m_MirrorLink = new QPushButton(QString("Mirror"), this);
- m_MirrorLink->setGeometry(width() / 5 * 3, 0, width() / 5, height());
- QObject::connect(m_MirrorLink, SIGNAL(clicked()),
- this, SLOT(onClicked()));
- m_EasyConnectLink = new QPushButton(QString("Easy Connect"), this);
- m_EasyConnectLink->setGeometry(width() / 5 * 4, 0, width() / 5, height());
- QObject::connect(m_EasyConnectLink, SIGNAL(clicked()),
- this, SLOT(onClicked()));
- QObject::connect(this, SIGNAL(Change(bool)), this, SLOT(onUIChanged(bool)));
- mQRCodeWindow = new QRCodeWindow(this);
- mQRCodeWindow->hide();
- QObject::connect(this, SIGNAL(ChangeQRCode(bool)), this, SLOT(onChangeQRCode(bool)));
- QObject::connect(this, SIGNAL(QrcodeInfo(char*)), mQRCodeWindow, SLOT(onQrcodeInfo(char*)));
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mpLinkAssist = new LinkAssist();
- mpLinkAssist->RegisterUsbCallback(std::bind(&MainWindow::usb_state,this, std::placeholders::_1,std::placeholders::_2));
- // Start(Mirror);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- delete mpLinkAssist;
- }
- void MainWindow::mousePressEvent(QMouseEvent *event)
- {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- printf("x:%d,y:%d\r\n",event->pos().x(),event->pos().y());
- if(mPlayer){
- mPlayer->SendTouch(event->pos().x(),event->pos().y(), Touch_Press);
- mPlayer->RequestStatus(QUERYTIME);
- string a = "test";
- mPlayer->RequestStatus(QUERYINPUT, (void*)a.c_str());
- }
- }
- void MainWindow::mouseReleaseEvent(QMouseEvent *event)
- {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- printf("x:%d,y:%d\r\n",event->pos().x(),event->pos().y());
- if(mPlayer)
- mPlayer->SendTouch(event->pos().x(),event->pos().y(), Touch_Up);
- }
- void MainWindow::mouseMoveEvent(QMouseEvent *event)
- {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- printf("x:%d,y:%d\r\n",event->pos().x(),event->pos().y());
- if(mPlayer)
- mPlayer->SendTouch(event->pos().x(),event->pos().y(), Touch_Move);
- }
- void MainWindow::onClicked()
- {
- const QPushButton* const ptr = static_cast<const QPushButton* const >(sender());
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- if(mConnectStatus == CONNECT_STATUS_DEVICE_ATTACHED)
- {
- if (ptr == m_AutoLink) {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- Start(Android_Auto, Wired);
- } else if (ptr == m_CarplayLink) {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- Start(Carplay, Wired);
- } else if (ptr == m_CarlifeLink) {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- Start(Carlife, Wired);
- } else if(ptr == m_MirrorLink){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- Start(Mirror,Wired);
- } else if(ptr == m_EasyConnectLink){
- Start(ECLink, Wired);
- }
- }
- else if(mConnectStatus == CONNECT_STATUS_CONNECT_SUCCEED){
- if(mIsRunningBackGround){
- mPlayer->SetForeground();
- emit Change(false);
- }
- }
- else if(mConnectStatus == CONNECT_STATUS_DISCONNECTED
- || mConnectStatus == CONNECT_STATUS_DEVICE_DEATTACHED
- || mConnectStatus == CONNECT_STATUS_APP_EXIT
- || mConnectStatus == CONNECT_STATUS_CONNECT_FAILED
- || mConnectStatus == CONNECT_STATUS_INTERRUPTED_BY_APP)
- {
- if(ptr == m_EasyConnectLink){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mQRCodeWindow->show();
- Start(ECLink, Wireless);
- }
- else if(ptr == m_CarplayLink){
- Start(Carplay, Wireless);
- }
- }
- }
- void MainWindow::app_status(AppStatusMessage appStatusMessage, void *reserved)
- {
- if(appStatusMessage == APP_FOREGROUND){
- mIsRunningBackGround = false;
- }
- else if(appStatusMessage == APP_BACKGROUND){
- mIsRunningBackGround = true;
- emit Change(true);
- }
- else if(appStatusMessage == APP_RESERVED){
- long long time = (long long )reserved;
- //char *ctime(long *clock);
- struct tm *tdate;
- time_t t = time;
- tdate=localtime(&t);
- char *ptime = ctime(&t);
- printf("app_reserved long time = %lld, string time =%s\r\n", time, ptime);
- }
- else if(appStatusMessage == APP_QRCODE){
- char* rqcode = (char* )reserved;
- emit QrcodeInfo(rqcode);
- printf("rqcode = %s\r\n", rqcode);
- }
- else if(appStatusMessage == APP_LICENSE){
- License *pLicense = (License*)reserved;
- printf("activate = %d, msg = %s\r\n", pLicense->activate, pLicense->msg.c_str());
- }
- else if(appStatusMessage == APP_INPUTINFO){
- ECInputInfo *pInputInfo = (ECInputInfo*)reserved;
- printf("inputType = %d\r\n", pInputInfo->inputType);
- }
- else if(appStatusMessage == APP_VRTEXT){
- ECVRTextInfo *pVRTextInfo = (ECVRTextInfo*)reserved;
- printf("vr type = %d\r\n", pVRTextInfo->type);
- }
- else if(appStatusMessage == APP_VOICE_CMD){
- int cmd = (int )reserved;
- printf("cmd = %d\r\n", cmd);
- }
- }
- void MainWindow::onUIChanged(bool visible)
- {
- m_CarplayLink->setVisible(visible);
- m_CarlifeLink->setVisible(visible);
- m_AutoLink->setVisible(visible);
- m_MirrorLink->setVisible(visible);
- m_EasyConnectLink->setVisible(visible);
- }
- void MainWindow::onChangeQRCode(bool visible)
- {
- if(visible){
- mQRCodeWindow->show();
- }
- else
- mQRCodeWindow->hide();
- }
- void MainWindow::carlink_connect_state(ConnectedStatus status, PhoneType type)
- {
- switch (status)
- {
- case CONNECT_STATUS_CONNECTING:
- {
- // todo 正在连接
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mChangeMode = true;
- break;
- }
- case CONNECT_STATUS_CONNECT_SUCCEED:
- {
- // todo 连接成功
- mChangeMode = false;
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- emit Change(false);
- emit ChangeQRCode(false);
- mPlayer->RequestStatus(QUERYTIME);
- printf("connect succeed\r\n");
- break;
- }
- case CONNECT_STATUS_CONNECT_FAILED:
- case CONNECT_STATUS_DISCONNECTED:
- case CONNECT_STATUS_APP_EXIT:
- case CONNECT_STATUS_INTERRUPTED_BY_APP:
- {
- // todo 连接断开
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- printf("connect disconnected :%d\r\n",status);
- Stop();
- emit Change(true);
- mChangeMode = false;
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- break;
- }
- default:
- break;
- }
- mConnectStatus = status;
- mPhonetype = type;
- }
- void MainWindow::usb_state(ConnectedStatus status, PhoneType type)
- {
- std::lock_guard<std::mutex> lock(mMutex);
- mConnectStatus = status;
- mPhonetype = type;
- if(status == CONNECT_STATUS_DEVICE_ATTACHED){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- if(!mChangeMode){
- //Start(Mirror);
- }
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- }
- else if(status == CONNECT_STATUS_DEVICE_DEATTACHED){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- }
- }
- void MainWindow::Start(LinkType linkType, LinkMode linkMode)
- {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mPlayer = mpLinkAssist->Initialize(linkType);
- mPlayer->GetIniConfig(mpLinkAssist);
- mPlayer->RegisterConnectCallback(std::bind(&MainWindow::carlink_connect_state,this, std::placeholders::_1,std::placeholders::_2));
- if(linkMode == Wireless)
- {
- //printf("str bt address %s\r\n", mstrBtAddress.c_str());
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- if(!mstrBtAddress.empty()){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mPlayer->SendPhoneBluetooth(mstrBtAddress);
- }
- if(!(mWifiInfo.ssid.empty()| mWifiInfo.passphrase.empty() | mWifiInfo.channel_id.empty())){
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mPlayer->SendCarWifi(mWifiInfo);
- }
- }
- if(linkType == ECLink){
- mPlayer->SendCarBluetooth("car","12:34:56:78:90", "0000");
- mPlayer->SendLisenceCode("TEST036514313165461313");
- }
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- mPlayer->RegisterAppStatusCallback(std::bind(&MainWindow::app_status,this, std::placeholders::_1,std::placeholders::_2));
- mPlayer->Initialize(linkMode, mPhonetype);
- mPlayer->Start();
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- }
- void MainWindow::Stop()
- {
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- if(mpLinkAssist)
- mpLinkAssist->Release();
- printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
- }
|