# HG changeset patch # User Martin Trojer # Date 1256117361 -3600 # Node ID 5fca9e46c6fa2415c1458748c70261dd8012c5c6 # Parent e6ebb7730c4bdf7970534af7f138ac6abd4c6201 Merged patch from Johnathan White (@accenture) Added sound support and estart Updated framebuffer (support landscape and portrait mode) Fixes in pointer, keyboard and hostfs diff -r e6ebb7730c4b -r 5fca9e46c6fa .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,3 @@ +syntax: glob + +*~ diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/bld.inf --- a/baseport/syborg/bld.inf Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/bld.inf Wed Oct 21 10:29:21 2009 +0100 @@ -48,12 +48,24 @@ kasyborg // Variant library serial/serial // Serial / UART ports fb/fb // Framebuffer + +fb/fb_landscape +fb/fb_portrait +fb/fb_portrait_wvga + keyboard/keyboard // Keyboard pointer/pointer // Pointer + +pointer/pointer_landscape.mmp +pointer/pointer_portrait.mmp + monitor/monap // Crash Debugger output keymap/keymap // Key mapping library +estart/estart // Customised estart to kick-start hostfs files system + + // platform device library - for flattened device tree (FDT) svpplatform/fdt @@ -67,6 +79,10 @@ svpsnapdriver/svpsnapdriver svpsnapdriver/snapapp + +//Add Sound Driver +soundsc\soundsc + PRJ_EXTENSIONS start extension base/config option PREFIX _syborg_ diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/bootstrap/syborg.inc --- a/baseport/syborg/bootstrap/syborg.inc Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/bootstrap/syborg.inc Wed Oct 21 10:29:21 2009 +0100 @@ -20,7 +20,11 @@ ;--------------------------------------------------------------------------- KHwRamBaseAddr EQU 0x00000000 + +; More ram required to boot SF image KHwRamSizeMb EQU 128 ; 128MB +;KHwRamSizeMb EQU 256 ; 256MB + KHwNorFlashBaseAddr EQU 0x40000000 KHwNorFlashSize EQU 0x04000000 ; 64MB diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/estart/estart.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/estart/estart.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,58 @@ +/* +* 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: +* +*/ + + + +#include + +TARGET VariantTarget(e32strt,exe) +CAPABILITY TCB WriteDeviceData DiskAdmin ProtServ AllFiles PowerMgmt + +TARGETTYPE exe + + +SOURCEPATH \sf\os\kernelhwsrv\userlibandfileserver\fileserver\estart +SOURCE estart.cpp +SOURCEPATH ../estart +SOURCE estartmain.cpp + +STRICTDEPEND + +//SOURCEPATH . +//DOCUMENT ../group/release.txt + +USERINCLUDE \sf\os\kernelhwsrv\userlibandfileserver\fileserver\estart +//SYSTEMINCLUDE ../inc /epoc32/include +SYSTEMINCLUDE /epoc32/include + +LIBRARY efsrv.lib euser.lib hal.lib +LIBRARY domaincli.lib + +//#ifdef WINS +//LIBRARY emulator.lib +//#endif + +//START WINS +//BASEADDRESS 0x62000000 +//win32_library kernel32.lib +//END + + +UID 0 0x10272C04 +VENDORID 0x70000001 + +//#include "../group/f32.mmh" // Generic definitions for the whole f32 component diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/estart/estartmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/estart/estartmain.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,83 @@ +/* +* 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: +* +*/ + +/* + * + * This file starts the HOSTFS local drive mapping + * + */ + +#include +#include "estart.h" + +#define __ENABLE_HOSTFS + +/*! + * Customised estart class + */ +class TSyborgFSStartup : public TFSStartup + { +public: +#ifdef __ENABLE_HOSTFS + virtual void InitHostFS(); +#endif + }; + + +#ifdef __ENABLE_HOSTFS + +/* + * + * Run the Host FS starter program + * + */ +void TSyborgFSStartup::InitHostFS() + { +_LIT(KHostFSMounter, "z:\\sys\\bin\\SVPHOSTFS.EXE"); + + RProcess ws; + TInt r=ws.Create(KHostFSMounter, KNullDesC); + if (r == KErrNone) + { + TRequestStatus stat; + ws.Rendezvous(stat); + ws.Resume(); + User::WaitForRequest(stat); // wait for start or death + ws.Close(); + } + } +#endif + + +/*! + * Estart entry point + */ +GLDEF_C TInt E32Main() + { + + TSyborgFSStartup fsStart; + fsStart.Init(); + + fsStart.Run(); +#ifdef __ENABLE_HOSTFS + fsStart.InitHostFS(); +#endif + fsStart.StartSystem(); + + fsStart.Close(); + return(0); + } diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/estart/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/estart/readme.txt Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,21 @@ +/* +* 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: +* +*/ + + +See \sf\os\kernelhwsrv\userlibandfileserver\fileserver\estart + + diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/fb.mmp --- a/baseport/syborg/fb/fb.mmp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/fb/fb.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -21,6 +21,9 @@ TARGET VariantTarget(lcd,dll) TARGETTYPE kext +MACRO __PORTRAIT_DISPLAY__ + + SYSTEMINCLUDE AsspNKernIncludePath SYSTEMINCLUDE . diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/fb_landscape.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/fb/fb_landscape.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,41 @@ +/* +* 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: +* Sosco +* +* Description: +* Variant derived from fb.mmp +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +TARGET VariantTarget(lcd_landscape,dll) +TARGETTYPE kext + +SYSTEMINCLUDE AsspNKernIncludePath +SYSTEMINCLUDE . + +SOURCEPATH . +SOURCE syborg_fb.cpp + +LIBRARY PlatformLib + +EPOCALLOWDLLDATA + +UID 0x1000008d 0x100039e8 +VENDORID 0x70000001 + +ROMTARGET lcd.dll + +CAPABILITY all diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/fb_portrait.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/fb/fb_portrait.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,43 @@ +/* +* 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: +* Sosco +* +* Description: +* Variant derived from fb.mmp +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +MACRO __PORTRAIT_DISPLAY__ + +TARGET VariantTarget(lcd_portrait,dll) +TARGETTYPE kext + +SYSTEMINCLUDE AsspNKernIncludePath +SYSTEMINCLUDE . + +SOURCEPATH . +SOURCE syborg_fb.cpp + +LIBRARY PlatformLib + +EPOCALLOWDLLDATA + +UID 0x1000008d 0x100039e8 +VENDORID 0x70000001 + +ROMTARGET lcd.dll + +CAPABILITY all diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/fb_portrait_wvga.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/fb/fb_portrait_wvga.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,44 @@ +/* +* 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: +* Sosco +* +* Description: +* Variant derived from fb.mmp +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +MACRO __PORTRAIT_DISPLAY__ +MACRO __DISPLAY_WVGA__ + +TARGET VariantTarget(lcd_portrait_wvga,dll) +TARGETTYPE kext + +SYSTEMINCLUDE AsspNKernIncludePath +SYSTEMINCLUDE . + +SOURCEPATH . +SOURCE syborg_fb.cpp + +LIBRARY PlatformLib + +EPOCALLOWDLLDATA + +UID 0x1000008d 0x100039e8 +VENDORID 0x70000001 + +ROMTARGET lcd.dll + +CAPABILITY all \ No newline at end of file diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/syborg_fb.cpp --- a/baseport/syborg/fb/syborg_fb.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/fb/syborg_fb.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -197,9 +197,13 @@ if(aMode != aInfo.iDisplayMode) { - aInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel; + + aInfo.iOffsetToFirstPixel = KConfigOffsetToFirstPixel; + aInfo.iIsPalettized = KConfigIsPalettized; - aInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines; + + aInfo.iOffsetBetweenLines = KConfigOffsetBetweenLines; + aInfo.iBitsPerPixel = KConfigBitsPerPixel; } return KErrNone; @@ -208,7 +212,10 @@ TInt DLcdPowerHandler::AllocateFrameBuffer() { // Allocate physical RAM for video - TInt vSize = TSyborg::VideoRamSize(); + +// Added only the comments + TInt vSize = TSyborg::VideoRamSize(); // Maximum display now 854 x 854 + NKern::ThreadEnterCS(); TInt r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys); @@ -251,8 +258,10 @@ iVideoInfo.iSizeInPixels.iWidth = KConfigLcdWidth; iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight; iVideoInfo.iDisplayMode = KConfigLcdDisplayMode; - iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel; - iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines; + + iVideoInfo.iOffsetToFirstPixel = KConfigOffsetToFirstPixel; + iVideoInfo.iOffsetBetweenLines = KConfigOffsetBetweenLines; + iVideoInfo.iIsPalettized = KConfigIsPalettized; iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel; iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips; @@ -446,8 +455,10 @@ iVideoInfo.iSizeInPixels.iWidth = KConfigLcdWidth; iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight; iVideoInfo.iDisplayMode = KConfigLcdDisplayMode; - iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel; - iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines; + + iVideoInfo.iOffsetToFirstPixel = KConfigOffsetToFirstPixel; + iVideoInfo.iOffsetBetweenLines = KConfigOffsetBetweenLines; + iVideoInfo.iIsPalettized = KConfigIsPalettized; iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel; iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips; diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/fb/syborg_fb.h --- a/baseport/syborg/fb/syborg_fb.h Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/fb/syborg_fb.h Wed Oct 21 10:29:21 2009 +0100 @@ -24,15 +24,61 @@ #include #include + + +// The definition of __portrait_display__ in the MMP file affects +// both the display and the pointer component, so both must be +// rebuilt if this setting is changed. + + _LIT(KLitLcd,"SYBORG_FB"); -const TUint KConfigLcdWidth = 640; + +#ifdef __PORTRAIT_DISPLAY__ // portrait display selected + +# ifdef __DISPLAY_WVGA__ + +#pragma comment(layout,"Portrait display enabled") +const TUint KConfigLcdWidth = 854; // This must be left at 640, even with only 360 used by S60 +const TUint KConfigLcdHeight = 854; +const TInt KConfigLcdHeightInTwips = 12860; +const TInt KConfigLcdWidthInTwips = 12860; +const TUint KConfigMouseWidth = 480; // Usable width for the mouse driver +const TUint KConfigMouseMin = 0; + +# else //__DISPLAY_WVGA__ + +#pragma comment(layout,"Portrait display enabled") +const TUint KConfigLcdWidth = 640; // This must be left at 640, even with only 360 used by S60 +const TUint KConfigLcdHeight = 640; +const TInt KConfigLcdHeightInTwips = 3550; +const TInt KConfigLcdWidthInTwips = 3550; +const TUint KConfigMouseWidth = 360; // Usable width for the mouse driver + +const TUint KConfigMouseMin = 0; +# endif //__DISPLAY_WVGA__ + + + + +#else // __PORTRAIT_DISPLAY__ Landscape display selected + +#pragma comment(layout,"Landscape display enabled") +const TUint KConfigLcdWidth = 640; const TUint KConfigLcdHeight = 480; -const TInt KConfigLcdWidthInTwips = 9638; -const TInt KConfigLcdHeightInTwips = 7370; +const TInt KConfigLcdWidthInTwips = 3550; +const TInt KConfigLcdHeightInTwips = 2670; +const TUint KConfigMouseWidth = 640; // Usable width for the mouse driver + +const TUint KConfigMouseMin = 120; // mouse range is 120 - 480, not 0 - 360 +#endif // __PORTRAIT_DISPLAY__ + + const TBool KConfigIsMono = 0; const TBool KConfigIsPalettized = 0; -const TInt KCOnfigOffsetToFirstPixel = 0; + +const TInt KConfigOffsetToFirstPixel = 0; + const TBool KConfigPixelOrderRGB = 0; const TBool KConfigPixelOrderLandscape = 1; const TInt KConfigLcdDisplayMode = 2; @@ -41,7 +87,13 @@ const TInt KConfigBitsPerPixel = 24; -const TInt KCOnfigOffsetBetweenLines = 2560; + +#ifdef __DISPLAY_WVGA__ +const TInt KConfigOffsetBetweenLines = 3416; +#else //__DISPLAY_WVGA__ +const TInt KConfigOffsetBetweenLines = 2560; +#endif //__DISPLAY_WVGA__ + class DLcdPowerHandler : public DPowerHandler { @@ -72,7 +124,7 @@ TInt GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo); TInt SetDisplayMode(TInt aMode); TInt AllocateFrameBuffer(); - + TBool iDisplayOn; DPlatChunkHw* iChunk; DPlatChunkHw* iSecureChunk; @@ -83,7 +135,7 @@ TDfcQue* iDfcQ; TMessageQue iMsgQ; // to prevent a race condition with Power Manager trying to power up/down at the same time TDfc iPowerUpDfc; - TDfc iPowerDownDfc; + TDfc iPowerDownDfc; private: TVideoInfoV01 iVideoInfo; diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/keyboard/syborg_keyboard.h --- a/baseport/syborg/keyboard/syborg_keyboard.h Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/keyboard/syborg_keyboard.h Wed Oct 21 10:29:21 2009 +0100 @@ -144,11 +144,13 @@ /*3c*/ EStdKeyF2, /*3d*/ EStdKeyF3, /*3e*/ EStdKeyF4, - /*3f*/ EStdKeyF5, - - /*40*/ EStdKeyF6, - /*41*/ EStdKeyF7, - /*42*/ EStdKeyF8, + + /*3f*/ EStdKeyDevice0, //EStdKeyF5, SF: Left soft-key [EStdKeyApplication0] + + /*40*/ EStdKeyDevice3, //EStdKeyF6, SF: OK key + /*41*/ EStdKeyDevice1, //EStdKeyF7, SF: Right soft-key + /*42*/ EStdKeyApplication0, //EStdKeyF8, SF Menu key + /*43*/ EStdKeyF9, /*44*/ EStdKeyF10, /*45*/ EStdKeyNull, @@ -161,7 +163,9 @@ /*4c*/ EStdKeyNull, /*4d*/ EStdKeyRightArrow, /*4e*/ EStdKeyNull, - /*4f*/ EStdKeyNull, + + /*4f*/ EStdKeyEnd, + /*50*/ EStdKeyDownArrow, /*51*/ EStdKeyPageDown, diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/keymap/keymap.cpp --- a/baseport/syborg/keymap/keymap.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/keymap/keymap.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -1356,6 +1356,11 @@ {'0', '9'}, {'A', 'Z'}, {EStdKeyF1, EStdKeyDictaphoneRecord}, + + {EStdKeyDevice0,EStdKeyDeviceF}, + {EStdKeyApplication0, EStdKeyApplicationF}, + {EStdKeyYes, EStdKeyDecBrightness}, + }; LOCAL_D const TUint16 convKeyCodes_base[]= @@ -1481,6 +1486,45 @@ EKeyDictaphonePlay, EKeyDictaphoneStop, EKeyDictaphoneRecord, + + + EKeyDevice0, + EKeyDevice1, + EKeyDevice2, + EKeyDevice3, + EKeyDevice4, + EKeyDevice5, + EKeyDevice6, + EKeyDevice7, + EKeyDevice8, + EKeyDevice9, + EKeyDeviceA, + EKeyDeviceB, + EKeyDeviceC, + EKeyDeviceE, + EKeyDeviceE, + EKeyDeviceF, + EKeyApplication0, + EKeyApplication1, + EKeyApplication2, + EKeyApplication3, + EKeyApplication4, + EKeyApplication5, + EKeyApplication6, + EKeyApplication7, + EKeyApplication8, + EKeyApplication9, + EKeyApplicationA, + EKeyApplicationB, + EKeyApplicationC, + EKeyApplicationD, + EKeyApplicationE, + EKeyApplicationF, + EKeyYes, + EKeyNo, + EKeyIncBrightness, + EKeyDecBrightness + }; // caps-lock: this table traps those scanCodes which are affected by caps-lock diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/pointer/pointer_landscape.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/pointer/pointer_landscape.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,48 @@ +/* +* 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: +* Sosco - derived from pointer.mmp +* +* Description: +* epointer.dll for landscape mode +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +TARGET VariantTarget(epointer_landscape,dll) +TARGETTYPE kext +LINKAS epointer.dll + +SYSTEMINCLUDE . +SYSTEMINCLUDE AsspNKernIncludePath + +SOURCEPATH . +SOURCE syborg_pointer.cpp + +//LIBRARY ekern.lib +LIBRARY PlatformLib + +//NOEXPORTLIBRARY + +//DEFFILE ../e32/~/empty.def +//DEFFILE ./~/cmse.def + +//NOSTRICTDEF + +UID 0x100039cf 0x100000db +VENDORID 0x70000001 + +CAPABILITY all + + diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/pointer/pointer_portrait.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/pointer/pointer_portrait.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,50 @@ +/* +* 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: +* Sosco - derived from pointer.mmp +* +* Description: +* epointer.dll for portrait mode +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +MACRO __PORTRAIT_DISPLAY__ + +TARGET VariantTarget(epointer_portrait,dll) +TARGETTYPE kext +LINKAS epointer.dll + +SYSTEMINCLUDE . +SYSTEMINCLUDE AsspNKernIncludePath + +SOURCEPATH . +SOURCE syborg_pointer.cpp + +//LIBRARY ekern.lib +LIBRARY PlatformLib + +//NOEXPORTLIBRARY + +//DEFFILE ../e32/~/empty.def +//DEFFILE ./~/cmse.def + +//NOSTRICTDEF + +UID 0x100039cf 0x100000db +VENDORID 0x70000001 + +CAPABILITY all + + diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/pointer/syborg_pointer.cpp --- a/baseport/syborg/pointer/syborg_pointer.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/pointer/syborg_pointer.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -20,10 +20,29 @@ #include #include "syborg_pointer.h" -TPointerRv::TPointerRv(): - iRxDfc(RxDfc,this,Kern::DfcQue0(),1) + +_LIT(KPointerDfcQNamePre,"PointDFC"); +const TInt KDfcQuePriority = 27; + + + +TPointerRv::TPointerRv() //sosco : +// iRxDfc(RxDfc,this,Kern::DfcQue0(),1) + { __DEBUG_PRINT("TPointerRv::TPointerRv()"); + + + TInt err = Kern::DfcQInit(&iDfcQue, KDfcQuePriority, &KPointerDfcQNamePre); + if (err) + { + __KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::TPointerRv() Error creating dfcq (%d)", err)); + } + + iRxDfc = new TDfc(RxDfc,this,&iDfcQue,1); + __ASSERT_ALWAYS(iRxDfc!=NULL,Kern::Printf("Failed to create DFC")); + + TInt r = Interrupt::Bind(EIntPointer,Isr,this); if(r != KErrNone) __KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::TPointerRv() Interrupt::Bind(%d)=%d", @@ -43,7 +62,7 @@ struct TPointerRv::PData* val = &iPDataFifo[iFifoPos]; iFifoPos++; iFifoCount--; - + if (iFifoPos == FIFO_SIZE) iFifoPos = 0; @@ -53,10 +72,10 @@ void TPointerRv::FifoPush(struct TPointerRv::PData* val) { TInt slot; - + if (iFifoCount == FIFO_SIZE) return; - + slot = iFifoPos + iFifoCount; if (slot >= FIFO_SIZE) slot -= FIFO_SIZE; @@ -74,7 +93,7 @@ TInt reg = ReadReg(KHwBaseKmiPointer,POINTER_ID); WriteReg(KHwBaseKmiPointer,POINTER_INT_ENABLE,1); - + TInt r = Kern::AddHalEntry(EHalGroupMouse,DoPointerHalFunction,this); if(r != KErrNone) __KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::AddHalEntry()=%d", r)); @@ -86,16 +105,24 @@ r = Kern::HalFunction(EHalGroupDisplay, EDisplayHalCurrentModeInfo, (TAny*)&buf, NULL); if(r != KErrNone) __KTRACE_OPT(KPANIC, Kern::Printf("TPointerRv::Init3(): Kern::HalFunction(EDisplayHalCurrentModeInfo)=%d", r)); - + iScreenWidth = videoInfo.iSizeInPixels.iWidth; iScreenHeight = videoInfo.iSizeInPixels.iHeight; iDisplayMode = videoInfo.iDisplayMode; + + iVideoMem = videoInfo.iVideoAddress + videoInfo.iOffsetToFirstPixel; + iOffSetBetweenEachLine = 640; + ix = iy = 0; iXFactor = Fixed(iScreenWidth) / Fixed(0x8000); iYFactor = Fixed(iScreenHeight) / Fixed(0x8000); - + iFifoPos = iFifoCount = 0; + + + iFirstTime= ETrue; + } @@ -108,7 +135,7 @@ // i->ix += pd->x; // i->iy += pd->y; - + i->ix = int(Fixed(pd->x) * i->iXFactor); i->iy = int(Fixed(pd->y) * i->iYFactor); @@ -155,15 +182,98 @@ } fin: + + +// i->DisplayPointer(); + + Kern::AddEvent(e); i->iLastBut = pd->but; } + +void TPointerRv::DisplayPointer() +{ + +TUint32 *pMem =0; +TInt k=0; + + if(!iFirstTime) + { + + //restore old pointer position + pMem = (TUint32 *)iVideoMem; + + pMem+= iYtop* iOffSetBetweenEachLine; + pMem+= iXleft; + + + + for(TInt i=0;i<(iYbottom-iYtop);i++) + { + for(TInt j=0;j<(iXright-iXleft);j++) + { + *pMem = iImageStore[k]; + pMem++; + k++; + + } + + pMem+= (iOffSetBetweenEachLine - iXright) + iXleft; + } + } + + iFirstTime = EFalse; + + //10*10 pixel pointer centered around position and check are within allowed bounds of screen + iXleft = ix - 5; + + if(iXleft<0) + iXleft=0; + + iXright = ix + 5; + + if(iXright>iScreenWidth) + iXright = iScreenWidth; + + iYtop = iy - 5; + + if(iYtop<0) + iYtop=0; + + iYbottom = iy +5; + + if(iYbottom> iScreenHeight) + iYbottom=iScreenHeight; + + pMem = (TUint32 *)iVideoMem; + k=0; + + pMem+= iYtop* iOffSetBetweenEachLine; + pMem+= iXleft; + + for(TInt i=0;i<(iYbottom-iYtop);i++) + { + for(TInt j=0;j<(iXright-iXleft);j++) + { + iImageStore[k] = *pMem; + *pMem = 0; + pMem++; + k++; + + } + + pMem+= (iOffSetBetweenEachLine - iXright) + iXleft; + } + +} + + void TPointerRv::RxDfc(TAny* aPtr) { __DEBUG_PRINT("TPointerRv::RxDfc"); - TPointerRv* i = static_cast(aPtr); + TPointerRv* i = static_cast(aPtr); while(i->iFifoCount>0) { struct TPointerRv::PData *pd= i->FifoPop(); @@ -178,19 +288,30 @@ TPointerRv& k = *(TPointerRv*)aPtr; // interrupts are now auto clear - while(ReadReg(KHwBaseKmiPointer, POINTER_FIFO_COUNT)!=0) { + + while(ReadReg(KHwBaseKmiPointer, POINTER_FIFO_COUNT)!=0) + { + + WriteReg(KHwBaseKmiPointer,POINTER_LATCH,1); + // SOSCO: moved to here, as the buffer seems to be running one notch out, + // writing to the pointer latch first seems to return the correct FIFO entry. + struct TPointerRv::PData pd; pd.x = ReadReg(KHwBaseKmiPointer,POINTER_X); pd.y = ReadReg(KHwBaseKmiPointer,POINTER_Y); pd.z = ReadReg(KHwBaseKmiPointer,POINTER_Z); - pd.but = ReadReg(KHwBaseKmiPointer,POINTER_BUTTONS); + pd.but = ReadReg(KHwBaseKmiPointer,POINTER_BUTTONS); k.FifoPush(&pd); - WriteReg(KHwBaseKmiPointer,POINTER_LATCH,0); + +// SOSCO - moved WriteReg(KHwBaseKmiPointer,POINTER_LATCH,1); + } - + // WriteReg(KHwBaseKmiPointer,POINTER_CLEAR_INT,0); - Interrupt::Clear(EIntPointer); - k.iRxDfc.Add(); + Interrupt::Clear(EIntPointer); + + k.iRxDfc->Add(); + } TInt TPointerRv::DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2) @@ -210,24 +331,28 @@ { kumemput32(a1, (TBool*)&iPointerOn, sizeof(TBool)); break; - } + } case EMouseHalSetMouseState: { + + /* SOSCO - removed, causes platsec error __SECURE_KERNEL( if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD, __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseState"))) return KErrPermissionDenied; ); + */ + if(((TBool)a1 == HAL::EMouseState_Visible) && (iPointerOn == (TBool)EFalse)) { iPointerOn=(TBool)ETrue; - } - else if(((TBool)a1 == HAL::EMouseState_Invisible) && (iPointerOn==(TBool)ETrue)) + } + else if(((TBool)a1 == HAL::EMouseState_Invisible) && (iPointerOn==(TBool)ETrue)) { iPointerOn=(TBool)EFalse; - } + } break; - } + } case EMouseHalMouseInfo: { TPckgBuf vPckg; @@ -239,30 +364,38 @@ xyinfo.iOffsetToDisplay.iY = 0; Kern::InfoCopy(*(TDes8*)a1,vPckg); break; - } + } case EMouseHalSetMouseSpeed: { + + /* SOSCO - removed, causes platsec error __SECURE_KERNEL( if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD, __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseSpeed"))) return KErrPermissionDenied; ); + */ + // fall thru to NotSupported } case EMouseHalSetMouseAcceleration: { + + /* SOSCO - removed, causes platsec error __SECURE_KERNEL( if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD, __PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EMouseHalSetMouseAcceleration"))) return KErrPermissionDenied; ); + */ + // fall thru to NotSupported } default: { r = KErrNotSupported; break; - } + } } return r; } diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/pointer/syborg_pointer.h --- a/baseport/syborg/pointer/syborg_pointer.h Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/pointer/syborg_pointer.h Wed Oct 21 10:29:21 2009 +0100 @@ -60,16 +60,35 @@ static void RxDfc(TAny* aPtr ); static void Process(TPointerRv *i, struct PData *); - TDfc iRxDfc; + void DisplayPointer(); + + + + //TDfc iRxDfc; + TDfcQue iDfcQue; + TDfc* iRxDfc; + TBool iPointerOn; // cursor visiability TInt iScreenWidth; TInt iScreenHeight; TInt iDisplayMode; + TInt iVideoMem; + TInt iOffSetBetweenEachLine; + + TInt ix,iy; TInt iLastBut; + + TBool iFirstTime; + TInt iXleft; + TInt iXright; + TInt iYtop; + TInt iYbottom; + TInt iImageStore[100]; + public: diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/rom/base_syborg.iby --- a/baseport/syborg/rom/base_syborg.iby Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/rom/base_syborg.iby Wed Oct 21 10:29:21 2009 +0100 @@ -32,7 +32,11 @@ bootbinary= KERNEL_DIR\_PLATFORM_NAME_bootloader_bootrom.bin debugport 0 -romsize=0x2000000 + +// Fixed rom over flow +//romsize=0x2000000 +romsize=0x8000000 + romlinearbase=0x80000000 romalign=0x10 kerneldataaddress=0xC8000000 @@ -64,14 +68,35 @@ // IEEE-mode VFP support extension[VARID]= KERNEL_DIR\DEBUG_DIR\evfp.dll \sys\bin\evfp.dll -extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd.dll \sys\bin\lcd.dll + +// Changes allowing us of either portrait or landscape mode +//extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd.dll \sys\bin\lcd.dll +#ifdef _PORTRAIT_ + +# ifdef _WVGA_ +extension[VARID]=KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd_portrait_wvga.dll \sys\bin\lcd.dll +# else //_WVGA_ +extension[VARID]=KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd_portrait.dll \sys\bin\lcd.dll +# endif //_WVGA_ + +#else +extension[VARID]=KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_lcd_landscape.dll \sys\bin\lcd.dll +#endif device[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_eserial.pdd \sys\bin\euart1.pdd device[VARID]= KERNEL_DIR\DEBUG_DIR\ecomm.ldd \sys\bin\ecomm.ldd extension[VARID]= KERNEL_DIR\DEBUG_DIR\elocd.ldd \sys\bin\elocd.ldd -extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer.dll \sys\bin\epointer.dll + +// Changes allowing us of either portrait or landscape mode +//extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer.dll \sys\bin\epointer.dll +#ifdef _PORTRAIT_ +extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer_portrait.dll \sys\bin\epointer.dll +#else +extension[VARID]=KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_epointer_landscape.dll \sys\bin\epointer.dll +#endif + extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_medint.pdd \sys\bin\medint.pdd extension[VARID]= KERNEL_DIR\DEBUG_DIR\exstart.dll \sys\bin\exstart.dll @@ -80,13 +105,18 @@ extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_ekeyb.dll \sys\bin\ekeyb.dll // Kernel pipe -device[VARID]= KERNEL_DIR\DEBUG_DIR\pipelib.ldd \sys\bin\pipelib.ldd + +//device[VARID] =KERNEL_DIR\DEBUG_DIR\pipelib.ldd \sys\bin\pipelib.ldd + // Host Filesystem extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_svphostfsdriver.ldd sys\bin\svphostfsdriver.ldd file= KERNEL_DIR\DEBUG_DIR\svphostfsy.fsy sys\bin\svphostfsy.fsy file= KERNEL_DIR\DEBUG_DIR\svphostfs.exe sys\bin\svphostfs.exe -file= KERNEL_DIR\DEBUG_DIR\svphostfsstart.exe sys\bin\sysstart.exe + +// Conflicts with /epoc32/rom/include/core/os/starter.iby +//file= KERNEL_DIR\DEBUG_DIR\svphostfsstart.exe sys\bin\sysstart.exe + // file= KERNEL_DIR\DEBUG_DIR\stdnew.dll sys\bin\stdnew.dll @@ -98,10 +128,17 @@ data= EPOCROOT##epoc32\rom\syborg\estart.txt \sys\data\estart.txt define HAL_DLL _PLATFORM_NAME_hal.dll -define ESTART_EXE e32strt.exe + +//define ESTART_EXE e32strt.exe +define ESTART_EXE _PLATFORM_NAME_e32strt.exe // customised ESTART + define KEYMAP_FILE _PLATFORM_NAME_ekdata #define SCDV_DLL _PLATFORM_NAME_scdv.dll #define EUSER_DLL _PLATFORM_NAME_euser.dll + +device[VARID] =KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_soundsc.pdd \sys\bin\soundsc.pdd +device[VARID] =KERNEL_DIR\DEBUG_DIR\esoundsc.ldd \sys\bin\esoundsc.ldd + #endif // __BASE_SYBORG_IBY__ diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/rom/kernel.iby --- a/baseport/syborg/rom/kernel.iby Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/rom/kernel.iby Wed Oct 21 10:29:21 2009 +0100 @@ -53,7 +53,11 @@ extension[VARID]= \epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svphostfsdriver.ldd \sys\bin\svphostfsdriver.ldd file= \epoc32\release\##KMAIN##\##BUILD##\svphostfsy.fsy \sys\bin\svphostfsy.fsy file= \epoc32\release\##KMAIN##\##BUILD##\svphostfs.exe \sys\bin\svphostfs.exe -file= \epoc32\release\##KMAIN##\##BUILD##\svphostfsstart.exe \sys\bin\sysstart.exe + +//file= \epoc32\release\##KMAIN##\##BUILD##\svphostfsstart.exe \sys\bin\sysstart.exe +#define CUSTOM_ESTART +file= \epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_e32strt.exe sys\bin\estart.exe HEAPMAX (0x10000) + // Snap Driver extension[VARID]= \epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_svpsnapdriver.ldd \sys\bin\svpsnapdriver.ldd @@ -68,3 +72,7 @@ extension[VARID]= \epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_MEDINT.PDD \sys\bin\MEDINT.PDD //device[VARID]= \epoc32\release\##KMAIN##\##BUILD##\D_DEBUG.LDD \sys\bin\D_DEBUG.LDD + +device[VARID] = \epoc32\release\##KMAIN##\##BUILD##\_##VARIANT##_soundsc.pdd \sys\bin\soundsc.pdd +device[VARID] = \epoc32\release\##KMAIN##\##BUILD##\esoundsc.ldd \sys\bin\esoundsc.ldd + diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/serial/syborg_serial.cpp --- a/baseport/syborg/serial/syborg_serial.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/serial/syborg_serial.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -156,6 +156,10 @@ break; WriteReg(iPortAddr, SERIAL_DATA, r); } + + iLdd->iTxError = KErrNone; + iLdd->iTxCompleteDfc.Add(); + } TUint DCommSyborgSoc::Signals() const diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/soundsc/shared_sound.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/soundsc/shared_sound.h Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,90 @@ +/* +* 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: +* +*/ + +#ifndef __SYBORGSHARED_SOUND_H__ +#define __SYBORGSHARED_SOUND_H__ + +#include + +#ifdef _DEBUG +#define SYBORG_SOUND_DEBUG(x...) Kern::Printf(x) +#else +#define SYBORG_SOUND_DEBUG(x...) +#endif + +class DDriverSyborgSoundScPddFactory; + +class DDriverSyborgSoundScPdd : public DSoundScPdd + { +public: + + DDriverSyborgSoundScPdd(); + ~DDriverSyborgSoundScPdd(); + TInt DoCreate(); + void GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo); + void Caps(TDes8& aCapsBuf) const; + TInt MaxTransferLen() const; + TInt SetConfig(const TDesC8& aConfigBuf); + TInt SetVolume(TInt aVolume); + TInt StartTransfer(); + TInt TransferData(TUint aTransferID, TLinAddr aLinAddr, TPhysAddr aPhysAddr, TInt aNumBytes); + void StopTransfer(); + TInt PauseTransfer(); + TInt ResumeTransfer(); + TInt PowerUp(); + void PowerDown(); + TInt CustomConfig(TInt aFunction, TAny* aParam); + void Callback(TUint aTransferID, TInt aTransferResult, TInt aBytesTransferred); + + void SetCaps(); + TDfcQue* DfcQ(); + + TInt CalculateBufferTime(TInt aNumBytes); + +public: + + DDriverSyborgSoundScPddFactory* iPhysicalDevice; + + class TTransferArrayInfo{ + +public: + TUint iTransferID; + TLinAddr iLinAddr; + TInt iNumBytes; + TInt iPlayTime; + }; + + RArray iTransferArray; + + NTimer iTimer; + + TInt iUnitType; //Play or Record + +private: + + TSoundFormatsSupportedV02 iCaps; + + TCurrentSoundFormatV02 iConfig; + + + + }; + + + + +#endif diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/soundsc/shared_txsound.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/soundsc/shared_txsound.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,312 @@ +/* +* 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: +* +*/ + +#include "shared_sound.h" +#include "variant_sound.h" + +void TimerCallback(TAny* aData) + { + DDriverSyborgSoundScPdd * soundscpdd = (DDriverSyborgSoundScPdd*) aData; + + soundscpdd->Callback(soundscpdd->iTransferArray[0].iTransferID, KErrNone, soundscpdd->iTransferArray[0].iNumBytes); + + } + + +DDriverSyborgSoundScPdd::DDriverSyborgSoundScPdd() : iTimer(TimerCallback,this) + { + + } + +DDriverSyborgSoundScPdd::~DDriverSyborgSoundScPdd() + { + iTimer.Cancel(); + } + + +TInt DDriverSyborgSoundScPdd::DoCreate() + { + + SetCaps(); + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::DoCreate TxPdd"); + + return KErrNone; + } + +void DDriverSyborgSoundScPdd::GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo) + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::GetChunkCreateInfo TxPdd"); + + aChunkCreateInfo.iType = TChunkCreateInfo::ESharedKernelMultiple; + aChunkCreateInfo.iMapAttr = EMapAttrFullyBlocking; // No caching + aChunkCreateInfo.iOwnsMemory = ETrue; // Using RAM pages + aChunkCreateInfo.iDestroyedDfc = NULL; // No chunk destroy DFC + } + +void DDriverSyborgSoundScPdd::Caps(TDes8& aCapsBuf) const + { + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::Caps TxPdd"); + + // Fill the structure with zeros in case it is a newer version than we know about + aCapsBuf.FillZ(aCapsBuf.MaxLength()); + + // And copy the capabilities into the packaged structure + TPtrC8 ptr((const TUint8*) &iCaps, sizeof(iCaps)); + aCapsBuf = ptr.Left(Min(ptr.Length(), aCapsBuf.MaxLength())); + } + +TInt DDriverSyborgSoundScPdd::SetConfig(const TDesC8& aConfigBuf) + { + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::SetConfig TxPdd"); + + // Read the new configuration from the LDD + TCurrentSoundFormatV02 config; + TPtr8 ptr((TUint8*) &config, sizeof(config)); + Kern::InfoCopy(ptr, aConfigBuf); + + iConfig = config; + + return KErrNone; + } + + +TInt DDriverSyborgSoundScPdd::SetVolume(TInt aVolume) + { + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::Setvolume TxPdd"); + + return KErrNone; + } + + +TInt DDriverSyborgSoundScPdd::StartTransfer() + { + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::starttransfer TxPdd"); + + //Prepare for transfer + return KErrNone; + + } + +TInt DDriverSyborgSoundScPdd::CalculateBufferTime(TInt aNumBytes) + { + + TUint samplerate=0; + + // Let the compiler perform an integer division of rates + switch(iConfig.iRate) + { + case ESoundRate7350Hz: samplerate = 7350; break; + case ESoundRate8000Hz: samplerate = 8000; break; + case ESoundRate8820Hz: samplerate = 8820; break; + case ESoundRate9600Hz: samplerate = 9600; break; + case ESoundRate11025Hz: samplerate = 11025; break; + case ESoundRate12000Hz: samplerate = 12000; break; + case ESoundRate14700Hz: samplerate = 14700; break; + case ESoundRate16000Hz: samplerate = 16000; break; + case ESoundRate22050Hz: samplerate = 22050; break; + case ESoundRate24000Hz: samplerate = 24000; break; + case ESoundRate29400Hz: samplerate = 29400; break; + case ESoundRate32000Hz: samplerate = 32000; break; + case ESoundRate44100Hz: samplerate = 44100; break; + case ESoundRate48000Hz: samplerate = 48000; break; + } + + + // integer division by number of channels + aNumBytes /= iConfig.iChannels; + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::iChannels =%d", iConfig.iChannels); + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::iEncoding =%d", iConfig.iEncoding); + + // integer division by bytes per sample + switch(iConfig.iEncoding) + { + case ESoundEncoding8BitPCM: break; + case ESoundEncoding16BitPCM: aNumBytes /= 2; break; + case ESoundEncoding24BitPCM: aNumBytes /= 3; break; + } + + return (aNumBytes * 1000) / samplerate; //return time in milliseconds + + + } + +TInt DDriverSyborgSoundScPdd::TransferData(TUint aTransferID, TLinAddr aLinAddr, TPhysAddr /*aPhysAddr*/, TInt aNumBytes) + { + + //function wil get called multiple times while transfer is in progress therefore keep fifo queue of requests + TTransferArrayInfo transfer; + + transfer.iTransferID = aTransferID; + transfer.iLinAddr = aLinAddr; + transfer.iNumBytes = aNumBytes; + + //calculate the amount of time required to play/record buffer + TInt buffer_play_time = CalculateBufferTime(aNumBytes); + TInt timerticks = NKern::TimerTicks(buffer_play_time); + transfer.iPlayTime = timerticks; + + iTransferArray.Append(transfer); + + //Timer will callback when correct time has elapsed, will return KErrInUse if transfer + //already active, this is ok becuase will be started again in callback + TInt err = iTimer.OneShot(timerticks, ETrue); + + + return KErrNone; + } + +void DDriverSyborgSoundScPdd::StopTransfer() + { + // Stop transfer + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::stoptransfer TxPdd"); + + //If timer is currently active then cancel it and call back buffer + if(iTimer.Cancel()) + { + Callback(iTransferArray[0].iTransferID, KErrNone, iTransferArray[0].iNumBytes); + } + + + } + + +TInt DDriverSyborgSoundScPdd::PauseTransfer() + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::pausetransfer TxPdd"); + //Pause Transfer + + return KErrNone; + } + + +TInt DDriverSyborgSoundScPdd::ResumeTransfer() + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::resumetransfer TxPdd"); + //Resume Transfer + + return KErrNone; + } + +TInt DDriverSyborgSoundScPdd::PowerUp() + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::PowerUp TxPdd"); + return KErrNone; + } + +void DDriverSyborgSoundScPdd::PowerDown() + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::Powerdown TxPdd"); + } + +TInt DDriverSyborgSoundScPdd::CustomConfig(TInt /*aFunction*/,TAny* /*aParam*/) + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::customconfig TxPdd"); + return KErrNotSupported; + } + + +void DDriverSyborgSoundScPdd::Callback(TUint aTransferID, TInt aTransferResult, TInt aBytesTransferred) + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::playcallback TxPdd"); + //Callback when Transfer completes or is stopped + + iTransferArray.Remove(0); + + if(iUnitType == KSoundScTxUnit0) + { + Ldd()->PlayCallback(aTransferID, aTransferResult, aBytesTransferred); + } + else if(iUnitType == KSoundScRxUnit0) + { + Ldd()->RecordCallback(aTransferID, aTransferResult, aBytesTransferred); + } + + if( iTransferArray.Count()>0) + { + iTimer.OneShot(iTransferArray[0].iPlayTime, ETrue); + } + + } + +TDfcQue*DDriverSyborgSoundScPdd::DfcQ() + { + return iPhysicalDevice->iDfcQ; + } + + +TInt DDriverSyborgSoundScPdd::MaxTransferLen() const + { + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::MaxTransferLen TxPdd"); + + TInt maxlength = 200*1024; + return maxlength; + } + + +void DDriverSyborgSoundScPdd::SetCaps() + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPdd::SetCaps TxPdd"); + + if(iUnitType == KSoundScTxUnit0) + { + // The data transfer direction for this unit is play + iCaps.iDirection = ESoundDirPlayback; + } + else if(iUnitType == KSoundScTxUnit0) + { + // The data transfer direction for this unit is play + iCaps.iDirection = ESoundDirRecord; + } + + // This unit supports both mono and stereo + iCaps.iChannels = (KSoundMonoChannel | KSoundStereoChannel); + + // This unit supports only some of the sample rates offered by Symbian OS + iCaps.iRates = (KSoundRate8000Hz | KSoundRate11025Hz | KSoundRate12000Hz | KSoundRate16000Hz | + KSoundRate22050Hz | KSoundRate24000Hz | KSoundRate32000Hz | KSoundRate44100Hz | + KSoundRate48000Hz); + + // This unit only supports 16bit PCM encoding + iCaps.iEncodings = KSoundEncoding16BitPCM; + + // This unit only supports interleaved data format when playing stereo; that is, a PCM data + // stream where the left and right channel samples are interleaved as L-R-L-R-L-R etc. + iCaps.iDataFormats = KSoundDataFormatInterleaved; + + // The iRequestMinSize member is named badly. It is actually the value of which the length samples + // must be a multiple of. ie. The sample length % iRequestMinSize must == 0. This value must always + // be a power of 2 + iCaps.iRequestMinSize = 4; + + // The logarithm to base 2 of the alignment required for request arguments. DMA requests must be + // aligned to a 32 bit boundary + iCaps.iRequestAlignment = 2; + + // This unit is not capable of detecting changes in hardware configuration + iCaps.iHwConfigNotificationSupport = EFalse; + } + + + + diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/soundsc/soundsc.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/soundsc/soundsc.mmp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,32 @@ +/* +* 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: +* +*/ + +#include +#include "kernel/kern_ext.mmh" + +SYSTEMINCLUDE /epoc32/include/drivers + + +TARGET VariantTarget(soundsc,pdd) +TARGETTYPE pdd +ROMTARGET soundsc.pdd + +SOURCE shared_txsound.cpp +SOURCE variant_sound.cpp + +CAPABILITY all +EPOCALLOWDLLDATA diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/soundsc/variant_sound.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/soundsc/variant_sound.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,128 @@ +/* +* 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: +* +*/ + +#include "variant_sound.h" + +_LIT(KSoundScPddName, "SoundSc.Syborg"); + + +DECLARE_STANDARD_PDD() + { + return new DDriverSyborgSoundScPddFactory; + } + + +DDriverSyborgSoundScPddFactory::DDriverSyborgSoundScPddFactory() + { + + iUnitsMask = ((1 << KSoundScTxUnit0) | (1 << KSoundScRxUnit0)); + + iVersion = RSoundSc::VersionRequired(); + } + + +TInt DDriverSyborgSoundScPddFactory::Install() + { + _LIT(KAudioDFC, "AUDIO DFC"); + // Get a pointer to the the McBSP's DFC Queue so that handling of both McBSP callbacks and requests + // made to the LDD from user mode can be processed in the same thread, to avoid the use of semaphores + TInt r = Kern::DfcQCreate(iDfcQ, 26, &KAudioDFC); + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::PDD install"); + + if(r==KErrNone) + { + // All PDD factories must have a unique name + TInt r = SetName(&KSoundScPddName); + } + + return r; + } + +void DDriverSyborgSoundScPddFactory::GetCaps(TDes8& /*aDes*/) const + { + } + + +TInt DDriverSyborgSoundScPddFactory::Validate(TInt aUnit, const TDesC8* /*aInfo*/, const TVersion& aVer) + { + // Check that the version requested is less than or equal to the version of this PDD + if (!Kern::QueryVersionSupported(RSoundSc::VersionRequired(), aVer)) + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::Validate KErrNotSup1"); + return KErrNotSupported; + } + + // Check the unit number specifies either playback or recording + if ((aUnit != KSoundScTxUnit0) && (aUnit != KSoundScRxUnit0)) + { + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::Validate KErrNotSup2"); + return KErrNotSupported; + } + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::Validate KErrNone"); + return KErrNone; + } + +TInt DDriverSyborgSoundScPddFactory::Create(DBase*& aChannel, TInt aUnit, const TDesC8* /*aInfo*/, const TVersion& /*aVer*/) + { + + DSoundScPdd* pD = NULL; + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::PDD create aUnit %d TxUnitId %d", aUnit, KSoundScTxUnit0); + + // Assume failure + TInt r = KErrNoMemory; + aChannel = NULL; + + + DDriverSyborgSoundScPdd* pTxD = new DDriverSyborgSoundScPdd; + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::TxPdd %d", pTxD); + + if (pTxD) + { + pD = pTxD; + + // Save a pointer to the factory so that it is accessible by the PDD and call the PDD's + // second stage constructor + pTxD->iPhysicalDevice = this; + + pTxD->iUnitType = aUnit; // Either KSoundScTxUnit0 or KSoundScRxUnit0 (play or record) + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::TxPdd2 %d", pTxD); + + r = pTxD->DoCreate(); + + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::Create ret %d", r); + + } + + // If everything succeeded, save a pointer to the PDD. This should only be done if DoCreate() succeeded, + // as some LDDs have been known to access this pointer even if Create() returns an error! + if (r == KErrNone) + { + aChannel = pD; + SYBORG_SOUND_DEBUG("DDriverSyborgSoundScPddFactory::TxPdd set AChannel %d", aChannel); + } + else + { + delete pD; + } + + return r; + } diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/soundsc/variant_sound.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/soundsc/variant_sound.h Wed Oct 21 10:29:21 2009 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ + +#ifndef __SYBORGVARIANT_SOUND_H__ +#define __SYBORGVARIANT_SOUND_H__ + +#include "shared_sound.h" + +class DDriverSyborgSoundScPddFactory : public DPhysicalDevice + { +public: + + DDriverSyborgSoundScPddFactory(); + TInt Install(); + void GetCaps(TDes8 &aDes) const; + TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer); + TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer); + +public: + + /** The DFC queue to be used by both the LDD and the PDD to serialise access to the PDD */ + TDfcQue* iDfcQ; + + }; + +#endif diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/specific/syborg.cpp --- a/baseport/syborg/specific/syborg.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/specific/syborg.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -27,7 +27,7 @@ void TSyborg::Init3() { -// SetTimerMode(KHwBaseCounterTimer, ETimerModePeriodic); +// SetTimerMode(KHwBaseCounterTimer, ETimerModePeriodic); // EnableTimer(KHwBaseCounterTimer, EEnable); } @@ -105,10 +105,12 @@ EXPORT_C TInt TSyborg::VideoRamSize() { - return 4*640*480; + + return 4*854*854; // Now allow for 854 x 854 display, instead of 480 x 640 + } -// !@! +// !@! EXPORT_C TPhysAddr TSyborg::VideoRamPhys() { #if 0 diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/svphostfs/driver/svphostfsdriver.cpp --- a/baseport/syborg/svphostfs/driver/svphostfsdriver.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/svphostfs/driver/svphostfsdriver.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -416,7 +416,14 @@ if (KErrNone != err) { - DP("Error %d from DoRequest", err); + + if (err == KErrNotSupported) + { + err = KErrNone; // trap KErrNotSupported + } + + DP("Error %d from DoRequest %d", err, aReqNo); + } return err; @@ -437,6 +444,12 @@ if (KErrNone != err) { + + if (err == KErrNotSupported) + { + err = KErrNone; // trap KErrNotSupported + } + DP("** (SVPHOSTFSDRIVER) Error %d from control function", err); } @@ -501,7 +514,16 @@ SVPWriteReg(device, EArg2, info.iFlags); SVPInvoke(device, RSVPHostFsDriver::EMkDir); - return SVPReadReg(device, EResult); + + //return SVPReadReg(device, EResult); + + err = SVPReadReg(device, EResult); + + if(err == KErrPathNotFound) + err = KErrNotFound; + + return err; + } @@ -637,7 +659,20 @@ SVPWriteReg(device, EArg1, info.iLength); SVPInvoke(device, RSVPHostFsDriver::EEntry); - RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + //RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + err = SVPReadReg(device, EResult); + + if(err!=KErrNone) + { + if(err == KErrPathNotFound) + err = KErrNotFound; + + return err; + } + + TUint32 att = SVPReadReg(device, EArg0); TUint32 modified = SVPReadReg(device, EArg1); @@ -690,7 +725,20 @@ SVPWriteReg(device, EArg1, info.iLength); SVPInvoke(device, RSVPHostFsDriver::EDirOpen); - RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + //RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + err = SVPReadReg(device, EResult); + + if(err!=KErrNone) + { + + if(err==KErrPathNotFound) + err=KErrNotFound; + + return err; + } + // handle is in arg 0 TUint32 handle = SVPReadReg(device, EArg0); @@ -719,7 +767,20 @@ SVPWriteReg(device, EArg3, info.iOpen); SVPInvoke(device, RSVPHostFsDriver::EFileOpen); - RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + //RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + err = SVPReadReg(device, EResult); + + if(err!=KErrNone) + { + if(err == KErrPathNotFound) + err = KErrNotFound; + + return err; + } + + TUint32 handle = SVPReadReg(device, EArg0); TUint32 att = SVPReadReg(device, EArg1); @@ -797,7 +858,20 @@ SVPWriteReg(device, EArg3, info.iLength); SVPInvoke(device, RSVPHostFsDriver::EFileWrite); - RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + // RET_IF_ERROR(err, SVPReadReg(device, EResult)); + + err = SVPReadReg(device, EResult); + + if(err!=KErrNone) + { + if(err == KErrPathNotFound) + err = KErrNotFound; + + return err; + } + + TUint32 len = SVPReadReg(device, EArg0); @@ -831,7 +905,9 @@ { DP("** (SVPHOSTFSDRIVER) DSVPHostFsChannel::FileSetEntry()"); - return KErrNotSupported; + + return KErrNone; + } TInt DSVPHostFsChannel::DirClose(TUint32 aDrive, TUint32 aHandle) diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/svphostfs/fs/rsvphostfsdriver.cpp --- a/baseport/syborg/svphostfs/fs/rsvphostfsdriver.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/svphostfs/fs/rsvphostfsdriver.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -10,6 +10,7 @@ * Nokia Corporation - initial contribution. * * Contributors: +* Sosco - bug fixes * * Description: * @@ -92,6 +93,19 @@ TInt RSVPHostFsDriver::FileClose(TUint32 aDrive, TUint32 aHandle) { DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::FileClose()")); + + // If attempt is made to access a file which does + // not exist, it will not give a handle to close afterwards. + // Attempting to call FileClose on this with an invalid handle + // results in the error code KErrBadHandle (-8) being returned. + // Some UI's cannot cope properly with this error code, resulting + // in various servers repeatedly closing and reopening. To prevent + // this,we trap it here and return KErrNone as though the call + // completed properly without error. + if (aHandle == 0) + return KErrNone; // Bad handle, so exit immediately with KErrNone + else + return DoSVPRequest(EFileClose, (TAny *)aDrive, (TAny *)aHandle); } @@ -140,6 +154,20 @@ TInt RSVPHostFsDriver::DirClose(TUint32 aDrive, TUint32 aHandle) { DP(_L("** (rsvphostfsdriver.cpp) RSVPHostFsDriver::DirClose()")); + + + // If attempt is made to read a directory which does + // not exist, it will not give a handle to close afterwards. + // Attempting to call DirClose on this with an invalid handle + // results in the error code KErrBadHandle (-8) being returned. + // Some UI's cannot cope properly with this error code, resulting + // in various servers repeatedly closing and reopening. To prevent + // this,we trap it here and return KErrNone as though the call + // completed properly without error. + if (aHandle == 0) + return KErrNone; // Bad handle, so exit immediately with KErrNone + else + return DoSVPRequest(EDirClose, (TAny *)aDrive, (TAny *)aHandle); } diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/svphostfs/fs/svphostdir.cpp --- a/baseport/syborg/svphostfs/fs/svphostdir.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/svphostfs/fs/svphostdir.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -116,9 +116,14 @@ } iPending=EFalse; anEntry=iEntry; - if ((iFullName.NameAndExt()==_L("*.*") || anEntry.iName.MatchF(iFullName.NameAndExt())!=KErrNotFound) - && Mount().MatchEntryAtt(anEntry.iAtt&KEntryAttMaskSupported,iAtt)) - { + + + if (Mount().MatchEntryAtt(anEntry.iAtt&KEntryAttMaskSupported,iAtt) == EFalse) + continue; + + if (iFullName.NameAndExt()==_L("*.*") || anEntry.iName.MatchF(iFullName.NameAndExt())!=KErrNotFound) + + { if (MatchUid()) { TParse fileName; diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/svphostfs/fs/svphostmnt.cpp --- a/baseport/syborg/svphostfs/fs/svphostmnt.cpp Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/svphostfs/fs/svphostmnt.cpp Wed Oct 21 10:29:21 2009 +0100 @@ -23,7 +23,11 @@ #include "svphostfsy.h" #define HOST_SVP_DRIVE_SIZE 1024*1024*1024 -#define HOST_SVP_DRIVE_FREE_SIZE 10*1024*1024 + +// Fixed low mass-memory warning at startup +//#define HOST_SVP_DRIVE_FREE_SIZE 10*1024*1024 +#define HOST_SVP_DRIVE_FREE_SIZE 100*1024*1024 + LOCAL_C TInt GetMediaSize(TInt /*aDriveNumber*/,TInt64& aSize,TInt64& aFree) // diff -r e6ebb7730c4b -r 5fca9e46c6fa baseport/syborg/syborg.oby --- a/baseport/syborg/syborg.oby Thu Oct 15 17:58:46 2009 +0100 +++ b/baseport/syborg/syborg.oby Wed Oct 21 10:29:21 2009 +0100 @@ -35,7 +35,11 @@ define VARIANT syborg define VARID SYBORG_L1 define ASSP_DIR EPOCROOT##epoc32\release\syborg -define ROMMEGS 15 /* !! HEX !! */ + +// increased size of ROM, due to overflow +//define ROMMEGS 15 /* !! HEX !! */ + +define ROMMEGS 50 /* !! HEX !! */ define PLATFORM_NAME syborg #define COLOR @@ -50,7 +54,9 @@ define BLUETOOTH_ESK bt_port2.esk REM Define whether or not to include USB client support: -//#define EUSBC + +#define EUSBC + ROMBUILD_OPTION -no-header