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/CtrlBridge.cpp

Committer:
salco
Date:
2015-03-19
Revision:
10:7e6aeaebe1a2
Parent:
9:7295385f02b2
Child:
11:496453b45e25

File content as of revision 10:7e6aeaebe1a2:


#include "CtrlBridge.h"

CtrlBridge *CtrlBridge::uniqueInstance;

/**
 * @brief Constructeur priver appler par la fonction getInstance()
 */
CtrlBridge::CtrlBridge()
    : m_Memory(), pc(SERIAL_TX, SERIAL_RX), ssc32(PA_9, PA_10),
      spiLowSpeed (SPI_LOW_MOSI, SPI_LOW_MISO, SPI_LOW_SCK, SPI_LOW_DEMUXA, SPI_LOW_DEMUXB, SPI_LOW_DEMUXC, SPI_LOW_DEMUXD, SPI_LOW_CS),
      spiHighSpeed(SPI_HIGH_MOSI, SPI_HIGH_MISO, SPI_HIGH_SCK, SPI_HIGH_DEMUXA, SPI_HIGH_DEMUXB, SPI_HIGH_DEMUXC, SPI_HIGH_DEMUXD, SPI_HIGH_CS)
{
    //faire en sorte d'init SPI speed ici
    m_regPortUse=0;
    m_regPortLost=0;
}

CtrlBridge::~CtrlBridge()
{
}

/**
 * @brief Methode permetant une seul instance de la classe
 * @return Retourne l'unique instance de la classe
 */
CtrlBridge *CtrlBridge::getInstance()
{
    if(!uniqueInstance) {
        uniqueInstance = new CtrlBridge();
    }
    return uniqueInstance;
}

bool CtrlBridge::initCom(void)
{
    //char positionInitial;
    bool portUse;
    string flag;
    string data;
    Module* templateModule ;
    templateModule= new Module;
    
    flag.append(1,Request_Init_Info);
    //positionInitial = spiLowSpeed.next_demux();
    for(char i=0; i != 15; i++) {
        portUse = spiLowSpeed.send(i,0,&flag,&data);

        if( portUse ) {
            m_regPortUse|=(1<< i);
           
            do {
                
                templateModule->regA = m_Memory.getAdressDispo();
                templateModule->regB = (spiLowSpeed.get_demux()<<4)+(data[0]&0x0F);
                templateModule->regC = data[1];
                templateModule->regD = data[2];

                switch(templateModule->regD >>6) {
                    case 1://Capteur
                        m_Memory.addCapteur(*templateModule);
                        break;

                    case 2://Actionneur
                        m_Memory.addActioneur(*templateModule);
                        break;


                    case 3://Memoire
                        m_Memory.addMemoire(*templateModule);
                        break;
                        
                        default:
                        break;
                }

                if(flag[0] != Contien_AUTRE_MODULE)
                    portUse=false;
            } while(portUse); 
        }
    }

    if(templateModule)
    delete templateModule;
    
    return true;
}