#include "tourelle.h" #ifndef ROBOTHW #include "../simul/table.h" #include #endif #include #define min(a,b) a& list) { PositionsList l; for(int i=0; igetBeaconsRelativePosition().size(); #endif } #ifndef ROBOTHW int alea(int mi, int ma) { if(ma == mi) return mi; if(mi > ma) { int t = ma; ma = mi; mi = t; } static bool ini = false; if(!ini) { srand(time(0)); ini = true; } return rand()%(ma-mi+1)+mi; } #endif PositionData Tourelle::getPositionData(unsigned int idx) { #ifdef ROBOTHW return m_closedList.get(idx); #else PositionData pos = Table::getMainInstance()->getBeaconsRelativePosition()[idx]; pos.angle += alea(-TURRET_TEST_MAX_ANGLE_DEV, +TURRET_TEST_MAX_ANGLE_DEV); pos.distance += alea(-TURRET_TEST_MAX_LIN_DEV, +TURRET_TEST_MAX_LIN_DEV); return pos; #endif } PositionsList Tourelle::getPositionsList() const { #ifdef ROBOTHW return m_closedList; #else PositionsList l = PositionsList::fromQList(Table::getMainInstance()->getBeaconsRelativePosition()); for(size_t i = 0; i < l.size(); ++i) { l[i].angle += alea(-TURRET_TEST_MAX_ANGLE_DEV, +TURRET_TEST_MAX_ANGLE_DEV); l[i].distance += alea(-TURRET_TEST_MAX_LIN_DEV, +TURRET_TEST_MAX_LIN_DEV); } return l; #endif } bool Tourelle::dataAvailable() { #ifdef ROBOTHW return TURRET_USART_INDEX->SR & USART_FLAG_RXNE; #else return false; #endif } unsigned int Tourelle::receiveData() { #ifdef ROBOTHW while (!(TURRET_USART_INDEX->SR & USART_FLAG_RXNE)); return ((unsigned int)(TURRET_USART_INDEX->DR & 0x1FF)); #else return 0; #endif } void Tourelle::update() { while (dataAvailable()) { switch(stat) { case STAT_OUT : { unsigned int mem = receiveData(); if (mem==250) { stat++; } else { if (mem==254) reset(); } } break; case STAT_INMAIN : { tempdist=receiveData(); stat++; } break; case STAT_DIST : { angstr = receiveData(); stat++; } break; case STAT_ANGHUND : { tempang=(256*angstr)+receiveData(); stat++; } break; case STAT_ANG : if (receiveData()==255) { PositionData dat; dat.distance=tempdist; dat.angle=tempang; m_currentList.append(dat); stat=STAT_OUT; } else { stat=STAT_OUT; } break; default: m_currentList.clear(); } } }