--- /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 <e32def.h>
+#include <c32comm.h>
+#include <e32std.h>
+#include <usbman.h>
+#include <acminterface.h>
+#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;
+}