![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Projet Drone de surveillance du labo TRSE (INGESUP)
Dependencies: mbed PID ADXL345 Camera_LS_Y201 ITG3200 RangeFinder mbos xbee_lib Motor Servo
Module_Communication/Module_Communication.cpp@31:ec7d635636bf, 2013-04-17 (annotated)
- Committer:
- IngesupMbed01
- Date:
- Wed Apr 17 15:52:51 2013 +0000
- Revision:
- 31:ec7d635636bf
- Parent:
- 30:119e060b45b3
- Child:
- 34:4466839f5bb7
Module communication modifi? et variables globales d?plac?es.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
IngesupMbed01 | 18:0bfd3ad421e5 | 1 | /* Copyright (c) 2012 - 2013 AUTHEUR |
IngesupMbed01 | 18:0bfd3ad421e5 | 2 | * |
IngesupMbed01 | 18:0bfd3ad421e5 | 3 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED |
IngesupMbed01 | 18:0bfd3ad421e5 | 4 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
IngesupMbed01 | 18:0bfd3ad421e5 | 5 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
IngesupMbed01 | 18:0bfd3ad421e5 | 6 | * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
IngesupMbed01 | 18:0bfd3ad421e5 | 7 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
IngesupMbed01 | 18:0bfd3ad421e5 | 8 | * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
IngesupMbed01 | 18:0bfd3ad421e5 | 9 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
IngesupMbed01 | 18:0bfd3ad421e5 | 10 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
IngesupMbed01 | 18:0bfd3ad421e5 | 11 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
IngesupMbed01 | 18:0bfd3ad421e5 | 12 | */ |
IngesupMbed01 | 18:0bfd3ad421e5 | 13 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 14 | /* |
IngesupMbed01 | 18:0bfd3ad421e5 | 15 | * Description : Cette classe contient les fonctionnalités du module communication. |
IngesupMbed01 | 18:0bfd3ad421e5 | 16 | Le module communication gère la communication entre les modules présents sur le drône et le PC. |
IngesupMbed01 | 18:0bfd3ad421e5 | 17 | * Input |
IngesupMbed01 | 18:0bfd3ad421e5 | 18 | * Output |
IngesupMbed01 | 18:0bfd3ad421e5 | 19 | */ |
IngesupMbed01 | 18:0bfd3ad421e5 | 20 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 21 | #include "Module_Communication.h" |
IngesupMbed01 | 18:0bfd3ad421e5 | 22 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 23 | // Pointeur sur la classe systeme d'exploitation instancié dans le main |
IngesupMbed01 | 18:0bfd3ad421e5 | 24 | extern mbos *os; |
IngesupMbed01 | 31:ec7d635636bf | 25 | extern unsigned int COMMANDE_TRAJECTOIRE; |
IngesupMbed01 | 31:ec7d635636bf | 26 | extern bool STOP; |
IngesupMbed01 | 31:ec7d635636bf | 27 | extern bool EN_MOUVEMENT; |
IngesupMbed01 | 31:ec7d635636bf | 28 | extern position COORDONNEE_DRONE; |
IngesupMbed01 | 18:0bfd3ad421e5 | 29 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 30 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 31 | /* CONSRTRUCTEUR(S) */ |
IngesupMbed01 | 18:0bfd3ad421e5 | 32 | C_ModuleCommunication::C_ModuleCommunication() |
IngesupMbed01 | 18:0bfd3ad421e5 | 33 | { |
IngesupMbed01 | 18:0bfd3ad421e5 | 34 | m_xbee = new xbee(p9, p10, p11); |
IngesupMbed01 | 24:3462a304f9a0 | 35 | m_trameRxBuffer = C_FrameBuffer(); |
IngesupMbed01 | 24:3462a304f9a0 | 36 | m_trameTxBuffer = C_FrameBuffer(); |
IngesupMbed01 | 30:119e060b45b3 | 37 | m_charRxBuffer = new char[17]; |
IngesupMbed01 | 30:119e060b45b3 | 38 | m_charTxBuffer = new char[17]; |
IngesupMbed01 | 18:0bfd3ad421e5 | 39 | } |
IngesupMbed01 | 18:0bfd3ad421e5 | 40 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 41 | /* DESTRUCTEUR */ |
IngesupMbed01 | 18:0bfd3ad421e5 | 42 | C_ModuleCommunication::~C_ModuleCommunication() |
IngesupMbed01 | 18:0bfd3ad421e5 | 43 | { |
IngesupMbed01 | 24:3462a304f9a0 | 44 | delete [] m_charRxBuffer; |
IngesupMbed01 | 24:3462a304f9a0 | 45 | delete [] m_charTxBuffer; |
IngesupMbed01 | 24:3462a304f9a0 | 46 | delete m_xbee; |
IngesupMbed01 | 18:0bfd3ad421e5 | 47 | } |
IngesupMbed01 | 18:0bfd3ad421e5 | 48 | |
IngesupMbed01 | 18:0bfd3ad421e5 | 49 | /* Point d'entrée de la tache Module Video */ |
IngesupMbed01 | 24:3462a304f9a0 | 50 | void C_ModuleCommunication::moduleCommunicationTask(void) |
IngesupMbed01 | 18:0bfd3ad421e5 | 51 | { |
IngesupMbed01 | 18:0bfd3ad421e5 | 52 | while(1){ |
IngesupMbed01 | 18:0bfd3ad421e5 | 53 | // Code |
IngesupMbed01 | 18:0bfd3ad421e5 | 54 | } |
IngesupMbed01 | 18:0bfd3ad421e5 | 55 | } |
IngesupMbed01 | 18:0bfd3ad421e5 | 56 | |
IngesupMbed01 | 24:3462a304f9a0 | 57 | void C_ModuleCommunication::envoiDeTrame(void) |
IngesupMbed01 | 24:3462a304f9a0 | 58 | { |
IngesupMbed01 | 30:119e060b45b3 | 59 | frame newFrame = m_trameTxBuffer.frameBuffer(); |
IngesupMbed01 | 30:119e060b45b3 | 60 | m_charTxBuffer[0] = 0x02; |
IngesupMbed01 | 30:119e060b45b3 | 61 | m_charTxBuffer[1] = newFrame.systemIdentifier; |
IngesupMbed01 | 30:119e060b45b3 | 62 | m_charTxBuffer[2] = newFrame.moduleIdentifier; |
IngesupMbed01 | 30:119e060b45b3 | 63 | m_charTxBuffer[3] = newFrame.messageIdentifier; |
IngesupMbed01 | 30:119e060b45b3 | 64 | m_charTxBuffer[16] = 0x03; |
IngesupMbed01 | 24:3462a304f9a0 | 65 | |
IngesupMbed01 | 30:119e060b45b3 | 66 | for(int i = 0; i < 12; i++) { |
IngesupMbed01 | 30:119e060b45b3 | 67 | m_charTxBuffer[i+4] = newFrame.data[i]; |
IngesupMbed01 | 24:3462a304f9a0 | 68 | } |
IngesupMbed01 | 24:3462a304f9a0 | 69 | |
IngesupMbed01 | 24:3462a304f9a0 | 70 | m_xbee->SendData(m_charTxBuffer); |
IngesupMbed01 | 24:3462a304f9a0 | 71 | } |
IngesupMbed01 | 24:3462a304f9a0 | 72 | |
IngesupMbed01 | 24:3462a304f9a0 | 73 | void C_ModuleCommunication::receptionDeTrame(void) |
IngesupMbed01 | 24:3462a304f9a0 | 74 | { |
IngesupMbed01 | 29:a0800d3da787 | 75 | Serial pc(USBTX, USBRX); |
IngesupMbed01 | 24:3462a304f9a0 | 76 | m_xbee->RecieveData(m_charRxBuffer, 0); |
IngesupMbed01 | 29:a0800d3da787 | 77 | pc.printf("You said:%s \n",m_charRxBuffer); |
IngesupMbed01 | 30:119e060b45b3 | 78 | |
IngesupMbed01 | 30:119e060b45b3 | 79 | |
IngesupMbed01 | 24:3462a304f9a0 | 80 | frame newFrame; |
IngesupMbed01 | 30:119e060b45b3 | 81 | newFrame.systemIdentifier = m_charRxBuffer[1]; |
IngesupMbed01 | 30:119e060b45b3 | 82 | newFrame.moduleIdentifier = m_charRxBuffer[2]; |
IngesupMbed01 | 30:119e060b45b3 | 83 | newFrame.messageIdentifier = m_charRxBuffer[3]; |
IngesupMbed01 | 24:3462a304f9a0 | 84 | |
IngesupMbed01 | 30:119e060b45b3 | 85 | for(int i = 0; i < 12; i++) { |
IngesupMbed01 | 30:119e060b45b3 | 86 | newFrame.data[i] = m_charRxBuffer[i+4]; |
IngesupMbed01 | 24:3462a304f9a0 | 87 | } |
IngesupMbed01 | 24:3462a304f9a0 | 88 | |
IngesupMbed01 | 30:119e060b45b3 | 89 | m_trameRxBuffer.frameBuffer(newFrame); |
IngesupMbed01 | 28:8b5ccd2f837e | 90 | } |
IngesupMbed01 | 28:8b5ccd2f837e | 91 | |
IngesupMbed01 | 28:8b5ccd2f837e | 92 | void C_ModuleCommunication::traitementTrame(void) |
IngesupMbed01 | 28:8b5ccd2f837e | 93 | { |
IngesupMbed01 | 28:8b5ccd2f837e | 94 | if(m_trameRxBuffer.numberMessage() <= 0) return; |
IngesupMbed01 | 28:8b5ccd2f837e | 95 | |
IngesupMbed01 | 28:8b5ccd2f837e | 96 | frame newFrame = m_trameRxBuffer.frameBuffer(); |
IngesupMbed01 | 28:8b5ccd2f837e | 97 | |
IngesupMbed01 | 30:119e060b45b3 | 98 | switch(newFrame.moduleIdentifier) { |
IngesupMbed01 | 31:ec7d635636bf | 99 | case 0x31 : consigneModuleTrajectoire(newFrame); |
IngesupMbed01 | 28:8b5ccd2f837e | 100 | break; |
IngesupMbed01 | 31:ec7d635636bf | 101 | case 0x32 : consigneModuleVideo(newFrame); |
IngesupMbed01 | 28:8b5ccd2f837e | 102 | break; |
IngesupMbed01 | 28:8b5ccd2f837e | 103 | |
IngesupMbed01 | 31:ec7d635636bf | 104 | default : creerTrameSpeciale(0x99); |
IngesupMbed01 | 31:ec7d635636bf | 105 | break; |
IngesupMbed01 | 31:ec7d635636bf | 106 | |
IngesupMbed01 | 28:8b5ccd2f837e | 107 | } |
IngesupMbed01 | 31:ec7d635636bf | 108 | } |
IngesupMbed01 | 31:ec7d635636bf | 109 | |
IngesupMbed01 | 31:ec7d635636bf | 110 | void C_ModuleCommunication::consigneModuleTrajectoire(frame newFrame) |
IngesupMbed01 | 31:ec7d635636bf | 111 | { |
IngesupMbed01 | 31:ec7d635636bf | 112 | switch(newFrame.messageIdentifier) { |
IngesupMbed01 | 31:ec7d635636bf | 113 | case 0x11 : COMMANDE_TRAJECTOIRE = newFrame.data[0]; |
IngesupMbed01 | 31:ec7d635636bf | 114 | EN_MOUVEMENT = true; |
IngesupMbed01 | 31:ec7d635636bf | 115 | while(EN_MOUVEMENT != false); |
IngesupMbed01 | 31:ec7d635636bf | 116 | creerTrameModuleTrajectoire(0x12); |
IngesupMbed01 | 31:ec7d635636bf | 117 | break; |
IngesupMbed01 | 31:ec7d635636bf | 118 | case 0x13 : STOP = true; |
IngesupMbed01 | 31:ec7d635636bf | 119 | EN_MOUVEMENT = true; |
IngesupMbed01 | 31:ec7d635636bf | 120 | while(EN_MOUVEMENT != false); |
IngesupMbed01 | 31:ec7d635636bf | 121 | creerTrameModuleTrajectoire(0x14); |
IngesupMbed01 | 31:ec7d635636bf | 122 | break; |
IngesupMbed01 | 31:ec7d635636bf | 123 | case 0x15 : creerTrameModuleTrajectoire(0x16); |
IngesupMbed01 | 31:ec7d635636bf | 124 | break; |
IngesupMbed01 | 31:ec7d635636bf | 125 | |
IngesupMbed01 | 31:ec7d635636bf | 126 | default : creerTrameSpeciale(0x99); |
IngesupMbed01 | 31:ec7d635636bf | 127 | break; |
IngesupMbed01 | 31:ec7d635636bf | 128 | } |
IngesupMbed01 | 31:ec7d635636bf | 129 | } |
IngesupMbed01 | 31:ec7d635636bf | 130 | |
IngesupMbed01 | 31:ec7d635636bf | 131 | void C_ModuleCommunication::creerTrameModuleTrajectoire(unsigned char idMessage) |
IngesupMbed01 | 31:ec7d635636bf | 132 | { |
IngesupMbed01 | 31:ec7d635636bf | 133 | frame newFrame; |
IngesupMbed01 | 31:ec7d635636bf | 134 | newFrame.moduleIdentifier = 0x31; |
IngesupMbed01 | 31:ec7d635636bf | 135 | |
IngesupMbed01 | 31:ec7d635636bf | 136 | switch(idMessage) { |
IngesupMbed01 | 31:ec7d635636bf | 137 | case 0x12 : newFrame.messageIdentifier = 0x12; |
IngesupMbed01 | 31:ec7d635636bf | 138 | break; |
IngesupMbed01 | 31:ec7d635636bf | 139 | case 0x14 : newFrame.messageIdentifier = 0x14; |
IngesupMbed01 | 31:ec7d635636bf | 140 | break; |
IngesupMbed01 | 31:ec7d635636bf | 141 | case 0x16 : newFrame.messageIdentifier = 0x16; |
IngesupMbed01 | 31:ec7d635636bf | 142 | union conversionCharFloat conv1; |
IngesupMbed01 | 31:ec7d635636bf | 143 | conv1.f = COORDONNEE_DRONE.x; |
IngesupMbed01 | 31:ec7d635636bf | 144 | newFrame.data[0] = conv1.ch[0]; |
IngesupMbed01 | 31:ec7d635636bf | 145 | newFrame.data[1] = conv1.ch[1]; |
IngesupMbed01 | 31:ec7d635636bf | 146 | newFrame.data[2] = conv1.ch[2]; |
IngesupMbed01 | 31:ec7d635636bf | 147 | newFrame.data[3] = conv1.ch[3]; |
IngesupMbed01 | 31:ec7d635636bf | 148 | conv1.f = 0; |
IngesupMbed01 | 31:ec7d635636bf | 149 | conv1.f = COORDONNEE_DRONE.y; |
IngesupMbed01 | 31:ec7d635636bf | 150 | newFrame.data[4] = conv1.ch[0]; |
IngesupMbed01 | 31:ec7d635636bf | 151 | newFrame.data[5] = conv1.ch[1]; |
IngesupMbed01 | 31:ec7d635636bf | 152 | newFrame.data[6] = conv1.ch[2]; |
IngesupMbed01 | 31:ec7d635636bf | 153 | newFrame.data[7] = conv1.ch[3]; |
IngesupMbed01 | 31:ec7d635636bf | 154 | conv1.f = 0; |
IngesupMbed01 | 31:ec7d635636bf | 155 | conv1.f = COORDONNEE_DRONE.z; |
IngesupMbed01 | 31:ec7d635636bf | 156 | newFrame.data[8] = conv1.ch[0]; |
IngesupMbed01 | 31:ec7d635636bf | 157 | newFrame.data[9] = conv1.ch[1]; |
IngesupMbed01 | 31:ec7d635636bf | 158 | newFrame.data[10] = conv1.ch[2]; |
IngesupMbed01 | 31:ec7d635636bf | 159 | newFrame.data[11] = conv1.ch[3]; |
IngesupMbed01 | 31:ec7d635636bf | 160 | break; |
IngesupMbed01 | 31:ec7d635636bf | 161 | } |
IngesupMbed01 | 31:ec7d635636bf | 162 | |
IngesupMbed01 | 31:ec7d635636bf | 163 | m_trameTxBuffer.frameBuffer(newFrame); |
IngesupMbed01 | 31:ec7d635636bf | 164 | } |
IngesupMbed01 | 31:ec7d635636bf | 165 | |
IngesupMbed01 | 31:ec7d635636bf | 166 | void C_ModuleCommunication::creerTrameSpeciale(unsigned char idMessage) { |
IngesupMbed01 | 31:ec7d635636bf | 167 | frame newFrame; |
IngesupMbed01 | 31:ec7d635636bf | 168 | |
IngesupMbed01 | 31:ec7d635636bf | 169 | switch(idMessage) { |
IngesupMbed01 | 31:ec7d635636bf | 170 | case 0x00 : newFrame.moduleIdentifier = 0x00; |
IngesupMbed01 | 31:ec7d635636bf | 171 | newFrame.messageIdentifier = 0x00; |
IngesupMbed01 | 31:ec7d635636bf | 172 | break; |
IngesupMbed01 | 31:ec7d635636bf | 173 | case 0x99 : newFrame.moduleIdentifier = 0x99; |
IngesupMbed01 | 31:ec7d635636bf | 174 | newFrame.messageIdentifier = 0x99; |
IngesupMbed01 | 31:ec7d635636bf | 175 | break; |
IngesupMbed01 | 31:ec7d635636bf | 176 | } |
IngesupMbed01 | 31:ec7d635636bf | 177 | m_trameTxBuffer.frameBuffer(newFrame); |
IngesupMbed01 | 31:ec7d635636bf | 178 | } |
IngesupMbed01 | 31:ec7d635636bf | 179 | |
IngesupMbed01 | 31:ec7d635636bf | 180 | void C_ModuleCommunication::consigneModuleVideo(frame newFrame) |
IngesupMbed01 | 31:ec7d635636bf | 181 | { |
IngesupMbed01 | 31:ec7d635636bf | 182 | } |