diff -r f5050f1da672 -r 04becd199f91 javaextensions/comm/src.s60/dynamicpropertyhandlerjni.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/comm/src.s60/dynamicpropertyhandlerjni.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description + * +*/ + +#include +#include +#include +#include +#include +#include "com_nokia_mj_impl_properties_comm_DynamicPropertyHandler.h" +#include "s60commonutils.h" +#include "logger.h" + +_LIT(KIRCsyName, "IRCOMM"); // IR CSY +_LIT(KSerialCsyName, "ECUART"); // Serial CSY +_LIT(KBluetoothCsyName, "BTCOMM"); // BT CSY + +_LIT(KSerialPort, "COM"); +_LIT(KSymbianSerialPort, "COMM"); + +// USB +_LIT(KUSBPort, "USB"); +_LIT(KSymbianUSBPort, "ACM"); + +_LIT(KIRPort, "IR"); +_LIT(KSymbianIRPort, "IrCOMM"); + +// BT +_LIT(KBTPort, "BT"); +_LIT(KSymbianBTPort, "BTCOMM"); + +using namespace java::util; + +JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_properties_comm_DynamicPropertyHandler__1getAvailCommPortInfo +(JNIEnv* aJni, jobject /*peer*/) +{ + JELOG2(ESOCKET); + TBuf<700> names; + TBuf<10> javaName; + TSerialInfo info; + bool validPort = true; + RCommServ cserver; + TInt r = cserver.Connect(); + + if (r != KErrNone) + { + return NULL; + } + r = cserver.LoadCommModule(KSerialCsyName); // Serial + r = cserver.LoadCommModule(KIRCsyName); // IR + r = cserver.LoadCommModule(KAcmCsyName); // USB + r = cserver.LoadCommModule(KBluetoothCsyName); // BT + + if (r != KErrNone) + { + return NULL; + } + TInt numPorts = 0; + cserver.NumPorts(numPorts); + TInt count; + TBuf<10> name; + TBuf<40> tempname; + TBuf<10> buf; + _LIT(KDefaultPort, "USB2"); + names.Append(KDefaultPort); // first value in the returned string , should be valid one (MIDP spec) + for (count = 0; count < numPorts; count++) + { + r = cserver.GetPortInfo(count, buf, info); + validPort = true; + name = info.iName; // will be one of these COMM,IrCOMM,BTCOMM,ACM + + if (info.iName.MatchF(KSymbianSerialPort) != KErrNotFound) + { + //its a serial port + javaName = KSerialPort; + } + else if (info.iName.MatchF(KSymbianIRPort) != KErrNotFound) + { + //infrared + javaName = KIRPort; + } + else if (info.iName.MatchF(KSymbianBTPort) != KErrNotFound) + { + //bluetooth + javaName = KBTPort; + } + else if (info.iName.MatchF(KSymbianUSBPort) != KErrNotFound) + { + //usb + javaName = KUSBPort; + } + else + { + validPort = EFalse; + } + if (!validPort) + { + continue; + } + /* for each port, get the start index to end index number */ + for (int j = info.iLowUnit, k = 1; j <= info.iHighUnit; ++j, k++) + { + tempname.Format(_L("%S%u"), &javaName, k); // similar to sprintf() function + if (tempname.Compare(KDefaultPort) == 0) // skip the default one as it's already added + { + continue; + } + if ((names.MaxLength() - names.Length()) > tempname.Length()) + { // enough space in the buffer + names.Append(','); + names.Append(tempname); + } + + } + } + jstring javaString = NULL; + javaString = S60CommonUtils::NativeToJavaString(*aJni, names); + return javaString; +}