Trying to figure out how to implement my WINC like compatibility layer. Going the emulation way is probably not so smart. We should not use the kernel but rather hook native functions in the Exec calls.
// Copyright (c) 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:
// e32test/hcr/d_hcrsim.h
//
//
#ifndef D_HCRSIM_H
#define D_HCRSIM_H
#include <e32cmn.h>
#include <e32ver.h>
#include <drivers/hcr.h>
#include "hcr_hai.h"
#include "hcr_pil.h"
#ifndef __KERNEL_MODE__
using namespace HCR;
#endif // __KERNEL_MODE__
// Device driver name
_LIT(KTestHcrSim, "d_hcrsim");
// The following flags are used when calling InitExtension() in order to modify
// the behaviour of the test PSL.
enum TTestPslConfiguration {
// Make PSL return NULL when asked for the address of the Compiled Repository
ETestNullRepository = 0x1,
// Compiled Repository contains 0 element
ETestEmptyRepository = 0x2,
// PSL's IgnoreCoreImgRepository() returns ETrue when this is set
ETestIgnoreCoreImgRepository = 0x4,
// Use Corrupt Repository (not ordered)
ETestCorruptRepository1 = 0x8,
// Use Corrupt Repository (has duplicates)
ETestCorruptRepository2 = 0x10,
// Set Override Repository address to the Empty Compiled Repository
ETestEnableOverrideRepository = 0x20,
};
class RHcrSimTestChannel : public RBusLogicalChannel
{
public:
enum TTestControl
{
// HCR Published API's
EHcrGetLinAddr,
EHcrFindNumSettingsInCategory,
EHcrFindSettingsCategory,
EHcrFindSettingsPattern,
EHcrGetTypeAndSize,
EHcrGetWordSettings,
EHcrGetInt64,
EHcrGetInt32,
EHcrGetInt16,
EHcrGetInt8,
EHcrGetBool,
EHcrGetDataArray,
EHcrGetDataDes,
EHcrGetUInt64,
EHcrGetUInt32,
EHcrGetUInt16,
EHcrGetUInt8,
EHcrGetArrayInt,
EHcrGetArrayUInt,
EHcrGetStringArray,
EHcrGetStringDes,
// HCR Internal API's
EHcrInitExtension,
EHcrSwitchRepository,
EHcrClearRepository,
EHcrCheckIntegrity,
};
#ifndef __KERNEL_MODE__
inline TInt Open();
inline TInt GetLinAddr(const TSettingId& aId, TLinAddr& aValue);
inline TInt FindNumSettingsInCategory(TCategoryUid aCatUid);
inline TInt FindSettings(TCategoryUid aCatUid,
TInt aMaxNum, TUint32& aNumFound,
TElementId* aElIds, TSettingType* aTypes, TUint16* aLens);
inline TInt FindSettings(TCategoryUid aCat,
TInt aMaxNum, TUint32 aAtId,
TUint32 aMask, TUint32 aPattern, TUint32& aNumFound,
TElementId* aElIds, TSettingType* aTypes, TUint16* aLens);
inline TInt GetTypeAndSize(const TSettingId& aId,
TSettingType& aType, TUint16& aLen);
inline TInt GetWordSettings(TInt aNum, const SSettingId aIds[],
TInt32 aValues[], TSettingType aTypes[],
TInt aErrors[]);
inline TInt GetInt(const TSettingId& aId, TInt64& aValue);
inline TInt GetInt(const TSettingId& aId, TInt32& aValue);
inline TInt GetInt(const TSettingId& aId, TInt16& aValue);
inline TInt GetInt(const TSettingId& aId, TInt8& aValue);
inline TInt GetBool(const TSettingId& aId, TBool& aValue);
inline TInt GetData(const TSettingId& aId, TDes8& aValue);
inline TInt GetData(const TSettingId& aId, TUint16 aMaxLen,
TUint8* aValue, TUint16& aLen);
inline TInt GetUInt(const TSettingId& aId, TUint64& aValue);
inline TInt GetUInt(const TSettingId& aId, TUint32& aValue);
inline TInt GetUInt(const TSettingId& aId, TUint16& aValue);
inline TInt GetUInt(const TSettingId& aId, TUint8& aValue);
inline TInt GetArray(const TSettingId& aId, TUint16 aMaxLen,
TInt32* aValue, TUint16& aLen);
inline TInt GetArray(const TSettingId& aId, TUint16 aMaxLen,
TUint32* aValue, TUint16& aLen);
inline TInt GetString(const TSettingId& aId, TDes8& aValue);
inline TInt GetString(const TSettingId& aId, TUint16 aMaxLen,
TText8* aValue, TUint16& aLen);
inline TInt InitExtension(const TUint32 aFlags = 0);
inline TInt SwitchRepository(const TDesC8& aFileName, HCRInternal::TReposId aId);
inline TInt CheckIntegrity();
#endif // __KERNEL_MODE__
};
#ifndef __KERNEL_MODE__
inline TInt RHcrSimTestChannel::Open()
{return (DoCreate(KTestHcrSim(), TVersion(1, 0, KE32BuildVersionNumber), KNullUnit, NULL, NULL, EOwnerThread));}
inline TInt RHcrSimTestChannel::GetLinAddr(const TSettingId& aId, TLinAddr& aValue)
{return DoControl(EHcrGetLinAddr, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::FindNumSettingsInCategory(TCategoryUid aCatUid)
{return DoControl(EHcrFindNumSettingsInCategory, (TAny*) aCatUid);}
inline TInt RHcrSimTestChannel::FindSettings(TCategoryUid aCatUid,
TInt aMaxNum, TUint32& aNumFound,
TElementId* aElIds, TSettingType* aTypes, TUint16* aLens)
{
TAny* args[6];
args[0] = (TAny*) aCatUid;
args[1] = (TAny*) aMaxNum;
args[2] = (TAny*) &aNumFound;
args[3] = (TAny*) aElIds;
args[4] = (TAny*) aTypes;
args[5] = (TAny*) aLens;
return DoControl(EHcrFindSettingsCategory, (TAny*) args);
}
inline TInt RHcrSimTestChannel::FindSettings(TCategoryUid aCat,
TInt aMaxNum, TUint32 aAtId,
TUint32 aMask, TUint32 aPattern, TUint32& aNumFound,
TElementId* aElIds, TSettingType* aTypes, TUint16* aLens)
{
TAny* args[9];
args[0] = (TAny*) aCat;
args[1] = (TAny*) aMaxNum;
args[2] = (TAny*) aAtId;
args[3] = (TAny*) aMask;
args[4] = (TAny*) aPattern;
args[5] = (TAny*) &aNumFound;
args[6] = (TAny*) aElIds;
args[7] = (TAny*) aTypes;
args[8] = (TAny*) aLens;
return DoControl(EHcrFindSettingsPattern, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetTypeAndSize(const TSettingId& aId,
TSettingType& aType, TUint16& aLen)
{
TAny* args[3];
args[0] = (TAny*) &aId;
args[1] = (TAny*) &aType;
args[2] = (TAny*) &aLen;
return DoControl(EHcrGetTypeAndSize, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetWordSettings(TInt aNum, const SSettingId aIds[],
TInt32 aValues[], TSettingType aTypes[],
TInt aErrors[])
{
TAny* args[5];
args[0] = (TAny*) aNum;
args[1] = (TAny*) aIds;
args[2] = (TAny*) aValues;
args[3] = (TAny*) aTypes;
args[4] = (TAny*) aErrors;
return DoControl(EHcrGetWordSettings, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetInt(const TSettingId& aId, TInt64& aValue)
{return DoControl(EHcrGetInt64, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetInt(const TSettingId& aId, TInt32& aValue)
{return DoControl(EHcrGetInt32, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetInt(const TSettingId& aId, TInt16& aValue)
{return DoControl(EHcrGetInt16, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetInt(const TSettingId& aId, TInt8& aValue)
{return DoControl(EHcrGetInt8, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetBool(const TSettingId& aId, TBool& aValue)
{return DoControl(EHcrGetBool, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetData(const TSettingId& aId, TDes8& aValue)
{return DoControl(EHcrGetDataDes, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetData(const TSettingId& aId, TUint16 aMaxLen,
TUint8* aValue, TUint16& aLen)
{
TAny* args[4];
args[0] = (TAny*) &aId;
args[1] = (TAny*) ((TUint) aMaxLen);
args[2] = (TAny*) aValue;
args[3] = (TAny*) &aLen;
return DoControl(EHcrGetDataArray, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetUInt(const TSettingId& aId, TUint64& aValue)
{return DoControl(EHcrGetUInt64, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetUInt(const TSettingId& aId, TUint32& aValue)
{return DoControl(EHcrGetUInt32, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetUInt(const TSettingId& aId, TUint16& aValue)
{return DoControl(EHcrGetUInt16, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetUInt(const TSettingId& aId, TUint8& aValue)
{return DoControl(EHcrGetUInt8, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetArray(const TSettingId& aId, TUint16 aMaxLen,
TInt32* aValue, TUint16& aLen)
{
TAny* args[4];
args[0] = (TAny*) &aId;
args[1] = (TAny*) ((TUint) aMaxLen);
args[2] = (TAny*) aValue;
args[3] = (TAny*) &aLen;
return DoControl(EHcrGetArrayInt, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetArray(const TSettingId& aId, TUint16 aMaxLen,
TUint32* aValue, TUint16& aLen)
{
TAny* args[4];
args[0] = (TAny*) &aId;
args[1] = (TAny*) ((TUint) aMaxLen);
args[2] = (TAny*) aValue;
args[3] = (TAny*) &aLen;
return DoControl(EHcrGetArrayUInt, (TAny*) args);
}
inline TInt RHcrSimTestChannel::GetString(const TSettingId& aId, TDes8& aValue)
{return DoControl(EHcrGetStringDes, (TAny*) &aId, (TAny*) &aValue);}
inline TInt RHcrSimTestChannel::GetString(const TSettingId& aId, TUint16 aMaxLen,
TText8* aValue, TUint16& aLen)
{
TAny* args[4];
args[0] = (TAny*) &aId;
args[1] = (TAny*) ((TUint) aMaxLen);
args[2] = (TAny*) aValue;
args[3] = (TAny*) &aLen;
return DoControl(EHcrGetStringArray, (TAny*) args);
}
inline TInt RHcrSimTestChannel::InitExtension(const TUint32 aFlags)
{return DoControl(EHcrInitExtension, (TAny*) aFlags);}
inline TInt RHcrSimTestChannel::SwitchRepository(const TDesC8& aFileName, HCRInternal::TReposId aId)
{return DoControl(EHcrSwitchRepository, (TAny*) &aFileName, (TAny*) aId);}
inline TInt RHcrSimTestChannel::CheckIntegrity()
{return DoControl(EHcrCheckIntegrity);}
#endif // __KERNEL_MODE__
#endif // D_HCRSIM_H