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:
Fri Mar 20 14:25:23 2015 +0000
Revision:
12:bf44013497c8
Parent:
11:496453b45e25
Child:
13:51bbdc349f20
La com a l'aire fonctionelle et le debug est operationelle.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 7:dcfd81d7f93f 1
salco 7:dcfd81d7f93f 2 #include "ComSpi.h"
salco 7:dcfd81d7f93f 3
salco 7:dcfd81d7f93f 4 ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName _unused) : SPI(mosi,miso,sclk,_unused)
salco 7:dcfd81d7f93f 5 {
salco 7:dcfd81d7f93f 6 // m_com = new SPI(mosi,miso,sclk,_unused);
salco 7:dcfd81d7f93f 7 //m_regPortUse=0;
salco 7:dcfd81d7f93f 8 //m_regPortLost=0;
salco 7:dcfd81d7f93f 9 m_demuxPos=0;
salco 7:dcfd81d7f93f 10 demuxIsUse=false;
salco 7:dcfd81d7f93f 11 }
salco 7:dcfd81d7f93f 12
salco 7:dcfd81d7f93f 13 ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName demuxA, PinName demuxB, PinName demuxC, PinName demuxD, PinName demuxEnable)
salco 11:496453b45e25 14 : SPI(mosi,miso,sclk), m_demuxA(demuxA), m_demuxB(demuxB), m_demuxC(demuxC), m_demuxD(demuxD), m_demuxEnable(demuxEnable)
salco 7:dcfd81d7f93f 15 {
salco 7:dcfd81d7f93f 16 m_demuxPos=0;
salco 7:dcfd81d7f93f 17 demuxIsUse=true;
salco 7:dcfd81d7f93f 18 }
salco 7:dcfd81d7f93f 19
salco 7:dcfd81d7f93f 20 ComSpi::~ComSpi()
salco 7:dcfd81d7f93f 21 {
salco 7:dcfd81d7f93f 22 //if(m_com)
salco 7:dcfd81d7f93f 23 // delete(m_com);
salco 7:dcfd81d7f93f 24 }
salco 7:dcfd81d7f93f 25 void ComSpi::change_demux(void)
salco 7:dcfd81d7f93f 26 {
salco 9:7295385f02b2 27 if(demuxIsUse) {
salco 10:7e6aeaebe1a2 28 DigitalOut pinDemuxA(m_demuxA);
salco 10:7e6aeaebe1a2 29 DigitalOut pinDemuxB(m_demuxB);
salco 10:7e6aeaebe1a2 30 DigitalOut pinDemuxC(m_demuxC);
salco 10:7e6aeaebe1a2 31 DigitalOut pinDemuxD(m_demuxD);
salco 10:7e6aeaebe1a2 32 DigitalOut pinDemuxEnable(m_demuxEnable);
salco 7:dcfd81d7f93f 33
salco 10:7e6aeaebe1a2 34 pinDemuxEnable=0;
salco 7:dcfd81d7f93f 35
salco 10:7e6aeaebe1a2 36 if(m_demuxPos & 1) pinDemuxA=1; //0b0001
salco 10:7e6aeaebe1a2 37 else pinDemuxA=0;
salco 10:7e6aeaebe1a2 38 if(m_demuxPos & 2) pinDemuxB=1; //0b0010
salco 10:7e6aeaebe1a2 39 else pinDemuxB=0;
salco 10:7e6aeaebe1a2 40 if(m_demuxPos & 4) pinDemuxC=1; //0b0100
salco 10:7e6aeaebe1a2 41 else pinDemuxC=0;
salco 10:7e6aeaebe1a2 42 if(m_demuxPos & 8) pinDemuxD=1; //0b1000
salco 10:7e6aeaebe1a2 43 else pinDemuxD=0;
salco 7:dcfd81d7f93f 44
salco 10:7e6aeaebe1a2 45 pinDemuxEnable=1;
salco 9:7295385f02b2 46 }
salco 7:dcfd81d7f93f 47 }
salco 7:dcfd81d7f93f 48 int ComSpi::write(int value)
salco 7:dcfd81d7f93f 49 {
salco 7:dcfd81d7f93f 50 int a;
salco 7:dcfd81d7f93f 51 a= SPI::write(value);
salco 7:dcfd81d7f93f 52 return a;
salco 7:dcfd81d7f93f 53 }
salco 9:7295385f02b2 54 char ComSpi::next_demux(void)
salco 7:dcfd81d7f93f 55 {
salco 9:7295385f02b2 56 char result = (char)-1;
salco 7:dcfd81d7f93f 57
salco 7:dcfd81d7f93f 58 if(demuxIsUse) {
salco 7:dcfd81d7f93f 59 (m_demuxPos == 15)? m_demuxPos=0:m_demuxPos++;
salco 7:dcfd81d7f93f 60 change_demux();
salco 9:7295385f02b2 61 result = m_demuxPos;
salco 7:dcfd81d7f93f 62 }
salco 7:dcfd81d7f93f 63 return result;
salco 7:dcfd81d7f93f 64 }
salco 9:7295385f02b2 65 char ComSpi::back_demux(void)
salco 7:dcfd81d7f93f 66 {
salco 9:7295385f02b2 67 char result = (char)-1;
salco 10:7e6aeaebe1a2 68
salco 7:dcfd81d7f93f 69 if(demuxIsUse) {
salco 7:dcfd81d7f93f 70 (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
salco 7:dcfd81d7f93f 71 change_demux();
salco 10:7e6aeaebe1a2 72
salco 10:7e6aeaebe1a2 73 result = m_demuxPos;
salco 7:dcfd81d7f93f 74 }
salco 7:dcfd81d7f93f 75 return result;
salco 7:dcfd81d7f93f 76 }
salco 10:7e6aeaebe1a2 77
salco 10:7e6aeaebe1a2 78 char ComSpi::get_demux(void)
salco 10:7e6aeaebe1a2 79 {
salco 10:7e6aeaebe1a2 80 char result = (char)-1;
salco 10:7e6aeaebe1a2 81 if(demuxIsUse)
salco 10:7e6aeaebe1a2 82 result=m_demuxPos;
salco 10:7e6aeaebe1a2 83 return result ;
salco 10:7e6aeaebe1a2 84 }
salco 10:7e6aeaebe1a2 85
salco 10:7e6aeaebe1a2 86 bool ComSpi::send(char portID, char adresseModule,string *flag,string *data)
salco 7:dcfd81d7f93f 87 {
salco 7:dcfd81d7f93f 88 bool result=false;
salco 10:7e6aeaebe1a2 89 string formatedDataSend;
salco 10:7e6aeaebe1a2 90 string formatedDataReceive;
salco 10:7e6aeaebe1a2 91 //int valueReceive=0;
salco 7:dcfd81d7f93f 92 //int CRC
salco 12:bf44013497c8 93
salco 11:496453b45e25 94 debug(DEBUG_SEND, "\n\r -Debut du send. ");
salco 12:bf44013497c8 95
salco 11:496453b45e25 96 debug(DEBUG_SEND, "\n\r -Debut set demux. ");
salco 12:bf44013497c8 97 if(portID > 0xFF) { //(char)-1) {
salco 9:7295385f02b2 98 m_demuxPos = portID;
salco 9:7295385f02b2 99 change_demux();
salco 10:7e6aeaebe1a2 100 }
salco 11:496453b45e25 101 debug(DEBUG_SEND, "\n\r -Fin set demux. ");
salco 12:bf44013497c8 102
salco 10:7e6aeaebe1a2 103 // Sync //
salco 11:496453b45e25 104 debug(DEBUG_SEND, "\n\r -Debut Sync. ");
salco 10:7e6aeaebe1a2 105 formatedDataSend.append(1,SYNC);
salco 11:496453b45e25 106 debug(DEBUG_SEND, "\n\r -Fin Sync. ");
salco 12:bf44013497c8 107
salco 10:7e6aeaebe1a2 108 // Address //
salco 11:496453b45e25 109 debug(DEBUG_SEND, "\n\r -Debut Address. ");
salco 10:7e6aeaebe1a2 110 formatedDataSend.append(1,adresseModule);
salco 11:496453b45e25 111 debug(DEBUG_SEND, "\n\r -Fin Address. ");
salco 12:bf44013497c8 112
salco 10:7e6aeaebe1a2 113 // PFB //
salco 11:496453b45e25 114 debug(DEBUG_SEND, "\n\r -Debut PFB. ");
salco 10:7e6aeaebe1a2 115 switch(flag->size()) {
salco 10:7e6aeaebe1a2 116 case 1:
salco 10:7e6aeaebe1a2 117 formatedDataSend.append(1,1<<6);
salco 10:7e6aeaebe1a2 118 break;
salco 10:7e6aeaebe1a2 119
salco 10:7e6aeaebe1a2 120 case 2:
salco 10:7e6aeaebe1a2 121 formatedDataSend.append(1,2<<6);
salco 10:7e6aeaebe1a2 122 break;
salco 10:7e6aeaebe1a2 123
salco 10:7e6aeaebe1a2 124 case 3:
salco 10:7e6aeaebe1a2 125 formatedDataSend.append(1,3<<6);
salco 10:7e6aeaebe1a2 126 break;
salco 10:7e6aeaebe1a2 127
salco 10:7e6aeaebe1a2 128 default:
salco 10:7e6aeaebe1a2 129 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 130 break;
salco 10:7e6aeaebe1a2 131 }
salco 11:496453b45e25 132 debug(DEBUG_SEND, "\n\r -Fin PFB. ");
salco 12:bf44013497c8 133
salco 10:7e6aeaebe1a2 134 // gestion ACK/NAK
salco 11:496453b45e25 135 debug(DEBUG_SEND, "\n\r -Debut ACK/NAK. ");
salco 12:bf44013497c8 136 formatedDataSend.at(formatedDataSend.length()-1) |= (NOACK << 4);
salco 11:496453b45e25 137 debug(DEBUG_SEND, "\n\r -Fin ACK/NAK. ");
salco 12:bf44013497c8 138
salco 10:7e6aeaebe1a2 139 // NDB //
salco 11:496453b45e25 140 debug(DEBUG_SEND, "\n\r -Debut NDB. ");
salco 10:7e6aeaebe1a2 141 switch(data->size()) {
salco 10:7e6aeaebe1a2 142 case 1:
salco 12:bf44013497c8 143 formatedDataSend.at(formatedDataSend.length()-1) |= 1;
salco 10:7e6aeaebe1a2 144 break;
salco 10:7e6aeaebe1a2 145
salco 10:7e6aeaebe1a2 146 case 2:
salco 12:bf44013497c8 147 formatedDataSend.at(formatedDataSend.length()-1) |= 2;
salco 10:7e6aeaebe1a2 148 break;
salco 10:7e6aeaebe1a2 149
salco 10:7e6aeaebe1a2 150 case 3:
salco 12:bf44013497c8 151 formatedDataSend.at(formatedDataSend.length()-1) |= 3;
salco 10:7e6aeaebe1a2 152 break;
salco 10:7e6aeaebe1a2 153
salco 10:7e6aeaebe1a2 154 default:
salco 12:bf44013497c8 155 formatedDataSend.at(formatedDataSend.length()-1) |= 0;
salco 10:7e6aeaebe1a2 156 break;
salco 10:7e6aeaebe1a2 157 }
salco 11:496453b45e25 158 debug(DEBUG_SEND, "\n\r -Fin NDB. ");
salco 12:bf44013497c8 159
salco 10:7e6aeaebe1a2 160 // flag //
salco 11:496453b45e25 161 debug(DEBUG_SEND, "\n\r -Debut flag. ");
salco 12:bf44013497c8 162 if(flag->size() != 0) {
salco 10:7e6aeaebe1a2 163 formatedDataSend.append(*flag);
salco 12:bf44013497c8 164 }
salco 11:496453b45e25 165 debug(DEBUG_SEND, "\n\r -Fin flag. ");
salco 12:bf44013497c8 166
salco 10:7e6aeaebe1a2 167 // data //
salco 11:496453b45e25 168 debug(DEBUG_SEND, "\n\r -Debut data. ");
salco 12:bf44013497c8 169 if(data->size() != 0) {
salco 10:7e6aeaebe1a2 170 formatedDataSend.append(*flag);
salco 12:bf44013497c8 171 }
salco 11:496453b45e25 172 debug(DEBUG_SEND, "\n\r -Fin data. ");
salco 12:bf44013497c8 173
salco 10:7e6aeaebe1a2 174 // CRC //
salco 10:7e6aeaebe1a2 175 //Create CRC
salco 10:7e6aeaebe1a2 176 //Send CRC
salco 10:7e6aeaebe1a2 177 //Compare
salco 10:7e6aeaebe1a2 178
salco 10:7e6aeaebe1a2 179 int tempValue=0;
salco 10:7e6aeaebe1a2 180 //Send Data
salco 11:496453b45e25 181 debug(DEBUG_SEND, "\n\r -Debut Send Data. ");
salco 12:bf44013497c8 182 debug(DEBUG_SEND, "\n\r -Send: ");
salco 12:bf44013497c8 183 for (unsigned i=0; i<formatedDataSend.length(); ++i) {
salco 12:bf44013497c8 184 debug(DEBUG_SEND, "%i,",formatedDataSend.at(i));
salco 12:bf44013497c8 185 }
salco 12:bf44013497c8 186
salco 10:7e6aeaebe1a2 187 tempValue = (formatedDataSend[0]<<8)+formatedDataSend[1];
salco 10:7e6aeaebe1a2 188 tempValue=write(tempValue);
salco 12:bf44013497c8 189
salco 12:bf44013497c8 190 debug(DEBUG_SEND, "\n\r -Fin Send Data. ");
salco 12:bf44013497c8 191
salco 12:bf44013497c8 192 // Envoie si liker //
salco 12:bf44013497c8 193 debug(DEBUG_SEND, "\n\r -Debut Traitement de l'information. ");
salco 12:bf44013497c8 194 debug(DEBUG_SEND, "\n\r -Receive: ");
salco 12:bf44013497c8 195 if(tempValue == (formatedDataSend[0]<<8)+formatedDataSend[1]) {// tempValue ==(Sync+(PFB+ACK+NDB))
salco 10:7e6aeaebe1a2 196 formatedDataReceive.append(1,formatedDataSend[0]);
salco 10:7e6aeaebe1a2 197 formatedDataReceive.append(1,formatedDataSend[1]);
salco 10:7e6aeaebe1a2 198
salco 10:7e6aeaebe1a2 199 for (unsigned i=2; i<formatedDataSend.length(); ++i) {
salco 10:7e6aeaebe1a2 200 tempValue = formatedDataSend[i];
salco 10:7e6aeaebe1a2 201 i++;
salco 12:bf44013497c8 202 if(i<formatedDataSend.length()) {
salco 10:7e6aeaebe1a2 203 tempValue = (tempValue<<8) + formatedDataSend[i];
salco 12:bf44013497c8 204 }
salco 10:7e6aeaebe1a2 205 tempValue=write(tempValue);
salco 10:7e6aeaebe1a2 206 formatedDataReceive.append(1,tempValue>>8);
salco 10:7e6aeaebe1a2 207 formatedDataReceive.append(1,tempValue&0xFF);
salco 9:7295385f02b2 208 }
salco 12:bf44013497c8 209
salco 12:bf44013497c8 210
salco 12:bf44013497c8 211
salco 10:7e6aeaebe1a2 212 // Traitement de l'information //
salco 12:bf44013497c8 213 //debug(DEBUG_SEND, "\n\r -Debut Traitement de l'information. ");
salco 12:bf44013497c8 214 //debug(DEBUG_SEND, "\n\r -Send: ");
salco 12:bf44013497c8 215 for (unsigned i=0; i<formatedDataReceive.length(); ++i) {
salco 12:bf44013497c8 216 debug(DEBUG_SEND, "%i,",formatedDataReceive.at(i));
salco 12:bf44013497c8 217 }
salco 12:bf44013497c8 218
salco 10:7e6aeaebe1a2 219 tempValue=formatedDataReceive[2];
salco 10:7e6aeaebe1a2 220 string::iterator it=formatedDataReceive.begin()+3;
salco 12:bf44013497c8 221
salco 10:7e6aeaebe1a2 222 // flag //
salco 10:7e6aeaebe1a2 223 flag->clear();
salco 10:7e6aeaebe1a2 224 switch(tempValue>>6) {
salco 10:7e6aeaebe1a2 225 case 1:
salco 10:7e6aeaebe1a2 226 flag->append(1,*it);
salco 10:7e6aeaebe1a2 227 it++;
salco 10:7e6aeaebe1a2 228 break;
salco 7:dcfd81d7f93f 229
salco 10:7e6aeaebe1a2 230 case 2:
salco 10:7e6aeaebe1a2 231 flag->append(1,*it);
salco 10:7e6aeaebe1a2 232 it++;
salco 10:7e6aeaebe1a2 233 flag->append(1,*it);
salco 10:7e6aeaebe1a2 234 it++;
salco 10:7e6aeaebe1a2 235 break;
salco 7:dcfd81d7f93f 236
salco 10:7e6aeaebe1a2 237 case 3:
salco 10:7e6aeaebe1a2 238 flag->append(1,*it);
salco 10:7e6aeaebe1a2 239 it++;
salco 10:7e6aeaebe1a2 240 flag->append(1,*it);
salco 10:7e6aeaebe1a2 241 it++;
salco 10:7e6aeaebe1a2 242 flag->append(1,*it);
salco 10:7e6aeaebe1a2 243 it++;
salco 10:7e6aeaebe1a2 244 break;
salco 7:dcfd81d7f93f 245
salco 10:7e6aeaebe1a2 246 /*default:
salco 10:7e6aeaebe1a2 247 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 248 break;*/
salco 10:7e6aeaebe1a2 249 }
salco 12:bf44013497c8 250
salco 10:7e6aeaebe1a2 251 // ACK/NAK
salco 10:7e6aeaebe1a2 252 //
salco 7:dcfd81d7f93f 253
salco 10:7e6aeaebe1a2 254 // NDB //
salco 10:7e6aeaebe1a2 255 data->clear();
salco 10:7e6aeaebe1a2 256 switch(tempValue&0xFF) {
salco 10:7e6aeaebe1a2 257 case 1:
salco 10:7e6aeaebe1a2 258 data->append(1,*it);
salco 10:7e6aeaebe1a2 259 it++;
salco 10:7e6aeaebe1a2 260 break;
salco 7:dcfd81d7f93f 261
salco 10:7e6aeaebe1a2 262 case 2:
salco 10:7e6aeaebe1a2 263 data->append(1,*it);
salco 10:7e6aeaebe1a2 264 it++;
salco 10:7e6aeaebe1a2 265 data->append(1,*it);
salco 10:7e6aeaebe1a2 266 it++;
salco 10:7e6aeaebe1a2 267 break;
salco 10:7e6aeaebe1a2 268
salco 10:7e6aeaebe1a2 269 case 3:
salco 10:7e6aeaebe1a2 270 data->append(1,*it);
salco 10:7e6aeaebe1a2 271 it++;
salco 10:7e6aeaebe1a2 272 data->append(1,*it);
salco 10:7e6aeaebe1a2 273 it++;
salco 10:7e6aeaebe1a2 274 data->append(1,*it);
salco 10:7e6aeaebe1a2 275 it++;
salco 10:7e6aeaebe1a2 276 break;
salco 10:7e6aeaebe1a2 277
salco 10:7e6aeaebe1a2 278 /*default:
salco 10:7e6aeaebe1a2 279
salco 10:7e6aeaebe1a2 280 break;*/
salco 7:dcfd81d7f93f 281 }
salco 12:bf44013497c8 282
salco 10:7e6aeaebe1a2 283 // CRC //
salco 10:7e6aeaebe1a2 284 //
salco 12:bf44013497c8 285
salco 10:7e6aeaebe1a2 286 result=true;
salco 7:dcfd81d7f93f 287 }
salco 12:bf44013497c8 288
salco 12:bf44013497c8 289 debug(DEBUG_SEND, "\n\r -Fin Traitement de l'information. ");
salco 11:496453b45e25 290 debug(DEBUG_SEND, "\n\r -Fin du send. ");
salco 7:dcfd81d7f93f 291 return result;
salco 7:dcfd81d7f93f 292 }