kerneltest/e32test/ethernet/macset/macset.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/ethernet/macset/macset.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,319 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+//
+
+#include <e32test.h>
+#include <f32file.h>
+//#include <s32file.h>
+//#include <c32comm.h>
+//#include <bacline.h>
+
+#include <d32ethernet.h>
+
+GLDEF_D RTest gTest(_L("macset utility"));
+//GLDEF_D RFs gFs;
+GLDEF_D RBusDevEthernet card;
+
+
+#define PDD_NAME _L("Ethernet")
+#define LDD_NAME _L("Enet")
+
+LOCAL_C void ReadMac()
+//
+// Read and display the current config
+//
+    {
+    TBuf8<32> config;
+
+    // MAC Address starts at the 4th byte
+    config.SetMax();
+    card.Config(config);
+
+//    gTest.Printf(_L("Ethernet Status :"));
+//    if (config[0] == KEthCardReady)
+//	gTest.Printf(_L(" Ready\n"));
+//    else
+//	gTest.Printf(_L(" NOT Ready\n"));
+
+    gTest.Printf(_L("Ethernet Speed :"));
+    switch (config[0])
+	{
+	case KEthSpeedUnknown:
+	    gTest.Printf(_L(" Unknown\n"));
+	    break;
+	case KEthSpeedAuto:
+	    gTest.Printf(_L(" Auto\n"));
+	    break;
+	case KEthSpeed10BaseT:
+	    gTest.Printf(_L(" 10 MBit\n"));
+	    break;
+	case KEthSpeed100BaseTX:
+	    gTest.Printf(_L(" 100 MBit\n"));
+	    break;
+	default:
+	    gTest.Printf(_L(" ERROR\n"));
+	}
+
+    gTest.Printf(_L("Duplex Setting :"));
+    switch (config[1])
+	{
+	case KEthDuplexUnknown:
+	    gTest.Printf(_L(" Unknown\n"));
+	    break;
+	case KEthDuplexAuto:
+	    gTest.Printf(_L(" Auto\n"));
+	    break;
+	case KEthDuplexFull:
+	    gTest.Printf(_L(" Full\n"));
+	    break;
+	case KEthDuplexHalf:
+	    gTest.Printf(_L(" Half\n"));
+	    break;
+	default:
+	    gTest.Printf(_L(" ERROR\n"));
+	}
+
+    gTest.Printf(_L("MAC :"));
+    gTest.Printf(_L(" %2x:%2x:%2x:%2x:%2x:%2x\n\n"),
+		 config[2], config[3],
+		 config[4], config[5],
+		 config[6], config[7]);
+    }
+
+LOCAL_C void WriteMac()
+//
+// Write the new mac address to the card
+//
+    {
+    TBuf8<8> ioctlBuf;
+//    TEthernetConfigV01 newInfo;
+
+//    TRequestStatus status;
+    TBuf<20> validChars(_L("0123456789abcdef"));
+    TUint8 value;
+    TUint8 upper=0;
+    TChar c;
+    TInt pos; 
+	TBool bResult = ETrue;
+
+	TBuf8<32> config;
+
+    // Obtain command line parameters
+//    TPtrC option;
+
+//    CCommandLineArguments* args = CCommandLineArguments::NewLC();
+    TBuf<256> cmd;
+	User::CommandLine(cmd);
+
+	// MAC Address starts at the 4th byte
+    config.SetMax();
+    card.Config(config);
+
+    gTest.Printf(_L("Command length is %d\n"), cmd.Length());
+
+    if (cmd.Length()>0)
+//    if (args->Count() > 2)
+	{
+//	option.Set(args->Arg(1));
+	if(cmd[0]=='-' && (cmd[1]=='s' || cmd[1]=='S'))
+//	if(!option.CompareF(_L("-S")))
+	    {
+	    ioctlBuf.SetLength(8);
+	    ioctlBuf[0] = KEthSpeed10BaseT;
+//	    newInfo.iEthSpeed  = KEthSpeed10BaseT;
+	    ioctlBuf[1] = KEthDuplexHalf;
+//	    newInfo.iEthDuplex = KEthDuplexHalf;
+
+	    for(int i = 0; i<6; i++)
+		{
+		c = cmd[3+(i*2)];
+//		c = args->Arg(2)[2*i];
+		c.LowerCase();
+		if((pos = validChars.Locate(c))==KErrNotFound)
+		    {
+		    pos = upper;
+		    break;
+		    }
+		upper = (TUint8)pos;
+		c = cmd[4+(i*2)];
+//		c = args->Arg(2)[(2*i)+1];
+		c.LowerCase();
+		if((pos = validChars.Locate(c))==KErrNotFound)
+		    {
+		    User::Leave(KErrNotFound);
+		    }
+		value = (TUint8)pos;
+		value = (TUint8)((upper<<4) | value);
+
+		ioctlBuf[i+2] = value;
+//		newInfo.iEthAddress[i] = value;
+		}
+	    
+	    gTest.Printf(_L("\nSetting MAC to %2x:%2x:%2x:%2x:%2x:%2x\n"),
+			 ioctlBuf[2], ioctlBuf[3],
+			 ioctlBuf[4], ioctlBuf[5],
+			 ioctlBuf[6], ioctlBuf[7]);
+	    
+	    card.SetMAC(ioctlBuf);
+//	    card.IOControl(status,ioctlBuf);
+	    gTest.Printf(_L("Done\n"));
+		}
+	else if(cmd[0]=='-' && (cmd[1]=='c' || cmd[1]=='C'))
+	{
+
+		for(int i = 0; i<6; i++)
+		{
+			c = cmd[3+(i*2)];
+			c.LowerCase();
+			if((pos = validChars.Locate(c))==KErrNotFound)
+		    {
+			    pos = upper;
+				bResult = EFalse;
+				break;
+		    }
+			upper = (TUint8)pos;
+			c = cmd[4+(i*2)];
+
+			c.LowerCase();
+			if((pos = validChars.Locate(c))==KErrNotFound)
+		    {
+			    //User::Leave(KErrNotFound);
+				bResult = EFalse;
+			    break;
+		    }
+			value = (TUint8)pos;
+			value = (TUint8)((upper<<4) | value);
+
+			if( config[i+2] != value)
+			{
+				bResult = EFalse;
+				break;
+			}
+		}
+		
+		if( EFalse == bResult )
+			gTest.Printf(_L("Test FAILED\n\n"));
+		else
+			gTest.Printf(_L("Test PASSED\n\n"));
+
+	}
+	else
+	    {
+	    gTest.Printf(_L("Invalid option"));
+	    }
+	}
+    else
+	{
+	gTest.Printf(_L("Call with -s to set new MAC\n"));
+	gTest.Printf(_L("  eg. macset -s 102030405060\n"));
+
+	gTest.Printf(_L("\nCall with -c to test MAC value\n"));
+	gTest.Printf(_L("  eg. macset -c 00aabbccddee to check if MAC == 00aabbccddee\n"));
+	}
+    
+//    CleanupStack::PopAndDestroy( /* args */ );
+    }
+
+
+LOCAL_C TInt InitGlobals()
+//
+// Initialise global variables.
+//
+    {
+    TInt err;
+    TBuf8<8> ioctlBuf;
+//    TRequestStatus status;
+
+    gTest.Printf(_L("**Load LDD\n"));
+    err=User::LoadLogicalDevice(LDD_NAME);
+    if (err!=KErrNone && err!=KErrAlreadyExists)
+	return(err);
+
+    gTest.Printf(_L("**Load PDD\n"));
+    err=User::LoadPhysicalDevice(PDD_NAME);
+    if (err!=KErrNone && err!=KErrAlreadyExists)
+	return(err);
+
+    gTest.Printf(_L("**Open device\n"));
+    User::LeaveIfError(card.Open(0));
+//    User::LeaveIfError(card.Open(card.VersionRequired(),0,NULL));
+//    ioctlBuf.SetLength(1);
+//    ioctlBuf[0] = RBusDevEthernet::EControlCaps;
+    gTest.Printf(_L("**Getconfig\n"));
+
+    card.Caps(ioctlBuf);
+//    card.IOControl(status,ioctlBuf);
+//    if(ioctlBuf[0] != KEventPCCardReady)
+//	{
+//	card.Close();
+//	User::Leave(KErrNotReady);
+//	}
+    gTest.Printf(_L("**Init Done\n"));
+    return KErrNone;
+    }
+
+LOCAL_C void DestroyGlobals()
+//
+// Free global variables
+//
+    {
+    gTest.Printf(_L("**Free PDD\n"));
+    User::FreePhysicalDevice(PDD_NAME);
+    gTest.Printf(_L("**Free LDD\n"));
+    User::FreeLogicalDevice(LDD_NAME);
+
+
+//    gFs.Close();
+    }
+
+LOCAL_C void RunMacSetL()
+//
+// Run all the tests
+//
+    {
+
+    TInt ret = InitGlobals();
+    if(ret != KErrNone)
+	return;
+
+    ReadMac();
+    WriteMac();
+    DestroyGlobals();
+    }
+
+EXPORT_C TInt E32Main()
+//
+// Main
+//
+    {
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    CActiveScheduler* theActiveScheduler = new CActiveScheduler();
+    CActiveScheduler::Install(theActiveScheduler);
+
+    __UHEAP_MARK;
+
+    TRAPD(err,RunMacSetL());
+    if (err!=KErrNone)
+	gTest.Printf(_L("ERROR: Leave %d\n"),err);
+
+    gTest.Printf(_L("Press any key ...\n"));
+    gTest.Getch();
+    gTest.Close();
+
+    __UHEAP_MARKEND;
+
+    delete cleanup;
+    delete theActiveScheduler;
+    return KErrNone;
+    }