Alexandre Salconi-Denis
/
ProjetOctopode
Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.
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@14:ca1a9230ba7f, 2015-03-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |