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:
Thu Mar 19 21:49:20 2015 +0000
Revision:
10:7e6aeaebe1a2
Parent:
9:7295385f02b2
Child:
11:496453b45e25
l'init de Ctrl Bridge est faite reste a tester et a inclure les debug.

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 7:dcfd81d7f93f 14 : SPI(mosi,miso,sclk,NC), 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
salco 10:7e6aeaebe1a2 90 string formatedDataSend;
salco 10:7e6aeaebe1a2 91 string formatedDataReceive;
salco 10:7e6aeaebe1a2 92 //int valueReceive=0;
salco 7:dcfd81d7f93f 93 //int CRC
salco 10:7e6aeaebe1a2 94
salco 10:7e6aeaebe1a2 95 if(portID > (char)-1) {
salco 9:7295385f02b2 96 m_demuxPos = portID;
salco 9:7295385f02b2 97 change_demux();
salco 10:7e6aeaebe1a2 98 }
salco 10:7e6aeaebe1a2 99 // Sync //
salco 10:7e6aeaebe1a2 100 formatedDataSend.append(1,SYNC);
salco 10:7e6aeaebe1a2 101 // Address //
salco 10:7e6aeaebe1a2 102 formatedDataSend.append(1,adresseModule);
salco 10:7e6aeaebe1a2 103 // PFB //
salco 10:7e6aeaebe1a2 104 switch(flag->size()) {
salco 10:7e6aeaebe1a2 105 case 1:
salco 10:7e6aeaebe1a2 106 formatedDataSend.append(1,1<<6);
salco 10:7e6aeaebe1a2 107 break;
salco 10:7e6aeaebe1a2 108
salco 10:7e6aeaebe1a2 109 case 2:
salco 10:7e6aeaebe1a2 110 formatedDataSend.append(1,2<<6);
salco 10:7e6aeaebe1a2 111 break;
salco 10:7e6aeaebe1a2 112
salco 10:7e6aeaebe1a2 113 case 3:
salco 10:7e6aeaebe1a2 114 formatedDataSend.append(1,3<<6);
salco 10:7e6aeaebe1a2 115 break;
salco 10:7e6aeaebe1a2 116
salco 10:7e6aeaebe1a2 117 default:
salco 10:7e6aeaebe1a2 118 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 119 break;
salco 10:7e6aeaebe1a2 120 }
salco 10:7e6aeaebe1a2 121 // gestion ACK/NAK
salco 10:7e6aeaebe1a2 122 formatedDataSend.at(formatedDataSend.length()) |= (NOACK << 4);
salco 10:7e6aeaebe1a2 123 // NDB //
salco 10:7e6aeaebe1a2 124 switch(data->size()) {
salco 10:7e6aeaebe1a2 125 case 1:
salco 10:7e6aeaebe1a2 126 formatedDataSend.at(formatedDataSend.length()) |= 1;
salco 10:7e6aeaebe1a2 127 break;
salco 10:7e6aeaebe1a2 128
salco 10:7e6aeaebe1a2 129 case 2:
salco 10:7e6aeaebe1a2 130 formatedDataSend.at(formatedDataSend.length()) |= 2;
salco 10:7e6aeaebe1a2 131 break;
salco 10:7e6aeaebe1a2 132
salco 10:7e6aeaebe1a2 133 case 3:
salco 10:7e6aeaebe1a2 134 formatedDataSend.at(formatedDataSend.length()) |= 3;
salco 10:7e6aeaebe1a2 135 break;
salco 10:7e6aeaebe1a2 136
salco 10:7e6aeaebe1a2 137 default:
salco 10:7e6aeaebe1a2 138 formatedDataSend.at(formatedDataSend.length()) |= 0;
salco 10:7e6aeaebe1a2 139 break;
salco 10:7e6aeaebe1a2 140 }
salco 10:7e6aeaebe1a2 141 // flag //
salco 10:7e6aeaebe1a2 142 if(flag->size() != 0)
salco 10:7e6aeaebe1a2 143 formatedDataSend.append(*flag);
salco 10:7e6aeaebe1a2 144 // data //
salco 10:7e6aeaebe1a2 145 if(data->size() != 0)
salco 10:7e6aeaebe1a2 146 formatedDataSend.append(*flag);
salco 10:7e6aeaebe1a2 147 // CRC //
salco 10:7e6aeaebe1a2 148 //Create CRC
salco 10:7e6aeaebe1a2 149 //Send CRC
salco 10:7e6aeaebe1a2 150 //Compare
salco 10:7e6aeaebe1a2 151
salco 10:7e6aeaebe1a2 152 int tempValue=0;
salco 10:7e6aeaebe1a2 153 //Send Data
salco 10:7e6aeaebe1a2 154 tempValue = (formatedDataSend[0]<<8)+formatedDataSend[1];
salco 10:7e6aeaebe1a2 155 tempValue=write(tempValue);
salco 10:7e6aeaebe1a2 156 if(tempValue == (formatedDataSend[0]<<8)+formatedDataSend[1]) {
salco 10:7e6aeaebe1a2 157 formatedDataReceive.append(1,formatedDataSend[0]);
salco 10:7e6aeaebe1a2 158 formatedDataReceive.append(1,formatedDataSend[1]);
salco 10:7e6aeaebe1a2 159
salco 10:7e6aeaebe1a2 160 for (unsigned i=2; i<formatedDataSend.length(); ++i) {
salco 10:7e6aeaebe1a2 161 tempValue = formatedDataSend[i];
salco 10:7e6aeaebe1a2 162 i++;
salco 10:7e6aeaebe1a2 163 if(i<formatedDataSend.length())
salco 10:7e6aeaebe1a2 164 tempValue = (tempValue<<8) + formatedDataSend[i];
salco 10:7e6aeaebe1a2 165
salco 10:7e6aeaebe1a2 166 tempValue=write(tempValue);
salco 10:7e6aeaebe1a2 167 formatedDataReceive.append(1,tempValue>>8);
salco 10:7e6aeaebe1a2 168 formatedDataReceive.append(1,tempValue&0xFF);
salco 9:7295385f02b2 169 }
salco 7:dcfd81d7f93f 170
salco 10:7e6aeaebe1a2 171 // Traitement de l'information //
salco 10:7e6aeaebe1a2 172 tempValue=formatedDataReceive[2];
salco 10:7e6aeaebe1a2 173 string::iterator it=formatedDataReceive.begin()+3;
salco 10:7e6aeaebe1a2 174 // flag //
salco 10:7e6aeaebe1a2 175 flag->clear();
salco 10:7e6aeaebe1a2 176 switch(tempValue>>6) {
salco 10:7e6aeaebe1a2 177 case 1:
salco 10:7e6aeaebe1a2 178 flag->append(1,*it);
salco 10:7e6aeaebe1a2 179 it++;
salco 10:7e6aeaebe1a2 180 break;
salco 7:dcfd81d7f93f 181
salco 10:7e6aeaebe1a2 182 case 2:
salco 10:7e6aeaebe1a2 183 flag->append(1,*it);
salco 10:7e6aeaebe1a2 184 it++;
salco 10:7e6aeaebe1a2 185 flag->append(1,*it);
salco 10:7e6aeaebe1a2 186 it++;
salco 10:7e6aeaebe1a2 187 break;
salco 7:dcfd81d7f93f 188
salco 10:7e6aeaebe1a2 189 case 3:
salco 10:7e6aeaebe1a2 190 flag->append(1,*it);
salco 10:7e6aeaebe1a2 191 it++;
salco 10:7e6aeaebe1a2 192 flag->append(1,*it);
salco 10:7e6aeaebe1a2 193 it++;
salco 10:7e6aeaebe1a2 194 flag->append(1,*it);
salco 10:7e6aeaebe1a2 195 it++;
salco 10:7e6aeaebe1a2 196 break;
salco 7:dcfd81d7f93f 197
salco 10:7e6aeaebe1a2 198 /*default:
salco 10:7e6aeaebe1a2 199 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 200 break;*/
salco 10:7e6aeaebe1a2 201 }
salco 10:7e6aeaebe1a2 202 // ACK/NAK
salco 10:7e6aeaebe1a2 203 //
salco 7:dcfd81d7f93f 204
salco 10:7e6aeaebe1a2 205 // NDB //
salco 10:7e6aeaebe1a2 206 data->clear();
salco 10:7e6aeaebe1a2 207 switch(tempValue&0xFF) {
salco 10:7e6aeaebe1a2 208 case 1:
salco 10:7e6aeaebe1a2 209 data->append(1,*it);
salco 10:7e6aeaebe1a2 210 it++;
salco 10:7e6aeaebe1a2 211 break;
salco 7:dcfd81d7f93f 212
salco 10:7e6aeaebe1a2 213 case 2:
salco 10:7e6aeaebe1a2 214 data->append(1,*it);
salco 10:7e6aeaebe1a2 215 it++;
salco 10:7e6aeaebe1a2 216 data->append(1,*it);
salco 10:7e6aeaebe1a2 217 it++;
salco 10:7e6aeaebe1a2 218 break;
salco 10:7e6aeaebe1a2 219
salco 10:7e6aeaebe1a2 220 case 3:
salco 10:7e6aeaebe1a2 221 data->append(1,*it);
salco 10:7e6aeaebe1a2 222 it++;
salco 10:7e6aeaebe1a2 223 data->append(1,*it);
salco 10:7e6aeaebe1a2 224 it++;
salco 10:7e6aeaebe1a2 225 data->append(1,*it);
salco 10:7e6aeaebe1a2 226 it++;
salco 10:7e6aeaebe1a2 227 break;
salco 10:7e6aeaebe1a2 228
salco 10:7e6aeaebe1a2 229 /*default:
salco 10:7e6aeaebe1a2 230
salco 10:7e6aeaebe1a2 231 break;*/
salco 7:dcfd81d7f93f 232 }
salco 10:7e6aeaebe1a2 233 // CRC //
salco 10:7e6aeaebe1a2 234 //
salco 10:7e6aeaebe1a2 235 result=true;
salco 7:dcfd81d7f93f 236 }
salco 7:dcfd81d7f93f 237 return result;
salco 7:dcfd81d7f93f 238 }