Alexandre Salconi-Denis / Mbed 2 deprecated ProjetOctopode

Dependencies:   debug mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MemRegistre.cpp Source File

MemRegistre.cpp

00001 /**
00002  * MemRegistre.cpp
00003  * @author Alexandre Salconi-Denis
00004  * @version 3.01
00005  * @date 06 mars 2014
00006  *  Created on: Mar 10, 2015
00007  *      Author: salco
00008  */
00009 
00010 #include "MemRegistre.h"
00011 
00012 MemRegistre::MemRegistre()
00013 {
00014     m_positionActioneur = m_moduleActioneur.begin();
00015     m_positionCapteur = m_moduleCapteur.begin();
00016     m_positionMemoire = m_moduleMemoire.begin();
00017 }
00018 MemRegistre::~MemRegistre()
00019 {
00020 }
00021 
00022 unsigned char MemRegistre::getAdressDispo(const unsigned char &startValue)
00023 {
00024      debug(DEBUG_GETADDR,"\n\rGetAddrDispo::Debut");
00025     //list<Module>::iterator it1;
00026     unsigned char addrDispo=(startValue==0)?1:startValue;
00027     debug(DEBUG_GETADDR,"\n\r addrDispo: %02X",addrDispo);
00028     //Module templateModule;
00029     for(bool addrFind=false; (addrDispo!=0)&&(!addrFind); addrDispo++) {
00030         /* addrFind=true;
00031          for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it)
00032              if(it->regA == addrDispo) addrFind = false;
00033 
00034          for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it)
00035              if(it->regA == addrDispo) addrFind = false;
00036 
00037          for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it)
00038              if(it->regA == addrDispo) addrFind = false;*/
00039         addrFind = !isAdresseValide(addrDispo);
00040         debug(DEBUG_GETADDR,"\n\r   is %02X valide %i",addrDispo,addrFind);
00041         if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
00042     }
00043     if(addrDispo != 0)
00044         addrDispo--;//patch vue quil fait un ++ a la fin de la boucle pour rien
00045     //else
00046       //  addrDispo=0;
00047         
00048     debug(DEBUG_GETADDR,"\n\rGetAddrDispo::Fin");
00049     return addrDispo;
00050 }
00051 bool MemRegistre::isAdresseValide(const char &adresse, Module &m )
00052 {
00053     debug(DEBUG_ISVALIDE,"\n\risAdresseValide::Debut");
00054     list<Module>::iterator it1;
00055     bool addrFind=false;
00056     //Module templateModule;
00057     //for(unsigned char addrDispo=1; (addrDispo!=0)&&(!addrFind); addrDispo++) {
00058 
00059     debug(DEBUG_ISVALIDE,"\n\r  -search in: Actioneur");
00060     for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) {
00061         debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
00062         if(it->regA == adresse) {
00063             addrFind = true;
00064             m.regA=it->regA;
00065             m.regB=it->regB;
00066             m.regC=it->regC;
00067             m.regD=it->regD;
00068         }
00069     }
00070     debug(DEBUG_ISVALIDE,"\n\r  -search in: Capteur");
00071     for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) {
00072         debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
00073         if(it->regA == adresse) {
00074             addrFind = true;
00075             m.regA=it->regA;
00076             m.regB=it->regB;
00077             m.regC=it->regC;
00078             m.regD=it->regD;
00079         }
00080     }
00081     debug(DEBUG_ISVALIDE,"\n\r  -search in: Memoire");
00082     for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) {
00083         debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
00084         if(it->regA == adresse) {
00085             addrFind = true;
00086             m.regA=it->regA;
00087             m.regB=it->regB;
00088             m.regC=it->regC;
00089             m.regD=it->regD;
00090         }
00091     }
00092 
00093     // if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
00094     //  }
00095     debug(DEBUG_ISVALIDE,"\n\risAdresseValide::Fin");
00096     return addrFind;
00097 }
00098 bool MemRegistre::isAdresseValide(const char &adresse)
00099 {
00100     Module dummy;
00101     return isAdresseValide(adresse,dummy);
00102 }
00103 
00104 Module MemRegistre::firstActioneur(void)
00105 {
00106     m_positionActioneur =m_moduleActioneur.begin();
00107     return *m_positionActioneur;//m_moduleActioneur.begin();
00108 }
00109 Module MemRegistre::nextActioneur(void)
00110 {
00111     if(m_moduleActioneur.end()!= m_positionActioneur)
00112         m_positionActioneur++;
00113 
00114     return *m_positionActioneur;//return m_moduleActioneur[m_positionActioneur];
00115 }
00116 
00117 Module MemRegistre::firstCapteur(void)
00118 {
00119     m_positionCapteur =m_moduleCapteur.begin();
00120     return *m_positionCapteur;//return m_moduleCapteur[m_positionCapteur];
00121 }
00122 Module MemRegistre::nextCapteur(void)
00123 {
00124     if(m_moduleCapteur.end()!= m_positionCapteur)
00125         m_positionCapteur++;
00126 
00127     return *m_positionCapteur;//return m_moduleActioneur[m_positionCapteur];
00128 }
00129 Module MemRegistre::firstMemoire(void)
00130 {
00131     m_positionMemoire =m_moduleMemoire.begin();
00132     return *m_positionMemoire;//return m_moduleMemoire[m_positionMemoire];
00133 }
00134 Module MemRegistre::nextMemoire(void)
00135 {
00136     if(m_moduleMemoire.end()!= m_positionMemoire)
00137         m_positionMemoire++;
00138 
00139     return *m_positionMemoire;//return m_moduleActioneur[m_positionMemoire];
00140 }