www.pudn.com > 2410winceCE_l80t64.rar > Regparms.c


//--------------------------------------------------------------------------- 
// 
//  Copyright (C) 1996-1997. Unpublished Work of Crystal Semiconductor Corp. 
//  All Rights Reserved. 
// 
//  THIS WORK IS AN UNPUBLISHED WORK AND CONTAINS CONFIDENTIAL, 
//  PROPRIETARY AND TRADE SECRET INFORMATION OF CRYSTAL SEMICONDUCTOR. 
//  ACCESS TO THIS WORK IS RESTRICTED TO (I) CRYSTAL SEMICONDUCTOR EMPLOYEES 
//  WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF THEIR 
//  ASSIGNMENTS  AND (II) ENTITIES OTHER THAN CRYSTAL SEMICONDUCTOR WHO 
//  HAVE ENTERED INTO  APPROPRIATE LICENSE AGREEMENTS.  NO PART OF THIS 
//  WORK MAY BE USED, PRACTICED, PERFORMED, COPIED, DISTRIBUTED, REVISED, 
//  MODIFIED, TRANSLATED, ABRIDGED, CONDENSED, EXPANDED, COLLECTED, 
//  COMPILED,LINKED,RECAST, TRANSFORMED, ADAPTED IN ANY FORM OR BY ANY 
//  MEANS,MANUAL, MECHANICAL, CHEMICAL, ELECTRICAL, ELECTRONIC, OPTICAL, 
//  BIOLOGICAL, OR OTHERWISE WITHOUT THE PRIOR WRITTEN PERMISSION AND 
//  CONSENT OF CRYSTAL SEMICONDUCTOR . ANY USE OR EXPLOITATION OF THIS WORK 
//  WITHOUT THE PRIOR WRITTEN CONSENT OF CRYSTAL SEMICONDUCTOR  COULD 
//  SUBJECT THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY. 
// 
//--------------------------------------------------------------------------- 
 
#include "cs8900a.h" 
 
 
//**************************************************************************** 
// 
// Local type definitions and declarations 
// 
//**************************************************************************** 
 
//**************************************************************************** 
// 
// Static variables declarations 
// 
//**************************************************************************** 
 
 
//**************************************************************************** 
// 
// Function prototypes for functions local to this file 
// 
//**************************************************************************** 
 
ULONG  stol( 
        PUCHAR szSerialnumber); 
 
 
 
 
extern 
NDIS_STATUS 
GetNetworkAddress( 
    IN NDIS_HANDLE ConfigHandle, 
    OUT PUCHAR CurrentNetworkAddress 
    ) 
 
{ 
	     NDIS_STATUS Status; 
 
    NDIS_STRING MACAddrString[3]= { NDIS_STRING_CONST("MACAddress1"), 
                                    NDIS_STRING_CONST("MACAddress2"),  
		                            NDIS_STRING_CONST("MACAddress3")}; 
    PNDIS_CONFIGURATION_PARAMETER ReturnedValue; 
	USHORT MacAddr[3]; 
	int i; 
	USHORT tmpVal; 
 
	for (i=0; i<3; i++) { 
       
        NdisReadConfiguration( 
                &Status, 
                &ReturnedValue, 
                ConfigHandle, 
                &MACAddrString[i], 
                NdisParameterHexInteger 
        ); 
 
 
         if (Status == NDIS_STATUS_SUCCESS) { 
                tmpVal=(USHORT)ReturnedValue->ParameterData.IntegerData; 
				MacAddr[i]= ((tmpVal & 0x00ff) << 8)| ((tmpVal & 0xff00) >> 8); 
		 } else { 
		      return NDIS_STATUS_FAILURE; 
		 } 
    } /* end for i loop */ 
 
 
	/* MAcAddr=0000:0000:0000 means to use EEPROM setting, so return Failure.*/ 
	if ( MacAddr[0] == 0 && MacAddr[1] == 0 && MacAddr[2] == 0) { 
        		      return NDIS_STATUS_FAILURE; 
	} 
 
     NdisMoveMemory(CurrentNetworkAddress, 
                    (unsigned char *)MacAddr, 
                   (ULONG) ETH_LENGTH_OF_ADDRESS); 
 
  
     return NDIS_STATUS_SUCCESS; 
 
 
 
} 
 
extern 
BYTE 
GetDuplexMode( 
    IN NDIS_HANDLE ConfigHandle 
    ) 
 
{ 
    NDIS_STATUS Status; 
    NDIS_STRING DuplexModeString             = NDIS_STRING_CONST("DuplexMode"); // @251 
    PNDIS_CONFIGURATION_PARAMETER ReturnedValue; 
    IN BYTE         DuplexMode; 
 
 
       
        DuplexMode = DUPLEX_HALF; 
        NdisReadConfiguration( 
                &Status, 
        &ReturnedValue, 
        ConfigHandle, 
        &DuplexModeString, 
        NdisParameterInteger 
        ); 
 
	if (Status == NDIS_STATUS_SUCCESS) { 
		switch (ReturnedValue->ParameterData.IntegerData) { 
		               case  0: 
                                DuplexMode = DUPLEX_AUTO_NEGOTIATE; 
                                break; 
                        case  1: 
                                DuplexMode = DUPLEX_HALF; 
                                break; 
                        case  2: 
                                DuplexMode = DUPLEX_FULL; 
                                break; 
                } 
 
    } 
 
    return DuplexMode; 
 
 
} 
 
 
 
 
ULONG  stol( 
        PUCHAR szSerialnumber) 
{ 
 
    ULONG  value=0; 
 
        for (; *szSerialnumber != 0; szSerialnumber++) { 
 
        value <<= 4; 
 
                if ((*szSerialnumber >= '0') && (*szSerialnumber <= '9')) { 
 
               value += *szSerialnumber - '0'; 
 
                } else if ((*szSerialnumber >= 'a') && (*szSerialnumber <= 'f')) { 
 
               value += *szSerialnumber - 'a' + 10; 
 
                } else if ((*szSerialnumber >= 'A') && (*szSerialnumber <= 'F')) { 
 
               value += *szSerialnumber - 'A' + 10; 
        } 
        } 
 
        return value; 
 
}   /* end stol */