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 19:14:31 2015 +0000
Revision:
9:7295385f02b2
Parent:
7:dcfd81d7f93f
Child:
10:7e6aeaebe1a2
Grosse renovation, jai enlever la liste chainer faire home made et j'ai utiliser std::list qui est deja cr?er et va me simplifier un peut les chose. J'ai ajuster les fonction de MemRegistre pour le rende compatible.

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 7:dcfd81d7f93f 28 DigitalOut pinDemuxA(m_demuxA);
salco 7:dcfd81d7f93f 29 DigitalOut pinDemuxB(m_demuxB);
salco 7:dcfd81d7f93f 30 DigitalOut pinDemuxC(m_demuxC);
salco 7:dcfd81d7f93f 31 DigitalOut pinDemuxD(m_demuxD);
salco 7:dcfd81d7f93f 32 DigitalOut pinDemuxEnable(m_demuxEnable);
salco 7:dcfd81d7f93f 33
salco 7:dcfd81d7f93f 34 pinDemuxEnable=0;
salco 7:dcfd81d7f93f 35
salco 7:dcfd81d7f93f 36 if(m_demuxPos & 1) pinDemuxA=1; //0b0001
salco 7:dcfd81d7f93f 37 else pinDemuxA=0;
salco 7:dcfd81d7f93f 38 if(m_demuxPos & 2) pinDemuxB=1; //0b0010
salco 7:dcfd81d7f93f 39 else pinDemuxB=0;
salco 7:dcfd81d7f93f 40 if(m_demuxPos & 4) pinDemuxC=1; //0b0100
salco 7:dcfd81d7f93f 41 else pinDemuxC=0;
salco 7:dcfd81d7f93f 42 if(m_demuxPos & 8) pinDemuxD=1; //0b1000
salco 7:dcfd81d7f93f 43 else pinDemuxD=0;
salco 7:dcfd81d7f93f 44
salco 7:dcfd81d7f93f 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 result = true;
salco 7:dcfd81d7f93f 63 }
salco 7:dcfd81d7f93f 64 return result;
salco 7:dcfd81d7f93f 65 }
salco 9:7295385f02b2 66 char ComSpi::back_demux(void)
salco 7:dcfd81d7f93f 67 {
salco 9:7295385f02b2 68 char result = (char)-1;
salco 9:7295385f02b2 69
salco 7:dcfd81d7f93f 70 if(demuxIsUse) {
salco 7:dcfd81d7f93f 71 (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
salco 7:dcfd81d7f93f 72 change_demux();
salco 9:7295385f02b2 73
salco 7:dcfd81d7f93f 74 result = true;
salco 7:dcfd81d7f93f 75 }
salco 7:dcfd81d7f93f 76 return result;
salco 7:dcfd81d7f93f 77 }
salco 7:dcfd81d7f93f 78 bool ComSpi::send(char portID, char adresseModule,char *flag,char *data)
salco 7:dcfd81d7f93f 79 {
salco 7:dcfd81d7f93f 80 bool result=false;
salco 7:dcfd81d7f93f 81 int valueSend = SYNC;
salco 7:dcfd81d7f93f 82 int valueReceive=0;
salco 7:dcfd81d7f93f 83 //int CRC
salco 9:7295385f02b2 84
salco 9:7295385f02b2 85 if(portID =! -1){
salco 9:7295385f02b2 86 m_demuxPos = portID;
salco 9:7295385f02b2 87 change_demux();
salco 9:7295385f02b2 88 }
salco 7:dcfd81d7f93f 89
salco 7:dcfd81d7f93f 90 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 91 if(valueReceive == valueSend) {
salco 7:dcfd81d7f93f 92 valueSend=(adresseModule<<8);
salco 7:dcfd81d7f93f 93
salco 7:dcfd81d7f93f 94 if(*flag != 0) valueSend+= (PFB1 << 6);
salco 7:dcfd81d7f93f 95 else valueSend+= (PFB0 << 6);
salco 7:dcfd81d7f93f 96
salco 7:dcfd81d7f93f 97 valueSend+= (NOACK << 4);
salco 7:dcfd81d7f93f 98
salco 7:dcfd81d7f93f 99 if(*data != 0) valueSend+= (NDB01 );
salco 7:dcfd81d7f93f 100 else valueSend+= (NDB00 );
salco 7:dcfd81d7f93f 101
salco 7:dcfd81d7f93f 102 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 103 if(valueReceive>>8 == adresseModule) {
salco 7:dcfd81d7f93f 104 //fini la sycronisation et la on envoie les data
salco 7:dcfd81d7f93f 105
salco 7:dcfd81d7f93f 106
salco 7:dcfd81d7f93f 107 if(*flag != 0) valueSend = *flag;
salco 7:dcfd81d7f93f 108 else valueSend=0;
salco 7:dcfd81d7f93f 109
salco 7:dcfd81d7f93f 110 if(*data != 0) valueSend= (valueSend<<4)+(*data);
salco 7:dcfd81d7f93f 111
salco 7:dcfd81d7f93f 112 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 113 if((*flag != 0) && (*data != 0)) *flag = valueReceive>>8;
salco 7:dcfd81d7f93f 114 else if(*flag != 0) *flag = valueReceive;
salco 7:dcfd81d7f93f 115 else if(*data != 0) *data = valueReceive;
salco 7:dcfd81d7f93f 116
salco 7:dcfd81d7f93f 117 //Create CRC
salco 7:dcfd81d7f93f 118 //Send CRC
salco 7:dcfd81d7f93f 119 //Compare
salco 7:dcfd81d7f93f 120 result=true;
salco 7:dcfd81d7f93f 121 }
salco 7:dcfd81d7f93f 122 }
salco 7:dcfd81d7f93f 123 return result;
salco 7:dcfd81d7f93f 124 }