Exemplo n.º 1
0
void BeaconHandler(uint8 beacon[])
{
    EndPointDevice.free_node = beacon[6];
    EndPointDevice.csma_length = (MAX_DEVICE_NUM - EndPointDevice.free_node)/3+1;
    EndPointDevice.power = beacon[1]&0x01;
    if(EndPointDevice.connected == 0)                   //未连接,发送加入请求
    {
        PostTask(EVENT_JOINREQUEST_SEND);
    }
    else                                                //已连接,执行TDMA过程
    {
        //TIME1_HIGH;
        if(EndPointDevice.power == 0)
        {
            A7139_Sleep();
        }

        PostTask(EVENT_DATA_SEND);
    }
}
Exemplo n.º 2
0
uint8 RecvDataACK()
{
    send_time = Frame_Time;
    while(GIO2==0)
    {
        if(Frame_Time>send_time+DATAACK_TIMEOUT)             //60为DataACK接收超时,在收到ACK时不会进入if内
        {
            TIME1_LOW;
            resend_count++;
            EndPointDevice.data_ack = 0;
            RXMode();
            //TIME1_HIGH;
            PostTask(EVENT_CSMA_RESEND);
            return 0;
        }
        
            
    }
    
    A7139_ReadFIFO(DataRecvBuffer,MAX_PACK_LENGTH);
    RXMode();
    if(PackValid()&&(Unpack(DataRecvBuffer) == DATAACK_TYPE)) //如果收到正确的ACK
    {
        DataACKHandler();
        if(EndPointDevice.power == 1)
        {
            A7139_DeepSleep();
            DIS_INT;
        }
        return 1;
    }
    else                                                        //否则进入CSMA阶段
    {
        PostTask(EVENT_CSMA_RESEND);
        EndPointDevice.data_ack = 0;
        return 0;
    }
        
       
}
Exemplo n.º 3
0
		bool PostTaskAndReplyImpl::PostTaskAndReply(
			const tracked_objects::Location& from_here,
			const Closure& task,
			const Closure& reply) {
			PostTaskAndReplyRelay* relay =
				new PostTaskAndReplyRelay(from_here, task, reply);
			if (!PostTask(from_here, Bind(&PostTaskAndReplyRelay::Run,
				Unretained(relay)))) {
				delete relay;
				return false;
			}

			return true;
		}
Message::Ptr PushManagerTask::SyncProcessTask() {
	if (task_thread_ == NULL)
	{
		return Message::Ptr(NULL);
	}

    if(!is_register_) {
        PostTask();
        is_register_ = true;
    }
    task_thread_->Start();
    // Block there
    return Message::Ptr();
}
Exemplo n.º 5
0
int32_t main()
{
    // 创建两条线程,一条是工作线程,一条是监视线程
	CTaskThreadManager::Instance().Init(WORK_THREAD);
	CTaskThreadManager::Instance().Init(MONITORING_THREAD);
	
	auto taskThread = CTaskThreadManager::Instance().GetThreadInterface(WORK_THREAD);
	std::shared_ptr<CTask> spTask;
	spTask.reset(new CLoginTask);
	taskThread->PostTask(spTask, 1);

	getchar();
	CTaskThreadManager::Instance().UninitAll();
	return 0;
}
Exemplo n.º 6
0
Message::Ptr Task::SyncProcessTask() {
    PostTask();
    Message::Ptr msg = WaitTaskDone();
    queue_layer_->AsyncRemoveTask(shared_from_this());
    return msg;
}
Exemplo n.º 7
0
void TaskRunner::Stop()
{
  PostTask(FROM_HERE, Bind(&TaskRunner::DoStop, Unretained<TaskRunner>(this)));
}