/************************************************************************************************** * @fn Hal_ProcessEvent * * @brief Hal Process Event * * @param task_id - Hal TaskId * events - events * * @return None **************************************************************************************************/ uint16 Hal_ProcessEvent( uint8 task_id, uint16 events ) { uint8 *msgPtr; (void)task_id; // Intentionally unreferenced parameter //--------------------------------------------------------------------------// // processing the system message //--------------------------------------------------------------------------// if ( events & SYS_EVENT_MSG ) { msgPtr = osal_msg_receive(Hal_TaskID); while (msgPtr) { /* Do something here - for now, just deallocate the msg and move on */ /* De-allocate */ osal_msg_deallocate( msgPtr ); /* Next */ msgPtr = osal_msg_receive( Hal_TaskID ); } return events ^ SYS_EVENT_MSG; } return 0; }
/************************************************************************************************** * @fn Hal_ProcessEvent * * @brief Hal Process Event * * @param task_id - Hal TaskId * events - events * * @return None **************************************************************************************************/ uint16 Hal_ProcessEvent( uint8 task_id, uint16 events ) { uint8 *msgPtr; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { msgPtr = osal_msg_receive(Hal_TaskID); while (msgPtr) { /* Do something here - for now, just deallocate the msg and move on */ /* De-allocate */ osal_msg_deallocate( msgPtr ); /* Next */ msgPtr = osal_msg_receive( Hal_TaskID ); } return events ^ SYS_EVENT_MSG; } if ( events & HAL_LED_BLINK_EVENT ) { #if (defined (BLINK_LEDS)) && (HAL_LED == TRUE) HalLedUpdate(); #endif /* BLINK_LEDS && HAL_LED */ return events ^ HAL_LED_BLINK_EVENT; } if (events & HAL_KEY_EVENT) { #if (defined HAL_KEY) && (HAL_KEY == TRUE) /* Check for keys */ HalKeyPoll(); /* if interrupt disabled, do next polling */ if (!Hal_KeyIntEnable) { osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100); } #endif // HAL_KEY return events ^ HAL_KEY_EVENT; } #ifdef POWER_SAVING if ( events & HAL_SLEEP_TIMER_EVENT ) { halRestoreSleepLevel(); return events ^ HAL_SLEEP_TIMER_EVENT; } #endif /* Nothing interested, discard the message */ return 0; }
uint16 DisplayTaskEventLoop(uint8 task_id, uint16 events) { Dis_Msg_t *msg = NULL; if(events & SYS_EVENT_MSG) { msg = (Dis_Msg_t *)osal_msg_receive(task_id); while(msg) { switch(msg->hdr.event) { case DIS_UPDATE: if(false == IS_Flag_Valid(DISPLAY_UPDATE_LOCK)){ dispaly_update_handler(gSystem_t, cur_menu->id, msg->value); } break; case DIS_JUMP: dispaly_update_handler(gSystem_t, (menu_id_t)msg->value, 0); break; default: break; } osal_msg_deallocate((uint8 *) msg); msg = (Dis_Msg_t *)osal_msg_receive(task_id); } return (events ^ SYS_EVENT_MSG); } if(events & VOL_DIS_BACK_MSG){ vol_dis_timeout_handler(); return (events ^ VOL_DIS_BACK_MSG); } if(events & SRC_MENU_TIMEOUT_MSG){ src_dis_timeout_handler(); return (events ^ SRC_MENU_TIMEOUT_MSG); } if(events & SRC_MENU_TO_FILE_LIST_TIMEOUT_MSG){ src_menu_to_file_list_handler(); return(events ^ SRC_MENU_TO_FILE_LIST_TIMEOUT_MSG); } return 0; }
/********************************************************************* * @fn SampleApp_ProcessEvent * @brief Generic Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * @return none */ uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); //Databuf = osal_mem_alloc(MSGpkt->cmd.DataLength); while ( MSGpkt ) { switch ( MSGpkt->hdr.event ) { // Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break; default: break; } // Release the memory osal_msg_deallocate((uint8 *)MSGpkt ); // Next - if one is available MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Send a message out - This event is generated by a timer // (setup in SampleApp_Init()). if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { SampleApp_SendPeriodicMessage(); //发送数据函数 // Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); // return unprocessed events return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT); } // Discard unknown events return 0; }
uint16 FanProcessEvent(uint8 taskId, uint16 events) { if (events & SYS_EVENT_MSG) { uint8* message = NULL; if ((message = osal_msg_receive(fanTaskId)) != NULL) { FanProcessOSALMessage((osal_event_hdr_t*)message); osal_msg_deallocate(message); } return (events ^ SYS_EVENT_MSG); } if (events & FAN_START_DEVICE_EVT) { GAPRole_StartDevice(&fanPeripheralCallBacks); GAPBondMgr_Register(&fanBondManagerCallBacks); return (events ^ FAN_START_DEVICE_EVT); } if (events & FAN_UPDATE_STATUS_EVT) { FanUpdateStatus(); return (events ^ FAN_UPDATE_STATUS_EVT); } return 0; };
/********************************************************************* * @fn SimpleBLEBroadcaster_ProcessEvent * * @brief Simple BLE Broadcaster Application Task event processor. This * function is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SimpleBLEBroadcaster_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( simpleBLEBroadcaster_TaskID )) != NULL ) { simpleBLEBroadcaster_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &simpleBLEBroadcaster_BroadcasterCBs ); return ( events ^ SBP_START_DEVICE_EVT ); } // Discard unknown events return 0; }
/********************************************************************* * @fn CyclingService_ProcessEvent * * @brief process incoming event. * * @param task_id - OSAL task id. * * @param events - event bit(s) set for the task(s) * * @return none */ uint16 CyclingService_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( cyclingService_TaskID )) != NULL ) { cycling_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & CSC_CMD_IND_SEND_EVT ) { GATT_Indication( connectionHandle, &cscCmdInd, FALSE, cyclingService_TaskID ); // Set Control Point Cfg done scOpInProgress = FALSE; return ( events ^ CSC_CMD_IND_SEND_EVT ); } return 0; }
/*************************************************************************************************** * @fn MT_ProcessEvent * * @brief MonitorTest Task Event Processor. This task is put into the task table. * * @param byte task_id - task ID of the MT Task * @param UINT16 events - event(s) for the MT Task * * @return void ***************************************************************************************************/ UINT16 MT_ProcessEvent(uint8 task_id, uint16 events) { uint8 *msg_ptr; (void)task_id; // Intentionally unreferenced parameter /* Could be multiple events, so switch won't work */ if ( events & SYS_EVENT_MSG ) { while ( (msg_ptr = osal_msg_receive( MT_TaskID )) ) { MT_ProcessIncomingCommand((mtOSALSerialData_t *)msg_ptr); } /* Return unproccessed events */ return (events ^ SYS_EVENT_MSG); } if ( events & MT_ZTOOL_SERIAL_RCV_BUFFER_FULL ) { /* Return unproccessed events */ return (events ^ MT_ZTOOL_SERIAL_RCV_BUFFER_FULL); } /* Handle MT_SYS_OSAL_START_TIMER callbacks */ #if defined MT_SYS_FUNC if ( events & (MT_SYS_OSAL_EVENT_MASK)) { if (events & MT_SYS_OSAL_EVENT_0) { MT_SysOsalTimerExpired(0x00); events ^= MT_SYS_OSAL_EVENT_0; } if (events & MT_SYS_OSAL_EVENT_1) { MT_SysOsalTimerExpired(0x01); events ^= MT_SYS_OSAL_EVENT_1; } if (events & MT_SYS_OSAL_EVENT_2) { MT_SysOsalTimerExpired(0x02); events ^= MT_SYS_OSAL_EVENT_2; } if (events & MT_SYS_OSAL_EVENT_3) { MT_SysOsalTimerExpired(0x03); events ^= MT_SYS_OSAL_EVENT_3; } return events; } #endif /* Discard or make more handlers */ return 0; } /* MT_ProcessEvent() */
/************************************************************************************************** * @fn MHMSSysEvtMsg * * @brief This function is called by MHMSAppEvt() to process all of the pending OSAL messages. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ static void MHMSSysEvtMsg(void) { uint8 *msg; while ((msg = osal_msg_receive(MHMSTaskId))) { switch (*msg) { #if TVSA_DATA_CNF //MHMS Question what is this for? case AF_DATA_CONFIRM_CMD: if (ZSuccess != ((afDataConfirm_t *)msg)->hdr.status) { if (0 == ++MHMSCnfErrCnt) { MHMSCnfErrCnt = 255; } } break; #endif case AF_INCOMING_MSG_CMD: //MHMS this a router processing the incomming command from the coordinator MHMSAfMsgRx((afIncomingMSGPacket_t *)msg); break; case ZDO_STATE_CHANGE: MHMSZdoStateChange(); break; default: break; } (void)osal_msg_deallocate(msg); // Receiving task is responsible for releasing the memory. } }
/** * @brief Central Profile Task event processing function. * * @param taskId - Task ID * @param events - Events. * * @return events not processed */ uint16 GAPCentralRole_ProcessEvent( uint8 taskId, uint16 events ) { if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( gapCentralRoleTaskId )) != NULL ) { gapCentralRole_ProcessOSALMsg( (osal_event_hdr_t *) pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & GAP_EVENT_SIGN_COUNTER_CHANGED ) { // Sign counter changed, save it to NV VOID osal_snv_write( BLE_NVID_SIGNCOUNTER, sizeof( uint32 ), &gapCentralRoleSignCounter ); return ( events ^ GAP_EVENT_SIGN_COUNTER_CHANGED ); } // Discard unknown events return 0; }
/********************************************************************* * @fn HidEmuKbd_ProcessEvent * * @brief HidEmuKbd Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 HidEmuKbd_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( hidEmuKbdTaskId )) != NULL ) { hidEmuKbd_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_DEVICE_EVT ) { return ( events ^ START_DEVICE_EVT ); } return 0; }
/********************************************************************* * @fn TimeApp_ProcessEvent * * @brief Time App Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 TimeApp_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( timeAppTaskId )) != NULL ) { timeApp_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return ( events ^ SYS_EVENT_MSG ); } if ( events & START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &timeAppPeripheralCB ); // Register with bond manager after starting device GAPBondMgr_Register( (gapBondCBs_t *) &timeAppBondCB ); return ( events ^ START_DEVICE_EVT ); } if ( events & START_DISCOVERY_EVT ) { if ( timeAppPairingStarted ) { // Postpone discovery until pairing completes timeAppDiscPostponed = TRUE; } else { timeAppDiscState = timeAppDiscStart(); } return ( events ^ START_DISCOVERY_EVT ); } if ( events & CLOCK_UPDATE_EVT ) { timeAppClockDisplay(); // Restart clock tick timer osal_start_timerEx( timeAppTaskId, CLOCK_UPDATE_EVT, DEFAULT_CLOCK_UPDATE_PERIOD ); return ( events ^ CLOCK_UPDATE_EVT ); } // Discard unknown events return 0; }
/********************************************************************* * @fn SimpleBLEPeripheral_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) { //tasksArr[] ÊÇ11¸öTaskµÄ×îºóÒ»¸ö£¬ÓÉOSAL ϵͳ½øÐе÷¶È¡£ÓÐʱ¼äÀ´ÁË£¬Óø÷½·¨´¦Àí¡£³õʼ»¯OSAL_SimpleBLEperipheal VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( simpleBLEPeripheral_TaskID )) != NULL ) { simpleBLEPeripheral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { // Start the Device Õâ¸öÊÇÉ豸ÓÐ״̬±ä»¯²Å»áµ÷ÓõĻص÷º¯Êý VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs ); // Set timer for first periodic event //init LED PWM_init(); init_QI_Switch(1); //dataChange(1,0); //osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); //LedChange(); return ( events ^ SBP_START_DEVICE_EVT ); } if ( events & SBP_PERIODIC_EVT ) { //osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); //Ö´ÐеƹâchangeµÄº¯Êý if(P1_1 == 1){ //HalLcdWriteString("HEIGH",HAL_LCD_LINE_4); }else{ //HalLcdWriteString("LOW",HAL_LCD_LINE_4); } LedChange(); return (events ^ SBP_PERIODIC_EVT); } // Discard unknown events return 0; }
/* @fn LoacationApp_ProcessEvent * @brief Generic Application Task event processor. * @param task_id - The OSAL assigned task ID. * @param events - Bit map of events to process. * @return none*/ uint16 LoacationApp_ProcessEvent( uint8 task_id, uint16 events ) { if ( events & SYS_EVENT_MSG ) { afIncomingMSGPacket_t *MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( LoacationApp_TaskID ); while ( MSGpkt != NULL ) { switch ( MSGpkt->hdr.event ) { case KEY_CHANGE: handleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; case AF_DATA_CONFIRM_CMD: #if !defined( RTR_NWK ) { // This message is received as a confirmation of a data packet sent. // The status is of ZStatus_t type [defined in ZComDef.h] afDataConfirm_t *afDataConfirm = (afDataConfirm_t *)MSGpkt; /* No ACK from the MAC layer implies that mobile device is out of * range of most recent parent. Therefore, begin an orphan scan * to try to find a former parent. * NOTE: To get the fastest action in the process of finding a new * parent, set the MAX_JOIN_ATTEMPTS in ZDApp.c to 1.*/ if(afDataConfirm->hdr.status == ZMacNoACK) LoacationApp_NoACK(); else{}// Some other error -- Do something. } #endif break; case AF_INCOMING_MSG_CMD: processMSGCmd( MSGpkt ); break; case ZDO_STATE_CHANGE: #if defined( POWER_SAVING ) if(rejoinPending) { rejoinPending = FALSE; LoacationApp_Sleep(TRUE); //Ok to resume power saving ops. } #endif break; default: break; } osal_msg_deallocate( (uint8 *)MSGpkt ); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(LoacationApp_TaskID); } return (events ^ SYS_EVENT_MSG); // Return unprocessed events. } return 0; // Discard unknown events }
/** * @brief Central Profile Task event processing function. * * @param taskId - Task ID * @param events - Events. * * @return events not processed */ uint16 GAPCentralRole_ProcessEvent( uint8 taskId, uint16 events ) { if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( gapCentralRoleTaskId )) != NULL ) { gapCentralRole_ProcessOSALMsg( (osal_event_hdr_t *) pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & GAP_EVENT_SIGN_COUNTER_CHANGED ) { // Sign counter changed, save it to NV VOID osal_snv_write( BLE_NVID_SIGNCOUNTER, sizeof( uint32 ), &gapCentralRoleSignCounter ); return ( events ^ GAP_EVENT_SIGN_COUNTER_CHANGED ); } if ( events & START_ADVERTISING_EVT ) { if ( gapRole_AdvEnabled ) { gapAdvertisingParams_t params; // Setup advertisement parameters params.eventType = gapRole_AdvEventType; params.initiatorAddrType = gapRole_AdvDirectType; VOID osal_memcpy( params.initiatorAddr, gapRole_AdvDirectAddr, B_ADDR_LEN ); params.channelMap = gapRole_AdvChanMap; params.filterPolicy = gapRole_AdvFilterPolicy; if ( GAP_MakeDiscoverable( gapRole_TaskID, ¶ms ) != SUCCESS ) { gapRole_state = GAPROLE_ERROR; // Notify the application if ( pGapCentralRoleCB && pGapCentralRoleCB->broadcastCB ) { pGapCentralRoleCB->broadcastCB( gapRole_state ); } } } return ( events ^ START_ADVERTISING_EVT ); } // Discard unknown events return 0; }
/************************************************************************************************** * @fn zapSBL_SysEvtMsg * * @brief This function is called by zapSBL_Evt() to process all pending OSAL messages. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ static void zapSBL_SysEvtMsg(void) { uint8 *msg; while ((msg = osal_msg_receive(zapSBL_TaskId))) { (void)osal_msg_deallocate(msg); // Receiving task is responsible for releasing the memory. } }
/********************************************************************* * @fn SoftCmd_ProcessEvent * * @brief Soft Command Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SoftCmd_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( softCmdTaskId )) != NULL ) { softCmd_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &softCmdPeripheralCBs ); // Register with bond manager after starting device GAPBondMgr_Register( (gapBondCBs_t *) &softCmdBondCB ); return ( events ^ START_DEVICE_EVT ); } if ( events & START_DISCOVERY_EVT ) { if ( softCmdPairingStarted ) { // Postpone discovery until pairing completes softCmdDiscPostponed = TRUE; } else { softCmdDiscState = softCmdDiscStart(); } return ( events ^ START_DISCOVERY_EVT ); } if ( events & BATT_PERIODIC_EVT ) { // Perform periodic battery task softCmdBattPeriodicTask(); return (events ^ BATT_PERIODIC_EVT); } // Discard unknown events return 0; }
/********************************************************************* * @fn SimpleBLEPeripheral_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( simpleBLEPeripheral_TaskID )) != NULL ) { simpleBLEPeripheral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { P0_7 = 0; //防止继电器跳变,初始化为高 P0DIR |= BV(7); //设置为输出 P0SEL &=~BV(7); //设置该脚为普通GPIO //HCI_EXT_SetTxPowerCmd (HCI_EXT_TX_POWER_MINUS_23_DBM); // Start the Device VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs ); return ( events ^ SBP_START_DEVICE_EVT ); } if ( events & SBP_PERIODIC_EVT ) { //成功写入后,重启从机 HAL_SYSTEM_RESET(); return (events ^ SBP_PERIODIC_EVT); } #if defined ( PLUS_BROADCASTER ) if ( events & SBP_ADV_IN_CONNECTION_EVT ) { uint8 turnOnAdv = TRUE; // Turn on advertising while in a connection GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &turnOnAdv ); return (events ^ SBP_ADV_IN_CONNECTION_EVT); } #endif // PLUS_BROADCASTER // Discard unknown events return 0; }
/********************************************************************* * @fn PIRSensor_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 PIRSensor_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( PIRSensor_TaskID )) != NULL ) { PIRSensor_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &PIRSensor_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &PIRSensor_BondMgrCBs ); return ( events ^ SBP_START_DEVICE_EVT ); } ////////////////////////// // AIN // ////////////////////////// if ( events & SBP_READ_AIN_EVT ) { if(ainEnabled) { uint16 ainData; ainData = readAdcData(HAL_ADC_CHANNEL_6); Ain_SetParameter(SENSOR_DATA, AIN_DATA_LEN, &ainData); osal_start_timerEx( PIRSensor_TaskID, SBP_READ_AIN_EVT, sensorAinPeriod ); } else { resetCharacteristicValue( AIN_SERV_UUID, SENSOR_DATA, 0, AIN_DATA_LEN); resetCharacteristicValue( AIN_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); } return (events ^ SBP_READ_AIN_EVT); } // Discard unknown events return 0; }
uint16 MdcEventLoop(uint8 task_id, uint16 events) { Mdc_Task_Msg_t *msg = NULL; if(events & SYS_EVENT_MSG) { msg = (Mdc_Task_Msg_t *)osal_msg_receive(task_id); while(msg) { switch(msg->hdr.event) { case MDC_VOLUME_MSG: mdc_volume_event_handler(gSystem_t); break; default: break; } osal_msg_deallocate((uint8 *) msg); msg = (Mdc_Task_Msg_t *)osal_msg_receive(task_id); } return (events ^ SYS_EVENT_MSG); } if(events & MDC_POLL_MSG){ mdc_poll_handler(gSystem_t); return (events ^ MDC_POLL_MSG); } if(events & HDMI_V2_VOLUME_PUSH_MSG){ Send_MdcTask_Msg(MDC_VOLUME_MSG, 0); return (events ^ HDMI_V2_VOLUME_PUSH_MSG); } return 0; }
/********************************************************************* * @fn SimpleBLECentral_ProcessEvent * * @brief Simple BLE Central Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SimpleBLECentral_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( simpleBLETaskId )) != NULL ) { simpleBLECentral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_DEVICE_EVT ) { // Start the Device VOID GAPCentralRole_StartDevice( (gapCentralRoleCB_t *) &simpleBLERoleCB ); // Register with bond manager after starting device GAPBondMgr_Register( (gapBondCBs_t *) &simpleBLEBondCB ); return ( events ^ START_DEVICE_EVT ); } if ( events & START_DISCOVERY_EVT ) { simpleBLECentralStartDiscovery( ); return ( events ^ START_DISCOVERY_EVT ); } if ( events & SBP_PERIODIC_EVT ) { // Restart timer if ( SBP_PERIODIC_EVT_PERIOD && simpleBLEState == BLE_STATE_CONNECTED ) { osal_start_timerEx( simpleBLETaskId, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); } // Perform periodic application task performPeriodicTask(); return (events ^ SBP_PERIODIC_EVT); } // Discard unknown events return 0; }
/********************************************************************* * @fn StubAPS_ProcessEvent() * * @brief Main event loop for Stub APS task. This function should be called * at periodic intervals when event occur. * * @param task_id - Task ID * @param events - Bitmap of events * * @return none */ UINT16 StubAPS_ProcessEvent( uint8 task_id, uint16 events ) { (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { osal_event_hdr_t *msg_ptr; while ( (msg_ptr = (osal_event_hdr_t *)osal_msg_receive( StubAPS_TaskID )) != NULL ) { if ( msg_ptr->event == MAC_MCPS_DATA_CNF ) { INTERP_DataConfirm( (ZMacDataCnf_t *)msg_ptr ); } else if ( msg_ptr->event == MAC_MCPS_DATA_IND ) { INTERP_DataIndication( (macMcpsDataInd_t *)msg_ptr ); } osal_msg_deallocate( (uint8 *)msg_ptr ); } // Return unproccessed events return ( events ^ SYS_EVENT_MSG ); } if ( events & CHANNEL_CHANGE_EVT ) { // try to change to the new channel ZStatus_t status = StubAPS_SetNewChannel( newChannel ); if ( status != ZSuccess ) { // turn MAC receiver back on uint8 rxOnIdle = true; ZMacSetReq( ZMacRxOnIdle, &rxOnIdle ); // set NWK task to run nwk_setStateIdle( FALSE ); channelChangeInProgress = FALSE; } // notify the application StubAPS_NotifyApp( status ); return ( events ^ CHANNEL_CHANGE_EVT ); } // If reach here, the events are unknown // Discard or make more handlers return 0; } /* StubAPS_ProcessEvent() */
/********************************************************************* * @fn Biscuit_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 Biscuit_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( biscuit_TaskID )) != NULL ) { biscuit_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &biscuit_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &biscuit_BondMgrCBs ); // Set timer for first periodic event osal_start_timerEx( biscuit_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); return ( events ^ SBP_START_DEVICE_EVT ); } if ( events & SBP_PERIODIC_EVT ) { // Restart timer if ( SBP_PERIODIC_EVT_PERIOD ) { osal_start_timerEx( biscuit_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); } // Perform periodic application task performPeriodicTask(); return (events ^ SBP_PERIODIC_EVT); } // Discard unknown events return 0; }
/********************************************************************* * @fn HeartRate_ProcessEvent * * @brief Heart Rate Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 HeartRate_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( heartRate_TaskID )) != NULL ) { heartRate_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &heartRatePeripheralCB ); // Register with bond manager after starting device GAPBondMgr_Register( (gapBondCBs_t *) &heartRateBondCB ); return ( events ^ START_DEVICE_EVT ); } if ( events & HEART_PERIODIC_EVT ) { // Perform periodic heart rate task heartRatePeriodicTask(); return (events ^ HEART_PERIODIC_EVT); } if ( events & BATT_PERIODIC_EVT ) { // Perform periodic battery task heartRateBattPeriodicTask(); return (events ^ BATT_PERIODIC_EVT); } // Discard unknown events return 0; }
/********************************************************************* * @fn zclHomelink_event_loop * * @brief Event Loop Processor for zclGeneral. * * @param none * * @return none */ uint16 zclHomelink_event_loop( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclHomelink_TaskID )) ) { switch ( MSGpkt->hdr.event ) { case ZCL_INCOMING_MSG: // Incoming ZCL Foundation command/response messages zclHomelink_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt ); break; case KEY_CHANGE: zclHomelink_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; case ZDO_STATE_CHANGE: zclHomelink_NwkState = (devStates_t)(MSGpkt->hdr.status); // now on the network if ( (zclHomelink_NwkState == DEV_ZB_COORD) || (zclHomelink_NwkState == DEV_ROUTER) || (zclHomelink_NwkState == DEV_END_DEVICE) ) { if (initState == 0) { initState = 1; } } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Discard unknown events return 0; }
/********************************************************************* * @brief Task Event Processor function. * * Internal function defined in broadcaster.h. */ uint16 GAPRole_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( gapRole_TaskID )) != NULL ) { gapRole_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_ADVERTISING_EVT ) { if ( gapRole_AdvEnabled ) { gapAdvertisingParams_t params; // Setup advertisement parameters params.eventType = gapRole_AdvEventType; params.initiatorAddrType = gapRole_AdvDirectType; VOID osal_memcpy( params.initiatorAddr, gapRole_AdvDirectAddr, B_ADDR_LEN ); params.channelMap = gapRole_AdvChanMap; params.filterPolicy = gapRole_AdvFilterPolicy; if ( GAP_MakeDiscoverable( gapRole_TaskID, ¶ms ) != SUCCESS ) { gapRole_state = GAPROLE_ERROR; if ( pGapRoles_AppCGs && pGapRoles_AppCGs->pfnStateChange ) { pGapRoles_AppCGs->pfnStateChange( gapRole_state ); } } } return ( events ^ START_ADVERTISING_EVT ); } // Discard unknown events return 0; }
/*--------------------------------------------------------------------------- * Application event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * - task_id: The OSAL assigned task ID. * - events: Events to process. This is a bit map and can contain more * than one event. *-------------------------------------------------------------------------*/ uint16 PMD_processEvent( uint8 taskId, uint16 events ) { if ( events & START_STREAMING) { attHandleValueNoti_t nData2; nData2.len = 20; nData2.handle = 20; getNameWithAddressInfo(nData2); GATT_Notification( 0, &nData2, FALSE ); return (events ^ START_STREAMING); } if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( pmd.taskId )) != NULL ) { processOSALMsg( (osal_event_hdr_t *)pMsg ); VOID osal_msg_deallocate( pMsg ); } return (events ^ SYS_EVENT_MSG); } if ( events & PMD_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &peripheralRoleCallbacks ); // Start Bond Manager VOID GAPBondMgr_Register( &bondMgrCallbacks ); // Flash red LED twice //cbLED_flash(cbLED_RED, 2, 250, 500); PMD_INT_init(); return ( events ^ PMD_START_DEVICE_EVT ); } // Discard unknown events return 0; }
/********************************************************************* * @fn zclSample_event_loop * * @brief Event Loop Processor for zclGeneral. * * @param none * * @return none */ uint16 zclSampleSw_event_loop( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclSampleSw_TaskID )) ) { switch ( MSGpkt->hdr.event ) { case ZCL_INCOMING_MSG: // Incoming ZCL Foundation command/response messages zclSampleSw_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt ); break; case ZDO_CB_MSG: zclSampleSw_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt ); break; case KEY_CHANGE: zclSampleSw_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SAMPLESW_IDENTIFY_TIMEOUT_EVT ) { zclSampleSw_IdentifyTime = 10; zclSampleSw_ProcessIdentifyTimeChange(); return ( events ^ SAMPLESW_IDENTIFY_TIMEOUT_EVT ); } // Discard unknown events return 0; }
/********************************************************************* * @fn HidKbdMouse_ProcessEvent * * @brief HidKbdMouse Application Task event processor. This function * include timers, messages and any other user defined events. * is called to process all events for the task. Events * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 HidKbdMouse_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( hidKbdMouseTaskId )) != NULL ) { hidKbdMouse_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & START_DEVICE_EVT ) { // Set timer for first periodic event osal_start_timerEx( hidKbdMouseTaskId, SBP_PERIODIC_EVT, KEEP_CONNECTION_ALIVE_50s ); return ( events ^ START_DEVICE_EVT ); } //Added to test UART if ( events & SBP_PERIODIC_EVT ) { // Restart timer if ( KEEP_CONNECTION_ALIVE_50s ) { osal_start_timerEx( hidKbdMouseTaskId, SBP_PERIODIC_EVT, KEEP_CONNECTION_ALIVE_50s ); } // Perform periodic application task performPeriodicTask(); return (events ^ SBP_PERIODIC_EVT); } return 0; }
/********************************************************************* * @fn zclSample_event_loop * * @brief Event Loop Processor for zclGeneral. * * @param none * * @return none */ uint16 AT_ZCL_ONOFF_SWITCH_event_loop( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( AT_ZCL_ONOFF_SWITCH_TaskID )) ) { switch ( MSGpkt->hdr.event ) { default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & AT_ZCL_ONOFF_SWITCH_IDENTIFY_TIMEOUT_EVT ) { if (AT_ZCL_ONOFF_SWITCH_IdentifyTime > 0 ) AT_ZCL_ONOFF_SWITCH_IdentifyTime--; AT_ZCL_ONOFF_SWITCH_ProcessIdentifyTimeChange(); return ( events ^ AT_ZCL_ONOFF_SWITCH_IDENTIFY_TIMEOUT_EVT ); } //updata the switch status if ( events & AT_ZCL_ONOFF_SWITCH_UPDATE_EVT ) { AT_ZCL_ONOFF_SWITCH_update(); osal_start_timerEx( AT_ZCL_ONOFF_SWITCH_TaskID, AT_ZCL_ONOFF_SWITCH_UPDATE_EVT, 500 ); return ( events ^ AT_ZCL_ONOFF_SWITCH_UPDATE_EVT ); } // Discard unknown events return 0; }