bool QSerialPortPrivate::open(QIODevice::OpenMode mode) { Q_Q(QSerialPort); // FIXME: Maybe need added check an ReadWrite open mode? Q_UNUSED(mode) if (!loadDevices()) { q->setError(QSerialPort::UnknownError); return false; } RCommServ server; errnum = server.Connect(); if (errnum != KErrNone) { q->setError(decodeSystemError()); return false; } if (systemLocation.contains("BTCOMM")) errnum = server.LoadCommModule(KBluetoothModuleName); else if (systemLocation.contains("IRCOMM")) errnum = server.LoadCommModule(KInfraRedModuleName); else if (systemLocation.contains("ACM")) errnum = server.LoadCommModule(KACMModuleName); else errnum = server.LoadCommModule(KRS232ModuleName); if (errnum != KErrNone) { q->setError(decodeSystemError()); return false; } // In Symbian OS port opening only in R/W mode? TPtrC portName(static_cast<const TUint16*>(systemLocation.utf16()), systemLocation.length()); errnum = descriptor.Open(server, portName, ECommExclusive); if (errnum != KErrNone) { q->setError(decodeSystemError()); return false; } // Save current port settings. errnum = descriptor.Config(restoredSettings); if (errnum != KErrNone) { q->setError(decodeSystemError()); return false; } detectDefaultSettings(); return true; }
/** See BT_ROMCONFIG_RCOMMSERV_001.script */ TVerdict CTestStepBtRomConfigRCommServ001::doTestStepL() { INFO_PRINTF1(\ _L(">>CTestStepBtRomConfigRCommServ001::doTestStepL()")); const TInt expectedError = ( iBtExcluded ? KErrNotFound : KErrNone ); // this is only used for logging readability purposes const TDesC* expectedErrorDesPtr = ( iBtExcluded ? &KErrNotFoundLit : &KErrNoneLit ); RCommServ commServ; commServ.Connect(); TInt err = commServ.LoadCommModule( KBtComm ); if ( err!=expectedError ) { INFO_PRINTF4(\ _L("Failed: Expected %S(%d) and got %d when calling LoadCommModule(\"BTCOMM\")"),\ expectedErrorDesPtr, expectedError, err); SetTestStepResult(EFail); } commServ.Close(); INFO_PRINTF1(\ _L("<<CTestStepBtRomConfigRCommServ001::doTestStepL()")); CheckAndSetTestResult(); return TestStepResult(); }
LOCAL_C TInt NTRasThreadFunction(TAny* /*aThreadData*/) { _LIT(KCsyName,"LOOPBACK.CSY"); _LIT(KPortName,"LOOPBACK::1"); _LIT8(KServerText,"SERVER"); CTrapCleanup* cleanup; if ((cleanup=CTrapCleanup::New())==NULL) return KErrGeneral; RCommServ commServ; TInt r=commServ.Connect(); r=commServ.LoadCommModule(KCsyName); RComm comm; r=comm.Open(commServ,KPortName,ECommShared); TBuf8<6> readBuf; TRequestStatus stat0; comm.Read(stat0,readBuf); User::WaitForRequest(stat0) ; comm.Write(stat0,KServerText); User::WaitForRequest(stat0) ; delete cleanup; ASSERT(RThread().RequestCount()==0); return r; }
/* virtual */ TVerdict CTestStepInjectMemLeakC32::doTestStepL() { // inject memory leak to test memory leak detection mechanism working: _LIT(KCsyName,"LOOPBACK.CSY"); _LIT(KPortName0,"LOOPBACK::0"); _LIT8(KMemLeakToken, "--MemoryLeakToken--"); RCommServ commServ; TInt ret=commServ.Connect(); TESTCHECKL(ret,KErrNone); ret=commServ.LoadCommModule(KCsyName); TESTCHECKL(ret,KErrNone); ret=iSerialPortList[1].Open(commServ,KPortName0,ECommShared); TESTCHECKL(ret,KErrNone); TRequestStatus stat0; TBuf8<20> writeBuf; writeBuf.Append(KMemLeakToken); iSerialPortList[1].Write(stat0,writeBuf); User::WaitForRequest(stat0); TESTCHECKL(stat0.Int(), KErrNone); iSerialPortList[1].Close(); commServ.Close(); return TestStepResult(); }
static void InitCommsL() { TInt err=0; err = User::LoadPhysicalDevice (PDD_NAME); if ( err != KErrAlreadyExists && err) User::Leave(err); err = User::LoadLogicalDevice (LDD_NAME); if ( err != KErrAlreadyExists && err) User::Leave(err); StartC32(); RCommServ ComSer; ComSer.Connect(); err=ComSer.LoadCommModule(_L("ECUART")); if ( err != KErrAlreadyExists && err) User::Leave(err); }
QList<SerialPortInfo> SerialPortInfo::availablePorts() { QList<SerialPortInfo> ports; if (!loadDevices()) return ports; RCommServ server; TInt r = server.Connect(); if (r != KErrNone) return ports; //User::LeaveIfError(r); TSerialInfo nativeInfo; // Native Symbian OS port info class. QString s("%1::%2"); // FIXME: Get info about RS232 ports. r = server.LoadCommModule(KRS232ModuleName); //User::LeaveIfError(r); if (r == KErrNone) { r = server.GetPortInfo(KRS232ModuleName, nativeInfo); if (r == KErrNone) { // for (quint32 i = nativeInfo.iLowUnit; i < nativeInfo.iHighUnit + 1; ++i) { SerialPortInfo info; // My (desired) info class. info.d_ptr->device = s .arg(QString::fromUtf16(nativeInfo.iName.Ptr(), nativeInfo.iName.Length())) .arg(i); info.d_ptr->portName = info.d_ptr->device; info.d_ptr->description = QString::fromUtf16(nativeInfo.iDescription.Ptr(), nativeInfo.iDescription.Length()); info.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); ports.append(info); } } } // FIXME: Get info about Bluetooth ports. r = server.LoadCommModule(KBluetoothModuleName); //User::LeaveIfError(r); if (r == KErrNone) { r = server.GetPortInfo(KBluetoothModuleName, nativeInfo); if (r == KErrNone) { // for (quint32 i = nativeInfo.iLowUnit; i < nativeInfo.iHighUnit + 1; ++i) { SerialPortInfo info; // My (desired) info class. info.d_ptr->device = s .arg(QString::fromUtf16(nativeInfo.iName.Ptr(), nativeInfo.iName.Length())) .arg(i); info.d_ptr->portName = info.d_ptr->device; info.d_ptr->description = QString::fromUtf16(nativeInfo.iDescription.Ptr(), nativeInfo.iDescription.Length()); info.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); ports.append(info); } } } // FIXME: Get info about InfraRed ports. r = server.LoadCommModule(KInfraRedModuleName); //User::LeaveIfError(r); if (r == KErrNone) { r = server.GetPortInfo(KInfraRedModuleName, nativeInfo); if (r == KErrNone) { // for (quint32 i = nativeInfo.iLowUnit; i < nativeInfo.iHighUnit + 1; ++i) { SerialPortInfo info; // My (desired) info class. info.d_ptr->device = s .arg(QString::fromUtf16(nativeInfo.iName.Ptr(), nativeInfo.iName.Length())) .arg(i); info.d_ptr->portName = info.d_ptr->device; info.d_ptr->description = QString::fromUtf16(nativeInfo.iDescription.Ptr(), nativeInfo.iDescription.Length()); info.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); ports.append(info); } } } // FIXME: Get info about ACM ports. r = server.LoadCommModule(KACMModuleName); //User::LeaveIfError(r); if (r == KErrNone) { r = server.GetPortInfo(KACMModuleName, nativeInfo); if (r == KErrNone) { // for (quint32 i = nativeInfo.iLowUnit; i < nativeInfo.iHighUnit + 1; ++i) { SerialPortInfo info; // My (desired) info class. info.d_ptr->device = s .arg(QString::fromUtf16(nativeInfo.iName.Ptr(), nativeInfo.iName.Length())) .arg(i); info.d_ptr->portName = SerialPortPrivate::portNameFromSystemLocation(info.d_ptr->device); info.d_ptr->description = QString::fromUtf16(nativeInfo.iDescription.Ptr(), nativeInfo.iDescription.Length()); info.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); ports.append(info); } } } return ports; }
// // Perform the Test // LOCAL_C void PerformTestL() /** * * The PerformTestL method is the main user interface routine for the GSM TSY Regression * Test Harness. It loads the appropriate serial drivers and unloads them at completion. * This method presents the user with the list of tests to run and then * responds to the user's input. If the user does not select any specific test, it runs all * tests as the default. * * @leave This method leaves if it can not connect to the communications server or load * the CSY. Additionally, this method leaves if the test script can not be created. * If the test fails with an error, User::Leave will be invoked. */ { RCommServ commServer; TESTL(commServer.Connect()==KErrNone); TInt res=commServer.LoadCommModule(_L("ECUART.CSY")); INFO_PRINTF1(TRefByValue<const TDesC>(_L("LoadCommModuleError = %d\n")), res); TESTL(res==KErrNone || res==KErrAlreadyExists); // This block of prints is for all tests to be listed in one column // Note: by displaying menu selectons in a single column, all selections will not be visible INFO_PRINTF1(_L("Which test? Leave to run all tests\n")); INFO_PRINTF1(_L("a) Receive SMS Test\n")); INFO_PRINTF1(_L("b) SMS Notification Test\n")); INFO_PRINTF1(_L("c) SMS PDU Capability Test\n")); INFO_PRINTF1(_L("d) Default SCA Test\n")); INFO_PRINTF1(_L("e) SMS Transmission Test\n")); INFO_PRINTF1(_L("f) Data Call Test\n")); INFO_PRINTF1(_L("g) Errored Data Call Test\n")); INFO_PRINTF1(_L("h) Odd Initialisation Tests\n")); INFO_PRINTF1(_L("i) SMS Storage Tests\n")); INFO_PRINTF1(_L("j) Failure Initialisation Tests\n")); INFO_PRINTF1(_L("k) Incoming Call Tests\n")); INFO_PRINTF1(_L("l) SMS Cancel Scenarios\n")); INFO_PRINTF1(_L("m) Shutdown Scenarios\n")); INFO_PRINTF1(_L("n) SMS Storage Delete Test\n")); INFO_PRINTF1(_L("o) Simultaneous Fax Reception and Signal Strength Retrieval Scenario\n")); INFO_PRINTF1(_L("p) Data Call Cancel Scenarios\n")); INFO_PRINTF1(_L("q) Fax Call Premature Close Scenario\n")); INFO_PRINTF1(_L("r) Two Fax Reception Scenario\n")); INFO_PRINTF1(_L("s) Voice Call Scenarios\n")); INFO_PRINTF1(_L("t) Data Call Set-up, Data Transfer and Remote Termination Test\n")); INFO_PRINTF1(_L("u) Data Call Dial-up Networking Call-back Test\n")); INFO_PRINTF1(_L("v) Data Call Answer and Remote Hang-up Closely Followed by a Dial Test\n")); INFO_PRINTF1(_L("w) Phonebook tests\n")); INFO_PRINTF1(_L("x) Network and Registration tests\n")); INFO_PRINTF1(_L("y) Phone and Line tests\n")); INFO_PRINTF1(_L("z) Voice and Data calls tests\n")); INFO_PRINTF1(_L("1) No CNMI info and Modem Detection tests\n")); INFO_PRINTF1(_L("2) No CMGF info tests\n")); INFO_PRINTF1(_L("3) AT+CBST tests\n")); INFO_PRINTF1(_L("4) CBST & CNMI string parsing test\n")) ; INFO_PRINTF1(_L("5) CGQREQ responses during initialise\n")); INFO_PRINTF1(_L("6) Unsolicited messages injected during initialisation\n")); INFO_PRINTF1(_L("9) Voice Call OOM tests (NOT RUN AS PART OF 'ALL TESTS')\n")); TBool keyPressed=ETrue; TKeyCode key=ShortWaitForKey(10, keyPressed); TBool allTests=!keyPressed; if(keyPressed) { if((key>='A')&&(key<='Z')) // A simple fold key=(TKeyCode)(key-'A'+'a'); } // // Run the tests... // // Test Rx SMS messages if((key=='a')||(allTests)) { SIMPLETESTMACRO("Simple SMS Receive",CTestDriveRxMess,ERxMessScript); SIMPLETESTMACRO("CMT SMS Receive",CTestDriveRxMessCmt,ERxMessCmtAndCmtiScript); SIMPLETESTMACRO("CMTI SMS Receive emulating an Ericsson T28",CTestDriveRxMess,ERxMessEricssonT28Script); } // Test Notification of SMS messages if((key=='b')||(allTests)) { SIMPLETESTMACRO("SMS CMTI Notification and Receive",CTestDriveNotMess,ERxMessScript); SIMPLETESTMACRO("SMS CMT Notification and Receive",CTestDriveNotMessCmt,ERxMessCmtScript); } // Test behaviour when a modem claims not to support SMS PDU mode if((key=='c')||(allTests)) { SIMPLETESTMACRO("No SMS PDU capability",CTestDriveNoPduRxMess,ENoPduRxMessScript); } // Test retrieval and setting of default service centre if ((key=='d')||(allTests)) { SIMPLETESTMACRO("Simple SCA retrieval & setting",CTestDriveSca,EScaSimpleScript); SIMPLETESTMACRO("8210-style SCA retrieval & setting",CTestDriveSca,ESca8210StyleScript); } // Test a simple SMS Tx if((key=='e')||(allTests)) { SIMPLETESTMACRO("A simple SMS Tx",CTestDriveTxMess,ETxMessScript); SIMPLETESTMACRO("New Standard SMS Tx",CTestDriveTxNewStdMess,ETxMessNewStdScript); SIMPLETESTMACRO("New Standard SMS Tx Test emulating an Ericsson T28",CTestDriveTxNewStdMess,ETxMessT28NewStdScript); // Test no prefix on pdu, don't set default sca, new ETSI format _LIT8(KTxA,"Tx: no PDU prefix, no default SCA set, new standard"); StartTest(KTxA); CTestDriveTxWithScaCombo* test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptNoprefixNodefscaNew,EFalse,EFalse,ETrue); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxA); User::After(1000000L); // Test prefix on pdu, don't set default sca, new ETSI format _LIT8(KTxB,"Tx: PDU prefix, no default SCA set, new standard"); StartTest(KTxB); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptPrefixNodefscaNew,ETrue,EFalse,ETrue); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxB); User::After(1000000L); // Test no prefix on pdu, set default sca, new ETSI format _LIT8(KTxC,"Tx: no PDU prefix, default SCA set, new standard"); StartTest(KTxC); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptNoprefixDefscaNew,EFalse,ETrue,ETrue); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxC); User::After(1000000L); // Test prefix on pdu, set default sca, new ETSI format _LIT8(KTxD,"Tx: PDU prefix, default SCA set, new standard"); StartTest(KTxD); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptPrefixDefscaNew,ETrue,ETrue,ETrue); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxD); User::After(1000000L); // Test no prefix on pdu, don't set default sca, old ETSI format _LIT8(KTxE,"Tx: No PDU prefix, no default SCA set, old standard"); StartTest(KTxE); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptNoprefixNodefscaOld,EFalse,EFalse,EFalse); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxE); User::After(1000000L); // Test prefix on pdu, don't set default sca, old ETSI format _LIT8(KTxF,"Tx: PDU prefix, no default SCA set, old standard"); StartTest(KTxF); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptPrefixNodefscaOld,ETrue,EFalse,EFalse); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxF); User::After(1000000L); // Test no prefix on pdu, set default sca, old ETSI format _LIT8(KTxG,"Tx: no PDU prefix, default SCA set, old standard"); StartTest(KTxG); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptNoprefixDefscaOld,EFalse,ETrue,EFalse); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxG); User::After(1000000L); // Test prefix on pdu, set default sca, old ETSI format _LIT8(KTxH,"Tx: PDU prefix, default SCA set, old standard"); StartTest(KTxH); test4c=CTestDriveTxWithScaCombo::NewL(ETxMessScriptPrefixDefscaOld,ETrue,ETrue,EFalse); CleanupStack::PushL(test4c); User::LeaveIfError(test4c->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KTxH); User::After(1000000L); // Test a "+CMS ERROR 321" from a Read (observed on an Ericsson 888) SIMPLETESTMACRO("Invalid Read Test",CTestDriveTxRx,ETxMessRxTxScriptA); } // Test Dialing a Data Call if((key=='f')||(allTests)) { SIMPLETESTMACRO("Dialing a simple Data Call",CTestDriveDataCall,EDataCallScript); } // Test an Error Dialing a Data Call if((key=='g')||(allTests)) { SIMPLETESTMACRO("Dialing a simple Data Call, with the modem ERRORing some commands",CTestDriveDataCall,EDataCallErrorAScript); } // Test some odd initialisation sequences if((key=='h')||(allTests)) { SIMPLETESTMACRO("Odd Initialisation Sequence A",CTestDriveOddInit,EOddInitAScript); SIMPLETESTMACRO("Odd Initialisation Sequence B",CTestDriveOddInit,EOddInitBScript); SIMPLETESTMACRO("Odd Initialisation Sequence C",CTestDriveOddInit,EOddInitCScript); SIMPLETESTMACRO("Odd Initialisation Sequence D",CTestDriveOddInit,EOddInitDScript); SIMPLETESTMACRO("Odd Initialisation Sequence E",CTestDriveOddInit,EOddInitEScript); SIMPLETESTMACRO("Odd Initialisation Sequence F",CTestDriveOddInit,EOddInitFScript); SIMPLETESTMACRO("Odd Initialisation Sequence G",CTestDriveOddInit,EOddInitGScript); SIMPLETESTMACRO("Odd Initialisation Sequence H",CTestDriveOddInit,EOddInitHScript); SIMPLETESTMACRO("Odd Initialisation Sequence I",CTestDriveOddInit,EOddInitIScript); } // Test SMS Storage functions if((key=='i')||(allTests)) { SIMPLETESTMACRO("Message Storage Functions with old standard PDUs",CTestDriveMessStor,EMessStorOldSmsStdScript); SIMPLETESTMACRO("Message Storage Functions with new standard PDUs",CTestDriveMessStor,EMessStorNewSmsStdScript); } // Test Initialisation Failure Scenarios if((key=='j')||(allTests)) { SIMPLETESTMACRO("Initialisation Failure Scenarios",CTestDriveFailInit,EFailInitAScript); } // Test Incoming Call Scenarios if((key=='k')||(allTests)) { SIMPLETESTMACRO("Incoming Call Scenarios",CTestDriveInCall,EInCallScriptA); SIMPLETESTMACRO("Incoming Call Scenarios with a Nokia",CTestDriveInCall,EInCallScriptB); } // Test SMS Cancel if((key=='l')||(allTests)) { SIMPLETESTMACRO("SMS Cancel CMT Scenarios",CTestDriveSmsCancel,ESmsCancelScript); SIMPLETESTMACRO("SMS Cancel CMTI Scenarios",CTestDriveSmsCancel,ESmsCancelCmtiScript); } // Test Shutdown Scenarios if((key=='m')||(allTests)) { SIMPLETESTMACRO("Shutdown Scenarios",CTestDriveShutdown,EShutdownScript); SIMPLETESTMACRO("Shutdown Scenarios A",CTestDriveShutdownA,EShutdownScriptA); } // Test SMS Delete if((key=='n')||(allTests)) { SIMPLETESTMACRO("A Simple SMS Storage Delete",CTestDriveSmsDelete,ESmsStorageDeleteScript); } // Test simultaneous Fax Reception and Signal Strength Retrieval if((key=='o')||(allTests)) { SIMPLETESTMACRO("Simultaneous Fax Reception and Signal Strength Retrieval",CTestDriveSsFax,ESsFaxScriptA); SIMPLETESTMACRO("Simultaneous Data Reception and Signal Strength Retrieval",CTestDriveSSData,ESsDataScriptA); } // Test Data Call Cancel Scenarios if((key=='p')||(allTests)) { SIMPLETESTMACRO("Data Call Cancel Scenarios",CTestDriveDataCallCancel,EDataCallCancelScript); } // Fax Call Premature Close Scenarios if((key=='q')||(allTests)) { SIMPLETESTMACRO("Fax Call Premature Close Scenarios",CTestDrivePremClose,EFaxPremCloseScriptA); // SIMPLETESTMACRO("Fax Call Premature Close Scenarios Part B",CTestDrivePremCloseB,EFaxPremCloseScriptB); } // Two Fax Reception Scenarios if((key=='r')||(allTests)) { SIMPLETESTMACRO("Two Fax Reception Scenarios",CTestDriveTwoFaxRx,ETwoFaxRxScriptA); } // Voice Call Scenarios if((key=='s')||(allTests)) { SIMPLETESTMACRO("Voice Call Scenarios",CTestDriveVoiceCall,EVoiceCallScriptA); } // Test Dialing a Set-up, Data Transfer and Remote Termination Data Call if((key=='t')||(allTests)) { SIMPLETESTMACRO("Dialing a Set-up, Data Transfer and Remote Termination Data Call",CTestDriveDataCallRemoteTerm,EDataCallRemoteTermScript); } // Test Dialing a Dial-up Networking Call-back Data Call if((key=='u')||(allTests)) { TInt varDelay; // Variable Delay for EWait script, for scoping purposes varDelay = KCallBackDefVarDelay; if(!allTests) { // This tests is valid for supporting variable delay for an EWait script varDelay = GetNumberEntry( KCallBackMaxDigits, // max numbers of digits KCallBackMinVarDelay, // min value allowed KCallBackMaxVarDelay, // max value allowed KInputWaitOnDelaySecs, // secs to wait for a user key entry KCallBackDefVarDelay, // default value if timed out _L("Enter delay value") ); } _LIT8(KCallbackA,"Dialing a Dial-up Networking Call-back Data Call"); StartTest(KCallbackA); CTestDriveDataCallCallBack* test23=CTestDriveDataCallCallBack::NewL(EDataCallCallBackScript, varDelay); CleanupStack::PushL(test23); User::LeaveIfError(test23->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KCallbackA); User::After(1000000L); } // Test an Answer and Remote Hang-up Closely Followed by a Dial Data Call if((key=='v')||(allTests)) { TInt varDelay; // Variable Delay for EWait script, for scoping purposes varDelay = KHangupDialDefVarDelay; if(!allTests) { // This tests is valid for supporting variable delay for an EWait script varDelay = GetNumberEntry( KHangupDialMaxDigits, // max numbers of digits KHangupDialMinVarDelay, // min value allowed KHangupDialMaxVarDelay, // max value allowed KInputWaitOnDelaySecs, // secs to wait for a user key entry KHangupDialDefVarDelay, // default value if timed out _L("Enter delay value") ); } _LIT8(KCallbackB,"Answer and Remote Hang-up Closely Followed by a Dial Data Call"); StartTest(KCallbackB); CTestDriveRemoteHangupDial* test24=CTestDriveRemoteHangupDial::NewL(EDataCallRemoteHangDialScript, varDelay); CleanupStack::PushL(test24); User::LeaveIfError(test24->RunTestL()); CleanupStack::PopAndDestroy(); EndTest(KCallbackB); User::After(1000000L); } // Phone book tests if((key=='w')||(allTests)) { SIMPLETESTMACRO("Phone book Scenarios",CTestDrivePhoneBook,EPhoneBookScript); } // Network and Registration tests if((key=='x')||(allTests)) { SIMPLETESTMACRO("Testing Network and Registration",CTestDriveNetworkRegistration,ENetworkRegistrationScript); } // Phone and Line tests if((key=='y')||(allTests)) { SIMPLETESTMACRO("Phone and Line Scenarios",CTestDrivePhoneLine,EPhoneLineScript); } // Voice and Data Call tests if((key=='z')||(allTests)) { SIMPLETESTMACRO("Voice and Data Calls",CTestDriveAllCalls,EAllCallsScript); } // No CNMI information and Modem notification tests if((key=='1')||(allTests)) { SIMPLETESTMACRO("No CNMI info and Modem notification request",CTestDriveNoCnmi,ENoCnmiScript); } // No CMGF information tests if((key=='2')||(allTests)) { SIMPLETESTMACRO("No CMGF info request",CTestDriveNoCmgf,ENoCmgfScript); } // AT+CBST information tests if((key=='3')||(allTests)) { SIMPLETESTMACRO("AT+CBST tests",CTestDriveDataCallDiffParam, ECallDiffParamScript); } //CBST string parsing test if((key=='4')||(allTests)) { SIMPLETESTMACRO("CBST & CNMI string parsing test",CTestDriveCbstParse, ECbstParseScript); } // CGQREQ responses during initialise (added to increase conditional code coverage) if((key=='5')||(allTests)) { SIMPLETESTMACRO("CGQREQ responses during initialise",CTestDriveCGQREQResponses,ECGQREQResponsesScript); } // Unsolicited messages injected during initialisation if((key=='6')||(allTests)) { SIMPLETESTMACRO("Unsolicited messages injected during initialisation",CTestDriveUnsolicited,EUnsolicitedScript); } // OOM Voice Call tests, not run as part of 'all tests' if(key=='9') { SIMPLETESTMACRO("OOM Voice Call",CTestDriveOOMVoiceCall,EOOMVoiceCall); } // // Tidy up after the tests // res = commServer.UnloadCommModule(_L("ECUART.CSY")); commServer.Close(); }
QList<QSerialPortInfo> QSerialPortInfo::availablePorts() { QList<QSerialPortInfo> serialPortInfoList; if (!loadDevices()) return serialPortInfoList; RCommServ server; TInt r = server.Connect(); if (r != KErrNone) return serialPortInfoList; TSerialInfo nativeSerialInfo; QString s("%1::%2"); // FIXME: Get info about RS232 ports. r = server.LoadCommModule(KRS232ModuleName); if (r == KErrNone) { r = server.GetPortInfo(KRS232ModuleName, nativeSerialInfo); if (r == KErrNone) { for (quint32 i = nativeSerialInfo.iLowUnit; i < nativeSerialInfo.iHighUnit + 1; ++i) { QSerialPortInfo serialPortInfo; serialPortInfo.d_ptr->device = s .arg(QString::fromUtf16(nativeSerialInfo.iName.Ptr(), nativeSerialInfo.iName.Length())) .arg(i); serialPortInfo.d_ptr->portName = serialPortInfo.d_ptr->device; serialPortInfo.d_ptr->description = QString::fromUtf16(nativeSerialInfo.iDescription.Ptr(), nativeSerialInfo.iDescription.Length()); serialPortInfo.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); serialPortInfoList.append(serialPortInfo); } } } // FIXME: Get info about Bluetooth ports. r = server.LoadCommModule(KBluetoothModuleName); if (r == KErrNone) { r = server.GetPortInfo(KBluetoothModuleName, nativeSerialInfo); if (r == KErrNone) { for (quint32 i = nativeSerialInfo.iLowUnit; i < nativeSerialInfo.iHighUnit + 1; ++i) { QSerialPortInfo serialPortInfo; serialPortInfo.d_ptr->device = s .arg(QString::fromUtf16(nativeSerialInfo.iName.Ptr(), nativeSerialInfo.iName.Length())) .arg(i); serialPortInfo.d_ptr->portName = serialPortInfo.d_ptr->device; serialPortInfo.d_ptr->description = QString::fromUtf16(nativeSerialInfo.iDescription.Ptr(), nativeSerialInfo.iDescription.Length()); serialPortInfo.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); serialPortInfoList.append(serialPortInfo); } } } // FIXME: Get info about InfraRed ports. r = server.LoadCommModule(KInfraRedModuleName); if (r == KErrNone) { r = server.GetPortInfo(KInfraRedModuleName, nativeSerialInfo); if (r == KErrNone) { for (quint32 i = nativeSerialInfo.iLowUnit; i < nativeSerialInfo.iHighUnit + 1; ++i) { QSerialPortInfo serialPortInfo; serialPortInfo.d_ptr->device = s .arg(QString::fromUtf16(nativeSerialInfo.iName.Ptr(), nativeSerialInfo.iName.Length())) .arg(i); serialPortInfo.d_ptr->portName = serialPortInfo.d_ptr->device; serialPortInfo.d_ptr->description = QString::fromUtf16(nativeSerialInfo.iDescription.Ptr(), nativeSerialInfo.iDescription.Length()); serialPortInfo.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); serialPortInfoList.append(serialPortInfo); } } } // FIXME: Get info about ACM ports. r = server.LoadCommModule(KACMModuleName); if (r == KErrNone) { r = server.GetPortInfo(KACMModuleName, nativeSerialInfo); if (r == KErrNone) { for (quint32 i = nativeSerialInfo.iLowUnit; i < nativeSerialInfo.iHighUnit + 1; ++i) { QSerialPortInfo serialPortInfo; serialPortInfo.d_ptr->device = s .arg(QString::fromUtf16(nativeSerialInfo.iName.Ptr(), nativeSerialInfo.iName.Length())) .arg(i); serialPortInfo.d_ptr->portName = QSerialPortPrivate::portNameFromSystemLocation(serialPortInfo.d_ptr->device); serialPortInfo.d_ptr->description = QString::fromUtf16(nativeSerialInfo.iDescription.Ptr(), nativeSerialInfo.iDescription.Length()); serialPortInfo.d_ptr->manufacturer = QString(QObject::tr("Unknown.")); serialPortInfoList.append(serialPortInfo); } } } return serialPortInfoList; }
// Do the example LOCAL_C void doExampleL() { _LIT(KStatus0,"Connect to file server\n"); _LIT(KStatus1,"Connect to comm server\n"); _LIT(KStatus2,"Load IrCOMM.CSY\n"); _LIT(KStatus3,"Open IrCOMM::0\n"); _LIT(KStatus4,"Write to IrCOMM::0\n"); _LIT(KStatus5,"Close IrCOMM::0\n"); _LIT(KStatus6,"Close server connection\n"); _LIT(KIrCOMM,"IrCOMM"); _LIT(KIrCOMM0,"IrCOMM::0"); const TTimeIntervalMicroSeconds32 KTimeOut(4000000); //time-out value console->Printf(KStatus0); // force a link to the file server // so that we're sure the loader // will be present RFs f; User::LeaveIfError(f.Connect()); f.Close(); // Initialisation Init(); RCommServ server; // Connect to the comm server console->Printf(KStatus1); server.Connect(); // Load the IrCOMM comm module // C32 will automatically search \System\Libs // on all drives for IrCOMM.CSY console->Printf(KStatus2); TInt ret=server.LoadCommModule(KIrCOMM); //test(ret==KErrNone); User::LeaveIfError(ret); RComm commPort; // Open the IrCOMM port unit 0 (the only one supported) // Open port in exclusive mode because we don't // have any access control code. console->Printf(KStatus3); ret=commPort.Open(server,KIrCOMM0,ECommExclusive); //test(ret==KErrNone); User::LeaveIfError(ret); TRequestStatus status; // Write to the IrCOMM port - the first write // takes a long time as the IrDA connection is // set up in response to this request. Subsequent // writes to IrCOMM are very fast. console->Printf(KStatus4); commPort.Write(status,KTimeOut,DATA_STRING); User::WaitForRequest(status); //test(status.Int()==KErrNone); User::LeaveIfError(status.Int()); // Close port console->Printf(KStatus5); commPort.Close(); console->Printf(KStatus6); server.Close(); }