# HG changeset patch # User Lukasz Forynski # Date 1282701210 -3600 # Node ID 4dfcb6499328d0e6c8de7650e468a142be84e8da # Parent 1a6d5cf981cd52447671e22a0769df7b988fb2b0 Bug 3620 - Update for LED driver diff -r 1a6d5cf981cd -r 4dfcb6499328 omap3530/beagle_drivers/led/led.cpp --- a/omap3530/beagle_drivers/led/led.cpp Wed Aug 25 01:56:36 2010 +0100 +++ b/omap3530/beagle_drivers/led/led.cpp Wed Aug 25 02:53:30 2010 +0100 @@ -13,82 +13,106 @@ // Description: // omap3530/beagle_drivers/led/led.cpp // +#include -#include -#include -#include -#include -#include -#include // GPIO interrupts - -#include // Required for definition of TIsr +const TInt KBeatTimeInSeconds = 4; -static NTimer * heartBeatTimer; - - +class LedHeartBeat + { +public: + inline LedHeartBeat(); + /*inline ~LedHeartBeat() { iTimer.Cancel(); }*/ // will it ever be destroyed? + TInt DoCreate(); + static void Beat(TAny *aPtr); +private: + NTimer iTimer; + TBool iIsLedOn; + }; -static void ledIsr(TAny* aPtr) - { - //make sure the led is always in the sma estate when we crash - - GPIO::SetOutputState(KGPIO_LED1, GPIO::ELow); - Kern::Fault("User invoked crash via keypad",KErrDied); +LedHeartBeat::LedHeartBeat() : + iTimer(Beat, this) + { } -static void beatLedHeartBeat(TAny * ptr) +TInt LedHeartBeat::DoCreate() { - GPIO::TGpioState ledState; - GPIO::GetOutputState(KGPIO_LED1, ledState); - - if(GPIO::EHigh == ledState) + TInt r = GPIO::SetPinDirection(KGPIO_LED0, GPIO::EOutput); + if (r != KErrNone) { - GPIO::SetOutputState(KGPIO_LED1, GPIO::ELow); + Kern::Printf("LedHeartBeat: SetPinDirection for LED failed, r %d", r); + } + GPIO::SetPinMode(KGPIO_LED0, GPIO::EEnabled); + GPIO::SetOutputState(KGPIO_LED0, GPIO::ELow); + iTimer.OneShot(NKern::TimerTicks(KBeatTimeInSeconds * 1000)); + return r; + } + +void LedHeartBeat::Beat(TAny * aPtr) + { + LedHeartBeat* b = (LedHeartBeat*)aPtr; + if(b->iIsLedOn) + { + GPIO::SetOutputState(KGPIO_LED0, GPIO::ELow); + b->iIsLedOn = EFalse; } else { - GPIO::SetOutputState(KGPIO_LED1, GPIO::EHigh); + GPIO::SetOutputState(KGPIO_LED0, GPIO::EHigh); + b->iIsLedOn = ETrue; } - - heartBeatTimer->Again(Variant::GetMsTickPeriod()); + b->iTimer.Again(NKern::TimerTicks(KBeatTimeInSeconds * 1000)); + } + +// the following macro is defined in led.mmp file.. +#ifdef USER_BUTTON_ENTERS_CRASH_DEBUGGER +static void UserButtonIsr(TAny* aPtr) + { + //make sure the heartbeat led is OFF when we crash + GPIO::SetOutputState(KGPIO_LED0, GPIO::ELow); + Kern::Printf("User button pressed, entering crash debugger..\n"); + Kern::Fault("led.cpp", __LINE__); } +TInt SetupUserButton() + { + TInt r = GPIO::BindInterrupt(KGPIO_UserButton, UserButtonIsr, NULL); + if(r != KErrNone) + { + Kern::Printf("GPIO::BindInterrupt() failed for button %d, r=%d, (is in use?)", + KGPIO_UserButton, r); + return r; + } + + r = GPIO::SetInterruptTrigger(KGPIO_UserButton, GPIO::EEdgeRising); + if(r == KErrNone) + { + r = GPIO::SetPinDirection(KGPIO_UserButton, GPIO::EInput); + if(r == KErrNone) + { + GPIO::SetDebounceTime(KGPIO_UserButton, 500); + GPIO::SetPinMode(KGPIO_UserButton, GPIO::EEnabled); + r = GPIO::EnableInterrupt(KGPIO_UserButton); + } + } + return r; + } +#endif DECLARE_STANDARD_EXTENSION() { - - //Set up the button to proivde a panic button invoking Fault() - if(KErrNone != GPIO::SetPinDirection(KGPIO_UserButton, GPIO::EInput)) - return KErrArgument; - - GPIO::SetPinMode(KGPIO_UserButton, GPIO::EEnabled); - GPIO::SetDebounceTime(KGPIO_UserButton, 500); - - if(KErrNone !=GPIO::BindInterrupt(KGPIO_UserButton, ledIsr,NULL)) - return KErrArgument; - - if(KErrNone !=GPIO::SetInterruptTrigger(KGPIO_UserButton, GPIO::EEdgeRising)) - return KErrArgument; - - if(KErrNone !=GPIO::EnableInterrupt(KGPIO_UserButton)) + TInt r = KErrNoMemory; + LedHeartBeat* beat = new LedHeartBeat; + if(beat) { - GPIO::UnbindInterrupt(KGPIO_UserButton); - return KErrInUse; - } + r = beat->DoCreate(); + } - //setup the Led to flash at the system tick rate ( heartbeat) - heartBeatTimer = new NTimer(beatLedHeartBeat,NULL); - - if(KErrNone != GPIO::SetPinDirection(KGPIO_LED1, GPIO::EOutput)) - return KErrArgument; - - if(KErrNone != GPIO::SetPinDirection(KGPIO_LED0, GPIO::EOutput)) - return KErrArgument; - - GPIO::SetPinMode(KGPIO_LED0, GPIO::EEnabled); - GPIO::SetPinMode(KGPIO_LED1, GPIO::EEnabled); - GPIO::SetOutputState(KGPIO_LED0, GPIO::ELow); - - heartBeatTimer->OneShot(Variant::GetMsTickPeriod(),ETrue); - return KErrNone; +#ifdef USER_BUTTON_ENTERS_CRASH_DEBUGGER + if(r == KErrNone) + { + r = SetupUserButton(); + } +#endif + return r; } diff -r 1a6d5cf981cd -r 4dfcb6499328 omap3530/beagle_drivers/led/led.mmp --- a/omap3530/beagle_drivers/led/led.mmp Wed Aug 25 01:56:36 2010 +0100 +++ b/omap3530/beagle_drivers/led/led.mmp Wed Aug 25 02:53:30 2010 +0100 @@ -30,6 +30,11 @@ targettype kext romtarget led.dll + +// comment the following macro out - if you don't wan to.. +// ..use USER button to enter the crash debugger +macro USER_BUTTON_ENTERS_CRASH_DEBUGGER + sourcepath . source led.cpp diff -r 1a6d5cf981cd -r 4dfcb6499328 omap3530/beagleboard/inc/beagle_gpio.h --- a/omap3530/beagleboard/inc/beagle_gpio.h Wed Aug 25 01:56:36 2010 +0100 +++ b/omap3530/beagleboard/inc/beagle_gpio.h Wed Aug 25 02:53:30 2010 +0100 @@ -20,13 +20,13 @@ #include const TUint KGPIOINT_UserButton = EGPIOIRQ_PIN_7; -const TUint KGPIOINT_LED0 = EGPIOIRQ_PIN_149; -const TUint KGPIOINT_LED1 = EGPIOIRQ_PIN_150; +const TUint KGPIOINT_LED0 = EGPIOIRQ_PIN_150; +const TUint KGPIOINT_LED1 = EGPIOIRQ_PIN_149; const TUint KGPIOINT_TFP410_POWERDOWN = EGPIOIRQ_PIN_170;//DVI_PUP Controls the DVI-D interface. A Hi = DVI-D enabled. -const TUint KGPIOINT_MMC1_WP = EGPIOIRQ_PIN_29; // I MMC1_WP SD/MMC card slot Write protect +const TUint KGPIOINT_MMC1_WP = EGPIOIRQ_PIN_29; // I MMC1_WP SD/MMC card slot Write protect const TUint KGPIO_UserButton = 7; -const TUint KGPIO_LED0 = 149; -const TUint KGPIO_LED1 = 150; +const TUint KGPIO_LED0 = 150; +const TUint KGPIO_LED1 = 149; #endif //__BEAGLE_GPIO_H__ diff -r 1a6d5cf981cd -r 4dfcb6499328 omap3530/beagleboard/rom/base_beagle.iby --- a/omap3530/beagleboard/rom/base_beagle.iby Wed Aug 25 01:56:36 2010 +0100 +++ b/omap3530/beagleboard/rom/base_beagle.iby Wed Aug 25 02:53:30 2010 +0100 @@ -108,12 +108,15 @@ extension[VARID]= KERNEL_DIR\DEBUG_DIR\_PLATFORM_NAME_medstaticrd.pdd \sys\bin\medstaticrd.pdd extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_omap3530_i2c.dll \sys\bin\i2c.dll + +#include #include <../omapshared/tps65950.iby> #ifdef SYMBIAN_BASE_USE_GCE // Use the new GCE compliant display driver extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_beagle_lcd_gce.dll \sys\bin\lcd.dll device[VARID]=KERNEL_DIR\DEBUG_DIR\display.ldd \sys\bin\display0.ldd + #file=ABI_DIR\DEBUG_DIR\_beagle_ekdata.dll \sys\bin\ekdata.dll extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_omap3530_serialkeyboard_uisoftkeys.dll \sys\bin\ekeyb.dll #else #ifdef TSHELL_SERIAL @@ -136,7 +139,7 @@ //device[VARID] =KERNEL_DIR\BUILD_DIR\pipelib.ldd \sys\bin\pipelib.ldd // Removed for clash in 3.0.0 //device[VARID] =KERNEL_DIR\BUILD_DIR\minkda.ldd \sys\bin\minkda.ldd extension[VARID]=KERNEL_DIR\BUILD_DIR\exstart.dll \sys\bin\exstart.dll -//extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_beagle_led.dll \sys\bin\led.dll +extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_beagle_led.dll \sys\bin\led.dll #ifdef INCLUDE_USB extension[VARID]=\epoc32\release\ARMV5\BUILD_DIR\_omap3530_usbcc.dll \sys\bin\usbcc.dll device[VARID]= KERNEL_DIR\BUILD_DIR\usbc.ldd \sys\bin\eusbc.ldd diff -r 1a6d5cf981cd -r 4dfcb6499328 omap3530/beagleboard/rom/kernel.iby --- a/omap3530/beagleboard/rom/kernel.iby Wed Aug 25 01:56:36 2010 +0100 +++ b/omap3530/beagleboard/rom/kernel.iby Wed Aug 25 02:53:30 2010 +0100 @@ -35,7 +35,7 @@ extension[VARID]= \Epoc32\Release\ARMV5\##BUILD##\_omap3530_GPIO.DLL \sys\bin\gpio.dll -//extension[VARID]= \epoc32\release\ARMV5\##BUILD##\_##VARIANT##_LED.DLL \sys\bin\led.dll +extension[VARID]= \epoc32\release\ARMV5\##BUILD##\_##VARIANT##_LED.DLL \sys\bin\led.dll // Uncommnet to include West Bridge Astoria Symbian Storage driver //extension[VARID]= \epoc32\release\ARMV5\##BUILD##\_##VARIANT##_WB.DLL \sys\bin\wb.dll //extension[VARID]= \epoc32\release\ARMV5\##BUILD##\wb.dll \sys\bin\wb.dll @@ -45,10 +45,9 @@ extension[VARID]= \Epoc32\Release\ARMV5\##BUILD##\_omap3530_I2C.DLL \sys\bin\I2C.DLL +#include #include -device[VARID]=\Epoc32\Release\ARMV5\##BUILD##\_omap3530_EUART.PDD \sys\bin\euart.pdd -device[VARID]=\Epoc32\Release\ARMV5\##BUILD##\ECOMM.LDD \sys\bin\ecomm.ldd #ifdef TSHELL_SERIAL //Use VT100 Over Serial # define EDISP_DRV \EDISP_VT100.DLL