void CVQualityMapGuidedUn::BackUnwrap(double *phasemap, int *labelmap, int width, int height,
                                      CPoint startpoint, Queue *queue, double *absolutephasemap)
{
    int PopIndex = 0;
    CPoint NeighborPoint, CurrentPoint;
    PopIndex = PopQueue(queue);
    while(PopIndex > -1)
    {
        CurrentPoint.x = PopIndex%width;
        CurrentPoint.y = PopIndex/width;
        for(int i = 0; i < 8; i++)
        {
            NeighborPoint.x = CurrentPoint.x + NeighborDirection[i][0];
            NeighborPoint.y = CurrentPoint.y + NeighborDirection[i][1];
            if(((abs(NeighborPoint.x - startpoint.x) > abs(CurrentPoint.x - startpoint.x))||(abs(NeighborPoint.y - startpoint.y) > abs(CurrentPoint.y - startpoint.y)))
                    &&(labelmap[NeighborPoint.x + NeighborPoint.y * width] == UNWRAP))
            {
                labelmap[PopIndex] = UNWRAP;
                absolutephasemap[CurrentPoint.x + CurrentPoint.y * width] = this->LineScan(phasemap[CurrentPoint.x + CurrentPoint.y * width],
                        phasemap[NeighborPoint.x + NeighborPoint.y * width], absolutephasemap[NeighborPoint.x + NeighborPoint.y * width], CurrentPoint, NeighborPoint) ;
                break;
            }
        }
        PopIndex = PopQueue(queue);
    }
}
Exemple #2
0
/**
 * @function BuildManifold
 */
void HP2D::BuildManifold( Vertice _v0 ) {

    Vertice* va;
    Vertice vt;
	Vertice* vb;
    std::vector<Vertice> S; 
    std::vector<Vertice*> B; 

	InsertQueue( _v0 );

    do{
    	va = PopQueue();        
        S = Successors( va );
        
        for( int i = 0; i < S.size(); i++ ) {
            vt = S[i];
            InsertVertice( vt );
            InsertEdge( &vt, va );
            if( vt.GetDist() < mDIST_MAX ) {
                InsertQueue( vt );
            }
            B = GetAdjacent( va->Adjacent() );
            
            for( unsigned j = 0; j < B.size(); j++ ) {
                vb = B[j];
                if( InSet( vb->GetPos(), vt.Neighbors() ) ) {
                    InsertEdge( &vt, vb );
                }          
            }
        } 
    } while( GetSizeQueue() > 0 ); 
}
void McuMessageHandler::ProcessGetCanData(int len, int seq)
{
    unsigned long data;
    unsigned long data2;
    vector<unsigned char> vrecord;
    if(len < 16)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetCanData len invalid.");
        return;
    }
    
    if(PopQueue(MCU_CAN_GET_DATA, seq, &data, &data2) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetCanData out of order.");
        return;
    }
    
    for(int i = 0; i < 16; i ++)
    {
        vrecord.push_back(MCU_GET_BYTE(m_rxPacket, 7 + i));
    }

    int dir = GpsLocationMessageHandler::Instance()->GetDirection();
    if(dir == 0)
    {
        vrecord.push_back(0x00);
    }
    else
    {
        vrecord.push_back(0x01);
    }
    CanDataWriteToFile(vrecord);

    return;
}
Exemple #4
0
DMPAPI(unsigned int) usb_Read(void *vusb)
{
	BYTE val;
	DWORD pretime;
	USB_Device *usb = (USB_Device *)vusb;
	
	if (usb == NULL) { err_print((char*)"%s: USB device is null.\n", __FUNCTION__); return 0xffff; }
	
	if (usb->TimeOut != USB_NO_TIMEOUT) {
		pretime = timer_nowtime();
		while (usb->rcvd->count <= 0 && (timer_nowtime() - pretime) < usb->TimeOut); 
		
		if (usb->rcvd->count <= 0) {
			if (USB_TIMEOUT_DEBUG)
				err_print((char*)"%s: USB device receive timeout.\n", __FUNCTION__);
			return (unsigned int)0xffff;
		}
	}
	else while (usb->rcvd->count <= 0);

	io_DisableINT();
	{
		val = (BYTE)PopQueue(usb->rcvd);
	}
	io_RestoreINT();
	
	if (!(io_inpdw(usb->EP[2].OutDLR) & 0x80000000L) && usb->rcvd->count < (usb->rcvd->size - NEAR_FULL_SIZE)) 
	SetEPnDLR(usb, EP2, OUT, ENABLE | EP2_MAX_PACKET_SIZE_OUT);

    return (unsigned int)val;
}
void McuMessageHandler::ProcessGetDeal(int len, int seq)
{
    unsigned long data;
    unsigned long data2;
    vector<unsigned char> vrecord;
    unsigned char dlen = MCU_GET_BYTE(m_rxPacket, 8);
    
    if(len < 0x46)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetDeal len invalid.");
        return;
    }
    
    if(PopQueue(MCU_POS_GET_DEAL, seq, &data, &data2) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetDeal out of order.");
        return;
    }
    
    for(int i = 0; i < 96; i ++)
    {
        vrecord.push_back(MCU_GET_BYTE(m_rxPacket, 13 + i));
    }

    WriteToFile(vrecord);
    
    m_passengerRecord[(int)data2].state = STATE_TIMER;
    m_passengerRecord[(int)data2].posPassengerRecordTimer->timeout = TIMER_SEC_TO_MSEC(MCU_PASSENGER_INTERVAL);
    StartTimer(m_passengerRecord[(int)data2].posPassengerRecordTimer);
    
    return;
}
Exemple #6
0
static int _recv_int(SerialPort *port, unsigned char* buf, int bsize)
{
	int i;
	unsigned long pretime;
	
	for (i = 0; i < bsize; i++)
	{
		if (port->RxTimeOut < 0) {
			while (QueueEmpty(port->rcvd));
		} else {
			pretime = timer_NowTime();
			while (QueueEmpty(port->rcvd) && (timer_NowTime() - pretime) < port->RxTimeOut); 
			
			if (QueueEmpty(port->rcvd)) {
				if (UART_TIMEOUT_DEBUG)
					err_print((char*)"%s: COM%d receive timeout.\n", __FUNCTION__, port->com + 1);
				break;
			}
		}
		
		io_DisableINT();
		{
			buf[i] = PopQueue(port->rcvd);
		
			switch (port->control)
			{
				case NO_CONTROL: break;
				
				case RTS_CTS:
				{
					if (QueueSize(port->rcvd) < (RX_QUEUE_SIZE - NEAR_FULL_SIZE) && port->rts == 0) {
						io_outpb(port->MCR, io_inpb(port->MCR) | 0x02);
						port->rts = 1;
					}
				}
				break;
				
				case XON_XOFF:
				{
					if (QueueSize(port->rcvd) < (RX_QUEUE_SIZE - NEAR_FULL_SIZE) && port->xonxoff_xmit != XON_XMIT) {
						port->xon = 1;
						io_outpb(port->IER, port->ier |= 0x02);
					}
				}
				break;
				
				default: break;
			};
		}
		io_RestoreINT();
	}
	
	return i;
}
void McuMessageHandler::ProcessCommonReply(int len, int id, int seq)
{
    if(len != 1)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessCommonReply len invalid.");
        return;
    }

    int result = MCU_GET_BYTE(m_rxPacket, 7);
    
    LogUtility::Log(LOG_LEVEL_DEBUG, "McuMessageHandler::ProcessCommonReply %d, %04x, %d.", seq, id, result);

    PopQueue(id, seq, NULL, NULL);
}
Exemple #8
0
// 二叉树的镜像非递归 
void MirrorBinTreeNor(pBTNode pRoot)
{
	LQueue q;
	InitQueue(&q);
	PushQueue(&q, pRoot);
	while (!QueueEmpyt(&q)) {
		pBTNode pCur = QueueFront(&q);
		PopQueue(&q);
		if (pCur->_pLeft)
			PushQueue(&q, pCur->_pLeft);
		if (pCur->_pRight)
			PushQueue(&q, pCur->_pRight);
		swap(&pCur->_pLeft, &pCur->_pRight);
	}
}
Exemple #9
0
// 层序遍历 
void LevelOrder(pBTNode pRoot)
{
	LQueue q;
	InitQueue(&q);
	PushQueue(&q, pRoot);
	while (!QueueEmpyt(&q)) {
		pBTNode pCur = QueueFront(&q);
		PopQueue(&q);
		printf("%c ", pCur->_data);
		if(pCur->_pLeft)
			PushQueue(&q, pCur->_pLeft);
		if (pCur->_pRight)
			PushQueue(&q, pCur->_pRight);
	}
}
void McuMessageHandler::ProcessPosTime(int len, int seq)
{
    if(len != 0x0A)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessPosTime len invalid.");
        return;
    }
    
    if(PopQueue(MCU_POS_TIME, seq, NULL, NULL) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessPosTime out of order.");
        return;
    }
    
    return;
}
void McuMessageHandler::ProcessPosStation(int len, int seq)
{
    if(len < 10)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessPosStation len invalid.");
        return;
    }
    
    if(PopQueue(MCU_POS_STATION, seq, NULL, NULL) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessPosStation out of order.");
        return;
    }
    
    return;
}
Exemple #12
0
/* Read bytes array with designated length from RX Queue. */
ssize_t USART_Read(USART_TypeDef *USARTx, void *buf, ssize_t l, uint8_t flags) {
	ssize_t i = -1;
	uint8_t *b;

	b = buf;

	if(USARTx == USART6) {
		for(i=0; i<l; i++) {
			if(!PopQueue(rxQueue, &(b[i]))){ 
				break;
			}
		}
	}

	return i;
}
Exemple #13
0
void KeyboardController::handleEvent(void) {
	int scode = 0, pressFlag = 0;
    
    // handle keyboard event:
	// 1. press key
	// 2. release key
	if(kbQueue != NULL && QueueEmpty(kbQueue) == false)
	{
		scode = PopQueue(kbQueue);
		pressFlag = scode & 0x80;
		scode &= 0x7f;
		if (pressFlag)
			KeyboardEvent(false, scode);
		else
			KeyboardEvent(true, scode);
	}
}
Exemple #14
0
DMP_INLINE(void) EP2_InHandler(USB_Device *usb)
{
	int len = 0;
	
	if (usb->bulk_in_transmitting == true) return;
	if (usb->xmit->count <= 0) return;
	
#ifdef DMP_86DUINO_MODE
	TX_LED_ON();
#endif	
	
	do {
		usb->EP[2].InBuf[len++] =(BYTE)PopQueue(usb->xmit);
	} while(usb->xmit->count > 0 && len < EP2_MAX_PACKET_SIZE_IN);
	
	#if defined DMP_DOS_DJGPP
	dosmemput(usb->EP[2].InBuf, EP2_MAX_PACKET_SIZE_IN, usb->EP[2].InPhysical);
	#endif
	
	SetEPnDLR(usb, EP2, IN, ENABLE | len);
	usb->bulk_in_transmitting = true;
}
Exemple #15
0
int main(void)
{
	PQ q = CreateQueue(10);

	PushQueue(q, GetRand());
	PushQueue(q, GetRand());
	PushQueue(q, GetRand());
	PushQueue(q, GetRand());

	PrintQueue(q);


	int i = 0;
	for( ; i < 10; ++i)
	{
		PushQueue(q, GetRand());
		PopQueue(q);
		PrintQueue(q);
	}

	ReleaseQueue(q);
	
	return 0;
}
void McuMessageHandler::ProcessGetPassenger(int len, int seq)
{
    unsigned long data;
    unsigned long data2;
    if(len < 0x0A)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetPassenger len invalid.");
        return;
    }
    
    if(PopQueue(MCU_POS_GET_PASSENGER, seq, &data, &data2) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessGetPassenger out of order.");
        return;
    }
    
    if(data == (unsigned long)CLEAR_RECORD)
    {
        LogUtility::Log(LOG_LEVEL_INFO, "McuMessageHandler::ProcessGetPassenger get clear response %d.", (int)data2);
        m_passengerRecord[(int)data2].passengerUpCount = 0;
        m_passengerRecord[(int)data2].passengerDownCount = 0;
        m_passengerRecord[(int)data2].posPassengerRecordTimer->timeout = TIMER_SEC_TO_MSEC(MCU_PASSENGER_INTERVAL),
        StartTimer(m_passengerRecord[(int)data2].posPassengerRecordTimer);
        return;
    }
    
    unsigned short dealnumber = MCU_GET_SHORT(m_rxPacket, 11);
    unsigned short upnumber = MCU_GET_SHORT(m_rxPacket, 13);
    unsigned short downnumber = MCU_GET_SHORT(m_rxPacket, 15);
    
    LogUtility::Log(LOG_LEVEL_DEBUG, "McuMessageHandler::ProcessGetPassenger  delnum:%d up:%d down: %d",dealnumber,upnumber,downnumber);

    if((upnumber <= m_passengerRecord[(int)data2].passengerUpCount) &&
       (downnumber <= m_passengerRecord[(int)data2].passengerDownCount) &&
       ((upnumber != 0) || (downnumber != 0)))
    {
        SendGetPosPassengerRecord((int)data2, CLEAR_RECORD);
    }
    else
    {
        m_passengerRecord[(int)data2].accuPassengerUpCount += upnumber;
        m_passengerRecord[(int)data2].accuPassengerDownCount += downnumber;
        m_passengerup_count += upnumber;
        m_passengerdown_count += downnumber;

        if((upnumber!=0)||(downnumber!=0))
        {
            SendPosPassengerNotify((int)data2, m_pos_addr[(int)data2], 
                                m_passengerup_count, m_passengerdown_count);
        }
    }

    m_passengerRecord[(int)data2].dealCount = dealnumber;
    m_passengerRecord[(int)data2].passengerUpCount = upnumber;
    m_passengerRecord[(int)data2].passengerDownCount = downnumber;
    if(m_passengerRecord[(int)data2].lastDealCount == 0)
        m_passengerRecord[(int)data2].lastDealCount = dealnumber;
    
    LogUtility::Log(LOG_LEVEL_DEBUG, "McuMessageHandler::ProcessGetPassenger  (%d,%d)(%d,%d)(%d,%d)",
       m_passengerup_count,m_passengerdown_count,m_passengerRecord[(int)data2].accuPassengerUpCount,m_passengerRecord[(int)data2].accuPassengerDownCount,
       dealnumber,m_passengerRecord[(int)data2].lastDealCount);

    if(dealnumber && m_passengerRecord[(int)data2].lastDealCount < dealnumber)
    {
        m_passengerRecord[(int)data2].state = STATE_DEAL_SENT;
        //SendGetDealRecord((int)data2, CLEAR_RECORD, dealnumber);
        m_passengerRecord[(int)data2].lastDealCount ++;
        SendGetDealRecord((int)data2, KEEP_RECORD, m_passengerRecord[(int)data2].lastDealCount);
    }
    else
    {
        m_passengerRecord[(int)data2].state = STATE_TIMER;
        m_passengerRecord[(int)data2].posPassengerRecordTimer->timeout = TIMER_SEC_TO_MSEC(MCU_PASSENGER_INTERVAL);
        StartTimer(m_passengerRecord[(int)data2].posPassengerRecordTimer);
    }
    
    return;
}
void McuMessageHandler::ProcessHandshake(int len, int seq)
{
    if(len < 2)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessHandshake len invalid.");
        return;
    }
    
    if(PopQueue(MCU_PACKET_HANDSHAKE, seq, NULL, NULL) < 0)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessHandshake out of order.");
        return;
    }
    
    unsigned char flag = MCU_GET_BYTE(m_rxPacket, 7);
    if(flag != 0x01)
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessHandshake invalid flag %d.", flag);
        return;
    }
    
    unsigned char number = MCU_GET_BYTE(m_rxPacket, 8);
    
    if((len < number + 1) || (number > MCU_MAX_POS))
    {
        LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::ProcessHandshake number invalid %d.", number);
        return;
    }
    
    m_pos_num = number;
    LogUtility::Log(LOG_LEVEL_INFO, "McuMessageHandler::ProcessHandshake pos number %d.", m_pos_num);
    
    for(int i = 0; i < number; i ++)
    {
        m_pos_addr[i] = MCU_GET_BYTE(m_rxPacket, 9 + i);
        LogUtility::Log(LOG_LEVEL_INFO, "McuMessageHandler::ProcessHandshake pos %d addr: %d.", i, m_pos_addr[i]);
    }
    
    m_handshake = true;

    m_passengerRecord = new StruPassengerRecord[m_pos_num];
    for(int i = 0; i < m_pos_num; i ++)
    {
        m_passengerRecord[i].passengerUpCount = 0;
        m_passengerRecord[i].accuPassengerUpCount = 0;
        m_passengerRecord[i].passengerDownCount = 0;
        m_passengerRecord[i].accuPassengerDownCount = 0;
        m_passengerRecord[i].dealCount = 0;
        m_passengerRecord[i].lastDealCount = 0;
        m_passengerRecord[i].posPassengerRecordTimer = CreateTimer(MCU_PASSENGER_RECORD_TIMER, 
                                                                   TIMER_SEC_TO_MSEC(MCU_PASSENGER_INTERVAL + i), 
                                                                   this, 
                                                                   McuTimerHandler, 
                                                                   false);
        m_passengerRecord[i].state = STATE_TIMER;
        m_passengerRecord[i].posPassengerRecordTimer->data2 = (void *)i;
        StartTimer(m_passengerRecord[i].posPassengerRecordTimer);
    }
    m_passengerup_count = 0;
    m_passengerdown_count = 0;
    StartTimer(m_dealReportTimer);
    StartTimer(m_CanDataTimer);
    StartTimer(m_CanUploadTimer);
    return;
}