Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.

Dependencies:   debug mbed

CtrlBridge

  • fonction quelquonque pour communiquer avec les module
  • fonction quelquonque pour faire des recherche dans les module dispo
  • autre fonction pour jouer avec MemRegistre

Version 1.2.0

  • Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32

source/MemRegistre.cpp

Committer:
salco
Date:
2017-01-31
Revision:
41:0b5c14dda54a
Parent:
36:474d4795aafa

File content as of revision 41:0b5c14dda54a:

/**
 * MemRegistre.cpp
 * @author Alexandre Salconi-Denis
 * @version 3.01
 * @date 06 mars 2014
 *  Created on: Mar 10, 2015
 *      Author: salco
 */

#include "MemRegistre.h"

MemRegistre::MemRegistre()
{
    m_positionActioneur = m_moduleActioneur.begin();
    m_positionCapteur = m_moduleCapteur.begin();
    m_positionMemoire = m_moduleMemoire.begin();
}
MemRegistre::~MemRegistre()
{
}

unsigned char MemRegistre::getAdressDispo(const unsigned char &startValue)
{
     debug(DEBUG_GETADDR,"\n\rGetAddrDispo::Debut");
    //list<Module>::iterator it1;
    unsigned char addrDispo=(startValue==0)?1:startValue;
    debug(DEBUG_GETADDR,"\n\r addrDispo: %02X",addrDispo);
    //Module templateModule;
    for(bool addrFind=false; (addrDispo!=0)&&(!addrFind); addrDispo++) {
        /* addrFind=true;
         for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it)
             if(it->regA == addrDispo) addrFind = false;

         for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it)
             if(it->regA == addrDispo) addrFind = false;

         for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it)
             if(it->regA == addrDispo) addrFind = false;*/
        addrFind = !isAdresseValide(addrDispo);
        debug(DEBUG_GETADDR,"\n\r   is %02X valide %i",addrDispo,addrFind);
        if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
    }
    if(addrDispo != 0)
        addrDispo--;//patch vue quil fait un ++ a la fin de la boucle pour rien
    //else
      //  addrDispo=0;
        
    debug(DEBUG_GETADDR,"\n\rGetAddrDispo::Fin");
    return addrDispo;
}
bool MemRegistre::isAdresseValide(const char &adresse, Module &m )
{
    debug(DEBUG_ISVALIDE,"\n\risAdresseValide::Debut");
    list<Module>::iterator it1;
    bool addrFind=false;
    //Module templateModule;
    //for(unsigned char addrDispo=1; (addrDispo!=0)&&(!addrFind); addrDispo++) {

    debug(DEBUG_ISVALIDE,"\n\r  -search in: Actioneur");
    for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) {
        debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
        if(it->regA == adresse) {
            addrFind = true;
            m.regA=it->regA;
            m.regB=it->regB;
            m.regC=it->regC;
            m.regD=it->regD;
        }
    }
    debug(DEBUG_ISVALIDE,"\n\r  -search in: Capteur");
    for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) {
        debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
        if(it->regA == adresse) {
            addrFind = true;
            m.regA=it->regA;
            m.regB=it->regB;
            m.regC=it->regC;
            m.regD=it->regD;
        }
    }
    debug(DEBUG_ISVALIDE,"\n\r  -search in: Memoire");
    for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) {
        debug(DEBUG_ISVALIDE,"\n\r  -if( %02X == %02X )",it->regA,adresse);
        if(it->regA == adresse) {
            addrFind = true;
            m.regA=it->regA;
            m.regB=it->regB;
            m.regC=it->regC;
            m.regD=it->regD;
        }
    }

    // if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
    //  }
    debug(DEBUG_ISVALIDE,"\n\risAdresseValide::Fin");
    return addrFind;
}
bool MemRegistre::isAdresseValide(const char &adresse)
{
    Module dummy;
    return isAdresseValide(adresse,dummy);
}

Module MemRegistre::firstActioneur(void)
{
    m_positionActioneur =m_moduleActioneur.begin();
    return *m_positionActioneur;//m_moduleActioneur.begin();
}
Module MemRegistre::nextActioneur(void)
{
    if(m_moduleActioneur.end()!= m_positionActioneur)
        m_positionActioneur++;

    return *m_positionActioneur;//return m_moduleActioneur[m_positionActioneur];
}

Module MemRegistre::firstCapteur(void)
{
    m_positionCapteur =m_moduleCapteur.begin();
    return *m_positionCapteur;//return m_moduleCapteur[m_positionCapteur];
}
Module MemRegistre::nextCapteur(void)
{
    if(m_moduleCapteur.end()!= m_positionCapteur)
        m_positionCapteur++;

    return *m_positionCapteur;//return m_moduleActioneur[m_positionCapteur];
}
Module MemRegistre::firstMemoire(void)
{
    m_positionMemoire =m_moduleMemoire.begin();
    return *m_positionMemoire;//return m_moduleMemoire[m_positionMemoire];
}
Module MemRegistre::nextMemoire(void)
{
    if(m_moduleMemoire.end()!= m_positionMemoire)
        m_positionMemoire++;

    return *m_positionMemoire;//return m_moduleActioneur[m_positionMemoire];
}