sl@0: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // hal\src\userhal.cpp sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include "u32std.h" sl@0: #include sl@0: sl@0: sl@0: sl@0: _LIT(KLitHalUserHal,"HAL-UserHal"); sl@0: sl@0: enum THalUserHalPanic sl@0: { sl@0: EInvalidStartupType=0, sl@0: EInvalidAttributeDP=1, sl@0: EInvalidAttributeDNM=2, sl@0: EInvalidAttributeDM=3, sl@0: EInvalidAttributeDS=4, sl@0: EInvalidAttributeCMI=5, sl@0: EInvalidAttributeSMI=6, sl@0: EInvalidAttributeDC=7, sl@0: EInvalidAttributeMB=8, sl@0: EInvalidAttributeMC=9, sl@0: EInvalidAttributeSMI2=10, sl@0: EInvalidAttributeSD=11, sl@0: EInvalidAttributeSDMA=12, sl@0: EInvalidAttribKeybd=13, sl@0: EInvalidAttribPen=14, sl@0: EInvalidAttribMouse=15, sl@0: EInvalidAttrib3DPointer=16 sl@0: }; sl@0: sl@0: void Panic(THalUserHalPanic aPanic) sl@0: { sl@0: User::Panic(KLitHalUserHal,aPanic); sl@0: } sl@0: sl@0: // ECPUSpeed sl@0: TInt GetCPUSpeed(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: sl@0: TVariantInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupVariant, EVariantHalVariantInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iProcessorClockInKHz; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // ECpuProfilingDefaultInterruptBase sl@0: TInt GetCPUProfilerInterrupt(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalProfilingDefaultInterruptBase, aInOut, NULL); sl@0: } sl@0: sl@0: sl@0: // ESystemStartupReason sl@0: TInt GetSystemStartupReason(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TInt reason; sl@0: TInt r=UserSvr::HalFunction(EHalGroupKernel, EKernelHalStartupReason, (TAny*)&reason, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: switch (reason) sl@0: { sl@0: case EStartupCold: sl@0: case EStartupColdReset: sl@0: case EStartupNewOs: sl@0: *(TInt*)aInOut=HAL::ESystemStartupReason_Cold; sl@0: break; sl@0: case EStartupPowerFail: sl@0: case EStartupWarmReset: sl@0: case EStartupSafeReset: sl@0: *(TInt*)aInOut=HAL::ESystemStartupReason_Warm; sl@0: break; sl@0: case EStartupKernelFault: sl@0: *(TInt*)aInOut=HAL::ESystemStartupReason_Fault; sl@0: break; sl@0: default: sl@0: Panic(EInvalidStartupType); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // ESystemException sl@0: TInt GetSystemException(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupKernel, EKernelHalExceptionId, aInOut, NULL); sl@0: } sl@0: sl@0: // EMemoryRAM sl@0: TInt GetRAMSize(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TMemoryInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemoryInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iTotalRamInBytes; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EMemoryRAMFree sl@0: TInt GetFreeRAM(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TMemoryInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemoryInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iFreeRamInBytes; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EMemoryROM sl@0: TInt GetROMSize(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TMemoryInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemoryInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iTotalRomInBytes; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EPowerGood sl@0: TInt GetPowerGoodState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TSupplyInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupPower, EPowerHalSupplyInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: TBool state=info.iExternalPowerPresent||(info.iMainBatteryStatus>=ELow); sl@0: *(TBool*)aInOut=state; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EPowerBatteryStatus sl@0: TInt GetBatteryStatus(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TSupplyInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupPower, EPowerHalSupplyInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=(TInt)info.iMainBatteryStatus; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EAccessoryPower sl@0: TInt GetAccessoryPowerPresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalAcessoryPowerPresent, aInOut, NULL); sl@0: } sl@0: sl@0: // EPowerBackup sl@0: TInt GetBackupPresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalBackupPresent, aInOut, NULL); sl@0: } sl@0: sl@0: // EPowerBackupStatus sl@0: TInt GetBackupStatus(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TSupplyInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupPower, EPowerHalSupplyInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=(TInt)info.iBackupBatteryStatus; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EPowerExternal sl@0: TInt GetPowerExternalState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TSupplyInfoV1 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupPower, EPowerHalSupplyInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=(TInt)info.iExternalPowerPresent; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EKeyboardState sl@0: TInt ProcessKeyboardState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupKeyboard, EKeyboardHalSetKeyboardState, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupKeyboard, EKeyboardHalKeyboardState, aInOut, NULL); sl@0: } sl@0: sl@0: // EKeyboard, EKeyboardDeviceKeys and EKeyboardAppKeys sl@0: TInt ProcessKeyboardInfo(TInt /*aDeviceNumber*/, TInt aAttrib, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TKeyboardInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupKeyboard, EKeyboardHalKeyboardInfo, (TAny*)&infoPckg, NULL); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EKeyboard: sl@0: *(TInt*)aInOut=(TInt)info.iKeyboardType; sl@0: break; sl@0: case HAL::EKeyboardDeviceKeys: sl@0: *(TInt*)aInOut = info.iDeviceKeys; sl@0: break; sl@0: case HAL::EKeyboardAppKeys: sl@0: *(TInt*)aInOut = info.iAppsKeys; sl@0: break; sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttribKeybd)); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EKeyboardClick sl@0: TInt GetKeyboardClickPresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TInt state=0; sl@0: TInt r=UserSvr::HalFunction(EHalGroupSound, ESoundHalKeyClickEnabled, (TAny*)state, NULL); sl@0: *(TInt*)aInOut=(r==KErrNone)?1:0; // if there is a clicking device we should be able to get its state sl@0: return KErrNone; sl@0: } sl@0: sl@0: // EKeyboardClickVolumeMax sl@0: TInt GetKeyboardClickVolumeMax(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalKeyClickVolumeMax, aInOut, NULL); sl@0: } sl@0: sl@0: // EKeyboardClickState sl@0: TInt ProcessKeyboardClickState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalSetKeyClickEnabled, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalKeyClickEnabled, aInOut, NULL); sl@0: } sl@0: sl@0: // EKeyboardClickVolume sl@0: TInt ProcessKeyboardClickVolume(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: TInt r; sl@0: if (aSet) sl@0: { sl@0: TInt vol=(TInt)aInOut; sl@0: TInt volMax=0; sl@0: r=UserSvr::HalFunction(EHalGroupSound, ESoundHalKeyClickVolumeMax, (TAny*)volMax, NULL); sl@0: if (r!=KErrNone) sl@0: return r; sl@0: if (vol<0 || vol>volMax) sl@0: return KErrArgument; sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalSetKeyClickLoud, (TAny*)vol, NULL); sl@0: } sl@0: TBool state; sl@0: r=UserSvr::HalFunction(EHalGroupSound, ESoundHalKeyClickLoud, (TAny*)&state, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=state?1:0; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EDisplayContrast sl@0: TInt ProcessDisplayContrast(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: TInt x=(TInt)aInOut; sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetDisplayContrast, (TAny*)x, NULL, aDeviceNumber); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalDisplayContrast, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayBrightness sl@0: TInt ProcessDisplayBrightness(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: TInt x=(TInt)aInOut; sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetDisplayBrightness, (TAny*)x, NULL, aDeviceNumber); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalDisplayBrightness, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: sl@0: // EDisplayPaletteEntry sl@0: TInt ProcessDisplayPaletteEntry(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool aSet, TAny* aInOut) sl@0: { sl@0: sl@0: __ASSERT_DEBUG(HAL::EDisplayPaletteEntry == aAttrib, Panic(EInvalidAttributeDP)); sl@0: sl@0: if (aSet) sl@0: { sl@0: TInt entry = ((TInt)aInOut >> 24) & 0xFF; sl@0: TInt color = ((TInt)aInOut) & 0xFFFFFF; sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetPaletteEntry, (TAny*)entry, (TAny*)color, aDeviceNumber); sl@0: } sl@0: TInt e = (*(TInt*)aInOut) & 0xFF; sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalPaletteEntry, &e, aInOut, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayNumModes sl@0: TInt ProcessDisplayNumModes(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayNumModes == aAttrib, Panic(EInvalidAttributeDNM)); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalModeCount, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayMode sl@0: TInt ProcessDisplayMode(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool aSet, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayMode == aAttrib, Panic(EInvalidAttributeDM)); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, aSet?EDisplayHalSetMode:EDisplayHalMode, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayState sl@0: TInt ProcessDisplayState(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool aSet, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayState == aAttrib, Panic(EInvalidAttributeDS)); sl@0: sl@0: if (aSet) sl@0: { sl@0: TBool on = (TBool)aInOut; sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetState, (TAny*)on, NULL, aDeviceNumber); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalState, aInOut, NULL, aDeviceNumber); sl@0: sl@0: } sl@0: sl@0: // EDisplayColors sl@0: TInt ProcessDisplayColors(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayColors == aAttrib, Panic(EInvalidAttributeDC)); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalColors, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayBrightnessMax sl@0: TInt ProcessDisplayMaxBrightness(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayBrightnessMax == aAttrib, Panic(EInvalidAttributeMB)); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalMaxDisplayBrightness, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EDisplayContrastMax sl@0: TInt ProcessDisplayMaxContrast(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::EDisplayContrastMax == aAttrib, Panic(EInvalidAttributeMC)); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalMaxDisplayContrast, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: /* sl@0: TInt ProcessSecureDisplayCurrentModeInfo(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool aSet, TAny* aInOut) sl@0: { sl@0: //only info obtainable about secure display is the address sl@0: __ASSERT_DEBUG(HAL::ESecureDisplayMemoryAddress == aAttrib, Panic(EInvalidAttributeSDMA)); sl@0: sl@0: TVideoInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalCurrentModeInfo, (TAny*)&infoPckg, (TAny*)ETrue, aDeviceNumber); sl@0: if (KErrNone == r) sl@0: *(TInt*)aInOut = info.iVideoAddress; sl@0: sl@0: return r; sl@0: } sl@0: */ sl@0: sl@0: TInt ProcessDisplayCurrentModeInfo(TInt aDeviceNumber, TInt aAttrib, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TVideoInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalCurrentModeInfo, (TAny*)&infoPckg, (TAny*)EFalse, aDeviceNumber); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EDisplayXPixels: sl@0: *(TInt*)aInOut = info.iSizeInPixels.iWidth; sl@0: break; sl@0: sl@0: case HAL::EDisplayYPixels: sl@0: *(TInt*)aInOut = info.iSizeInPixels.iHeight; sl@0: break; sl@0: sl@0: case HAL::EDisplayXTwips: sl@0: *(TInt*)aInOut = info.iSizeInTwips.iWidth; sl@0: break; sl@0: sl@0: case HAL::EDisplayYTwips: sl@0: *(TInt*)aInOut = info.iSizeInTwips.iHeight; sl@0: break; sl@0: sl@0: case HAL::EDisplayMemoryAddress: sl@0: if (info.iVideoAddress == 0) //if this is true, the actual address is returned by EDisplayHalGetDisplayMemoryAddress sl@0: { sl@0: r = UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalGetDisplayMemoryAddress, aInOut, (TAny*)EFalse, aDeviceNumber); sl@0: } sl@0: else sl@0: { sl@0: *(TInt*)aInOut = info.iVideoAddress; sl@0: } sl@0: break; sl@0: sl@0: case HAL::EDisplayIsPixelOrderRGB: sl@0: *(TInt*)aInOut = info.iIsPixelOrderRGB; sl@0: break; sl@0: sl@0: case HAL::EDisplayIsPixelOrderLandscape: sl@0: *(TInt*)aInOut = info.iIsPixelOrderLandscape; sl@0: break; sl@0: sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttributeCMI)); sl@0: break; sl@0: sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: sl@0: TInt ProcessDisplaySpecifiedModeInfo(TInt aDeviceNumber, TInt aAttrib, TBool __DEBUG_ONLY(aSet), TAny* aInOut) sl@0: { sl@0: sl@0: __ASSERT_DEBUG(!aSet, Panic(EInvalidAttributeSMI2)); sl@0: sl@0: sl@0: TVideoInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSpecifiedModeInfo, aInOut, (TAny*)&infoPckg, aDeviceNumber); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EDisplayIsMono: sl@0: *(TInt*)aInOut = info.iIsMono; sl@0: break; sl@0: sl@0: case HAL::EDisplayIsPalettized: sl@0: *(TInt*)aInOut = info.iIsPalettized; sl@0: break; sl@0: sl@0: case HAL::EDisplayBitsPerPixel: sl@0: *(TInt*)aInOut = info.iBitsPerPixel; sl@0: break; sl@0: sl@0: case HAL::EDisplayOffsetToFirstPixel: sl@0: *(TInt*)aInOut = info.iOffsetToFirstPixel; sl@0: break; sl@0: sl@0: case HAL::EDisplayOffsetBetweenLines: sl@0: *(TInt*)aInOut = info.iOffsetBetweenLines; sl@0: break; sl@0: sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttributeSMI)); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: //ESecureDisplay sl@0: /* sl@0: TInt ProcessSecureDisplay(TInt aDeviceNumber, TInt __DEBUG_ONLY(aAttrib), TBool aSet, TAny* aInOut) sl@0: { sl@0: __ASSERT_DEBUG(HAL::ESecureDisplay == aAttrib, Panic(EInvalidAttributeSD)); sl@0: sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetSecure, aInOut, NULL, aDeviceNumber); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSecure, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: */ sl@0: sl@0: // EBacklight sl@0: TInt GetBacklightPresent(TInt aDeviceNumber, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TInt state=0; sl@0: TInt r=UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalBacklightOn, (TAny*)&state, NULL, aDeviceNumber); sl@0: *(TInt*)aInOut=(r==KErrNone)?1:0; // if there is a backlight we should be able to get its state sl@0: return KErrNone; sl@0: } sl@0: sl@0: // EBacklightState sl@0: TInt ProcessBacklightState(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalSetBacklightOn, aInOut, NULL, aDeviceNumber); sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalBacklightOn, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: // EPen sl@0: TInt GetPenPresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TDigitiserInfoV01Buf buf; sl@0: TInt r=UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalXYInfo, (TAny*)&buf, NULL); sl@0: *(TInt*)aInOut=(r==KErrNone)?1:0; // if there is a pen device we should be able to get info out of it sl@0: return KErrNone; sl@0: } sl@0: sl@0: // EPenX and EPenY sl@0: TInt ProcessPenInfo(TInt /*aDeviceNumber*/, TInt aAttrib, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TDigitiserInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalXYInfo, (TAny*)&infoPckg, NULL); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EPenX: sl@0: *(TInt*)aInOut=(TInt)info.iDigitiserSize.iWidth; sl@0: break; sl@0: case HAL::EPenY: sl@0: *(TInt*)aInOut = info.iDigitiserSize.iHeight; sl@0: break; sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttribPen)); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EPenState sl@0: TInt ProcessPenState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalSetXYState, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalXYState, aInOut, NULL); sl@0: } sl@0: sl@0: // EPenDisplayOn sl@0: TInt ProcessPenDisplayOnState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalSetPointerSwitchesOn, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalPointerSwitchesOn, aInOut, NULL); sl@0: } sl@0: sl@0: // EPenClick sl@0: TInt GetPenClickPresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TInt state=0; sl@0: TInt r=UserSvr::HalFunction(EHalGroupSound, ESoundHalPointerClickEnabled, (TAny*)state, NULL); sl@0: *(TInt*)aInOut=(r==KErrNone)?1:0; // if there is a clicking device we should be able to get its state sl@0: return KErrNone; sl@0: } sl@0: sl@0: // EPenClickVolumeMax sl@0: TInt GetPenClickVolumeMax(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalPointerClickVolumeMax, aInOut, NULL); sl@0: } sl@0: sl@0: // EPenClickState sl@0: TInt ProcessPenClickState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalSetPointerClickEnabled, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalPointerClickEnabled, aInOut, NULL); sl@0: } sl@0: sl@0: // EPenClickVolume sl@0: TInt ProcessPenClickVolume(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: TInt r; sl@0: if (aSet) sl@0: { sl@0: TInt vol=(TInt)aInOut; sl@0: TInt volMax=0; sl@0: r=UserSvr::HalFunction(EHalGroupSound, ESoundHalPointerClickVolumeMax, (TAny*)volMax, NULL); sl@0: if (r!=KErrNone) sl@0: return r; sl@0: if (vol<0 || vol>volMax) sl@0: return KErrArgument; sl@0: return UserSvr::HalFunction(EHalGroupSound, ESoundHalSetPointerClickLoud, (TAny*)vol, NULL); sl@0: } sl@0: TBool state; sl@0: r=UserSvr::HalFunction(EHalGroupSound, ESoundHalPointerClickLoud, (TAny*)&state, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=state?1:0; sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // ECaseSwitchDisplayOn sl@0: TInt ProcessCaseSwitchDisplayOnState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalSetCaseOpenSwitchesOn, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalCaseOpenSwitchesOn, aInOut, NULL); sl@0: } sl@0: sl@0: // ECaseSwitchDisplayOff sl@0: TInt ProcessCaseSwitchDisplayOffState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalSetCaseCloseSwitchesOff, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupPower, EPowerHalCaseCloseSwitchesOff, aInOut, NULL); sl@0: } sl@0: sl@0: // ELEDs sl@0: TInt GetLedCaps(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TVariantInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupVariant, EVariantHalVariantInfo, (TAny*)&infoPckg, NULL); sl@0: if (r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=(info.iLedCapabilities)>>16; // upper half for number of Leds, lower half for colour capabilities sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // ELEDmask sl@0: TInt ProcessLEDMask(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalLedMaskSet, aInOut, NULL); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalLedMaskGet, aInOut, NULL); sl@0: } sl@0: sl@0: // ESwitches sl@0: TInt GetSwitches(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalSwitches, aInOut, NULL); sl@0: } sl@0: sl@0: // EMouse sl@0: TInt GetMousePresent(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TMouseInfoV01Buf buf; sl@0: TInt r=UserSvr::HalFunction(EHalGroupMouse, EMouseHalMouseInfo, (TAny*)&buf, NULL); sl@0: *(TInt*)aInOut=(r==KErrNone)?1:0; // if there is a mouse device we should be able to get info out of it sl@0: return KErrNone; sl@0: } sl@0: sl@0: // EMouseX, EMouseY and EMouseButtons sl@0: TInt ProcessMouseInfo(TInt /*aDeviceNumber*/, TInt aAttrib, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TMouseInfoV01 info; sl@0: TPckg infoPckg(info); sl@0: TInt r=UserSvr::HalFunction(EHalGroupMouse, EMouseHalMouseInfo, (TAny*)&infoPckg, NULL); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EMouseX: sl@0: *(TInt*)aInOut=(TInt)info.iMouseAreaSize.iWidth; sl@0: break; sl@0: case HAL::EMouseY: sl@0: *(TInt*)aInOut = info.iMouseAreaSize.iHeight; sl@0: break; sl@0: case HAL::EMouseButtons: sl@0: *(TInt*)aInOut=(TInt)info.iMouseButtons; sl@0: break; sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttribMouse)); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EMouseState sl@0: TInt ProcessMouseState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalSetMouseState, aInOut, NULL); sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalMouseState, aInOut, NULL); sl@0: } sl@0: sl@0: // EMouseSpeed sl@0: TInt ProcessMouseSpeed(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: TInt speed=(TInt)aInOut; sl@0: if (speed<0 || speed>255) sl@0: return KErrArgument; sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalSetMouseSpeed, (TAny*)speed, NULL); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalMouseSpeed, aInOut, NULL); sl@0: } sl@0: sl@0: // EMouseAcceleration sl@0: TInt ProcessMouseAcceleration(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: TInt acc=(TInt)aInOut; sl@0: if (acc<0 || acc>255) sl@0: return KErrArgument; sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalSetMouseAcceleration, (TAny*)acc, NULL); sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupMouse, EMouseHalMouseAcceleration, aInOut, NULL); sl@0: } sl@0: sl@0: // EMouseButtonState sl@0: TInt GetMouseButtonState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* /*aInOut*/) sl@0: { sl@0: return KErrNotSupported; sl@0: } sl@0: sl@0: // EDebugPort sl@0: TInt ProcessDebugPort(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, aSet ? EVariantHalDebugPortSet : EVariantHalDebugPortGet, aInOut, NULL); sl@0: } sl@0: sl@0: // ECustomRestart sl@0: TInt ProcessCustomRestart(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (!aSet) sl@0: return KErrNotSupported; sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalCustomRestart, aInOut, NULL); sl@0: } sl@0: sl@0: // ECustomRestartReason sl@0: TInt ProcessCustomRestartReason(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalCustomRestartReason, aInOut, NULL); sl@0: } sl@0: sl@0: // EHardwareFloatingPoint sl@0: TInt GetHardwareFloatingPoint(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupKernel, EKernelHalHardwareFloatingPoint, aInOut, NULL); sl@0: } sl@0: sl@0: // ETimeNonSecureOffset sl@0: TInt NonsecureClockOffset(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: TInt kernelHalFnId = aSet ? EKernelHalSetNonsecureClockOffset : EKernelHalGetNonsecureClockOffset; sl@0: return UserSvr::HalFunction(EHalGroupKernel, kernelHalFnId, aInOut, NULL); sl@0: } sl@0: sl@0: // ECaseState sl@0: TInt GetCaseState(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalCaseState, aInOut, NULL); sl@0: } sl@0: sl@0: // EPersistStartupModeKernel sl@0: TInt ProcessPersistStartupMode(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupVariant, aSet ? EVariantHalPersistStartupMode : EVariantHalGetPersistedStartupMode, aInOut, NULL); sl@0: } sl@0: sl@0: // EAvailableCustomRestartReasons sl@0: TInt GetMaximumCustomRestartReasons(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return KErrNotSupported; sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalGetMaximumCustomRestartReasons, aInOut, NULL); sl@0: } sl@0: sl@0: // EMaximumRestartStartupModes sl@0: TInt GetMaximumRestartStartupModes(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return KErrNotSupported; sl@0: return UserSvr::HalFunction(EHalGroupVariant, EVariantHalGetMaximumRestartStartupModes, aInOut, NULL); sl@0: } sl@0: sl@0: sl@0: // EPointer3DThetaSupported, EPointer3PhiSupported, EPointer3DRotationSupported, EPointer3DPressureSupported, sl@0: //EPointer3DProximityStep,EPointerMaxPointers,EPointer3DMaxPressure,EPointer3DPressureStep sl@0: sl@0: TInt ProcessAdvancedPointer(TInt aDeviceNumber, TInt aAttrib, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: TDigitiserInfoV02 info; sl@0: TPckg infoPckg(info); sl@0: sl@0: TInt r=UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHal3DInfo,(TAny*)&infoPckg, NULL,aDeviceNumber); sl@0: if (KErrNone == r) sl@0: { sl@0: switch (aAttrib) sl@0: { sl@0: case HAL::EPointer3DThetaSupported: sl@0: *(TInt*)aInOut=(TInt)info.iThetaSupported; sl@0: break; sl@0: sl@0: case HAL::EPointer3DPhiSupported: sl@0: *(TInt*)aInOut = info.iPhiSupported; sl@0: break; sl@0: sl@0: case HAL::EPointer3DRotationSupported: sl@0: *(TInt*)aInOut = info.iAlphaSupported; sl@0: break; sl@0: sl@0: case HAL::EPointer3DPressureSupported: sl@0: *(TInt*)aInOut = info.iPressureSupported; sl@0: break; sl@0: sl@0: case HAL::EPointer3DProximityStep: sl@0: *(TInt*)aInOut = info.iProximityStep; sl@0: break; sl@0: sl@0: case HAL::EPointerMaxPointers: sl@0: *(TInt*)aInOut = info.iMaxPointers; sl@0: break; sl@0: sl@0: case HAL::EPointer3DMaxPressure: sl@0: *(TInt*)aInOut = info.iMaxPressure; sl@0: break; sl@0: sl@0: case HAL::EPointer3DPressureStep: sl@0: *(TInt*)aInOut = info.iPressureStep; sl@0: break; sl@0: sl@0: default: sl@0: __ASSERT_DEBUG(EFalse, Panic(EInvalidAttrib3DPointer)); sl@0: break; sl@0: } sl@0: } sl@0: return r; sl@0: } sl@0: sl@0: // EPointer3D sl@0: TInt Get3DPointerPresent(TInt aDeviceNumber, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHal3DPointer, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: //EPointer3DMaxProximity sl@0: TInt Process3DRange(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalSetZRange, aInOut, NULL, aDeviceNumber); sl@0: else sl@0: { sl@0: TDigitiserInfoV02 info; sl@0: sl@0: TPckg infoPckg(info); sl@0: TInt r =UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHal3DInfo,(TAny*)&infoPckg, NULL, aDeviceNumber); sl@0: if(r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iZRange; sl@0: } sl@0: return r; sl@0: } sl@0: } sl@0: sl@0: // EPointerNumberOfPointers sl@0: TInt ProcessNumberOfPointers(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: return UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHalSetNumberOfPointers, aInOut, NULL, aDeviceNumber); sl@0: else sl@0: { sl@0: TDigitiserInfoV02 info; sl@0: TPckg infoPckg(info); sl@0: TInt r =UserSvr::HalFunction(EHalGroupDigitiser, EDigitiserHal3DInfo, (TAny*)&infoPckg, NULL, aDeviceNumber); sl@0: if(r==KErrNone) sl@0: { sl@0: *(TInt*)aInOut=info.iNumberOfPointers; sl@0: } sl@0: return r; sl@0: } sl@0: } sl@0: sl@0: // ENanoTickPeriod sl@0: TInt ProcessNanoTickPeriod(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupKernel,EKernelHalNTickPeriod, aInOut, NULL); sl@0: } sl@0: sl@0: // EFastCounterFrequency sl@0: TInt ProcessFastCounterFrequency(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool /*aSet*/, TAny* aInOut) sl@0: { sl@0: return UserSvr::HalFunction(EHalGroupKernel,EKernelHalFastCounterFrequency, aInOut, NULL); sl@0: } sl@0: sl@0: //EDisplayMemoryHandle sl@0: TInt GetDisplayMemoryHandle(TInt aDeviceNumber, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: return KErrNotSupported; sl@0: } sl@0: return UserSvr::HalFunction(EHalGroupDisplay, EDisplayHalGetDisplayMemoryHandle, aInOut, NULL, aDeviceNumber); sl@0: } sl@0: sl@0: //ENumCpus sl@0: TInt GetNumCpus(TInt /*aDeviceNumber*/, TInt /*aAttrib*/, TBool aSet, TAny* aInOut) sl@0: { sl@0: if (aSet) sl@0: { sl@0: return KErrNotSupported; sl@0: } sl@0: *(TInt*)aInOut=UserSvr::HalFunction(EHalGroupKernel, EKernelHalNumLogicalCpus, NULL, NULL); sl@0: return KErrNone; sl@0: } sl@0: