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:
Wed Apr 22 19:27:44 2015 +0000
Revision:
15:91b3c572d9df
Parent:
14:ca1a9230ba7f
Child:
16:5ea4337d785f
Voila la communication est authentifier des deux coter. Reste plus qu'a utiliser les bytes transporter dans cette communication.

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 15:91b3c572d9df 11 chainedListFirst = 0;
salco 15:91b3c572d9df 12 chainedListLast = 0;
salco 15:91b3c572d9df 13 flagSPI.getBytes = 0;
salco 15:91b3c572d9df 14 //result = 0;
salco 15:91b3c572d9df 15 counterData = 0;
salco 15:91b3c572d9df 16 counterTotale = 0;
salco 15:91b3c572d9df 17 /*for(int i=0;i<MAXTABLE;i++)
salco 15:91b3c572d9df 18 {
salco 15:91b3c572d9df 19 bufferSend[i] = 0;
salco 15:91b3c572d9df 20 bufferReceive[i] = 0;
salco 15:91b3c572d9df 21 }
salco 15:91b3c572d9df 22 bufferSend[0] = SYNC;*/
salco 15:91b3c572d9df 23 }
salco 15:91b3c572d9df 24
salco 15:91b3c572d9df 25 struct module_t* ComSpi::createModule(void) {
salco 15:91b3c572d9df 26 if(chainedListFirst == 0) {
salco 15:91b3c572d9df 27 chainedListFirst = new module_t ;
salco 15:91b3c572d9df 28 chainedListLast = chainedListFirst;
salco 15:91b3c572d9df 29 } else {
salco 15:91b3c572d9df 30 chainedListLast->next = new module_t;
salco 15:91b3c572d9df 31 chainedListLast = chainedListLast->next;
salco 15:91b3c572d9df 32 }
salco 15:91b3c572d9df 33 chainedListLast->next = 0;
salco 15:91b3c572d9df 34 return chainedListLast;
salco 7:dcfd81d7f93f 35 }
salco 7:dcfd81d7f93f 36
salco 7:dcfd81d7f93f 37 ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName demuxA, PinName demuxB, PinName demuxC, PinName demuxD, PinName demuxEnable)
salco 11:496453b45e25 38 : SPI(mosi,miso,sclk), m_demuxA(demuxA), m_demuxB(demuxB), m_demuxC(demuxC), m_demuxD(demuxD), m_demuxEnable(demuxEnable)
salco 7:dcfd81d7f93f 39 {
salco 7:dcfd81d7f93f 40 m_demuxPos=0;
salco 7:dcfd81d7f93f 41 demuxIsUse=true;
salco 15:91b3c572d9df 42 format(8,0);//16,0); //recente modification
salco 7:dcfd81d7f93f 43 }
salco 7:dcfd81d7f93f 44
salco 7:dcfd81d7f93f 45 ComSpi::~ComSpi()
salco 7:dcfd81d7f93f 46 {
salco 15:91b3c572d9df 47 //pt deleter les pointeur mais sa ser pas vrm a grand chause
salco 7:dcfd81d7f93f 48 //if(m_com)
salco 7:dcfd81d7f93f 49 // delete(m_com);
salco 7:dcfd81d7f93f 50 }
salco 7:dcfd81d7f93f 51 void ComSpi::change_demux(void)
salco 7:dcfd81d7f93f 52 {
salco 9:7295385f02b2 53 if(demuxIsUse) {
salco 10:7e6aeaebe1a2 54 DigitalOut pinDemuxA(m_demuxA);
salco 10:7e6aeaebe1a2 55 DigitalOut pinDemuxB(m_demuxB);
salco 10:7e6aeaebe1a2 56 DigitalOut pinDemuxC(m_demuxC);
salco 10:7e6aeaebe1a2 57 DigitalOut pinDemuxD(m_demuxD);
salco 15:91b3c572d9df 58 DigitalOut pinDemuxEnable(m_demuxEnable);//,1);
salco 15:91b3c572d9df 59 //wait(1);
salco 10:7e6aeaebe1a2 60 pinDemuxEnable=0;
salco 15:91b3c572d9df 61 //wait(1);
salco 10:7e6aeaebe1a2 62 if(m_demuxPos & 1) pinDemuxA=1; //0b0001
salco 10:7e6aeaebe1a2 63 else pinDemuxA=0;
salco 10:7e6aeaebe1a2 64 if(m_demuxPos & 2) pinDemuxB=1; //0b0010
salco 10:7e6aeaebe1a2 65 else pinDemuxB=0;
salco 10:7e6aeaebe1a2 66 if(m_demuxPos & 4) pinDemuxC=1; //0b0100
salco 10:7e6aeaebe1a2 67 else pinDemuxC=0;
salco 10:7e6aeaebe1a2 68 if(m_demuxPos & 8) pinDemuxD=1; //0b1000
salco 10:7e6aeaebe1a2 69 else pinDemuxD=0;
salco 15:91b3c572d9df 70 //wait(1);
salco 15:91b3c572d9df 71 // pinDemuxEnable=1;
salco 15:91b3c572d9df 72 //wait(1);
salco 9:7295385f02b2 73 }
salco 7:dcfd81d7f93f 74 }
salco 9:7295385f02b2 75 char ComSpi::next_demux(void)
salco 7:dcfd81d7f93f 76 {
salco 9:7295385f02b2 77 char result = (char)-1;
salco 7:dcfd81d7f93f 78
salco 7:dcfd81d7f93f 79 if(demuxIsUse) {
salco 7:dcfd81d7f93f 80 (m_demuxPos == 15)? m_demuxPos=0:m_demuxPos++;
salco 7:dcfd81d7f93f 81 change_demux();
salco 9:7295385f02b2 82 result = m_demuxPos;
salco 7:dcfd81d7f93f 83 }
salco 7:dcfd81d7f93f 84 return result;
salco 7:dcfd81d7f93f 85 }
salco 9:7295385f02b2 86 char ComSpi::back_demux(void)
salco 7:dcfd81d7f93f 87 {
salco 9:7295385f02b2 88 char result = (char)-1;
salco 10:7e6aeaebe1a2 89
salco 7:dcfd81d7f93f 90 if(demuxIsUse) {
salco 7:dcfd81d7f93f 91 (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
salco 7:dcfd81d7f93f 92 change_demux();
salco 10:7e6aeaebe1a2 93
salco 10:7e6aeaebe1a2 94 result = m_demuxPos;
salco 7:dcfd81d7f93f 95 }
salco 7:dcfd81d7f93f 96 return result;
salco 7:dcfd81d7f93f 97 }
salco 10:7e6aeaebe1a2 98 char ComSpi::get_demux(void)
salco 10:7e6aeaebe1a2 99 {
salco 10:7e6aeaebe1a2 100 char result = (char)-1;
salco 10:7e6aeaebe1a2 101 if(demuxIsUse)
salco 10:7e6aeaebe1a2 102 result=m_demuxPos;
salco 10:7e6aeaebe1a2 103 return result ;
salco 10:7e6aeaebe1a2 104 }
salco 15:91b3c572d9df 105 unsigned char spiCurrentState;
salco 15:91b3c572d9df 106 int ComSpi::write(int value)
salco 15:91b3c572d9df 107 {
salco 15:91b3c572d9df 108 DigitalOut pinDemuxEnable(m_demuxEnable);
salco 15:91b3c572d9df 109 //DigitalOut pinDemuxEnable(m_demuxEnable,0);
salco 15:91b3c572d9df 110 int a;
salco 15:91b3c572d9df 111 pinDemuxEnable=1;
salco 15:91b3c572d9df 112 /* switch(spiCurrentState)
salco 15:91b3c572d9df 113 {
salco 15:91b3c572d9df 114 case 0:
salco 15:91b3c572d9df 115 a= SPI::write(0x12);
salco 15:91b3c572d9df 116 spiCurrentState++;
salco 15:91b3c572d9df 117 break;
salco 15:91b3c572d9df 118 default:
salco 15:91b3c572d9df 119 a= SPI::write(0xF5);
salco 15:91b3c572d9df 120 spiCurrentState =0;
salco 15:91b3c572d9df 121 break;
salco 15:91b3c572d9df 122 }*/
salco 15:91b3c572d9df 123 wait_us(5);
salco 15:91b3c572d9df 124 a= SPI::write(value);
salco 15:91b3c572d9df 125 wait_us(5);
salco 15:91b3c572d9df 126 pinDemuxEnable=0;
salco 15:91b3c572d9df 127 sneekpeek.append(1,value);
salco 15:91b3c572d9df 128 wait_us(1000);
salco 15:91b3c572d9df 129 return a;
salco 15:91b3c572d9df 130 }
salco 15:91b3c572d9df 131
salco 10:7e6aeaebe1a2 132
salco 14:ca1a9230ba7f 133 bool ComSpi::send(char portID,unsigned char adresseModule,string *flag,string *data)
salco 7:dcfd81d7f93f 134 {
salco 7:dcfd81d7f93f 135 bool result=false;
salco 10:7e6aeaebe1a2 136 string formatedDataSend;
salco 15:91b3c572d9df 137 string formatedDataReceive;//DEBUG_COMPACT
salco 15:91b3c572d9df 138 char settingMaster = 0;
salco 15:91b3c572d9df 139 char settingSlave = 0;
salco 12:bf44013497c8 140
salco 15:91b3c572d9df 141 debug(DEBUG_SEND| DEBUG_COMPACT, "\n\r -Debut du send. ");
salco 12:bf44013497c8 142
salco 11:496453b45e25 143 debug(DEBUG_SEND, "\n\r -Debut set demux. ");
salco 15:91b3c572d9df 144
salco 15:91b3c572d9df 145 if(portID < 1) portID = 0;
salco 15:91b3c572d9df 146 else if(portID > 16) portID = 16;
salco 15:91b3c572d9df 147 debug(DEBUG_SEND, "\n\r -Change PORT. ");
salco 15:91b3c572d9df 148 m_demuxPos = portID;
salco 15:91b3c572d9df 149 change_demux();
salco 15:91b3c572d9df 150
salco 11:496453b45e25 151 debug(DEBUG_SEND, "\n\r -Fin set demux. ");
salco 12:bf44013497c8 152
salco 10:7e6aeaebe1a2 153 // Sync //
salco 11:496453b45e25 154 debug(DEBUG_SEND, "\n\r -Debut Sync. ");
salco 10:7e6aeaebe1a2 155 formatedDataSend.append(1,SYNC);
salco 15:91b3c572d9df 156 debug(DEBUG_COMPACT, "\n\r -SYNC ADDED: %02X ",formatedDataSend[0]);
salco 11:496453b45e25 157 debug(DEBUG_SEND, "\n\r -Fin Sync. ");
salco 12:bf44013497c8 158
salco 10:7e6aeaebe1a2 159 // Address //
salco 11:496453b45e25 160 debug(DEBUG_SEND, "\n\r -Debut Address. ");
salco 10:7e6aeaebe1a2 161 formatedDataSend.append(1,adresseModule);
salco 15:91b3c572d9df 162 debug(DEBUG_COMPACT, "\n\r -ADDR ADDED: %02X, %02X ",formatedDataSend[0],formatedDataSend[1]);
salco 11:496453b45e25 163 debug(DEBUG_SEND, "\n\r -Fin Address. ");
salco 12:bf44013497c8 164
salco 10:7e6aeaebe1a2 165 // PFB //
salco 11:496453b45e25 166 debug(DEBUG_SEND, "\n\r -Debut PFB. ");
salco 10:7e6aeaebe1a2 167 switch(flag->size()) {
salco 10:7e6aeaebe1a2 168 case 1:
salco 15:91b3c572d9df 169 formatedDataSend.append(1,1<<6); //1 byte
salco 10:7e6aeaebe1a2 170 break;
salco 10:7e6aeaebe1a2 171
salco 10:7e6aeaebe1a2 172 case 2:
salco 15:91b3c572d9df 173 formatedDataSend.append(1,2<<6); //2 byte
salco 10:7e6aeaebe1a2 174 break;
salco 10:7e6aeaebe1a2 175
salco 10:7e6aeaebe1a2 176 case 3:
salco 15:91b3c572d9df 177 formatedDataSend.append(1,3<<6); //3 byte
salco 10:7e6aeaebe1a2 178 break;
salco 10:7e6aeaebe1a2 179
salco 10:7e6aeaebe1a2 180 default:
salco 15:91b3c572d9df 181 formatedDataSend.append(1,0<<6); //0 byte
salco 10:7e6aeaebe1a2 182 break;
salco 10:7e6aeaebe1a2 183 }
salco 15:91b3c572d9df 184 debug(DEBUG_COMPACT, "\n\r -PFB ADDED: %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2]);
salco 11:496453b45e25 185 debug(DEBUG_SEND, "\n\r -Fin PFB. ");
salco 12:bf44013497c8 186
salco 10:7e6aeaebe1a2 187 // gestion ACK/NAK
salco 11:496453b45e25 188 debug(DEBUG_SEND, "\n\r -Debut ACK/NAK. ");
salco 12:bf44013497c8 189 formatedDataSend.at(formatedDataSend.length()-1) |= (NOACK << 4);
salco 15:91b3c572d9df 190 debug(DEBUG_COMPACT, "\n\r -ACK ADDED: %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2]);
salco 11:496453b45e25 191 debug(DEBUG_SEND, "\n\r -Fin ACK/NAK. ");
salco 12:bf44013497c8 192
salco 10:7e6aeaebe1a2 193 // NDB //
salco 11:496453b45e25 194 debug(DEBUG_SEND, "\n\r -Debut NDB. ");
salco 10:7e6aeaebe1a2 195 switch(data->size()) {
salco 10:7e6aeaebe1a2 196 case 1:
salco 12:bf44013497c8 197 formatedDataSend.at(formatedDataSend.length()-1) |= 1;
salco 10:7e6aeaebe1a2 198 break;
salco 10:7e6aeaebe1a2 199
salco 10:7e6aeaebe1a2 200 case 2:
salco 12:bf44013497c8 201 formatedDataSend.at(formatedDataSend.length()-1) |= 2;
salco 10:7e6aeaebe1a2 202 break;
salco 10:7e6aeaebe1a2 203
salco 10:7e6aeaebe1a2 204 case 3:
salco 12:bf44013497c8 205 formatedDataSend.at(formatedDataSend.length()-1) |= 3;
salco 10:7e6aeaebe1a2 206 break;
salco 10:7e6aeaebe1a2 207
salco 10:7e6aeaebe1a2 208 default:
salco 12:bf44013497c8 209 formatedDataSend.at(formatedDataSend.length()-1) |= 0;
salco 10:7e6aeaebe1a2 210 break;
salco 10:7e6aeaebe1a2 211 }
salco 15:91b3c572d9df 212 //debug(DEBUG_COMPACT, "\n\r -NDB ADDED: %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2]);
salco 11:496453b45e25 213 debug(DEBUG_SEND, "\n\r -Fin NDB. ");
salco 12:bf44013497c8 214
salco 15:91b3c572d9df 215 settingMaster = formatedDataSend[formatedDataSend.length()-1];
salco 15:91b3c572d9df 216
salco 10:7e6aeaebe1a2 217 // flag //
salco 11:496453b45e25 218 debug(DEBUG_SEND, "\n\r -Debut flag. ");
salco 12:bf44013497c8 219 if(flag->size() != 0) {
salco 10:7e6aeaebe1a2 220 formatedDataSend.append(*flag);
salco 15:91b3c572d9df 221 //debug(DEBUG_COMPACT, "\n\r -FLAG ADDED: %02X, %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2],formatedDataSend[3]);
salco 12:bf44013497c8 222 }
salco 11:496453b45e25 223 debug(DEBUG_SEND, "\n\r -Fin flag. ");
salco 12:bf44013497c8 224
salco 15:91b3c572d9df 225 //ici tu envoi deja ton premier stuf
salco 15:91b3c572d9df 226
salco 15:91b3c572d9df 227
salco 15:91b3c572d9df 228 debug(DEBUG_SLIM, "\n\r -settingMaster : %X , %i, %X ",settingMaster, (2+(settingMaster>>6)),formatedDataSend[(2+(settingMaster>>6))] );
salco 15:91b3c572d9df 229
salco 15:91b3c572d9df 230
salco 15:91b3c572d9df 231
salco 15:91b3c572d9df 232 for(int retryLoop=0; (retryLoop<3) && (!result); retryLoop++) {
salco 12:bf44013497c8 233
salco 15:91b3c572d9df 234 debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Tentative: %d \n\r",retryLoop);
salco 15:91b3c572d9df 235 formatedDataReceive.clear();
salco 15:91b3c572d9df 236 settingSlave =0;
salco 15:91b3c572d9df 237 counterTotale =0;
salco 15:91b3c572d9df 238 sneekpeek.clear();
salco 15:91b3c572d9df 239 //Send Data
salco 15:91b3c572d9df 240 // debug(DEBUG_SEND, "\n\r -Debut Send Data. ");
salco 15:91b3c572d9df 241 // debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Send: ");
salco 15:91b3c572d9df 242 // for (unsigned i=0; i<formatedDataSend.length(); ++i) debug(DEBUG_SEND |DEBUG_COMPACT, "%02X,",formatedDataSend.at(i));
salco 10:7e6aeaebe1a2 243
salco 15:91b3c572d9df 244 //int twoBytesArray;
salco 15:91b3c572d9df 245 //twoBytesArray = (formatedDataSend[0]<<8)|(formatedDataSend[1]);
salco 15:91b3c572d9df 246 //twoBytesArray=write(twoBytesArray);
salco 13:51bbdc349f20 247
salco 15:91b3c572d9df 248 for(int i = 0; (i < formatedDataSend.length()) && (i<=(2+(settingMaster>>6))); ++i) {
salco 15:91b3c572d9df 249 formatedDataReceive.append(1,write(formatedDataSend[i]));//debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -A:%i ",i);
salco 15:91b3c572d9df 250 debug(DEBUG_SEND |DEBUG_COMPACT, " %02X,",formatedDataSend.at(i));
salco 15:91b3c572d9df 251 }
salco 13:51bbdc349f20 252
salco 15:91b3c572d9df 253 if(formatedDataReceive[0] == SYNC) {
salco 15:91b3c572d9df 254 debug(DEBUG_COMPACT, "\n\r -Receve transmission. ");
salco 15:91b3c572d9df 255 //!!!!!!!! Problem ici write dans un mais pas lautre
salco 15:91b3c572d9df 256 wait_us(3000);
salco 15:91b3c572d9df 257 if(retryLoop == 0) {
salco 15:91b3c572d9df 258 formatedDataSend.append(1,0);//2,0); cest une patch tempo parce que je trouve pas ou il manque la donner
salco 15:91b3c572d9df 259 }
salco 15:91b3c572d9df 260 formatedDataReceive.append(1,write(0));
salco 15:91b3c572d9df 261 // debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -B: ");
salco 15:91b3c572d9df 262
salco 15:91b3c572d9df 263 settingSlave = formatedDataReceive[formatedDataReceive.length()-1];
salco 15:91b3c572d9df 264 debug(DEBUG_COMPACT, "\n\r -settingSlave %02X",settingSlave);
salco 15:91b3c572d9df 265 if(retryLoop == 0) {
salco 15:91b3c572d9df 266 /*switch(formatedDataReceive[formatedDataSend.length()-1] >> 6) {
salco 15:91b3c572d9df 267 case 1:
salco 15:91b3c572d9df 268 formatedDataSend.append(1,0); //1 byte
salco 15:91b3c572d9df 269 break;
salco 13:51bbdc349f20 270
salco 15:91b3c572d9df 271 case 2:
salco 15:91b3c572d9df 272 formatedDataSend.append(2,0); //2 byte
salco 15:91b3c572d9df 273 break;
salco 13:51bbdc349f20 274
salco 15:91b3c572d9df 275 case 3:
salco 15:91b3c572d9df 276 formatedDataSend.append(3,0); //3 byte
salco 15:91b3c572d9df 277 break;
salco 12:bf44013497c8 278
salco 15:91b3c572d9df 279 //default:
salco 15:91b3c572d9df 280 // formatedDataSend.append(1,0<<6); //0 byte
salco 15:91b3c572d9df 281 // break;
salco 15:91b3c572d9df 282 }*/
salco 15:91b3c572d9df 283 formatedDataSend.append(settingSlave>>6,0);
salco 15:91b3c572d9df 284 }
salco 13:51bbdc349f20 285
salco 15:91b3c572d9df 286 int bufferFlag = 0;
salco 15:91b3c572d9df 287
salco 15:91b3c572d9df 288 for(int i = (settingMaster>>6); i != 0; i--) { //ici on remplie le buffer des data du flag
salco 15:91b3c572d9df 289 // je considere avec erreur que il nexiste pas de flag plus grand que 2 bytes (facilite le code de depart)
salco 15:91b3c572d9df 290 //!!! Pt metre fonct stein qui tronc de debut a fin pour remplacer les linge dessous.
salco 15:91b3c572d9df 291 bufferFlag = bufferFlag<<8;
salco 15:91b3c572d9df 292 bufferFlag += formatedDataSend[2+i];
salco 13:51bbdc349f20 293 }
salco 12:bf44013497c8 294
salco 15:91b3c572d9df 295 counterTotale = ((2+(settingMaster>>6))+1);
salco 15:91b3c572d9df 296 counterTotale = counterTotale+(settingSlave>>6)+abs((settingMaster & 0x0F) - (settingSlave & 0x0F));
salco 15:91b3c572d9df 297
salco 15:91b3c572d9df 298 switch(bufferFlag) { //plus facile pour savoir ce que tu doit tatenre a recevoire
salco 15:91b3c572d9df 299 case 1://Request Init Info
salco 15:91b3c572d9df 300 if(retryLoop == 0) {
salco 15:91b3c572d9df 301
salco 15:91b3c572d9df 302 formatedDataSend.append(settingSlave & 0x0F,0);
salco 15:91b3c572d9df 303 //chek pour comment avoir un address
salco 15:91b3c572d9df 304 }
salco 15:91b3c572d9df 305 //verifier si la fonction fait ce quil edt suposer
salco 15:91b3c572d9df 306 for(int i = ((2+(settingMaster>>6))+1); i < formatedDataSend.length()-1; ++i) {
salco 15:91b3c572d9df 307 formatedDataReceive.append(1,write(formatedDataSend[i]));
salco 15:91b3c572d9df 308 //debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -C:%i ",i);
salco 15:91b3c572d9df 309 }
salco 15:91b3c572d9df 310 //templatePtr =searchAddr(0);
salco 15:91b3c572d9df 311 // 1 byte flag + 3 byte de data
salco 15:91b3c572d9df 312 //bufferSend[4] = (1<<6) + 3;//[2+(bufferReceive[2]>>6)+1] = (1<<6);
salco 15:91b3c572d9df 313
salco 15:91b3c572d9df 314
salco 15:91b3c572d9df 315 //if((templatePtr->next)==0)
salco 15:91b3c572d9df 316 // bufferSend[5] = 0b101;//bufferReceive[2+(bufferReceive[2]>>6)+1+bufferReceive[2+(bufferReceive[2]>>6)+1]] = 0b101;
salco 15:91b3c572d9df 317 //else
salco 15:91b3c572d9df 318 // bufferSend[5] = 0b10;
salco 15:91b3c572d9df 319
salco 15:91b3c572d9df 320 //bufferSend[6] = templatePtr->basicInfo.osnapRegisterB.getByte;
salco 15:91b3c572d9df 321 //bufferSend[7] = templatePtr->basicInfo.osnapRegisterC.getByte;
salco 15:91b3c572d9df 322 //bufferSend[8] = templatePtr->basicInfo.osnapRegisterD.getByte;
salco 15:91b3c572d9df 323 break;
salco 15:91b3c572d9df 324
salco 15:91b3c572d9df 325 case 2: //Slave contient un/des autre(s) module(s) sans adresses
salco 15:91b3c572d9df 326 break;
salco 15:91b3c572d9df 327
salco 15:91b3c572d9df 328 case 3: //Flag Critique
salco 15:91b3c572d9df 329 break;
salco 15:91b3c572d9df 330
salco 15:91b3c572d9df 331 case 4: //Flag Alerte
salco 15:91b3c572d9df 332 break;
salco 15:91b3c572d9df 333
salco 15:91b3c572d9df 334 case 5: //Slave ne contient plus de module sans adresse
salco 15:91b3c572d9df 335 break;
salco 15:91b3c572d9df 336
salco 15:91b3c572d9df 337 case 6: //Master request address update
salco 15:91b3c572d9df 338 break;
salco 15:91b3c572d9df 339
salco 15:91b3c572d9df 340 default: //Get update (normale)
salco 15:91b3c572d9df 341
salco 15:91b3c572d9df 342 break;
salco 15:91b3c572d9df 343 }
salco 15:91b3c572d9df 344 //counterTotale = 2+(bufferReceive[2]>>6)+1;
salco 15:91b3c572d9df 345 //counterTotale = counterTotale+(bufferSend[counterTotale]>>6)+abs((bufferReceive[2] & 0x5F) - (bufferSend[counterTotale] & 0x5F));
salco 15:91b3c572d9df 346
salco 15:91b3c572d9df 347
salco 15:91b3c572d9df 348
salco 15:91b3c572d9df 349
salco 15:91b3c572d9df 350
salco 15:91b3c572d9df 351
salco 15:91b3c572d9df 352 // Envoie le reste si liker //
salco 15:91b3c572d9df 353 // DATA //
salco 15:91b3c572d9df 354 unsigned short templateValue=0;
salco 15:91b3c572d9df 355 if(retryLoop == 0) {
salco 13:51bbdc349f20 356 // CRC //
salco 15:91b3c572d9df 357 debug(DEBUG_SEND, "\n\r -Debut CRC16. ");
salco 15:91b3c572d9df 358 //CRC16* templateCRC;
salco 15:91b3c572d9df 359 //templateCRC = new CRC16();
salco 15:91b3c572d9df 360 //!!!utiliser string cest plus simple
salco 15:91b3c572d9df 361
salco 15:91b3c572d9df 362
salco 15:91b3c572d9df 363 //char templateTable[formatedDataSend.length()+1];
salco 15:91b3c572d9df 364 //for (unsigned i=0; i<formatedDataSend.length()+1; ++i) templateTable[i]=0;
salco 15:91b3c572d9df 365 //for (unsigned i=0; i<formatedDataSend.length(); ++i) templateTable[i]=formatedDataSend[i];
salco 15:91b3c572d9df 366 //debug(DEBUG_SEND, "\n\r - envoi au crc: %02X,%02X,%02X,%02X,%02X,%02X ",templateTable[0],templateTable[1],templateTable[2],templateTable[3],templateTable[4],templateTable[5],templateTable[6]);
salco 15:91b3c572d9df 367
salco 15:91b3c572d9df 368 // templateValue = /*templateCRC->*/calculateCRC16(templateTable,formatedDataSend.size()-1); //atention pt un probleme de sortie du range
salco 15:91b3c572d9df 369 //templateValue = /*templateCRC->calculateCRC16*/CRC16_BUYPASS(formatedDataSend.c_str(),formatedDataSend.size()); //atention pt un probleme de sortie du range
salco 15:91b3c572d9df 370 templateValue =CRC16_BUYPASS(sneekpeek.c_str(),sneekpeek.size()); //patch
salco 15:91b3c572d9df 371
salco 15:91b3c572d9df 372 formatedDataSend.append(1,templateValue>>8);
salco 15:91b3c572d9df 373 formatedDataSend.append(1,templateValue & 0xFF);
salco 15:91b3c572d9df 374 }
salco 15:91b3c572d9df 375 formatedDataReceive.append(1,write(formatedDataSend[formatedDataSend.size()-2]));//templateValue>>8));
salco 15:91b3c572d9df 376 //debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -D: ");
salco 15:91b3c572d9df 377 formatedDataReceive.append(1,write(formatedDataSend[formatedDataSend.size()-1]));//(templateValue & 0xFF));
salco 15:91b3c572d9df 378 //debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -E: ");
salco 15:91b3c572d9df 379
salco 15:91b3c572d9df 380
salco 15:91b3c572d9df 381
salco 15:91b3c572d9df 382 ///////////////////////
salco 15:91b3c572d9df 383
salco 15:91b3c572d9df 384 //avant faut calculer les dernier byte grace a la version 2.0
salco 15:91b3c572d9df 385 /*for(int i = 0; i < formatedDataSend.length(); ++i) {
salco 15:91b3c572d9df 386 formatedDataReceive.append(1,write(formatedDataSend[i]));
salco 15:91b3c572d9df 387 }*/
salco 13:51bbdc349f20 388
salco 15:91b3c572d9df 389 // verification du CRC slave
salco 15:91b3c572d9df 390 // CRC //
salco 15:91b3c572d9df 391 templateValue = CRC16_BUYPASS(formatedDataReceive.c_str(),formatedDataReceive.size()-2);// utiliser les data de setting slave
salco 15:91b3c572d9df 392
salco 15:91b3c572d9df 393 if(((templateValue>>8)==(formatedDataReceive.at( formatedDataReceive.length()-2))) &&
salco 15:91b3c572d9df 394 ((templateValue&0xFF)==(formatedDataReceive.at( formatedDataReceive.length()-1))))
salco 15:91b3c572d9df 395 {
salco 15:91b3c572d9df 396 result=true;
salco 15:91b3c572d9df 397 }
salco 15:91b3c572d9df 398 else
salco 15:91b3c572d9df 399 {
salco 15:91b3c572d9df 400 result=false;
salco 15:91b3c572d9df 401 }
salco 15:91b3c572d9df 402 //templateValue=((formatedDataReceive.at( formatedDataReceive.length()-2)) << 8);
salco 15:91b3c572d9df 403 //templateValue|=formatedDataReceive.at(formatedDataReceive.length()-1);
salco 15:91b3c572d9df 404
salco 15:91b3c572d9df 405 // for (unsigned i=0; i<formatedDataReceive.length()-2; ++i) {
salco 15:91b3c572d9df 406 // templateValue-=formatedDataReceive[i];
salco 15:91b3c572d9df 407 // }
salco 15:91b3c572d9df 408 // debug(DEBUG_SEND, "\n\r -CRC==0? value: %i. ", templateValue);
salco 15:91b3c572d9df 409 // (templateValue==0)? result=true:result=false;
salco 13:51bbdc349f20 410 }
salco 15:91b3c572d9df 411 debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -Send : ");
salco 15:91b3c572d9df 412 for (unsigned i=0; i<formatedDataSend.length(); i++) debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "%02X,",formatedDataSend.at(i));
salco 15:91b3c572d9df 413 debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -Reveive: ");
salco 15:91b3c572d9df 414 for (unsigned i=0; i<formatedDataReceive.length(); i++) debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "%02X,",formatedDataReceive.at(i));
salco 15:91b3c572d9df 415 debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r -Sneekpe: ");
salco 15:91b3c572d9df 416 /*for (unsigned i=0; i<sneekpeek.length(); i++)*/ debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "%04X,",CRC16_BUYPASS(formatedDataReceive.c_str(),formatedDataReceive.size()-2));//sneekpeek.at(i));
salco 15:91b3c572d9df 417 debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r-Sneekpe: %04X,",CRC16_BUYPASS(formatedDataSend.c_str(),formatedDataSend.size()-2));//sneekpeek.at(i));
salco 15:91b3c572d9df 418 debug(DEBUG_SEND|DEBUG_COMPACT|DEBUG_SLIM, "\n\r-Sneekpe: %04X,",CRC16_BUYPASS(sneekpeek.c_str(),sneekpeek.size()-2));//sneekpeek.at(i));
salco 15:91b3c572d9df 419
salco 15:91b3c572d9df 420 }//templateValue = /*templateCRC->*/calculateCRC16(formatedDataSend.c_str(),formatedDataSend.size()-1);sneekpeek
salco 15:91b3c572d9df 421 ///////////////////////
salco 15:91b3c572d9df 422 // // old //
salco 15:91b3c572d9df 423 //
salco 15:91b3c572d9df 424 // // data //
salco 15:91b3c572d9df 425 // debug(DEBUG_SEND, "\n\r -Debut data. ");
salco 15:91b3c572d9df 426 // if(data->size() != 0) {
salco 15:91b3c572d9df 427 // formatedDataSend.append(*data);
salco 15:91b3c572d9df 428 // debug(DEBUG_COMPACT, "\n\r -DATA ADDED: %02X, %02X, %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2],formatedDataSend[3],formatedDataSend[4]);
salco 15:91b3c572d9df 429 // }
salco 15:91b3c572d9df 430 // debug(DEBUG_SEND, "\n\r -Fin data. ");
salco 15:91b3c572d9df 431 //
salco 15:91b3c572d9df 432 // // CRC //
salco 15:91b3c572d9df 433 // debug(DEBUG_SEND, "\n\r -Debut CRC16. ");
salco 15:91b3c572d9df 434 // //CRC16* templateCRC;
salco 15:91b3c572d9df 435 // //templateCRC = new CRC16();
salco 15:91b3c572d9df 436 // unsigned short templateValue;
salco 15:91b3c572d9df 437 // char templateTable[34];
salco 15:91b3c572d9df 438 // for (unsigned i=0; i<34; ++i) templateTable[i]=0;
salco 15:91b3c572d9df 439 // for (unsigned i=0; i<formatedDataSend.length(); ++i) templateTable[i]=formatedDataSend[i];
salco 15:91b3c572d9df 440 // debug(DEBUG_SEND, "\n\r - envoi au crc: %02X,%02X,%02X,%02X,%02X,%02X ",templateTable[0],templateTable[1],templateTable[2],templateTable[3],templateTable[4],templateTable[5],templateTable[6]);
salco 15:91b3c572d9df 441 //
salco 15:91b3c572d9df 442 // templateValue = /*templateCRC->*/calculateCRC16(templateTable,formatedDataSend.size()-1); //atention pt un probleme de sortie du range
salco 15:91b3c572d9df 443 //
salco 15:91b3c572d9df 444 // formatedDataSend.append(1,templateValue>>8);
salco 15:91b3c572d9df 445 // formatedDataSend.append(1,templateValue & 0xFF);
salco 15:91b3c572d9df 446 //
salco 15:91b3c572d9df 447 // // if(templateCRC)
salco 15:91b3c572d9df 448 // // delete templateCRC;
salco 15:91b3c572d9df 449 // debug(DEBUG_COMPACT, "\n\r -DATA ADDED: %02X, %02X, %02X, %02X, %02X, %02X, %02X ",formatedDataSend[0],formatedDataSend[1],formatedDataSend[2],formatedDataSend[3],formatedDataSend[4],formatedDataSend[5],formatedDataSend[6]);
salco 15:91b3c572d9df 450 // debug(DEBUG_SEND, "\n\r -Fin CRC16. ");
salco 15:91b3c572d9df 451 //
salco 15:91b3c572d9df 452 // //Send Data
salco 15:91b3c572d9df 453 // debug(DEBUG_SEND, "\n\r -Debut Send Data. ");
salco 15:91b3c572d9df 454 // debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Send: ");
salco 15:91b3c572d9df 455 // for (unsigned i=0; i<formatedDataSend.length(); ++i) debug(DEBUG_SEND |DEBUG_COMPACT, "%02X,",formatedDataSend.at(i));
salco 15:91b3c572d9df 456 //
salco 15:91b3c572d9df 457 // int twoBytesArray;
salco 15:91b3c572d9df 458 // twoBytesArray = (formatedDataSend[0]<<8)|(formatedDataSend[1]);
salco 15:91b3c572d9df 459 //
salco 15:91b3c572d9df 460 // for(int i=0; (i<3) && (!result); i++) {
salco 15:91b3c572d9df 461 // debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Tentative: %d",i);
salco 15:91b3c572d9df 462 //
salco 15:91b3c572d9df 463 // twoBytesArray=write(twoBytesArray);
salco 15:91b3c572d9df 464 //
salco 15:91b3c572d9df 465 // if(twoBytesArray>>8 == SYNC) {// twoBytesArray ==(Sync)//+(PFB+ACK+NDB))
salco 15:91b3c572d9df 466 // // Envoie le reste si liker si liker //
salco 15:91b3c572d9df 467 // debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Debut Traitement de l'information. ");
salco 15:91b3c572d9df 468 // debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Receive: %02X",twoBytesArray);
salco 15:91b3c572d9df 469 //
salco 15:91b3c572d9df 470 // formatedDataReceive.clear();
salco 15:91b3c572d9df 471 // formatedDataReceive.append(1,twoBytesArray>>8);
salco 15:91b3c572d9df 472 // formatedDataReceive.append(1,twoBytesArray & 0xFF);
salco 15:91b3c572d9df 473 //
salco 15:91b3c572d9df 474 // for (unsigned i=2; i<formatedDataSend.length(); ++i) {
salco 15:91b3c572d9df 475 // twoBytesArray = formatedDataSend[i];
salco 15:91b3c572d9df 476 // i++;
salco 15:91b3c572d9df 477 // if(i<formatedDataSend.length())
salco 15:91b3c572d9df 478 // twoBytesArray = (twoBytesArray<<8) + formatedDataSend[i];
salco 15:91b3c572d9df 479 //
salco 15:91b3c572d9df 480 // twoBytesArray=write(twoBytesArray);
salco 15:91b3c572d9df 481 // formatedDataReceive.append(1,twoBytesArray>>8);
salco 15:91b3c572d9df 482 // formatedDataReceive.append(1,twoBytesArray&0xFF);
salco 15:91b3c572d9df 483 // }
salco 15:91b3c572d9df 484 //
salco 15:91b3c572d9df 485 // // CRC //
salco 15:91b3c572d9df 486 // unsigned short templateValue=1;
salco 15:91b3c572d9df 487 // templateValue=formatedDataReceive.at(formatedDataReceive.length()-2) << 8;
salco 15:91b3c572d9df 488 // templateValue|=formatedDataReceive.at(formatedDataReceive.length()-1);
salco 15:91b3c572d9df 489 //
salco 15:91b3c572d9df 490 // for (unsigned i=0; i<formatedDataReceive.length()-2; ++i) {
salco 15:91b3c572d9df 491 // templateValue-=formatedDataReceive[i];
salco 15:91b3c572d9df 492 // }
salco 15:91b3c572d9df 493 // debug(DEBUG_SEND, "\n\r -CRC==0? value: %i. ", templateValue);
salco 15:91b3c572d9df 494 // (templateValue==0)? result=true:result=false;
salco 15:91b3c572d9df 495 //}
salco 15:91b3c572d9df 496 //}
salco 15:91b3c572d9df 497 //debug(DEBUG_SEND, "\n\r -Fin Send Data. ");
salco 15:91b3c572d9df 498 //
salco 15:91b3c572d9df 499
salco 15:91b3c572d9df 500
salco 15:91b3c572d9df 501
salco 12:bf44013497c8 502
salco 13:51bbdc349f20 503 if(result) {
salco 13:51bbdc349f20 504 // Traitement de l'information //
salco 12:bf44013497c8 505 debug(DEBUG_SEND, "\n\r -Debut Traitement de l'information. ");
salco 12:bf44013497c8 506 debug(DEBUG_SEND, "\n\r -Receive: ");
salco 15:91b3c572d9df 507 for (unsigned i=0; i<formatedDataReceive.length(); ++i)debug(DEBUG_SEND|DEBUG_COMPACT, "%02X,",formatedDataReceive.at(i));
salco 12:bf44013497c8 508
salco 10:7e6aeaebe1a2 509 // flag //
salco 10:7e6aeaebe1a2 510 flag->clear();
salco 15:91b3c572d9df 511 //twoBytesArray=formatedDataReceive[2];
salco 15:91b3c572d9df 512 //!!!!! wtf is that cest claire que sa pete la com
salco 13:51bbdc349f20 513 string::iterator it=formatedDataReceive.begin()+3;
salco 13:51bbdc349f20 514
salco 15:91b3c572d9df 515 switch(settingSlave>>6) {
salco 10:7e6aeaebe1a2 516 case 1:
salco 10:7e6aeaebe1a2 517 flag->append(1,*it);
salco 10:7e6aeaebe1a2 518 it++;
salco 10:7e6aeaebe1a2 519 break;
salco 7:dcfd81d7f93f 520
salco 10:7e6aeaebe1a2 521 case 2:
salco 10:7e6aeaebe1a2 522 flag->append(1,*it);
salco 10:7e6aeaebe1a2 523 it++;
salco 10:7e6aeaebe1a2 524 flag->append(1,*it);
salco 10:7e6aeaebe1a2 525 it++;
salco 10:7e6aeaebe1a2 526 break;
salco 7:dcfd81d7f93f 527
salco 10:7e6aeaebe1a2 528 case 3:
salco 10:7e6aeaebe1a2 529 flag->append(1,*it);
salco 10:7e6aeaebe1a2 530 it++;
salco 10:7e6aeaebe1a2 531 flag->append(1,*it);
salco 10:7e6aeaebe1a2 532 it++;
salco 10:7e6aeaebe1a2 533 flag->append(1,*it);
salco 10:7e6aeaebe1a2 534 it++;
salco 10:7e6aeaebe1a2 535 break;
salco 7:dcfd81d7f93f 536
salco 10:7e6aeaebe1a2 537 /*default:
salco 10:7e6aeaebe1a2 538 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 539 break;*/
salco 10:7e6aeaebe1a2 540 }
salco 12:bf44013497c8 541
salco 10:7e6aeaebe1a2 542 // ACK/NAK
salco 10:7e6aeaebe1a2 543 //
salco 7:dcfd81d7f93f 544
salco 10:7e6aeaebe1a2 545 // NDB //
salco 10:7e6aeaebe1a2 546 data->clear();
salco 15:91b3c572d9df 547 //!!!!! same shit faut rebild la chose en bas
salco 15:91b3c572d9df 548 switch(settingSlave&0xFF) {
salco 10:7e6aeaebe1a2 549 case 1:
salco 10:7e6aeaebe1a2 550 data->append(1,*it);
salco 10:7e6aeaebe1a2 551 it++;
salco 10:7e6aeaebe1a2 552 break;
salco 7:dcfd81d7f93f 553
salco 10:7e6aeaebe1a2 554 case 2:
salco 10:7e6aeaebe1a2 555 data->append(1,*it);
salco 10:7e6aeaebe1a2 556 it++;
salco 10:7e6aeaebe1a2 557 data->append(1,*it);
salco 10:7e6aeaebe1a2 558 it++;
salco 10:7e6aeaebe1a2 559 break;
salco 10:7e6aeaebe1a2 560
salco 10:7e6aeaebe1a2 561 case 3:
salco 10:7e6aeaebe1a2 562 data->append(1,*it);
salco 10:7e6aeaebe1a2 563 it++;
salco 10:7e6aeaebe1a2 564 data->append(1,*it);
salco 10:7e6aeaebe1a2 565 it++;
salco 10:7e6aeaebe1a2 566 data->append(1,*it);
salco 10:7e6aeaebe1a2 567 it++;
salco 10:7e6aeaebe1a2 568 break;
salco 10:7e6aeaebe1a2 569
salco 10:7e6aeaebe1a2 570 /*default:
salco 10:7e6aeaebe1a2 571
salco 10:7e6aeaebe1a2 572 break;*/
salco 7:dcfd81d7f93f 573 }
salco 13:51bbdc349f20 574 }
salco 12:bf44013497c8 575
salco 12:bf44013497c8 576 debug(DEBUG_SEND, "\n\r -Fin Traitement de l'information. ");
salco 15:91b3c572d9df 577 debug(DEBUG_SEND|DEBUG_COMPACT, "\n\r -Fin du send. ");
salco 7:dcfd81d7f93f 578 return result;
salco 7:dcfd81d7f93f 579 }