tools/qtestlib/wince/cetest/activesyncconnection.cpp
changeset 18 2f34d5167611
parent 0 1918ee327afb
equal deleted inserted replaced
3:41300fa6a67c 18:2f34d5167611
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the tools applications of the Qt Toolkit.
     7 ** This file is part of the tools applications of the Qt Toolkit.
     8 **
     8 **
   441         result = CeCreateProcess(program.utf16(), arguments.utf16(), 0, 0, false, 0, 0, 0, 0, pid);
   441         result = CeCreateProcess(program.utf16(), arguments.utf16(), 0, 0, false, 0, 0, 0, 0, pid);
   442     }
   442     }
   443     return result;
   443     return result;
   444 }
   444 }
   445 
   445 
       
   446 bool ActiveSyncConnection::setDeviceAwake(bool activate, int *returnValue)
       
   447 {
       
   448     if (!isConnected()) {
       
   449         qWarning("Cannot execute, connect to device first!");
       
   450         return false;
       
   451     }
       
   452     bool result = false;
       
   453 
       
   454     // If we want to wait, we have to use CeRapiInvoke, as CeCreateProcess has no way to wait
       
   455     // until the process ends. The lib must have been build and also deployed already.
       
   456     if (!isConnected() && !connect())
       
   457         return false;
       
   458 
       
   459     HRESULT res = S_OK;
       
   460 
       
   461     //SYSTEM_POWER_STATUS_EX systemPowerState;
       
   462 
       
   463     //res = CeGetSystemPowerStatusEx(&systemPowerState, true);
       
   464 
       
   465     QString dllLocation = "\\Windows\\QtRemote.dll";
       
   466     QString functionName = "qRemoteToggleUnattendedPowerMode";
       
   467 
       
   468     DWORD outputSize;
       
   469     BYTE* output;
       
   470     IRAPIStream *stream;
       
   471     int returned = 0;
       
   472     int toggle = int(activate);
       
   473 
       
   474     res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
       
   475     if (S_OK != res) {
       
   476         DWORD ce_error = CeGetLastError();
       
   477         if (S_OK != ce_error) {
       
   478             qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
       
   479                 qPrintable(dllLocation), strwinerror(ce_error).constData());
       
   480         } else {
       
   481             qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
       
   482                 qPrintable(dllLocation), res);
       
   483         }
       
   484     } else {
       
   485         DWORD written;
       
   486 
       
   487         if (S_OK != stream->Write(&toggle, sizeof(toggle), &written)) {
       
   488             qWarning("   Could not write toggle option to process");
       
   489             return false;
       
   490         }
       
   491 
       
   492         if (S_OK != stream->Read(&returned, sizeof(returned), &written)) {
       
   493             qWarning("   Could not access return value of process");
       
   494         }
       
   495         else
       
   496             result = true;
       
   497     }
       
   498 
       
   499     if (returnValue)
       
   500         *returnValue = returned;
       
   501 
       
   502     return result;
       
   503 }
       
   504 
       
   505 bool ActiveSyncConnection::resetDevice()
       
   506 {
       
   507     if (!isConnected()) {
       
   508         qWarning("Cannot execute, connect to device first!");
       
   509         return false;
       
   510     }
       
   511 
       
   512     bool result = false;
       
   513     if (!isConnected() && !connect())
       
   514         return false;
       
   515 
       
   516     QString dllLocation = "\\Windows\\QtRemote.dll";
       
   517     QString functionName = "qRemoteSoftReset";
       
   518 
       
   519     DWORD outputSize;
       
   520     BYTE* output;
       
   521     IRAPIStream *stream;
       
   522 
       
   523     int returned = 0;
       
   524 
       
   525     HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
       
   526     if (S_OK != res) {
       
   527         DWORD ce_error = CeGetLastError();
       
   528         if (S_OK != ce_error) {
       
   529             qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
       
   530                 qPrintable(dllLocation), strwinerror(ce_error).constData());
       
   531         } else {
       
   532             qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
       
   533                 qPrintable(dllLocation), res);
       
   534         }
       
   535     } else {
       
   536         result = true;
       
   537     }
       
   538     return result;
       
   539 }
       
   540 
       
   541 bool ActiveSyncConnection::toggleDevicePower(int *returnValue)
       
   542 {
       
   543     if (!isConnected()) {
       
   544         qWarning("Cannot execute, connect to device first!");
       
   545         return false;
       
   546     }
       
   547 
       
   548     bool result = false;
       
   549     if (!isConnected() && !connect())
       
   550         return false;
       
   551 
       
   552     QString dllLocation = "\\Windows\\QtRemote.dll";
       
   553     QString functionName = "qRemotePowerButton";
       
   554 
       
   555     DWORD outputSize;
       
   556     BYTE* output;
       
   557     IRAPIStream *stream;
       
   558     int returned = 0;
       
   559 
       
   560     HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
       
   561     if (S_OK != res) {
       
   562         DWORD ce_error = CeGetLastError();
       
   563         if (S_OK != ce_error) {
       
   564             qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
       
   565                 qPrintable(dllLocation), strwinerror(ce_error).constData());
       
   566         } else {
       
   567             qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
       
   568                 qPrintable(dllLocation), res);
       
   569         }
       
   570     } else {
       
   571         DWORD written;
       
   572         if (S_OK != stream->Read(&returned, sizeof(returned), &written)) {
       
   573             qWarning("   Could not access return value of process");
       
   574         }
       
   575         else {
       
   576             result = true;
       
   577         }
       
   578     }
       
   579 
       
   580     if (returnValue)
       
   581         *returnValue = returned;
       
   582     return result;
       
   583 }
       
   584 
   446 bool ActiveSyncConnection::createDirectory(const QString &path, bool deleteBefore)
   585 bool ActiveSyncConnection::createDirectory(const QString &path, bool deleteBefore)
   447 {
   586 {
   448     if (deleteBefore)
   587     if (deleteBefore)
   449         deleteDirectory(path);
   588         deleteDirectory(path);
   450     QStringList separated = path.split(QLatin1Char('\\'));
   589     QStringList separated = path.split(QLatin1Char('\\'));