Ejemplo n.º 1
0
/*********************************************************************
 * @fn      zclPI_HdlInSpecificCommands
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library
 *
 * @param   pInMsg - pointer to the incoming message
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclPI_HdlInSpecificCommands( zclIncoming_t *pInMsg )
{
  ZStatus_t stat;
  zclPI_AppCallbacks_t *pCBs;

  // make sure endpoint exists
  pCBs = zclPI_FindCallbacks( pInMsg->msg->endPoint );
  if ( pCBs == NULL )
    return ( ZFailure );

  switch ( pInMsg->msg->clusterId )				
  {
    case ZCL_CLUSTER_ID_PI_GENERIC_TUNNEL:
      if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
        stat = zclPI_ProcessIn_GenericTunneServer( pInMsg, pCBs );
      else
        stat = zclPI_ProcessIn_GenericTunneClient( pInMsg, pCBs );
      break;

    case ZCL_CLUSTER_ID_PI_BACNET_PROTOCOL_TUNNEL:
      stat = zclPI_ProcessIn_BACnetTunnelCmds( pInMsg, pCBs );
      break;

    case ZCL_CLUSTER_ID_PI_11073_PROTOCOL_TUNNEL:
      stat = zclPI_ProcessIn_11073TunnelCmds( pInMsg, pCBs );
      break;

    default:
      stat = ZFailure;
      break;
  }

  return ( stat );
}
/*********************************************************************
 * @fn      zclSS_HdlInSpecificCommands
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library

 * @param   pInMsg - pointer to the incoming message
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclSS_HdlInSpecificCommands( zclIncoming_t *pInMsg )
{
    ZStatus_t stat = ZSuccess;
    zclSS_AppCallbacks_t *pCBs;

    // make sure endpoint exists
    pCBs = (void*)zclSS_FindCallbacks( pInMsg->msg->endPoint );
    if ( pCBs == NULL )
        return ( ZFailure );

    switch ( pInMsg->msg->clusterId )
    {
#ifdef ZCL_ZONE
    case ZCL_CLUSTER_ID_SS_IAS_ZONE:
        if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
            stat = zclSS_ProcessInZoneStatusCmdsServer( pInMsg, pCBs );
        else
            stat = zclSS_ProcessInZoneStatusCmdsClient( pInMsg, pCBs );
        break;
#endif // ZCL_ZONE

#ifdef ZCL_ACE
    case ZCL_CLUSTER_ID_SS_IAS_ACE:
        if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
            stat = zclSS_ProcessInACECmdsServer( pInMsg, pCBs );
        else
            stat = zclSS_ProcessInACECmdsClient( pInMsg, pCBs );
        break;
#endif // ZCL_ACE

#ifdef ZCL_WD
    case ZCL_CLUSTER_ID_SS_IAS_WD:
        stat = zclSS_ProcessInWDCmds( pInMsg, pCBs );
        break;
#endif // ZCL_WD

    default:
        stat = ZFailure;
        break;
    }

    return ( stat );
}
Ejemplo n.º 3
0
/*********************************************************************
 * @fn      zclApplianceStatistics_ProcessInCmds
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library on a command ID basis

 * @param   pInMsg - pointer to the incoming message
 * @param   pCBs - pointer to the application callbacks
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclApplianceStatistics_ProcessInCmds( zclIncoming_t *pInMsg, zclApplianceStatistics_AppCallbacks_t *pCBs )
{
  ZStatus_t stat;

  // Client-to-Server
  if( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {
    switch( pInMsg->hdr.commandID )
    {
      case COMMAND_APPLIANCE_STATISTICS_LOG_REQ:
        stat = zclApplianceStatistics_ProcessInCmd_LogReq( pInMsg, pCBs );
        break;

      case COMMAND_APPLIANCE_STATISTICS_LOG_QUEUE_REQ:
        stat = zclApplianceStatistics_ProcessInCmd_LogQueueReq( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }
  // sent Server-to-Client
  else
  {
    switch( pInMsg->hdr.commandID )
    {
      case COMMAND_APPLIANCE_STATISTICS_LOG_NOTIFICATION:
        stat = zclApplianceStatistics_ProcessInCmd_LogNotification( pInMsg, pCBs );
        break;

      case COMMAND_APPLIANCE_STATISTICS_LOG_RSP:
        stat = zclApplianceStatistics_ProcessInCmd_LogRsp( pInMsg, pCBs );
        break;

      case COMMAND_APPLIANCE_STATISTICS_LOG_QUEUE_RSP:
        stat = zclApplianceStatistics_ProcessInCmd_LogQueueRsp( pInMsg, pCBs );
        break;

      case COMMAND_APPLIANCE_STATISTICS_STATISTICS_AVAILABLE:
        stat = zclApplianceStatistics_ProcessInCmd_StastisticsAvailable( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }

  return ( stat );
}
Ejemplo n.º 4
0
ZStatus_t processBasicClusterCommands( zclIncoming_t *pInMsg ){
	if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) ) {
		switch(pInMsg->hdr.commandID){
			case COMMAND_BASIC_RESET_FACT_DEFAULT:
				basicResetCB();
				return ZSuccess;
		default:
      		return ZFailure;   // Error ignore the command
		}
	}
	return ZSuccess;
}
Ejemplo n.º 5
0
int zclss_handlespecificcommands( struct zclincomingmsg * msg){ 
	int result = -1;
	switch(msg->message->ClusterId){
		case ZCL_CLUSTER_ID_SS_IAS_ZONE:
			if(zcl_ServerCmd(msg->zclframehdr.control.direction)){
				zclss_processinzonestatuscmdsserver(msg);
			}else{
				zclss_processinzonestatuscmdsclient(msg);
			}
			break;
	}
	return 0;
}
Ejemplo n.º 6
0
/*********************************************************************
 * @fn      zclPartition_ProcessInCmds
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library on a command ID basis

 * @param   pInMsg - pointer to the incoming message
 * @param   pCBs - pointer to the application callbacks
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclPartition_ProcessInCmds( zclIncoming_t *pInMsg,
                                             zclPartition_AppCallbacks_t *pCBs )
{
  ZStatus_t stat;

  // Client-to-Server
  if( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_PARTITION_TRANSFER_PARTITIONED_FRAME:
        stat = zclPartition_ProcessInCmd_TransferPartitionedFrame( pInMsg, pCBs );
      break;

      case COMMAND_PARTITION_READ_HANDSHAKE_PARAM:
        stat = zclPartition_ProcessInCmd_ReadHandshakeParam( pInMsg, pCBs );
      break;

      case COMMAND_PARTITION_WRITE_HANDSHAKE_PARAM:
        stat = zclPartition_ProcessInCmd_WriteHandshakeParam( pInMsg, pCBs );
      break;

      default:
        // Unknown command
        stat = ZFailure;
      break;
    }
  }
  // Sent Server-to-Client
  else
  {
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_PARTITION_MULTIPLE_ACK:
        stat = zclPartition_ProcessInCmd_MultipleAck( pInMsg, pCBs );
      break;

      case COMMAND_PARTITION_READ_HANDSHAKE_PARAM_RSP:
        stat = zclPartition_ProcessInCmd_ReadHandshakeParamRsp( pInMsg, pCBs );
      break;

      default:
        // Unknown command
        stat = ZFailure;
      break;
    }
  }

  return ( stat );
}
Ejemplo n.º 7
0
/*********************************************************************
 * @fn      zclElectricalMeasurement_ProcessInCmds
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library on a command ID basis

 * @param   pInMsg - pointer to the incoming message
 * @param   pCBs - pointer to the application callbacks
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclElectricalMeasurement_ProcessInCmds( zclIncoming_t *pInMsg,
                                                         zclElectricalMeasurement_AppCallbacks_t *pCBs )
{
  ZStatus_t stat;

  // Client-to-Server
  if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_ELECTRICAL_MEASUREMENT_GET_PROFILE_INFO:
        stat = zclElectricalMeasurement_ProcessInCmd_GetProfileInfo( pInMsg, pCBs );
        break;

      case COMMAND_ELECTRICAL_MEASUREMENT_GET_MEASUREMENT_PROFILE:
        stat = zclElectricalMeasurement_ProcessInCmd_GetMeasurementProfile( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }
  // Server-to-Client
  else
  {
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_ELECTRICAL_MEASUREMENT_GET_PROFILE_INFO_RSP:
        stat = zclElectricalMeasurement_ProcessInCmd_GetProfileInfoRsp( pInMsg, pCBs );
        break;

      case COMMAND_ELECTRICAL_MEASUREMENT_GET_MEASUREMENT_PROFILE_RSP:
        stat = zclElectricalMeasurement_ProcessInCmd_GetMeasurementProfileRsp( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }

  return ( stat );
}
Ejemplo n.º 8
0
/*********************************************************************
 * @fn      zclClosures_ProcessInDoorLock
 *
 * @brief   Process in the received DoorLock Command.
 *
 * @param   pInMsg - pointer to the incoming message
 * @param   pCBs - pointer to the Application callback functions
 * 
 * @return  ZStatus_t
 */
static ZStatus_t zclClosures_ProcessInDoorLock( zclIncoming_t *pInMsg,
                                               zclClosures_AppCallbacks_t *pCBs )
{
  if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {
    switch(pInMsg->hdr.commandID)
    {
    case COMMAND_CLOSURES_LOCK_DOOR:
    case COMMAND_CLOSURES_UNLOCK_DOOR:
      if ( pCBs->pfnDoorLock )
      {
        pCBs->pfnDoorLock( pInMsg->hdr.commandID, &(pInMsg->msg->srcAddr), pInMsg->hdr.transSeqNum );
      }
      break;
      
    default:
      return ( ZCL_STATUS_UNSUP_CLUSTER_COMMAND );   // Error ignore the command
    }
  }
  else
  {
    switch(pInMsg->hdr.commandID)
    {
    case COMMAND_CLOSURES_LOCK_DOOR_RESPONSE:
    case COMMAND_CLOSURES_UNLOCK_DOOR_RESPONSE:
      if ( pCBs->pfnDoorLockRes )
      {
        pCBs->pfnDoorLockRes( pInMsg->hdr.commandID, &(pInMsg->msg->srcAddr), pInMsg->hdr.transSeqNum );
      }
      break;
      
    default:
      return ( ZCL_STATUS_UNSUP_CLUSTER_COMMAND );   // Error ignore the command
    }
  }

  return ( ZCL_STATUS_CMD_HAS_RSP );
}
Ejemplo n.º 9
0
/*********************************************************************
 * @fn      zclCC_HdlInSpecificCommands
 *
 * @brief   Function to process incoming Commands specific
 *          to this cluster library

 * @param   pInMsg - pointer to the incoming message
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclCC_HdlInSpecificCommands( zclIncoming_t *pInMsg )
{
  ZStatus_t stat;
  zclCC_AppCallbacks_t *pCBs;
  
  // Make sure endpoint exists
  pCBs = zclCC_FindCallbacks( pInMsg->msg->endPoint );
  if ( pCBs == NULL )
  {
    return ( ZFailure );
  }

  if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )  
  {
    // Process Client commands, received by server
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_CC_RESTART_DEVICE:
        stat = zclCC_ProcessInCmd_RestartDevice( pInMsg, pCBs );
        break;

      case COMMAND_CC_SAVE_STARTUP_PARAMS:
        stat = zclCC_ProcessInCmd_SaveStartupParams( pInMsg, pCBs );
        break;

      case COMMAND_CC_RESTORE_STARTUP_PARAMS:
        stat = zclCC_ProcessInCmd_RestoreStartupParams( pInMsg, pCBs );
        break;

      case COMMAND_CC_RESET_STARTUP_PARAMS:
        stat = zclCC_ProcessInCmd_ResetStartupParams( pInMsg, pCBs );
        break;

      default:
        stat = ZFailure;
        break;
    }
  }
  else
  {
    switch ( pInMsg->hdr.commandID )
    {
      case COMMAND_CC_RESTART_DEVICE_RSP:
        stat = zclCC_ProcessInCmd_RestartDeviceRsp( pInMsg, pCBs );
        break;

      case COMMAND_CC_SAVE_STARTUP_PARAMS_RSP:
        stat = zclCC_ProcessInCmd_SaveStartupParamsRsp( pInMsg, pCBs );
        break;

      case COMMAND_CC_RESTORE_STARTUP_PARAMS_RSP:
        stat = zclCC_ProcessInCmd_RestoreStartupParamsRsp( pInMsg, pCBs );
        break;

      case COMMAND_CC_RESET_STARTUP_PARAMS_RSP:
        stat = zclCC_ProcessInCmd_ResetStartupParamsRsp( pInMsg, pCBs );
        break;

      default:
        stat = ZFailure;
        break;
    }
  }
 
  return ( stat );
}
Ejemplo n.º 10
0
/*********************************************************************
 * @fn      zclClosures_ProcessInWindowCovering
 *
 * @brief   Process in the received Window Covering cluster Command.
 *
 * @param   pInMsg - pointer to the incoming message
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclClosures_ProcessInWindowCovering( zclIncoming_t *pInMsg,
                                                      zclClosures_AppCallbacks_t *pCBs )
{
  ZStatus_t status = ZCL_STATUS_SUCCESS;
  uint8 *pData = pInMsg->pData;
  
  if ( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {   
    switch ( pInMsg->hdr.commandID )
    {
    case COMMAND_CLOSURES_UP_OPEN:
      if ( pCBs->pfnWindowCoveringUpOpen )
      {
        pCBs->pfnWindowCoveringUpOpen();
      }
      break;
      
    case COMMAND_CLOSURES_DOWN_CLOSE:
      if ( pCBs->pfnWindowCoveringDownClose )
      {
        pCBs->pfnWindowCoveringDownClose();
      }
      break;
      
    case COMMAND_CLOSURES_STOP:
      if ( pCBs->pfnWindowCoveringStop )
      {
        pCBs->pfnWindowCoveringStop();
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_LIFT_SETPOINT:
      if ( pCBs->pfnWindowCoveringGotoLiftSetpoint )
      {
        status = pCBs->pfnWindowCoveringGotoLiftSetpoint( pData[0] );
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_LIFT_VALUE:
      if ( pCBs->pfnWindowCoveringGotoLiftValue )
      {
        if ( pCBs->pfnWindowCoveringGotoLiftValue( BUILD_UINT16( pData[0], pData[1] ) ) == FALSE )
        {
          status = ZCL_STATUS_INVALID_VALUE;
        }
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_LIFT_PERCENTAGE:
      if ( pCBs->pfnWindowCoveringGotoLiftPercentage )
      {
        if ( pCBs->pfnWindowCoveringGotoLiftPercentage( pData[0] ) == FALSE )
        {
          status = ZCL_STATUS_INVALID_VALUE;
        }
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_TILT_SETPOINT:
      if ( pCBs->pfnWindowCoveringGotoTiltSetpoint )
      {
        status = pCBs->pfnWindowCoveringGotoTiltSetpoint( pData[0] );
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_TILT_VALUE:
      if ( pCBs->pfnWindowCoveringGotoTiltValue )
      {
        if ( pCBs->pfnWindowCoveringGotoTiltValue( BUILD_UINT16( pData[0], pData[1] ) ) == FALSE )
        {
          status = ZCL_STATUS_INVALID_VALUE;
        }
      }
      break;
      
    case COMMAND_CLOSURES_GO_TO_TILT_PERCENTAGE:
      if ( pCBs->pfnWindowCoveringGotoTiltPercentage )
      {
        if ( pCBs->pfnWindowCoveringGotoTiltPercentage( pData[0] ) == FALSE )
        {
          status = ZCL_STATUS_INVALID_VALUE;
        }
      }
      break;
      
    case COMMAND_CLOSURES_PROGRAM_SETPOINT:
      if ( pCBs->pfnWindowCoveringProgramSetpoint )
      {
        programSetpointPayload_t setpoint;
        if( pInMsg->pDataLen == ZCL_WC_PROGRAMSETPOINTREQ_VER1_PAYLOADLEN )
        {
          setpoint.version = programSetpointVersion1;
          setpoint.setpointType = (setpointType_t)pData[0]; 
          setpoint.setpointIndex = pData[1];
          setpoint.setpointValue = BUILD_UINT16( pData[2], pData[3] );
        }
        else if( pInMsg->pDataLen == ZCL_WC_PROGRAMSETPOINTREQ_VER2_PAYLOADLEN )
        {
          setpoint.version = programSetpointVersion2;
          setpoint.setpointIndex = pData[0];
        }
        else
        {
          return ZCL_STATUS_INVALID_VALUE;
        }
        if ( pCBs->pfnWindowCoveringProgramSetpoint( &setpoint ) == FALSE )
        {
          status = ZCL_STATUS_INSUFFICIENT_SPACE;
        }
      }
      break;
      
    default:
      return( ZCL_STATUS_UNSUP_CLUSTER_COMMAND );
    }
  }
  // no Client command

  return ( status );
}
Ejemplo n.º 11
0
/*********************************************************************
 * @fn      zclHVAC_ProcessInThermostatCmds
 *
 * @brief   Callback from ZCL to process incoming Commands specific
 *          to this cluster library on a command ID basis

 * @param   pInMsg - pointer to the incoming message
 *
 * @return  ZStatus_t
 */
static ZStatus_t zclHVAC_ProcessInThermostatCmds( zclIncoming_t *pInMsg,
                                                  zclHVAC_AppCallbacks_t *pCBs )
{
  ZStatus_t stat;

  if  ( pInMsg->hdr.commandID > COMMAND_THERMOSTAT_GET_RELAY_STATUS_LOG )
  {
    return (ZFailure);   // Error ignore the command
  }

  // Client-to-Server
  if( zcl_ServerCmd( pInMsg->hdr.fc.direction ) )
  {
    switch( pInMsg->hdr.commandID )
    {
      case COMMAND_THERMOSTAT_SETPOINT_RAISE_LOWER:
        stat = zclThermostat_ProcessInCmd_SetpointRaiseLower( pInMsg, pCBs);
        break;

      case COMMAND_THERMOSTAT_SET_WEEKLY_SCHEDULE:
        stat = zclThermostat_ProcessInCmd_SetWeeklySchedule( pInMsg, pCBs );
        break;

      case COMMAND_THERMOSTAT_GET_WEEKLY_SCHEDULE:
        stat = zclThermostat_ProcessInCmd_GetWeeklySchedule( pInMsg, pCBs );
        break;

      case COMMAND_THERMOSTAT_CLEAR_WEEKLY_SCHEDULE:
        stat = zclThermostat_ProcessInCmd_ClearWeeklySchedule( pInMsg, pCBs );
        break;

      case COMMAND_THERMOSTAT_GET_RELAY_STATUS_LOG:
        stat = zclThermostat_ProcessInCmd_GetRelayStatusLog( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }
  // Server-to-Client
  else
  {
    switch( pInMsg->hdr.commandID )
    {
      case COMMAND_THERMOSTAT_GET_WEEKLY_SCHEDULE_RSP:
        stat = zclThermostat_ProcessInCmd_GetWeeklyScheduleRsp( pInMsg, pCBs );
        break;

      case COMMAND_THERMOSTAT_GET_RELAY_STATUS_LOG_RSP:
        stat = zclThermostat_ProcessInCmd_GetRelayStatusLogRsp( pInMsg, pCBs );
        break;

      default:
        // Unknown command
        stat = ZFailure;
        break;
    }
  }

  return ( stat );
}