Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*****************************************************************************
- *
- * MODULE: JN-AN-1217
- *
- * COMPONENT: drv_leds.c
- *
- * DESCRIPTION: API for control led
- *
- ***************************************************************************/
- /****************************************************************************/
- /*** Include files ***/
- /****************************************************************************/
- #include "drv_leds.h"
- #include "AppHardwareApi_JN516x.h"
- #include "dbg.h"
- #include "ZTimer.h"
- /****************************************************************************/
- /*** Macro Definitions ***/
- /****************************************************************************/
- #ifdef DEBUG_DRV_LEDS
- #define TRACE_DRV_LEDS (TRUE)
- #else /* DEBUG_DRV_LEDS */
- #define TRACE_DRV_LEDS (FALSE)
- #endif /* DEBUG_DRV_LEDS */
- #define PWM_CYCLE (20) //ms T=20ms => f = 50Hz
- /****************************************************************************/
- /*** Type Definitions ***/
- /****************************************************************************/
- // define counter
- typedef enum
- {
- E_COUNTER_DIM_PWM_ON = 0,
- E_COUNTER_DIM_PWM_OFF,
- E_ALL_DIM_COUNTER,
- }DRV_LEDS_eResetCounter;
- enum
- {
- ORIGIN = 0,
- CURRENT,
- NUMBER_COUNTER,
- };
- typedef enum
- {
- E_BLINK_TIMER_NONE = 0,
- E_BLINK_TIMER_ON,
- E_BLINK_TIMER_OFF
- }DRV_LEDS_teBlinkTimerRuning;
- typedef enum
- {
- E_MAIN_BLINK_LED = 0,
- E_ALTERNATE_BLINK_LED,
- SIZE_OF_BLINK_LED_MASK
- }DRV_LEDS_teLedMaskIndex;
- typedef struct
- {
- uint8_t u8PWMOn; //ms
- uint8_t u8PWMOff; //ms
- }DRV_LEDS_tsCounterDim;
- typedef struct
- {
- uint32_t u32PinMask[SIZE_OF_BLINK_LED_MASK]; //[1] main led blink, [2] alternate led blink
- int16_t i16NumberBlink;
- uint16_t u16TimeOn; //ms
- uint16_t u16TimeOff; //ms
- fnCbAfterBlink fnCallback;
- void *pParams;
- DRV_LEDS_teBlinkTimerRuning eTimerRun;
- uint8_t u8TimerIndex;
- uint8_t u8TimerBlink;
- }DRV_LEDS_tsBlinkGroupLeds;
- typedef struct
- {
- DRV_LEDS_teLedLevel_t eLedLevel;
- uint32_t u32DimLedPinMask;
- DRV_LEDS_tsBlinkGroupLeds sBlinkGroupLeds[MAX_NUMBER_GROUP_LED_BLINK];
- }DRV_LEDS_tsParams;
- /****************************************************************************/
- /*** Local Function Prototypes ***/
- /****************************************************************************/
- /* Dim led functions */
- PRIVATE void vStartDimTimer(void);
- PRIVATE void vStopDimTimer(void);
- PRIVATE void vDimLedsProcess(void);
- PRIVATE void vUpdateDimCounter(void);
- PRIVATE void vResetDimCounter(void);
- PRIVATE void vTurnOnAllDimLeds(void);
- PRIVATE void vTurnOffAllDimLeds(void);
- PRIVATE void vAddLedTo_ArrayLedDim(uint8_t u8LedPin);
- PRIVATE void vRemoveLedOutOf_ArrayLedDim(uint8_t u8LedPin);
- /* Blink led functions */
- PRIVATE void vcbTimerBlinkLed(void *pvParam);
- PRIVATE void vStartBlinkTimer(uint8_t u8TimerIndex, DRV_LEDS_teBlinkTimerRuning eTimerRun);
- PRIVATE void vStopBlinkTimer(uint8_t u8TimerIndex);
- PRIVATE bool_t bIsBlinkTimerRunning(uint8_t u8TimerIndex);
- PRIVATE void vRemoveLedInOtherGroupThatHaveInThisGroup(uint8_t u8GroupLedsIndex);
- PRIVATE void vAddBlinkLedTo_ArrayLedDim(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex);
- PRIVATE void vRemoveBlinkLedTo_ArrayLedDim(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex);
- PRIVATE void vTurnOnAllBlinkLeds(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex);
- PRIVATE void vTurnOffAllBlinkLeds(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex);
- /* Common functions */
- PRIVATE void vTurnLed_On(uint8_t u8LedPin);
- PRIVATE void vTurnLed_Off(uint8_t u8LedPin);
- PRIVATE bool_t bIsPinLedAlreadyInitialized(uint8_t u8LedPin);
- PRIVATE void vRemoveThisLedInBlinkLedGroupThatContainsIt(uint8_t u8LedPin);
- /****************************************************************************/
- /*** Exported Variables ***/
- /****************************************************************************/
- /****************************************************************************/
- /*** Local Variables ***/
- /****************************************************************************/
- PRIVATE uint8_t u8TimeBase = 0;
- PRIVATE uint16_t u16TimerCycle = 0;
- PRIVATE DRV_LEDS_tsParams sLedParams;
- PRIVATE uint32_t u32LedInitializedMask;
- DRV_LEDS_tsCounterDim sDimCounter[NUMBER_COUNTER];
- bool_t bDimTimerStopped = TRUE;
- /****************************************************************************/
- /*** Exported Functions ***/
- /****************************************************************************/
- PUBLIC bool_t DRV_LEDS_bInitialize(
- uint8_t *u8ArrLedPin,
- uint8_t u8NumberLed,
- DRV_LEDS_teLedLevel_t eLedLevel
- ){
- uint8_t i,j;
- u8TimeBase = PWM_CYCLE/(NUMBER_OF_LED_LEVEL - 1);
- u16TimerCycle = 1000*u8TimeBase;
- if(u8NumberLed > MAX_NUMBER_LEDS_SUPPORT)
- {
- return FALSE;
- }
- // initialize dim led
- sLedParams.eLedLevel = eLedLevel;
- sLedParams.u32DimLedPinMask = 0;
- // initialize blink led
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i++)
- {
- for(j = 0; j < SIZE_OF_BLINK_LED_MASK; j++)
- {
- sLedParams.sBlinkGroupLeds[i].u32PinMask[j] = 0;
- }
- sLedParams.sBlinkGroupLeds[i].i16NumberBlink = 0;
- sLedParams.sBlinkGroupLeds[i].fnCallback = NULL;
- sLedParams.sBlinkGroupLeds[i].pParams = NULL;
- sLedParams.sBlinkGroupLeds[i].u16TimeOff = 0;
- sLedParams.sBlinkGroupLeds[i].u16TimeOn = 0;
- }
- /* Initialize led information */
- u32LedInitializedMask = 0;
- for(i = 0; i < u8NumberLed; i++)
- {
- u32LedInitializedMask |= 1UL << u8ArrLedPin[i];
- }
- //Set led pin as output
- vAHI_DioSetDirection(0, u32LedInitializedMask);
- //Turn off all the LEDs
- vAHI_DioSetOutput(0, u32LedInitializedMask);
- // Check special DO_0,DO_1 was required to initialize or not
- if(bIsPinLedAlreadyInitialized(DO_0_PIN) || bIsPinLedAlreadyInitialized(DO_1_PIN))
- {
- bAHI_DoEnableOutputs(TRUE);
- // Turn off led DO_0,DO_1
- vAHI_DoSetDataOut(0, u32LedInitializedMask >> DO_0_PIN);
- }
- // Initialize blink timer
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i ++)
- {
- sLedParams.sBlinkGroupLeds[i].u8TimerIndex = i;
- sLedParams.sBlinkGroupLeds[i].eTimerRun = E_BLINK_TIMER_NONE;
- (void) ZTIMER_eOpen(&sLedParams.sBlinkGroupLeds[i].u8TimerBlink,
- vcbTimerBlinkLed,
- &sLedParams.sBlinkGroupLeds[i].u8TimerIndex,
- ZTIMER_FLAG_PREVENT_SLEEP);
- }
- // Initialize counter
- vUpdateDimCounter();
- vResetDimCounter();
- /* Dim timer */
- if((sLedParams.eLedLevel != LED_LEVEL_0) && (sLedParams.eLedLevel != LED_LEVEL_100) )
- {
- vStartDimTimer();
- }
- DBG_vPrintf(TRACE_DRV_LEDS,
- "DRV-LED: Led Initialize finished Time base = %d, Timer cycle = %d Timer = %d \n",
- u8TimeBase, u16TimerCycle, DIM_LED_TIMER);
- return TRUE;
- }
- PUBLIC void DRV_LEDS_vBlinkLedsAlternately(
- uint8_t *u8ArrLedPin,
- uint8_t u8NumberLed,
- uint8_t *u8ArrLedPin2,
- uint8_t u8NumberLed2,
- int16_t i16NumberBlink,
- int16_t i16BlinkDuration, //ms
- uint16_t u16TimeOn, //ms
- uint16_t u16TimeOff, //ms
- fnCbAfterBlink fnCallback,
- void *pParams
- )
- {
- uint8_t i,j;
- if((u8ArrLedPin == NULL) || (u8NumberLed > MAX_NUMBER_LEDS_SUPPORT))
- return;
- bool_t bBlinkLedAlternately = FALSE;
- if((u8ArrLedPin2 != NULL) && (u8NumberLed2 > 0) && (u8NumberLed2 < MAX_NUMBER_LEDS_SUPPORT))
- {
- bBlinkLedAlternately = TRUE;
- //make sure all led in 2 arrays is different
- bool b2ArrDiff = TRUE;
- for(i = 0; i < u8NumberLed; i++)
- for(j = 0; j < u8NumberLed2; j++)
- {
- if( u8ArrLedPin[i] == u8ArrLedPin2[j])
- {
- b2ArrDiff = FALSE;
- DBG_vPrintf(TRACE_DRV_LEDS,
- "DRV-LED: Error Pin[%] off u8ArrLedPin = Pin[%] off u8ArrLedPin2 \n",
- u8ArrLedPin[i], u8ArrLedPin2[j]);
- }
- }
- if(!b2ArrDiff)
- return;
- }
- //Check whether all led in u8ArrLedPin,u8ArrLedPin2 already initialized or not
- bool_t bAllLedAlreadyInit = TRUE;
- for(i = 0; i < u8NumberLed; i ++)
- {
- if(!bIsPinLedAlreadyInitialized(u8ArrLedPin[i]))
- {
- bAllLedAlreadyInit = FALSE;
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: Please initialize pin[%] in u8ArrLedPin as led pin first \n", u8ArrLedPin[i]);
- }
- }
- for(i = 0; i < u8NumberLed2; i ++)
- {
- if(!bIsPinLedAlreadyInitialized(u8ArrLedPin2[i]))
- {
- bAllLedAlreadyInit = FALSE;
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: Please initialize pin[%] in u8ArrLedPin2 as led pin first \n", u8ArrLedPin2[i]);
- }
- }
- if(!bAllLedAlreadyInit)
- return;
- /* Initialize Group led */
- uint8_t u8GroupLedsIndex = MAX_NUMBER_GROUP_LED_BLINK;
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i++)
- {
- if(sLedParams.sBlinkGroupLeds[i].eTimerRun == E_BLINK_TIMER_NONE)
- {
- u8GroupLedsIndex = i;
- break;
- }
- }
- if(u8GroupLedsIndex == MAX_NUMBER_GROUP_LED_BLINK)
- {
- u8GroupLedsIndex = 0;
- if(bIsBlinkTimerRunning(u8GroupLedsIndex))
- {
- vStopBlinkTimer(u8GroupLedsIndex);
- }
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- }
- for(i = 0; i < SIZE_OF_BLINK_LED_MASK; i++)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[i] = 0;
- }
- for(i = 0; i < u8NumberLed; i ++)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[0] |= 1UL << u8ArrLedPin[i];
- }
- if(bBlinkLedAlternately)
- {
- for(i = 0; i < u8NumberLed2; i ++)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[1] |= 1UL << u8ArrLedPin2[i];
- }
- }
- if(i16NumberBlink > 0)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink = i16NumberBlink;
- }
- else
- {
- if(i16BlinkDuration > 0)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink = i16BlinkDuration/(u16TimeOn + u16TimeOff);
- if(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink == 0)
- {
- DBG_vPrintf(TRACE_DRV_LEDS,
- "DRV-LED:No need to blink: Cycle = u16TimeOn + u16TimeOff > i16BlinkDuration (%d > %d) \n",
- (u16TimeOn + u16TimeOff), i16BlinkDuration);
- return;
- }
- }
- else
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink = LED_BLINK_FOREVER;
- }
- }
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u16TimeOn = u16TimeOn;
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u16TimeOff = u16TimeOff;
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].fnCallback = fnCallback;
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].pParams = pParams;
- //Remove all led in other group that has in this group
- vRemoveLedInOtherGroupThatHaveInThisGroup(u8GroupLedsIndex);
- //Start timer to blink led
- vAddBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- if(bDimTimerStopped)
- {
- if(sLedParams.eLedLevel != LED_LEVEL_0)
- {
- vTurnOnAllBlinkLeds(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- }
- vTurnOffAllBlinkLeds(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- }
- if((bDimTimerStopped) && (sLedParams.eLedLevel != LED_LEVEL_0) && (sLedParams.eLedLevel != LED_LEVEL_100))
- {
- vStartDimTimer();
- }
- vStartBlinkTimer(u8GroupLedsIndex, E_BLINK_TIMER_ON);
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: start led[%d] Alternately = %d, Time on = %d, Time off = %d \n",
- u8GroupLedsIndex, bBlinkLedAlternately,
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u16TimeOn,
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u16TimeOff);
- }
- PUBLIC void DRV_LEDS_vStopBlinkLeds(
- bool_t bStopBlinkAllLeds,
- uint8_t *u8ArrLedPin,
- uint8_t u8NumberLed
- )
- {
- uint8 i,j;
- if(bStopBlinkAllLeds)
- {
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i++)
- {
- vStopBlinkTimer(i);
- sLedParams.sBlinkGroupLeds[i].eTimerRun = E_BLINK_TIMER_NONE;
- for(j = 0; j < SIZE_OF_BLINK_LED_MASK; j++)
- {
- sLedParams.sBlinkGroupLeds[i].u32PinMask[j] = 0;
- }
- sLedParams.sBlinkGroupLeds[i].i16NumberBlink = 0;
- sLedParams.sBlinkGroupLeds[i].fnCallback = NULL;
- sLedParams.sBlinkGroupLeds[i].pParams = NULL;
- sLedParams.sBlinkGroupLeds[i].u16TimeOff = 0;
- sLedParams.sBlinkGroupLeds[i].u16TimeOn = 0;
- }
- }
- else
- {
- if((u8ArrLedPin == NULL) || (u8NumberLed > MAX_NUMBER_LEDS_SUPPORT))
- return;
- for(i = 0; i < u8NumberLed; i++)
- {
- vRemoveThisLedInBlinkLedGroupThatContainsIt(u8ArrLedPin[i]);
- vTurnLed_Off(u8ArrLedPin[i]);
- }
- }
- }
- PUBLIC void DRV_LEDS_vSetLevel(
- DRV_LEDS_teLedLevel_t eLedLevel
- )
- {
- sLedParams.eLedLevel = eLedLevel;
- if(sLedParams.eLedLevel == LED_LEVEL_0)
- {
- vTurnOffAllDimLeds();
- vStopDimTimer();
- }
- else if(sLedParams.eLedLevel == LED_LEVEL_100)
- {
- vTurnOnAllDimLeds();
- vStopDimTimer();
- }
- else
- {
- if(bDimTimerStopped)
- {
- vStartDimTimer();
- }
- }
- vUpdateDimCounter();
- vResetDimCounter();
- }
- PUBLIC void DRV_LEDS_vOn(
- uint8_t u8LedPin
- )
- {
- if(!bIsPinLedAlreadyInitialized(u8LedPin))
- {
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: Please initialize pin[%] as led pin first \n", u8LedPin);
- return;
- }
- vAddLedTo_ArrayLedDim(u8LedPin);
- vRemoveThisLedInBlinkLedGroupThatContainsIt(u8LedPin);
- if(sLedParams.eLedLevel == LED_LEVEL_0)
- {
- vTurnLed_Off(u8LedPin);
- }
- else
- {
- vTurnLed_On(u8LedPin);
- }
- vUpdateDimCounter();
- vResetDimCounter();
- if(bDimTimerStopped)
- {
- vStartDimTimer();
- }
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: start led[%d], PWMon = %d, off = %d \n",
- u8LedPin, sDimCounter[CURRENT].u8PWMOn, sDimCounter[CURRENT].u8PWMOff);
- }
- PUBLIC void DRV_LEDS_vOff(
- uint8_t u8LedPin
- )
- {
- if(!bIsPinLedAlreadyInitialized(u8LedPin))
- {
- DBG_vPrintf(TRACE_DRV_LEDS, "DRV-LED: Please initialize pin[%] as led pin first \n", u8LedPin);
- return;
- }
- vRemoveLedOutOf_ArrayLedDim(u8LedPin);
- vRemoveThisLedInBlinkLedGroupThatContainsIt(u8LedPin);
- vTurnLed_Off(u8LedPin);
- }
- /****************************************************************************/
- /*** Local Functions ***/
- /****************************************************************************/
- PUBLIC void DRV_LEDS_vISR_DimTimer(uint32 u32Device, uint32 u32ItemBitmap)
- {
- vDimLedsProcess();
- /*Start timer again*/
- if(!bDimTimerStopped)
- {
- vStartDimTimer();
- }
- }
- PRIVATE void vDimLedsProcess(void)
- {
- static bool_t bAlreadyTurnOff = FALSE;
- if(sDimCounter[CURRENT].u8PWMOn > 0)
- {
- sDimCounter[CURRENT].u8PWMOn --;
- }
- else
- {
- if(!bAlreadyTurnOff)
- {
- vTurnOffAllDimLeds();
- bAlreadyTurnOff = TRUE;
- }
- if(sDimCounter[CURRENT].u8PWMOff > 0)
- {
- sDimCounter[CURRENT].u8PWMOff --;
- }
- else
- {
- bAlreadyTurnOff = FALSE;
- vTurnOnAllDimLeds();
- vResetDimCounter();
- }
- }
- }
- PRIVATE void vStartDimTimer(void)
- {
- // Start Hardware Timer0 as Base time to Blink led and PWM led
- vAHI_TimerEnable(DIM_LED_TIMER, 4, FALSE, TRUE, FALSE); // clock for timer = 16/2^4 = 1Mhz
- vAHI_TimerClockSelect(DIM_LED_TIMER, FALSE, FALSE);
- vAHI_TimerStartSingleShot(DIM_LED_TIMER, 0, u16TimerCycle); // 1000 cycles * 1MHz = 1ms
- bDimTimerStopped = FALSE;
- }
- PRIVATE void vStopDimTimer(void)
- {
- vAHI_TimerStop(DIM_LED_TIMER);
- bDimTimerStopped = TRUE;
- }
- PRIVATE void vcbTimerBlinkLed(void *pvParam)
- {
- if (NULL == pvParam) return;
- uint8_t u8GroupLedsIndex = *((uint8_t*)pvParam);
- vStopBlinkTimer(u8GroupLedsIndex);
- if(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink == 0)
- {
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- vTurnOffAllBlinkLeds(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vTurnOffAllBlinkLeds(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].eTimerRun = E_BLINK_TIMER_NONE;
- if(NULL != sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].fnCallback)
- {
- // Callback function
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].fnCallback(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].pParams);
- }
- return;
- }
- /* Start timer again */
- if(E_BLINK_TIMER_ON == sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].eTimerRun)
- {
- if(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink != LED_BLINK_FOREVER)
- {
- sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].i16NumberBlink --;
- }
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vAddBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- vTurnOffAllBlinkLeds(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- if(sLedParams.eLedLevel != LED_LEVEL_0)
- {
- vTurnOnAllBlinkLeds(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- }
- vStartBlinkTimer(u8GroupLedsIndex, E_BLINK_TIMER_OFF);
- }
- else if(E_BLINK_TIMER_OFF == sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].eTimerRun)
- {
- vAddBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- vRemoveBlinkLedTo_ArrayLedDim(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- vTurnOffAllBlinkLeds(u8GroupLedsIndex, E_ALTERNATE_BLINK_LED);
- if(sLedParams.eLedLevel != LED_LEVEL_0)
- {
- vTurnOnAllBlinkLeds(u8GroupLedsIndex, E_MAIN_BLINK_LED);
- }
- vStartBlinkTimer(u8GroupLedsIndex, E_BLINK_TIMER_ON);
- }
- }
- PRIVATE void vStartBlinkTimer(uint8_t u8TimerIndex, DRV_LEDS_teBlinkTimerRuning eTimerRun)
- {
- switch(eTimerRun)
- {
- case E_BLINK_TIMER_ON:
- ZTIMER_eStart(sLedParams.sBlinkGroupLeds[u8TimerIndex].u8TimerBlink, sLedParams.sBlinkGroupLeds[u8TimerIndex].u16TimeOn);
- sLedParams.sBlinkGroupLeds[u8TimerIndex].eTimerRun = E_BLINK_TIMER_ON;
- break;
- case E_BLINK_TIMER_OFF:
- ZTIMER_eStart(sLedParams.sBlinkGroupLeds[u8TimerIndex].u8TimerBlink, sLedParams.sBlinkGroupLeds[u8TimerIndex].u16TimeOff);
- sLedParams.sBlinkGroupLeds[u8TimerIndex].eTimerRun = E_BLINK_TIMER_OFF;
- break;
- default:
- break;
- }
- }
- PRIVATE void vStopBlinkTimer(uint8_t u8TimerIndex)
- {
- ZTIMER_eStop(sLedParams.sBlinkGroupLeds[u8TimerIndex].u8TimerBlink);
- }
- PRIVATE bool_t bIsBlinkTimerRunning(uint8_t u8TimerIndex)
- {
- return (ZTIMER_eGetState(sLedParams.sBlinkGroupLeds[u8TimerIndex].u8TimerBlink) == E_ZTIMER_STATE_RUNNING);
- }
- PRIVATE void vRemoveLedInOtherGroupThatHaveInThisGroup(uint8_t u8GroupLedsIndex)
- {
- uint8 i,j,k;
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i++)
- {
- if(i != u8GroupLedsIndex)
- {
- for(j = 0; j < SIZE_OF_BLINK_LED_MASK; j++)
- for(k = 0; k < SIZE_OF_BLINK_LED_MASK; k++)
- sLedParams.sBlinkGroupLeds[i].u32PinMask[j] &= ~sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[k];
- }
- }
- }
- PRIVATE void vAddBlinkLedTo_ArrayLedDim(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex)
- {
- sLedParams.u32DimLedPinMask |= sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex];
- }
- PRIVATE void vRemoveBlinkLedTo_ArrayLedDim(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex)
- {
- sLedParams.u32DimLedPinMask &= ~sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex];
- }
- PRIVATE void vUpdateDimCounter(void)
- {
- sDimCounter[ORIGIN].u8PWMOn = sLedParams.eLedLevel; //number of time base
- sDimCounter[ORIGIN].u8PWMOff = (NUMBER_OF_LED_LEVEL - 1) - sDimCounter[ORIGIN].u8PWMOn; //number of time base
- }
- PRIVATE void vResetDimCounter(void)
- {
- sDimCounter[CURRENT].u8PWMOn = sDimCounter[ORIGIN].u8PWMOn;
- sDimCounter[CURRENT].u8PWMOff = sDimCounter[ORIGIN].u8PWMOff;
- }
- PRIVATE void vTurnLed_On(uint8_t u8LedPin)
- {
- vAHI_DioSetOutput(1UL << u8LedPin, 0);
- // Turn on led DO_0,DO_1
- if(u8LedPin == DO_0_PIN)
- {
- vAHI_DoSetDataOut(0x01, 0);
- }
- else if(u8LedPin == DO_1_PIN)
- {
- vAHI_DoSetDataOut(0x02, 0);
- }
- }
- PRIVATE void vTurnLed_Off(uint8_t u8LedPin)
- {
- vAHI_DioSetOutput(0, 1UL << u8LedPin);
- // Turn off led DO_0,DO_1
- if(u8LedPin == DO_0_PIN)
- {
- vAHI_DoSetDataOut(0, 0x01);
- }
- else if(u8LedPin == DO_1_PIN)
- {
- vAHI_DoSetDataOut(0, 0x02);
- }
- }
- PRIVATE void vTurnOnAllDimLeds(void)
- {
- vAHI_DioSetOutput(sLedParams.u32DimLedPinMask, 0);
- // Turn on led DO_0,DO_1
- vAHI_DoSetDataOut(sLedParams.u32DimLedPinMask >> DO_0_PIN, 0);
- }
- PRIVATE void vTurnOffAllDimLeds(void)
- {
- vAHI_DioSetOutput(0, sLedParams.u32DimLedPinMask);
- // Turn off led DO_0,DO_1
- vAHI_DoSetDataOut(0, sLedParams.u32DimLedPinMask >> DO_0_PIN);
- }
- PRIVATE void vTurnOnAllBlinkLeds(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex)
- {
- vAHI_DioSetOutput(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex], 0);
- // Turn on led DO_0,DO_1
- vAHI_DoSetDataOut(sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex] >> DO_0_PIN, 0);
- }
- PRIVATE void vTurnOffAllBlinkLeds(uint8_t u8GroupLedsIndex, DRV_LEDS_teLedMaskIndex eLedMaskIndex)
- {
- vAHI_DioSetOutput(0, sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex]);
- // Turn off led DO_0,DO_1
- vAHI_DoSetDataOut(0, sLedParams.sBlinkGroupLeds[u8GroupLedsIndex].u32PinMask[eLedMaskIndex] >> DO_0_PIN);
- }
- PRIVATE bool_t bIsPinLedAlreadyInitialized(uint8_t u8LedPin)
- {
- return ((u32LedInitializedMask >> u8LedPin) & 1U);
- }
- PRIVATE void vAddLedTo_ArrayLedDim(uint8_t u8LedPin)
- {
- sLedParams.u32DimLedPinMask |= 1UL << u8LedPin;
- }
- PRIVATE void vRemoveLedOutOf_ArrayLedDim(uint8_t u8LedPin)
- {
- sLedParams.u32DimLedPinMask &= ~(1UL << u8LedPin);
- }
- PRIVATE void vRemoveThisLedInBlinkLedGroupThatContainsIt(uint8_t u8LedPin)
- {
- uint8 i,j;
- for(i = 0; i < MAX_NUMBER_GROUP_LED_BLINK; i++)
- for(j = 0; j < SIZE_OF_BLINK_LED_MASK; j++)
- {
- sLedParams.sBlinkGroupLeds[i].u32PinMask[j] &= ~(1UL << u8LedPin);
- }
- }
- /****************************************************************************/
- /*** END OF FILE ***/
- /****************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement