Пример #1
0
/****************************************************************************
 *
 * NAME: vResetATimer
 *
 * DESCRIPTION:
 * tool function for stop and then start a software timer
 *
 * PARAMETERS: Name         RW  Usage
 *             hSWTimer     R   handler to sw timer
 *             u32Ticks     R   ticks of cycle
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PUBLIC void vResetATimer(OS_thSWTimer hSWTimer, uint32 u32Ticks)
{
    if (OS_eGetSWTimerStatus(hSWTimer) != OS_E_SWTIMER_STOPPED)
    {
        OS_eStopSWTimer(hSWTimer);
    }
    OS_eStartSWTimer(hSWTimer, u32Ticks, NULL);
}
/****************************************************************************
 *
 * NAME:		vStopNonSleepPreventingTimers
 *
 * DESCRIPTION: The timers in this function should not stop us from sleep.
 * Stop the timers to reduce the activity count which will prevent sleep.
 *
 ****************************************************************************/
PRIVATE void vStopNonSleepPreventingTimers()
{
#ifndef DEEP_SLEEP_ENABLE
	if (OS_eGetSWTimerStatus(APP_TickTimer) != OS_E_SWTIMER_STOPPED)
		OS_eStopSWTimer(APP_TickTimer);
#endif

}
/****************************************************************************
 *
 * NAME: vManageIndividualControlMode
 *
 * DESCRIPTION:
 * Manage the Individual control modes for the lights in unicast mode
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vManageIndividualControlMode(te_SwitchState *peSwitchState, te_TransitionCode eTransitionCode )
{
      /* Calls individual function
       * Changes state
       * Addressing for individual functions
       *               Individual or group ? - well the address will be taken based on the state */
    DBG_vPrintf(TRACE_SWITCH_STATE,"\nIn vManageIndividualControlMode(Mode = %d) TransitionCode = %d -> ", *peSwitchState,eTransitionCode);
    switch(eTransitionCode)
    {
        /* Fall through for the button presses as there will be a delayed action*/
          case ON_PRESSED:

          case OFF_PRESSED:

          case UP_PRESSED:

          case DOWN_PRESSED:
              vQButtonPress(eTransitionCode);
              break;

          case UP_AND_ON_TOGETHER_PRESSED:
              vDQButtonPress();
              DBG_vPrintf(TRACE_SWITCH_STATE," vAppStoreSceneById = 1 \n");
              vAppStoreSceneById(SCENE_1, u16GroupId);
              *peSwitchState = LIGHT_CONTROL_MODE;
              break;

          case DOWN_AND_OFF_TOGETHER_PRESSED:
              vDQButtonPress();
              DBG_vPrintf(TRACE_SWITCH_STATE," vAppStoreSceneById = 2 \n");
              vAppStoreSceneById(SCENE_2, u16GroupId);
              *peSwitchState = LIGHT_CONTROL_MODE;
              break;

         case COMM_BUTTON_PRESSED:
              *peSwitchState = IDENTIFY_MODE;
              vAppDiscover();
              break;

          case DOWN_RELEASED:
          case UP_RELEASED:
              vDQButtonPress();
			  DBG_vPrintf(TRACE_SWITCH_STATE," vAppLevelStop \n");
			  vAppLevelStop();
              break;

          default :
              break;
    }
    /*Restart the Timer from expiring */
    if( OS_eGetSWTimerStatus(App_ChangeModeTimer) == OS_E_SWTIMER_EXPIRED )
    {
        OS_eStopSWTimer(App_ChangeModeTimer);
        *peSwitchState = LIGHT_CONTROL_MODE;
    }
    else
    	vStopStartModeChangeTimer(APP_TIME_MS(30000));
}
/****************************************************************************
 *
 * NAME: vStopStartModeChangeTimer
 *
 * DESCRIPTION:
 * Stops and starts the commissioning timer with required ticks
 *
 * PARAMETERS:
 * u32Ticks     Ticks for timer start
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vStopStartModeChangeTimer( uint32 u32Ticks )
{
    if( OS_eGetSWTimerStatus(App_ChangeModeTimer) != OS_E_SWTIMER_STOPPED )
    {
        OS_eStopSWTimer(App_ChangeModeTimer);
    }
    #ifdef SLEEP_ENABLE
        if( FALSE == bWatingToSleep())
        {
            OS_eStartSWTimer(App_ChangeModeTimer, u32Ticks, NULL );
        }
    #else
        OS_eStartSWTimer(App_ChangeModeTimer, u32Ticks, NULL );
    #endif
}
/****************************************************************************
 *
 * NAME: vDQButtonPress
 *
 * DESCRIPTION:
 * Destroys delayed command that is stored
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vDQButtonPress()
{
    eTransitionButtonCode = NUMBER_OF_TRANSITION_CODE;
    OS_eStopSWTimer(APP_tmrButtonDelayTimer);
}
Пример #6
0
/****************************************************************************
 *
 * NAME: vHandleNetworkScreenEvent
 *
 * DESCRIPTION:
 * Handles stack events when the Controller is in its "network" display mode state
 *
 * PARAMETERS: Name         RW  Usage
 *             sStackEvent  R   Contains details of the stack event
 *
 * RETURNS:
 * Sequence number
 *
 ****************************************************************************/
PRIVATE void vHandleNetworkScreenEvent(ZPS_tsAfEvent sStackEvent, APP_tsEvent sAppEvent)
{
//	uint8 *u8Char;
//	string u8Char1;
//	uint8 *u8String;
    /* respond to button presses when in "network" display mode */
    if (APP_E_EVENT_BUTTON_DOWN == sAppEvent.eType)
    {
        if (APP_E_BUTTONS_BUTTON_1 == sAppEvent.sButton.u8Button)
        {
            DBG_vPrintf(TRACE_APP, "Starting join toggle timer\n");
            OS_eStopSWTimer(APP_tmrJoiningButton);
            OS_eStartSWTimer(APP_tmrJoiningButton, APP_TIME_MS(2000), NULL);
        }
    }

    if (APP_E_EVENT_BUTTON_UP == sAppEvent.eType)
    {
        if (APP_E_BUTTONS_BUTTON_1 == sAppEvent.sButton.u8Button)
        {
            if (OS_E_SWTIMER_RUNNING == OS_eGetSWTimerStatus(APP_tmrJoiningButton))
            {
                /*
                 * Button press was too short to trigger permit-join toggling
                 * therefore it was pressed in order to switch to the node
                 * display screen.
                 *
                 * Stop timer to prevent toggling from occurring.
                 */
                OS_eStopSWTimer(APP_tmrJoiningButton);

                /* If at least one sensor has joined, then it is valid to go
                 * to the node display screen
                 */
                if (0 < APP_u8ControllerNodeNumDataSensors())
                {
                    APP_vDisplaySetState(APP_E_DISPLAY_STATE_NODE);
                    APP_vDisplayUpdate();
                    s_sDevice.eState = E_NODE_SCREEN;
                }
            }
        }
        else if (APP_E_BUTTONS_BUTTON_2 == sAppEvent.sButton.u8Button)
        {
            /*
             * perform select temperature sensors action
             */
            APP_vDisplaySetSensor(APP_E_SENSOR_TEMP);
            APP_vDisplayUpdate();
            vSerial_QData();
        }
        else if (APP_E_BUTTONS_BUTTON_3 == sAppEvent.sButton.u8Button)
        {
            /* perform select humidity sensors action */
            APP_vDisplaySetSensor(APP_E_SENSOR_HTS);
            APP_vDisplayUpdate();
            vSerial_SensorData();
        }
        else if (APP_E_BUTTONS_BUTTON_4 == sAppEvent.sButton.u8Button)
        {
            /* perform select humidity sensors action */
            APP_vDisplaySetSensor(APP_E_SENSOR_ALS);
            APP_vDisplayUpdate();
            Rfid_Getprotocol();
        }
    }
    vCheckStackEvent(sStackEvent);
}