#include "BT_Private.h"
#include "BT_Debug.h"
#include "BT_Init.h"
#include "BT_Event.h"
BtTaskData Bluetooth;
typedef struct EVNET_POWER_ON EVNET_POWER_ON_T;
static void handleUEMessage(Task task, MessageId id, Message message)
{
switch (id){
case EventInvalid:{
EVENT_PARAM_T* MessageData = (EVENT_PARAM_T*)malloc(10+sizeof(EVENT_PARAM_T));/*申请空间,*/
DEBUG(MAIN_DEBUG, ("EventInvalid\n"));
memset(MessageData, '\0', 10+sizeof(EVENT_PARAM_T));
MessageData->Size = 10;
memcpy(MessageData->Data, "aaaaaaaaaa", 10);
/*
MessageSendLater函数
说明:delay数毫秒后发送消息到相应的任务,消息发送完后系统会自动free(也就是说malloc申请的message数据经过MessageSend调用后系统会自动free)
参数:task 接收消息的任务(即函数入口地址)
id 消息类型标识符
message 消息的消息数据(NULL表示不带任何数据)
delay 消息发送之前需要延时的时间
*/
MessageSendLater(task, EventPairing, NULL, 1000);/*EventPairing消息延时了1s,那么EventPowerOn消息会比EventPairing先到来*/
MessageSend(task, EventPowerOn, MessageData);/*MessageData虽然是动态分配的空间,但是当经过调度后,系统会自动释放*/
}
break;
case EventPowerOn:
DEBUG(MAIN_DEBUG, ("EventPowerOn:%s\n", ((EVENT_PARAM_T*)message)->Data));/*此处接收到的message是由EventInvalid处理代码发送过来的*/
break;
case EventPowerOff:
DEBUG(MAIN_DEBUG, ("EventPowerOff\n"));
break;
case EventPairing:
DEBUG(MAIN_DEBUG, ("EventPairing\n"));
MessageSend(task, EventCancelPairing, NULL);
MessageSend(task, EventCancelPairing, NULL);
/*
MessageCancelFirst函数
说明:与给定的任务取消第一个排队消息和消息id
参数:task 接收消息的任务(即函数入口地址)
id 需要取消的消息标识符
返回值:成功发现并取消返回true
*/
MessageCancelFirst(task, EventCancelPairing);/*这里我们注册了2个EventCancelPairing,但是经过该函数处理后,实际只会有一条消息到来*/
break;
case EventCancelPairing:
DEBUG(MAIN_DEBUG, ("EventCancelPairing\n"));
MessageSend(task, EventPowerOff, NULL);
MessageSend(task, EventPowerOff, NULL);
/*
MessageCancelAll
说明:与给定的任务取消消息标识符为id的所有队列消息
参数:task 接收消息的任务(即函数入口地址)
id 需要取消的消息标识符
返回值:成功发现并取消返回取消id消息标识符的个数
*/
MessageCancelAll(task, EventPowerOff);/*这样前边注册的2条EventPowerOff消息就不会再发送了*/
break;
case EventLaterEnd:
break;
default:
break;
}
}
/*当有信息传送给App_handler任务时,App_handler会被执行,task所带的参数为App_handler本身*/
static void App_handler(Task task, MessageId id, Message message)
{
if((id >= EVENTS_MESSAGE_BASE) && (id <= EVENTS_LAST_EVENT))
{
DEBUG(MAIN_DEBUG, ("EVENTS_MESSAGE[%x]\r\n", id));
handleUEMessage(task, id, message);
}
else if((id >= CL_MESSAGE_BASE) && (id <= CL_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("CL_MESSAGE[%x]\r\n", id));
/*
MessageSend函数
说明:立即发送消息到相应的任务,消息发送完后系统会自动free(也就是说malloc申请的message数据经过MessageSend调用后系统会自动free)
参数:task 接收消息的任务(即函数入口地址)
id 消息类型标识符
message 消息的消息数据(NULL表示不带任何数据)
*/
MessageSend(task, EVENTS_MESSAGE_BASE, NULL);
}
else if((id >= SPP_MESSAGE_BASE) && (id <= SPP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("SPP_MESSAGE[%x]\r\n", id));
}
else if((id >= OBEX_MESSAGE_BASE) && (id <= OBEX_MESSAGE_END))
{
DEBUG(MAIN_DEBUG, ("OBEX_MESSAGE[%x]\r\n", id));
}
else if((id >= PBAPC_MESSAGE_BASE) && (id <= PBAPC_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("PBAPC_MESSAG[%x]\r\n", id));
}
else if((id >= MAPC_MESSAGE_BASE) && (id <= MAPC_API_MESSAGE_END))
{
DEBUG(MAIN_DEBUG, ("MAPC_MESSAGE[%x]\r\n", id));
}
else if((id >= GATT_MESSAGE_BASE) && (id <= GATT_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("GATT_MESSAGE[%x]\r\n", id));
}
else if((id >= HFP_MESSAGE_BASE) && (id <= HFP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("HFP_MESSAGE[%x]\r\n", id));
}
else if((id >= AGHFP_MESSAGE_BASE) && (id <= AGHFP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("AGHFP_MESSAGE[%x]\r\n", id));
}
else if((id >= A2DP_MESSAGE_BASE) && (id <= A2DP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("A2DP_MESSAGE[%x]\r\n", id));
}
else if((id >= AVRCP_MESSAGE_BASE) && (id <= AVRCP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("AVRCP_MESSAGE[%x]\r\n", id));
}
else if((id >= BATT_REP_BASE) && (id <= BATT_REP_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("BATT_REP[%x]\r\n", id));
}
else if((id >= SWAT_MESSAGE_BASE) && (id <= SWAT_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("SWAT_MESSAGE[%x]\r\n", id));
}
else if((id >= CODEC_MESSAGE_BASE) && (id <= CODEC_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("CODEC_MESSAGE[%x]\r\n", id));
}
else if((id >= AUDIO_UPSTREAM_MESSAGE_BASE) && (id <= AUDIO_UPSTREAM_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("AUDIO_UPSTREAM_MESSAGE[%x]\r\n", id));
}
else if((id >= USB_DEVICE_CLASS_MSG_BASE) && (id <= USB_DEVICE_CLASS_MSG_TOP))
{
DEBUG(MAIN_DEBUG, ("USB_DEVICE_CLASS_MSG[%x]\r\n", id));
}
else if((id >= DISPLAY_UPSTREAM_MESSAGE_BASE) && (id <= DISPLAY_UPSTREAM_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("DISPLAY_UPSTREAM_MESSAGE[%x]\r\n", id));
}
else if((id >= POWER_MESSAGE_BASE) && (id <= POWER_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("POWER_MESSAGE[%x]\r\n", id));
}
else if((id >= FM_UPSTREAM_MESSAGE_BASE) && (id <= FM_UPSTREAM_MESSAGE_TOP))
{
DEBUG(MAIN_DEBUG, ("FM_UPSTREAM_MESSAGE[%x]\r\n", id));
}
else if((id >= MESSAGE_BLUESTACK_BASE_) && (id <= MESSAGE_STREAM_PARTITION_VERIFY))
{
DEBUG(MAIN_DEBUG, ("BLUESTACK_SYSTEM_MESSAGE[%x]\r\n", id));
}
else{
DEBUG(MAIN_DEBUG, ("The unknown message [%x]\r\n", id));
}
}
int main(void)
{
DEBUG(MAIN_DEBUG, ("Main start...\n"));
Bluetooth.task.handler = App_handler;/*安装主任务应用处理函数*/
InitBluetoothData();
InitBluetoothComplete();
/*
MessageLoop函数
说明:主循环,知道有消息调用才会中断并跳转到对应的task
*/
MessageLoop();/*该函数需要在main函数的最末尾调用,否则无法实现任务的调度*/
return 0;
}