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
Committer:
salco
Date:
Mon Mar 23 22:41:31 2015 +0000
Revision:
14:ca1a9230ba7f
Parent:
13:51bbdc349f20
Child:
15:91b3c572d9df
Je crois que jai fini tout ce que j'ai besoin pour faire utilisation des modules, reste un peut de pofinage mais pour le moment sa compile.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 8:e017e3d527d7 1
salco 8:e017e3d527d7 2 #include "CtrlBridge.h"
salco 8:e017e3d527d7 3
salco 8:e017e3d527d7 4 CtrlBridge *CtrlBridge::uniqueInstance;
salco 8:e017e3d527d7 5
salco 8:e017e3d527d7 6 /**
salco 8:e017e3d527d7 7 * @brief Constructeur priver appler par la fonction getInstance()
salco 8:e017e3d527d7 8 */
salco 9:7295385f02b2 9 CtrlBridge::CtrlBridge()
salco 11:496453b45e25 10 : m_Memory(), ssc32(PA_9, PA_10),
salco 9:7295385f02b2 11 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),
salco 11:496453b45e25 12 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),
salco 11:496453b45e25 13 pc(SERIAL_TX, SERIAL_RX)
salco 8:e017e3d527d7 14 {
salco 9:7295385f02b2 15 //faire en sorte d'init SPI speed ici
salco 9:7295385f02b2 16 m_regPortUse=0;
salco 9:7295385f02b2 17 m_regPortLost=0;
salco 8:e017e3d527d7 18 }
salco 8:e017e3d527d7 19
salco 8:e017e3d527d7 20 CtrlBridge::~CtrlBridge()
salco 8:e017e3d527d7 21 {
salco 9:7295385f02b2 22 }
salco 9:7295385f02b2 23
salco 8:e017e3d527d7 24 /**
salco 8:e017e3d527d7 25 * @brief Methode permetant une seul instance de la classe
salco 8:e017e3d527d7 26 * @return Retourne l'unique instance de la classe
salco 8:e017e3d527d7 27 */
salco 8:e017e3d527d7 28 CtrlBridge *CtrlBridge::getInstance()
salco 8:e017e3d527d7 29 {
salco 9:7295385f02b2 30 if(!uniqueInstance) {
salco 8:e017e3d527d7 31 uniqueInstance = new CtrlBridge();
salco 8:e017e3d527d7 32 }
salco 8:e017e3d527d7 33 return uniqueInstance;
salco 8:e017e3d527d7 34 }
salco 8:e017e3d527d7 35
salco 8:e017e3d527d7 36 bool CtrlBridge::initCom(void)
salco 8:e017e3d527d7 37 {
salco 9:7295385f02b2 38 //char positionInitial;
salco 9:7295385f02b2 39 bool portUse;
salco 14:ca1a9230ba7f 40 unsigned char adresse;
salco 10:7e6aeaebe1a2 41 string flag;
salco 10:7e6aeaebe1a2 42 string data;
salco 10:7e6aeaebe1a2 43 Module* templateModule ;
salco 10:7e6aeaebe1a2 44 templateModule= new Module;
salco 14:ca1a9230ba7f 45
salco 14:ca1a9230ba7f 46 debug(DEBUG_INITMODULE, "\n\rInit::debut");
salco 11:496453b45e25 47 //flag.clear();
salco 11:496453b45e25 48 //flag.append(1,Request_Init_Info);
salco 9:7295385f02b2 49 //positionInitial = spiLowSpeed.next_demux();
salco 9:7295385f02b2 50 for(char i=0; i != 15; i++) {
salco 11:496453b45e25 51 debug(DEBUG_INITMODULE, "\n\r -Debut de boucle :%d ", i);
salco 14:ca1a9230ba7f 52 //flag = Request_Init_Info;
salco 14:ca1a9230ba7f 53 //portUse = spiLowSpeed.send(i,0,&flag,&data);
salco 14:ca1a9230ba7f 54 //if( portUse ) {
salco 14:ca1a9230ba7f 55 // m_regPortUse|=(1<< i);
salco 10:7e6aeaebe1a2 56
salco 14:ca1a9230ba7f 57 do {
salco 14:ca1a9230ba7f 58 flag = Request_Init_Info;
salco 14:ca1a9230ba7f 59 adresse = m_Memory.getAdressDispo(0x80);
salco 14:ca1a9230ba7f 60 data.clear();
salco 14:ca1a9230ba7f 61 portUse = spiLowSpeed.send(i,adresse,&flag,&data);
salco 14:ca1a9230ba7f 62
salco 14:ca1a9230ba7f 63 if( portUse ) {
salco 14:ca1a9230ba7f 64 m_regPortUse|=(1<< i);
salco 14:ca1a9230ba7f 65
salco 14:ca1a9230ba7f 66 templateModule->regA = adresse;
salco 10:7e6aeaebe1a2 67 templateModule->regB = (spiLowSpeed.get_demux()<<4)+(data[0]&0x0F);
salco 10:7e6aeaebe1a2 68 templateModule->regC = data[1];
salco 10:7e6aeaebe1a2 69 templateModule->regD = data[2];
salco 10:7e6aeaebe1a2 70
salco 10:7e6aeaebe1a2 71 switch(templateModule->regD >>6) {
salco 10:7e6aeaebe1a2 72 case 1://Capteur
salco 10:7e6aeaebe1a2 73 m_Memory.addCapteur(*templateModule);
salco 10:7e6aeaebe1a2 74 break;
salco 10:7e6aeaebe1a2 75
salco 10:7e6aeaebe1a2 76 case 2://Actionneur
salco 10:7e6aeaebe1a2 77 m_Memory.addActioneur(*templateModule);
salco 10:7e6aeaebe1a2 78 break;
salco 10:7e6aeaebe1a2 79
salco 10:7e6aeaebe1a2 80
salco 10:7e6aeaebe1a2 81 case 3://Memoire
salco 10:7e6aeaebe1a2 82 m_Memory.addMemoire(*templateModule);
salco 10:7e6aeaebe1a2 83 break;
salco 14:ca1a9230ba7f 84
salco 14:ca1a9230ba7f 85 default:
salco 10:7e6aeaebe1a2 86 break;
salco 10:7e6aeaebe1a2 87 }
salco 10:7e6aeaebe1a2 88
salco 14:ca1a9230ba7f 89 if(flag[0] != CONTIEN_AUTRE_MODULE)
salco 10:7e6aeaebe1a2 90 portUse=false;
salco 14:ca1a9230ba7f 91
salco 14:ca1a9230ba7f 92 }
salco 14:ca1a9230ba7f 93 } while(portUse);
salco 13:51bbdc349f20 94 debug(DEBUG_INITMODULE, "\n\r -Fin de boucle :%d", i);
salco 9:7295385f02b2 95 }
salco 9:7295385f02b2 96
salco 10:7e6aeaebe1a2 97 if(templateModule)
salco 14:ca1a9230ba7f 98 delete templateModule;
salco 14:ca1a9230ba7f 99
salco 12:bf44013497c8 100 debug(DEBUG_INITMODULE, "\n\rInit::Fin");
salco 8:e017e3d527d7 101 return true;
salco 14:ca1a9230ba7f 102 }
salco 14:ca1a9230ba7f 103
salco 14:ca1a9230ba7f 104 bool CtrlBridge::tryComPort(char portID)
salco 14:ca1a9230ba7f 105 {
salco 14:ca1a9230ba7f 106 if(portID <= (char)-1)portID=0;
salco 14:ca1a9230ba7f 107 if(portID > 15)portID=15;
salco 14:ca1a9230ba7f 108 string flag;
salco 14:ca1a9230ba7f 109 flag.clear();
salco 14:ca1a9230ba7f 110 string data;
salco 14:ca1a9230ba7f 111 data.clear();
salco 14:ca1a9230ba7f 112 return spiLowSpeed.send(portID,0,&flag,&data);
salco 14:ca1a9230ba7f 113 }
salco 14:ca1a9230ba7f 114
salco 14:ca1a9230ba7f 115 bool CtrlBridge::use( const unsigned char &adresse,string &flag, string &data)
salco 14:ca1a9230ba7f 116 {
salco 14:ca1a9230ba7f 117 bool result = false;
salco 14:ca1a9230ba7f 118 Module moduleRequested;
salco 14:ca1a9230ba7f 119 if(m_Memory.isAdresseValide(adresse,moduleRequested)) {
salco 14:ca1a9230ba7f 120
salco 14:ca1a9230ba7f 121 if(adresse&0x80)spiLowSpeed.send(moduleRequested.regB>>4,adresse,&flag,&data);
salco 14:ca1a9230ba7f 122 else spiHighSpeed.send(moduleRequested.regB>>4,adresse,&flag,&data);
salco 14:ca1a9230ba7f 123 result = true;
salco 14:ca1a9230ba7f 124 }
salco 14:ca1a9230ba7f 125
salco 14:ca1a9230ba7f 126 return result;
salco 14:ca1a9230ba7f 127 }
salco 14:ca1a9230ba7f 128
salco 14:ca1a9230ba7f 129 string CtrlBridge::findModule(const char &peripheriqueID, const char &type, const char &sousType, const char &posSpatial)
salco 14:ca1a9230ba7f 130 {
salco 14:ca1a9230ba7f 131 debug(DEBUF_FINDMODULE, "\n\rFindModule::Debut");
salco 14:ca1a9230ba7f 132 string result;
salco 14:ca1a9230ba7f 133 int maxSize;
salco 14:ca1a9230ba7f 134 Module moduleScan;
salco 14:ca1a9230ba7f 135 bool goodModule;
salco 14:ca1a9230ba7f 136
salco 14:ca1a9230ba7f 137 debug(DEBUF_FINDMODULE, "\n\r -Debut scan Actioneur");
salco 14:ca1a9230ba7f 138 maxSize = m_Memory.getSizeActioneur();
salco 14:ca1a9230ba7f 139 goodModule = true;
salco 14:ca1a9230ba7f 140 moduleScan= m_Memory.firstActioneur();
salco 14:ca1a9230ba7f 141
salco 14:ca1a9230ba7f 142 for(int i=0; i < maxSize; i++) {
salco 14:ca1a9230ba7f 143 if((peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 144 else if((type != 0) && (type != moduleScan.regD>>6)) goodModule =false;
salco 14:ca1a9230ba7f 145 else if((sousType != 0) && (sousType != (moduleScan.regD & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 146 else if((posSpatial != 0) && (sousType != (moduleScan.regC & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 147
salco 14:ca1a9230ba7f 148 if(goodModule)
salco 14:ca1a9230ba7f 149 result.append(1,moduleScan.regA);
salco 14:ca1a9230ba7f 150 if((goodModule)&&(peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 151
salco 14:ca1a9230ba7f 152 moduleScan= m_Memory.nextActioneur();
salco 14:ca1a9230ba7f 153 }
salco 14:ca1a9230ba7f 154 debug(DEBUF_FINDMODULE, "\n\r -Fin scan Actioneur");
salco 14:ca1a9230ba7f 155 debug(DEBUF_FINDMODULE, "\n\r -Result size: %i",result.size());
salco 14:ca1a9230ba7f 156 debug(DEBUF_FINDMODULE, "\n\r -Debut scan Capteur");
salco 14:ca1a9230ba7f 157
salco 14:ca1a9230ba7f 158 maxSize = m_Memory.getSizeCapteur();
salco 14:ca1a9230ba7f 159 goodModule = true;
salco 14:ca1a9230ba7f 160 moduleScan= m_Memory.firstCapteur();
salco 14:ca1a9230ba7f 161
salco 14:ca1a9230ba7f 162 for(int i=0; i < maxSize; i++) {
salco 14:ca1a9230ba7f 163 if((peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 164 else if((type != 0) && (type != moduleScan.regD>>6)) goodModule =false;
salco 14:ca1a9230ba7f 165 else if((sousType != 0) && (sousType != (moduleScan.regD & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 166 else if((posSpatial != 0) && (sousType != (moduleScan.regC & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 167
salco 14:ca1a9230ba7f 168 if(goodModule)
salco 14:ca1a9230ba7f 169 result.append(1,moduleScan.regA);
salco 14:ca1a9230ba7f 170 if((goodModule)&&(peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 171
salco 14:ca1a9230ba7f 172 moduleScan= m_Memory.nextCapteur();
salco 14:ca1a9230ba7f 173 }
salco 14:ca1a9230ba7f 174 debug(DEBUF_FINDMODULE, "\n\r -Fin scan Capteur");
salco 14:ca1a9230ba7f 175 debug(DEBUF_FINDMODULE, "\n\r -Result size: %i",result.size());
salco 14:ca1a9230ba7f 176 debug(DEBUF_FINDMODULE, "\n\r -Debut scan Memoire");
salco 14:ca1a9230ba7f 177
salco 14:ca1a9230ba7f 178 maxSize = m_Memory.getSizeMemoire();
salco 14:ca1a9230ba7f 179 goodModule = true;
salco 14:ca1a9230ba7f 180 moduleScan= m_Memory.firstMemoire();
salco 14:ca1a9230ba7f 181
salco 14:ca1a9230ba7f 182 for(int i=0; i < maxSize; i++) {
salco 14:ca1a9230ba7f 183 if((peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 184 else if((type != 0) && (type != moduleScan.regD>>6)) goodModule =false;
salco 14:ca1a9230ba7f 185 else if((sousType != 0) && (sousType != (moduleScan.regD & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 186 else if((posSpatial != 0) && (sousType != (moduleScan.regC & 0x3F))) goodModule =false;
salco 14:ca1a9230ba7f 187
salco 14:ca1a9230ba7f 188 if(goodModule)
salco 14:ca1a9230ba7f 189 result.append(1,moduleScan.regA);
salco 14:ca1a9230ba7f 190 if((goodModule)&&(peripheriqueID != 0) && (peripheriqueID != moduleScan.regB>>4)) goodModule =false;
salco 14:ca1a9230ba7f 191
salco 14:ca1a9230ba7f 192 moduleScan= m_Memory.nextMemoire();
salco 14:ca1a9230ba7f 193 }
salco 14:ca1a9230ba7f 194 debug(DEBUF_FINDMODULE, "\n\r -Fin scan Memoire");
salco 14:ca1a9230ba7f 195 debug(DEBUF_FINDMODULE, "\n\r -Result size: %i",result.size());
salco 14:ca1a9230ba7f 196 debug(DEBUF_FINDMODULE, "\n\rFindModule::Fin");
salco 14:ca1a9230ba7f 197 return result;
salco 14:ca1a9230ba7f 198 }
salco 14:ca1a9230ba7f 199
salco 14:ca1a9230ba7f 200 int CtrlBridge::size(const char &peripheriqueID, const char &type, const char &sousType, const char &posSpatial)
salco 14:ca1a9230ba7f 201 {
salco 14:ca1a9230ba7f 202 int result;
salco 14:ca1a9230ba7f 203 string templateString;
salco 14:ca1a9230ba7f 204
salco 14:ca1a9230ba7f 205 templateString = findModule(peripheriqueID,type,sousType,posSpatial);
salco 14:ca1a9230ba7f 206 result = templateString.size()-1;//pas sure si on met -1
salco 14:ca1a9230ba7f 207 return result;
salco 9:7295385f02b2 208 }