os/kernelhwsrv/kerneltest/e32test/ethernet/macset/macset.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#include <e32test.h>
sl@0
    17
#include <f32file.h>
sl@0
    18
//#include <s32file.h>
sl@0
    19
//#include <c32comm.h>
sl@0
    20
//#include <bacline.h>
sl@0
    21
sl@0
    22
#include <d32ethernet.h>
sl@0
    23
sl@0
    24
GLDEF_D RTest gTest(_L("macset utility"));
sl@0
    25
//GLDEF_D RFs gFs;
sl@0
    26
GLDEF_D RBusDevEthernet card;
sl@0
    27
sl@0
    28
sl@0
    29
#define PDD_NAME _L("Ethernet")
sl@0
    30
#define LDD_NAME _L("Enet")
sl@0
    31
sl@0
    32
LOCAL_C void ReadMac()
sl@0
    33
//
sl@0
    34
// Read and display the current config
sl@0
    35
//
sl@0
    36
    {
sl@0
    37
    TBuf8<32> config;
sl@0
    38
sl@0
    39
    // MAC Address starts at the 4th byte
sl@0
    40
    config.SetMax();
sl@0
    41
    card.Config(config);
sl@0
    42
sl@0
    43
//    gTest.Printf(_L("Ethernet Status :"));
sl@0
    44
//    if (config[0] == KEthCardReady)
sl@0
    45
//	gTest.Printf(_L(" Ready\n"));
sl@0
    46
//    else
sl@0
    47
//	gTest.Printf(_L(" NOT Ready\n"));
sl@0
    48
sl@0
    49
    gTest.Printf(_L("Ethernet Speed :"));
sl@0
    50
    switch (config[0])
sl@0
    51
	{
sl@0
    52
	case KEthSpeedUnknown:
sl@0
    53
	    gTest.Printf(_L(" Unknown\n"));
sl@0
    54
	    break;
sl@0
    55
	case KEthSpeedAuto:
sl@0
    56
	    gTest.Printf(_L(" Auto\n"));
sl@0
    57
	    break;
sl@0
    58
	case KEthSpeed10BaseT:
sl@0
    59
	    gTest.Printf(_L(" 10 MBit\n"));
sl@0
    60
	    break;
sl@0
    61
	case KEthSpeed100BaseTX:
sl@0
    62
	    gTest.Printf(_L(" 100 MBit\n"));
sl@0
    63
	    break;
sl@0
    64
	default:
sl@0
    65
	    gTest.Printf(_L(" ERROR\n"));
sl@0
    66
	}
sl@0
    67
sl@0
    68
    gTest.Printf(_L("Duplex Setting :"));
sl@0
    69
    switch (config[1])
sl@0
    70
	{
sl@0
    71
	case KEthDuplexUnknown:
sl@0
    72
	    gTest.Printf(_L(" Unknown\n"));
sl@0
    73
	    break;
sl@0
    74
	case KEthDuplexAuto:
sl@0
    75
	    gTest.Printf(_L(" Auto\n"));
sl@0
    76
	    break;
sl@0
    77
	case KEthDuplexFull:
sl@0
    78
	    gTest.Printf(_L(" Full\n"));
sl@0
    79
	    break;
sl@0
    80
	case KEthDuplexHalf:
sl@0
    81
	    gTest.Printf(_L(" Half\n"));
sl@0
    82
	    break;
sl@0
    83
	default:
sl@0
    84
	    gTest.Printf(_L(" ERROR\n"));
sl@0
    85
	}
sl@0
    86
sl@0
    87
    gTest.Printf(_L("MAC :"));
sl@0
    88
    gTest.Printf(_L(" %2x:%2x:%2x:%2x:%2x:%2x\n\n"),
sl@0
    89
		 config[2], config[3],
sl@0
    90
		 config[4], config[5],
sl@0
    91
		 config[6], config[7]);
sl@0
    92
    }
sl@0
    93
sl@0
    94
LOCAL_C void WriteMac()
sl@0
    95
//
sl@0
    96
// Write the new mac address to the card
sl@0
    97
//
sl@0
    98
    {
sl@0
    99
    TBuf8<8> ioctlBuf;
sl@0
   100
//    TEthernetConfigV01 newInfo;
sl@0
   101
sl@0
   102
//    TRequestStatus status;
sl@0
   103
    TBuf<20> validChars(_L("0123456789abcdef"));
sl@0
   104
    TUint8 value;
sl@0
   105
    TUint8 upper=0;
sl@0
   106
    TChar c;
sl@0
   107
    TInt pos; 
sl@0
   108
	TBool bResult = ETrue;
sl@0
   109
sl@0
   110
	TBuf8<32> config;
sl@0
   111
sl@0
   112
    // Obtain command line parameters
sl@0
   113
//    TPtrC option;
sl@0
   114
sl@0
   115
//    CCommandLineArguments* args = CCommandLineArguments::NewLC();
sl@0
   116
    TBuf<256> cmd;
sl@0
   117
	User::CommandLine(cmd);
sl@0
   118
sl@0
   119
	// MAC Address starts at the 4th byte
sl@0
   120
    config.SetMax();
sl@0
   121
    card.Config(config);
sl@0
   122
sl@0
   123
    gTest.Printf(_L("Command length is %d\n"), cmd.Length());
sl@0
   124
sl@0
   125
    if (cmd.Length()>0)
sl@0
   126
//    if (args->Count() > 2)
sl@0
   127
	{
sl@0
   128
//	option.Set(args->Arg(1));
sl@0
   129
	if(cmd[0]=='-' && (cmd[1]=='s' || cmd[1]=='S'))
sl@0
   130
//	if(!option.CompareF(_L("-S")))
sl@0
   131
	    {
sl@0
   132
	    ioctlBuf.SetLength(8);
sl@0
   133
	    ioctlBuf[0] = KEthSpeed10BaseT;
sl@0
   134
//	    newInfo.iEthSpeed  = KEthSpeed10BaseT;
sl@0
   135
	    ioctlBuf[1] = KEthDuplexHalf;
sl@0
   136
//	    newInfo.iEthDuplex = KEthDuplexHalf;
sl@0
   137
sl@0
   138
	    for(int i = 0; i<6; i++)
sl@0
   139
		{
sl@0
   140
		c = cmd[3+(i*2)];
sl@0
   141
//		c = args->Arg(2)[2*i];
sl@0
   142
		c.LowerCase();
sl@0
   143
		if((pos = validChars.Locate(c))==KErrNotFound)
sl@0
   144
		    {
sl@0
   145
		    pos = upper;
sl@0
   146
		    break;
sl@0
   147
		    }
sl@0
   148
		upper = (TUint8)pos;
sl@0
   149
		c = cmd[4+(i*2)];
sl@0
   150
//		c = args->Arg(2)[(2*i)+1];
sl@0
   151
		c.LowerCase();
sl@0
   152
		if((pos = validChars.Locate(c))==KErrNotFound)
sl@0
   153
		    {
sl@0
   154
		    User::Leave(KErrNotFound);
sl@0
   155
		    }
sl@0
   156
		value = (TUint8)pos;
sl@0
   157
		value = (TUint8)((upper<<4) | value);
sl@0
   158
sl@0
   159
		ioctlBuf[i+2] = value;
sl@0
   160
//		newInfo.iEthAddress[i] = value;
sl@0
   161
		}
sl@0
   162
	    
sl@0
   163
	    gTest.Printf(_L("\nSetting MAC to %2x:%2x:%2x:%2x:%2x:%2x\n"),
sl@0
   164
			 ioctlBuf[2], ioctlBuf[3],
sl@0
   165
			 ioctlBuf[4], ioctlBuf[5],
sl@0
   166
			 ioctlBuf[6], ioctlBuf[7]);
sl@0
   167
	    
sl@0
   168
	    card.SetMAC(ioctlBuf);
sl@0
   169
//	    card.IOControl(status,ioctlBuf);
sl@0
   170
	    gTest.Printf(_L("Done\n"));
sl@0
   171
		}
sl@0
   172
	else if(cmd[0]=='-' && (cmd[1]=='c' || cmd[1]=='C'))
sl@0
   173
	{
sl@0
   174
sl@0
   175
		for(int i = 0; i<6; i++)
sl@0
   176
		{
sl@0
   177
			c = cmd[3+(i*2)];
sl@0
   178
			c.LowerCase();
sl@0
   179
			if((pos = validChars.Locate(c))==KErrNotFound)
sl@0
   180
		    {
sl@0
   181
			    pos = upper;
sl@0
   182
				bResult = EFalse;
sl@0
   183
				break;
sl@0
   184
		    }
sl@0
   185
			upper = (TUint8)pos;
sl@0
   186
			c = cmd[4+(i*2)];
sl@0
   187
sl@0
   188
			c.LowerCase();
sl@0
   189
			if((pos = validChars.Locate(c))==KErrNotFound)
sl@0
   190
		    {
sl@0
   191
			    //User::Leave(KErrNotFound);
sl@0
   192
				bResult = EFalse;
sl@0
   193
			    break;
sl@0
   194
		    }
sl@0
   195
			value = (TUint8)pos;
sl@0
   196
			value = (TUint8)((upper<<4) | value);
sl@0
   197
sl@0
   198
			if( config[i+2] != value)
sl@0
   199
			{
sl@0
   200
				bResult = EFalse;
sl@0
   201
				break;
sl@0
   202
			}
sl@0
   203
		}
sl@0
   204
		
sl@0
   205
		if( EFalse == bResult )
sl@0
   206
			gTest.Printf(_L("Test FAILED\n\n"));
sl@0
   207
		else
sl@0
   208
			gTest.Printf(_L("Test PASSED\n\n"));
sl@0
   209
sl@0
   210
	}
sl@0
   211
	else
sl@0
   212
	    {
sl@0
   213
	    gTest.Printf(_L("Invalid option"));
sl@0
   214
	    }
sl@0
   215
	}
sl@0
   216
    else
sl@0
   217
	{
sl@0
   218
	gTest.Printf(_L("Call with -s to set new MAC\n"));
sl@0
   219
	gTest.Printf(_L("  eg. macset -s 102030405060\n"));
sl@0
   220
sl@0
   221
	gTest.Printf(_L("\nCall with -c to test MAC value\n"));
sl@0
   222
	gTest.Printf(_L("  eg. macset -c 00aabbccddee to check if MAC == 00aabbccddee\n"));
sl@0
   223
	}
sl@0
   224
    
sl@0
   225
//    CleanupStack::PopAndDestroy( /* args */ );
sl@0
   226
    }
sl@0
   227
sl@0
   228
sl@0
   229
LOCAL_C TInt InitGlobals()
sl@0
   230
//
sl@0
   231
// Initialise global variables.
sl@0
   232
//
sl@0
   233
    {
sl@0
   234
    TInt err;
sl@0
   235
    TBuf8<8> ioctlBuf;
sl@0
   236
//    TRequestStatus status;
sl@0
   237
sl@0
   238
    gTest.Printf(_L("**Load LDD\n"));
sl@0
   239
    err=User::LoadLogicalDevice(LDD_NAME);
sl@0
   240
    if (err!=KErrNone && err!=KErrAlreadyExists)
sl@0
   241
	return(err);
sl@0
   242
sl@0
   243
    gTest.Printf(_L("**Load PDD\n"));
sl@0
   244
    err=User::LoadPhysicalDevice(PDD_NAME);
sl@0
   245
    if (err!=KErrNone && err!=KErrAlreadyExists)
sl@0
   246
	return(err);
sl@0
   247
sl@0
   248
    gTest.Printf(_L("**Open device\n"));
sl@0
   249
    User::LeaveIfError(card.Open(0));
sl@0
   250
//    User::LeaveIfError(card.Open(card.VersionRequired(),0,NULL));
sl@0
   251
//    ioctlBuf.SetLength(1);
sl@0
   252
//    ioctlBuf[0] = RBusDevEthernet::EControlCaps;
sl@0
   253
    gTest.Printf(_L("**Getconfig\n"));
sl@0
   254
sl@0
   255
    card.Caps(ioctlBuf);
sl@0
   256
//    card.IOControl(status,ioctlBuf);
sl@0
   257
//    if(ioctlBuf[0] != KEventPCCardReady)
sl@0
   258
//	{
sl@0
   259
//	card.Close();
sl@0
   260
//	User::Leave(KErrNotReady);
sl@0
   261
//	}
sl@0
   262
    gTest.Printf(_L("**Init Done\n"));
sl@0
   263
    return KErrNone;
sl@0
   264
    }
sl@0
   265
sl@0
   266
LOCAL_C void DestroyGlobals()
sl@0
   267
//
sl@0
   268
// Free global variables
sl@0
   269
//
sl@0
   270
    {
sl@0
   271
    gTest.Printf(_L("**Free PDD\n"));
sl@0
   272
    User::FreePhysicalDevice(PDD_NAME);
sl@0
   273
    gTest.Printf(_L("**Free LDD\n"));
sl@0
   274
    User::FreeLogicalDevice(LDD_NAME);
sl@0
   275
sl@0
   276
sl@0
   277
//    gFs.Close();
sl@0
   278
    }
sl@0
   279
sl@0
   280
LOCAL_C void RunMacSetL()
sl@0
   281
//
sl@0
   282
// Run all the tests
sl@0
   283
//
sl@0
   284
    {
sl@0
   285
sl@0
   286
    TInt ret = InitGlobals();
sl@0
   287
    if(ret != KErrNone)
sl@0
   288
	return;
sl@0
   289
sl@0
   290
    ReadMac();
sl@0
   291
    WriteMac();
sl@0
   292
    DestroyGlobals();
sl@0
   293
    }
sl@0
   294
sl@0
   295
EXPORT_C TInt E32Main()
sl@0
   296
//
sl@0
   297
// Main
sl@0
   298
//
sl@0
   299
    {
sl@0
   300
    CTrapCleanup* cleanup = CTrapCleanup::New();
sl@0
   301
    CActiveScheduler* theActiveScheduler = new CActiveScheduler();
sl@0
   302
    CActiveScheduler::Install(theActiveScheduler);
sl@0
   303
sl@0
   304
    __UHEAP_MARK;
sl@0
   305
sl@0
   306
    TRAPD(err,RunMacSetL());
sl@0
   307
    if (err!=KErrNone)
sl@0
   308
	gTest.Printf(_L("ERROR: Leave %d\n"),err);
sl@0
   309
sl@0
   310
    gTest.Printf(_L("Press any key ...\n"));
sl@0
   311
    gTest.Getch();
sl@0
   312
    gTest.Close();
sl@0
   313
sl@0
   314
    __UHEAP_MARKEND;
sl@0
   315
sl@0
   316
    delete cleanup;
sl@0
   317
    delete theActiveScheduler;
sl@0
   318
    return KErrNone;
sl@0
   319
    }