Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@1:00cee5df0f76, 2022-07-15 (annotated)
- Committer:
- paologiorgio
- Date:
- Fri Jul 15 14:00:59 2022 +0000
- Revision:
- 1:00cee5df0f76
- Parent:
- 0:8f7c961a5966
- Child:
- 2:155d07b145c6
Dora-150722
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| paologiorgio | 1:00cee5df0f76 | 1 | |
| paologiorgio | 1:00cee5df0f76 | 2 | // in data 13/07/2022 abbiamo testato spacecraft-mima avendo come spacecraft |
| paologiorgio | 1:00cee5df0f76 | 3 | // la seriale che parla su STM, mentre mima l'usb del pc |
| paologiorgio | 1:00cee5df0f76 | 4 | |
| paologiorgio | 0:8f7c961a5966 | 5 | // Librerie |
| paologiorgio | 0:8f7c961a5966 | 6 | #include "mbed.h" |
| paologiorgio | 0:8f7c961a5966 | 7 | #include <math.h> |
| paologiorgio | 0:8f7c961a5966 | 8 | #include <string.h> |
| paologiorgio | 0:8f7c961a5966 | 9 | #include <stdlib.h> |
| paologiorgio | 1:00cee5df0f76 | 10 | #include <stdbool.h> |
| paologiorgio | 0:8f7c961a5966 | 11 | |
| paologiorgio | 0:8f7c961a5966 | 12 | // Macros |
| paologiorgio | 1:00cee5df0f76 | 13 | #define PACKETDIM 15 // temperature |
| paologiorgio | 1:00cee5df0f76 | 14 | #define word 1 |
| paologiorgio | 1:00cee5df0f76 | 15 | #define packet 2 // 2 bytes |
| paologiorgio | 1:00cee5df0f76 | 16 | #define hsk_buf 113 |
| paologiorgio | 1:00cee5df0f76 | 17 | #define hsk_rx 114 // 114 bytes - 57 telemetry words(housekeeping) |
| paologiorgio | 1:00cee5df0f76 | 18 | #define hsk_sd_buf 11211 |
| paologiorgio | 1:00cee5df0f76 | 19 | #define hsk_sd 11212 // 11212 bytes - 5606 interferogram data words |
| paologiorgio | 1:00cee5df0f76 | 20 | #define channel_size 10 // temeprature channel from sen30202 |
| paologiorgio | 0:8f7c961a5966 | 21 | |
| paologiorgio | 0:8f7c961a5966 | 22 | // Serial e periferiche |
| paologiorgio | 1:00cee5df0f76 | 23 | Serial spacecraft(USBTX, USBRX); // switchare questo e le print con mima |
| paologiorgio | 0:8f7c961a5966 | 24 | Serial mima(PC_4, PC_5); |
| paologiorgio | 1:00cee5df0f76 | 25 | Serial max31865(PA_0, PA_1); |
| paologiorgio | 1:00cee5df0f76 | 26 | // L16 Actuonix: |
| paologiorgio | 1:00cee5df0f76 | 27 | PwmOut actuonix (PB_3); |
| paologiorgio | 1:00cee5df0f76 | 28 | float offset; |
| paologiorgio | 1:00cee5df0f76 | 29 | // Relay: configurazione pull-up |
| paologiorgio | 0:8f7c961a5966 | 30 | DigitalOut Relay5V (PA_7); |
| paologiorgio | 0:8f7c961a5966 | 31 | DigitalOut Relay12V (PB_4); |
| paologiorgio | 0:8f7c961a5966 | 32 | DigitalOut Relay24V (PB_5); |
| paologiorgio | 0:8f7c961a5966 | 33 | DigitalOut Relay15_15_5V (PB_10); |
| paologiorgio | 1:00cee5df0f76 | 34 | |
| paologiorgio | 1:00cee5df0f76 | 35 | // Buffer: telecommand |
| paologiorgio | 1:00cee5df0f76 | 36 | volatile int rxTlcPtr; // telecommand receiving buffer |
| paologiorgio | 1:00cee5df0f76 | 37 | int rxTlcDataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 38 | char rx_TLC[word+1]; // buffer |
| paologiorgio | 1:00cee5df0f76 | 39 | char data_TLC[word+1]; // telecommand |
| paologiorgio | 1:00cee5df0f76 | 40 | |
| paologiorgio | 1:00cee5df0f76 | 41 | // Buffer: standard telemetry |
| paologiorgio | 1:00cee5df0f76 | 42 | volatile int rxTlmPtr; |
| paologiorgio | 1:00cee5df0f76 | 43 | int rxTlmDataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 44 | char rx_TLM[word+1]; // buffer |
| paologiorgio | 1:00cee5df0f76 | 45 | char data_TLM[word+1]; // standard telemetry |
| paologiorgio | 1:00cee5df0f76 | 46 | |
| paologiorgio | 1:00cee5df0f76 | 47 | // Buffer: TLMODE telemetry option 1 |
| paologiorgio | 1:00cee5df0f76 | 48 | volatile int rxTlmOpt1Ptr; |
| paologiorgio | 1:00cee5df0f76 | 49 | int rxTlmOpt1DataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 50 | char rx_TLMOpt1[hsk_buf+1]; |
| paologiorgio | 1:00cee5df0f76 | 51 | char data_TLMOpt1[hsk_buf+1]; |
| paologiorgio | 1:00cee5df0f76 | 52 | |
| paologiorgio | 1:00cee5df0f76 | 53 | // Buffer: TLMODE telemetry option 1 |
| paologiorgio | 1:00cee5df0f76 | 54 | volatile int rxTlmOpt2Ptr; |
| paologiorgio | 1:00cee5df0f76 | 55 | int rxTlmOpt2DataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 56 | char rx_TLMOpt2[hsk_sd_buf+1]; |
| paologiorgio | 1:00cee5df0f76 | 57 | char data_TLMOpt2[hsk_sd_buf+1]; |
| paologiorgio | 0:8f7c961a5966 | 58 | |
| paologiorgio | 0:8f7c961a5966 | 59 | // Timer |
| paologiorgio | 1:00cee5df0f76 | 60 | Timer timer; // telecommand |
| paologiorgio | 1:00cee5df0f76 | 61 | Timer rx; // rx window |
| paologiorgio | 1:00cee5df0f76 | 62 | float rxWindow = 300 /* seconds */, rxTimeStart, rxTimeStop, rxTimeRead; |
| paologiorgio | 1:00cee5df0f76 | 63 | float TIMEOUT = 10 /* seconds */, tTimeStart, tTimeStop, tTimeRead; |
| paologiorgio | 0:8f7c961a5966 | 64 | |
| paologiorgio | 1:00cee5df0f76 | 65 | // TLMODE |
| paologiorgio | 1:00cee5df0f76 | 66 | volatile int tlmode_option_1, tlmode_option_2, tlmode_tlm; |
| paologiorgio | 1:00cee5df0f76 | 67 | volatile bool TlcSend; |
| paologiorgio | 0:8f7c961a5966 | 68 | |
| paologiorgio | 1:00cee5df0f76 | 69 | // SC-MIMA communication: TX/RX |
| paologiorgio | 0:8f7c961a5966 | 70 | void RxTelecommand(); |
| paologiorgio | 0:8f7c961a5966 | 71 | void TxTelecommand(); |
| paologiorgio | 0:8f7c961a5966 | 72 | void RxTelemetry(); |
| paologiorgio | 0:8f7c961a5966 | 73 | void TxTelemetry(); |
| paologiorgio | 1:00cee5df0f76 | 74 | // System utility |
| paologiorgio | 0:8f7c961a5966 | 75 | void clearBuffer(char *arr, int arrLen); |
| paologiorgio | 1:00cee5df0f76 | 76 | |
| paologiorgio | 1:00cee5df0f76 | 77 | // Temperature settings |
| paologiorgio | 1:00cee5df0f76 | 78 | char tempCH1[channel_size]; |
| paologiorgio | 1:00cee5df0f76 | 79 | char tempCH2[channel_size]; |
| paologiorgio | 1:00cee5df0f76 | 80 | volatile int j; // first channel index |
| paologiorgio | 1:00cee5df0f76 | 81 | volatile int t; // second channel index |
| paologiorgio | 1:00cee5df0f76 | 82 | volatile char caRxPacket[PACKETDIM]; // temperature buffer |
| paologiorgio | 1:00cee5df0f76 | 83 | volatile char nRxCharCount; // temperature char counter |
| paologiorgio | 1:00cee5df0f76 | 84 | |
| paologiorgio | 1:00cee5df0f76 | 85 | // Routines dedicate alla ricezione di dati della temperatura (Pt100) |
| paologiorgio | 1:00cee5df0f76 | 86 | void SerialeRxInterrupt(void) |
| paologiorgio | 1:00cee5df0f76 | 87 | { |
| paologiorgio | 1:00cee5df0f76 | 88 | char cReadChar; |
| paologiorgio | 1:00cee5df0f76 | 89 | while((max31865.readable())) |
| paologiorgio | 1:00cee5df0f76 | 90 | { |
| paologiorgio | 1:00cee5df0f76 | 91 | cReadChar = max31865.getc(); |
| paologiorgio | 1:00cee5df0f76 | 92 | nRxCharCount++; |
| paologiorgio | 1:00cee5df0f76 | 93 | caRxPacket[nRxCharCount] = cReadChar; |
| paologiorgio | 1:00cee5df0f76 | 94 | } |
| paologiorgio | 1:00cee5df0f76 | 95 | |
| paologiorgio | 1:00cee5df0f76 | 96 | if (nRxCharCount == PACKETDIM) // if it reaches max -> reset |
| paologiorgio | 1:00cee5df0f76 | 97 | { |
| paologiorgio | 1:00cee5df0f76 | 98 | nRxCharCount = 0; |
| paologiorgio | 1:00cee5df0f76 | 99 | } |
| paologiorgio | 1:00cee5df0f76 | 100 | } |
| paologiorgio | 0:8f7c961a5966 | 101 | |
| paologiorgio | 0:8f7c961a5966 | 102 | // Main |
| paologiorgio | 0:8f7c961a5966 | 103 | int main() |
| paologiorgio | 0:8f7c961a5966 | 104 | { |
| paologiorgio | 0:8f7c961a5966 | 105 | // Baudrate |
| paologiorgio | 0:8f7c961a5966 | 106 | spacecraft.baud(115200); |
| paologiorgio | 1:00cee5df0f76 | 107 | //spacecraft.baud(9600); |
| paologiorgio | 0:8f7c961a5966 | 108 | mima.baud(9600); |
| paologiorgio | 1:00cee5df0f76 | 109 | //mima.baud(115200); |
| paologiorgio | 0:8f7c961a5966 | 110 | max31865.baud(115200); |
| paologiorgio | 0:8f7c961a5966 | 111 | |
| paologiorgio | 1:00cee5df0f76 | 112 | // Diagnostica |
| paologiorgio | 1:00cee5df0f76 | 113 | spacecraft.printf(" Avvio Spacecraft... \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 114 | //mima.printf(" Avvio MIMA... \n\r"); |
| paologiorgio | 0:8f7c961a5966 | 115 | |
| paologiorgio | 1:00cee5df0f76 | 116 | // Setup per temperatura |
| paologiorgio | 1:00cee5df0f76 | 117 | int nIndex; |
| paologiorgio | 1:00cee5df0f76 | 118 | nRxCharCount = 0; |
| paologiorgio | 1:00cee5df0f76 | 119 | for(nIndex = 0; nIndex < PACKETDIM; nIndex++) |
| paologiorgio | 0:8f7c961a5966 | 120 | { |
| paologiorgio | 1:00cee5df0f76 | 121 | caRxPacket[nIndex] = 0; |
| paologiorgio | 1:00cee5df0f76 | 122 | } |
| paologiorgio | 1:00cee5df0f76 | 123 | |
| paologiorgio | 1:00cee5df0f76 | 124 | // Setup per Actuonix L16 |
| paologiorgio | 1:00cee5df0f76 | 125 | actuonix.period_us(1000); |
| paologiorgio | 1:00cee5df0f76 | 126 | offset = actuonix.read(); |
| paologiorgio | 1:00cee5df0f76 | 127 | |
| paologiorgio | 1:00cee5df0f76 | 128 | // Setup per Relay: 1 = OFF (1->OFF, 0->ON) |
| paologiorgio | 1:00cee5df0f76 | 129 | Relay5V = 1; |
| paologiorgio | 1:00cee5df0f76 | 130 | Relay12V = 1; |
| paologiorgio | 1:00cee5df0f76 | 131 | Relay15_15_5V = 1; |
| paologiorgio | 1:00cee5df0f76 | 132 | Relay24V = 1; |
| paologiorgio | 1:00cee5df0f76 | 133 | |
| paologiorgio | 1:00cee5df0f76 | 134 | // Bool flags |
| paologiorgio | 1:00cee5df0f76 | 135 | TlcSend = false; |
| paologiorgio | 1:00cee5df0f76 | 136 | |
| paologiorgio | 1:00cee5df0f76 | 137 | // Interrupt routine |
| paologiorgio | 1:00cee5df0f76 | 138 | max31865.attach(&SerialeRxInterrupt, Serial::RxIrq); |
| paologiorgio | 1:00cee5df0f76 | 139 | spacecraft.attach(&RxTelecommand, Serial::RxIrq); |
| paologiorgio | 1:00cee5df0f76 | 140 | mima.attach(&RxTelemetry, Serial::RxIrq); |
| paologiorgio | 1:00cee5df0f76 | 141 | |
| paologiorgio | 1:00cee5df0f76 | 142 | // Main loop |
| paologiorgio | 1:00cee5df0f76 | 143 | while (true) |
| paologiorgio | 1:00cee5df0f76 | 144 | { |
| paologiorgio | 1:00cee5df0f76 | 145 | // Telecommand |
| paologiorgio | 0:8f7c961a5966 | 146 | timer.start(); |
| paologiorgio | 1:00cee5df0f76 | 147 | tTimeStart = timer.read(); // in secondi |
| paologiorgio | 0:8f7c961a5966 | 148 | tTimeRead = tTimeStart; |
| paologiorgio | 0:8f7c961a5966 | 149 | |
| paologiorgio | 1:00cee5df0f76 | 150 | while ((rxTlcPtr < packet) && ((tTimeRead - tTimeStart) < TIMEOUT)) |
| paologiorgio | 0:8f7c961a5966 | 151 | { |
| paologiorgio | 1:00cee5df0f76 | 152 | tTimeRead = timer.read(); |
| paologiorgio | 1:00cee5df0f76 | 153 | } |
| paologiorgio | 1:00cee5df0f76 | 154 | |
| paologiorgio | 1:00cee5df0f76 | 155 | timer.stop(); |
| paologiorgio | 1:00cee5df0f76 | 156 | |
| paologiorgio | 1:00cee5df0f76 | 157 | if ((rxTlcPtr == packet) && ((tTimeRead - tTimeStart) < TIMEOUT)) |
| paologiorgio | 1:00cee5df0f76 | 158 | { |
| paologiorgio | 1:00cee5df0f76 | 159 | __disable_irq(); // disable interrupts so data doesn't arrive while we are doing this |
| paologiorgio | 1:00cee5df0f76 | 160 | memcpy(data_TLC, rx_TLC, rxTlcPtr); |
| paologiorgio | 1:00cee5df0f76 | 161 | rxTlcDataCounter = rxTlcPtr; |
| paologiorgio | 1:00cee5df0f76 | 162 | rxTlcPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 163 | //__enable_irq(); // re-enable interrupts |
| paologiorgio | 1:00cee5df0f76 | 164 | |
| paologiorgio | 1:00cee5df0f76 | 165 | data_TLC[1] = data_TLC[1] >> 1; // read payload data ignoring the LSB |
| paologiorgio | 1:00cee5df0f76 | 166 | |
| paologiorgio | 1:00cee5df0f76 | 167 | spacecraft.printf("\n\r .... Telecomando ricevuto su DORA! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 168 | |
| paologiorgio | 1:00cee5df0f76 | 169 | for (int i = 0; i < sizeof(data_TLC)/sizeof(char); i++) |
| paologiorgio | 0:8f7c961a5966 | 170 | { |
| paologiorgio | 1:00cee5df0f76 | 171 | spacecraft.printf("> Carattere: %f \n\r", (float)data_TLC[i]); |
| paologiorgio | 1:00cee5df0f76 | 172 | } |
| paologiorgio | 1:00cee5df0f76 | 173 | |
| paologiorgio | 1:00cee5df0f76 | 174 | data_TLC[rxTlcDataCounter] = 0; // add a null just in case the received data didn't have one at the end |
| paologiorgio | 1:00cee5df0f76 | 175 | |
| paologiorgio | 1:00cee5df0f76 | 176 | // hw control: set-point init |
| paologiorgio | 1:00cee5df0f76 | 177 | offset = 0; |
| paologiorgio | 1:00cee5df0f76 | 178 | |
| paologiorgio | 1:00cee5df0f76 | 179 | // RX settings |
| paologiorgio | 1:00cee5df0f76 | 180 | if (((float)data_TLC[0] != 40) || ((float)data_TLC[0] != 41)) |
| paologiorgio | 1:00cee5df0f76 | 181 | { |
| paologiorgio | 1:00cee5df0f76 | 182 | tlmode_option_1 = 1; |
| paologiorgio | 1:00cee5df0f76 | 183 | tlmode_option_2 = 1; |
| paologiorgio | 1:00cee5df0f76 | 184 | tlmode_tlm = 0; |
| paologiorgio | 1:00cee5df0f76 | 185 | } |
| paologiorgio | 1:00cee5df0f76 | 186 | |
| paologiorgio | 1:00cee5df0f76 | 187 | // L16 setpoint |
| paologiorgio | 1:00cee5df0f76 | 188 | if ((float)data_TLC[0] == 0) |
| paologiorgio | 1:00cee5df0f76 | 189 | { |
| paologiorgio | 1:00cee5df0f76 | 190 | offset = (float)data_TLC[1]; |
| paologiorgio | 1:00cee5df0f76 | 191 | offset = offset/100; |
| paologiorgio | 1:00cee5df0f76 | 192 | actuonix.write(offset); |
| paologiorgio | 1:00cee5df0f76 | 193 | } |
| paologiorgio | 1:00cee5df0f76 | 194 | // Temperature request |
| paologiorgio | 1:00cee5df0f76 | 195 | else if (((float)data_TLC[0] == 16) && ((float)data_TLC[1] == 32)) |
| paologiorgio | 1:00cee5df0f76 | 196 | { |
| paologiorgio | 1:00cee5df0f76 | 197 | // Cleaning buffers |
| paologiorgio | 1:00cee5df0f76 | 198 | clearBuffer(tempCH1, sizeof(tempCH1)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 199 | clearBuffer(tempCH2, sizeof(tempCH2)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 200 | |
| paologiorgio | 1:00cee5df0f76 | 201 | // Index setup |
| paologiorgio | 1:00cee5df0f76 | 202 | nRxCharCount = 0; |
| paologiorgio | 1:00cee5df0f76 | 203 | int y = 0, u = 0; |
| paologiorgio | 1:00cee5df0f76 | 204 | t = 0; j = 0; |
| paologiorgio | 1:00cee5df0f76 | 205 | |
| paologiorgio | 1:00cee5df0f76 | 206 | for (int i = 0; i < PACKETDIM; i++) |
| paologiorgio | 0:8f7c961a5966 | 207 | { |
| paologiorgio | 1:00cee5df0f76 | 208 | if (caRxPacket[i] == 'S') |
| paologiorgio | 1:00cee5df0f76 | 209 | { |
| paologiorgio | 1:00cee5df0f76 | 210 | j = i + 1; |
| paologiorgio | 1:00cee5df0f76 | 211 | |
| paologiorgio | 1:00cee5df0f76 | 212 | while (j < PACKETDIM) |
| paologiorgio | 1:00cee5df0f76 | 213 | { |
| paologiorgio | 1:00cee5df0f76 | 214 | if (caRxPacket[j] == ';') |
| paologiorgio | 1:00cee5df0f76 | 215 | { |
| paologiorgio | 1:00cee5df0f76 | 216 | break; |
| paologiorgio | 1:00cee5df0f76 | 217 | } |
| paologiorgio | 1:00cee5df0f76 | 218 | else |
| paologiorgio | 1:00cee5df0f76 | 219 | { |
| paologiorgio | 1:00cee5df0f76 | 220 | tempCH1[y++] = caRxPacket[j]; |
| paologiorgio | 1:00cee5df0f76 | 221 | } |
| paologiorgio | 1:00cee5df0f76 | 222 | |
| paologiorgio | 1:00cee5df0f76 | 223 | j++; |
| paologiorgio | 1:00cee5df0f76 | 224 | } |
| paologiorgio | 1:00cee5df0f76 | 225 | |
| paologiorgio | 1:00cee5df0f76 | 226 | t = j + 1; |
| paologiorgio | 0:8f7c961a5966 | 227 | |
| paologiorgio | 1:00cee5df0f76 | 228 | while (t < PACKETDIM) |
| paologiorgio | 1:00cee5df0f76 | 229 | { |
| paologiorgio | 1:00cee5df0f76 | 230 | if (caRxPacket[t] == 'P') |
| paologiorgio | 1:00cee5df0f76 | 231 | { |
| paologiorgio | 1:00cee5df0f76 | 232 | break; |
| paologiorgio | 1:00cee5df0f76 | 233 | } |
| paologiorgio | 1:00cee5df0f76 | 234 | else |
| paologiorgio | 1:00cee5df0f76 | 235 | { |
| paologiorgio | 1:00cee5df0f76 | 236 | tempCH2[u++] = caRxPacket[t]; |
| paologiorgio | 1:00cee5df0f76 | 237 | } |
| paologiorgio | 1:00cee5df0f76 | 238 | t++; |
| paologiorgio | 1:00cee5df0f76 | 239 | } |
| paologiorgio | 1:00cee5df0f76 | 240 | break; |
| paologiorgio | 1:00cee5df0f76 | 241 | } |
| paologiorgio | 1:00cee5df0f76 | 242 | } |
| paologiorgio | 1:00cee5df0f76 | 243 | // Send |
| paologiorgio | 1:00cee5df0f76 | 244 | spacecraft.puts(tempCH1); |
| paologiorgio | 1:00cee5df0f76 | 245 | spacecraft.puts(";"); |
| paologiorgio | 1:00cee5df0f76 | 246 | spacecraft.puts(tempCH2); |
| paologiorgio | 1:00cee5df0f76 | 247 | } |
| paologiorgio | 1:00cee5df0f76 | 248 | else if (((float)data_TLC[0] == 121) && ((float)data_TLC[1] == 42)) |
| paologiorgio | 1:00cee5df0f76 | 249 | { |
| paologiorgio | 1:00cee5df0f76 | 250 | Relay5V = 1; |
| paologiorgio | 1:00cee5df0f76 | 251 | Relay12V = 1; |
| paologiorgio | 1:00cee5df0f76 | 252 | Relay15_15_5V = 1; |
| paologiorgio | 1:00cee5df0f76 | 253 | Relay24V = 1; |
| paologiorgio | 1:00cee5df0f76 | 254 | } |
| paologiorgio | 1:00cee5df0f76 | 255 | else if (((float)data_TLC[0] == 120) && ((float)data_TLC[1] == 85)) |
| paologiorgio | 1:00cee5df0f76 | 256 | { |
| paologiorgio | 1:00cee5df0f76 | 257 | Relay5V = 0; |
| paologiorgio | 1:00cee5df0f76 | 258 | Relay12V = 0; |
| paologiorgio | 1:00cee5df0f76 | 259 | Relay15_15_5V = 0; |
| paologiorgio | 1:00cee5df0f76 | 260 | Relay24V = 0; |
| paologiorgio | 1:00cee5df0f76 | 261 | } |
| paologiorgio | 1:00cee5df0f76 | 262 | else if (((float)data_TLC[0] == 120)) // Relay |
| paologiorgio | 1:00cee5df0f76 | 263 | { |
| paologiorgio | 1:00cee5df0f76 | 264 | if (((float)data_TLC[1] == 0)) |
| paologiorgio | 0:8f7c961a5966 | 265 | { |
| paologiorgio | 1:00cee5df0f76 | 266 | Relay12V = 1; |
| paologiorgio | 1:00cee5df0f76 | 267 | } |
| paologiorgio | 1:00cee5df0f76 | 268 | else if (((float)data_TLC[1] == 1)) |
| paologiorgio | 1:00cee5df0f76 | 269 | { |
| paologiorgio | 1:00cee5df0f76 | 270 | Relay12V = 0; |
| paologiorgio | 1:00cee5df0f76 | 271 | // since the linear actuator is driven by 12V power |
| paologiorgio | 1:00cee5df0f76 | 272 | offset = actuonix.read(); |
| paologiorgio | 1:00cee5df0f76 | 273 | actuonix.write(offset); |
| paologiorgio | 1:00cee5df0f76 | 274 | } |
| paologiorgio | 1:00cee5df0f76 | 275 | else if (((float)data_TLC[1] == 2)) |
| paologiorgio | 1:00cee5df0f76 | 276 | { |
| paologiorgio | 1:00cee5df0f76 | 277 | Relay5V = 1; |
| paologiorgio | 0:8f7c961a5966 | 278 | } |
| paologiorgio | 1:00cee5df0f76 | 279 | else if (((float)data_TLC[1] == 3)) |
| paologiorgio | 1:00cee5df0f76 | 280 | { |
| paologiorgio | 1:00cee5df0f76 | 281 | Relay5V = 0; |
| paologiorgio | 1:00cee5df0f76 | 282 | } |
| paologiorgio | 1:00cee5df0f76 | 283 | else if (((float)data_TLC[1] == 6)) |
| paologiorgio | 1:00cee5df0f76 | 284 | { |
| paologiorgio | 1:00cee5df0f76 | 285 | Relay15_15_5V = 1; |
| paologiorgio | 1:00cee5df0f76 | 286 | } |
| paologiorgio | 1:00cee5df0f76 | 287 | else if (((float)data_TLC[1] == 7)) |
| paologiorgio | 0:8f7c961a5966 | 288 | { |
| paologiorgio | 1:00cee5df0f76 | 289 | Relay15_15_5V = 0; |
| paologiorgio | 1:00cee5df0f76 | 290 | } |
| paologiorgio | 1:00cee5df0f76 | 291 | else if (((float)data_TLC[1] == 8)) |
| paologiorgio | 1:00cee5df0f76 | 292 | { |
| paologiorgio | 1:00cee5df0f76 | 293 | Relay24V = 1; |
| paologiorgio | 1:00cee5df0f76 | 294 | } |
| paologiorgio | 1:00cee5df0f76 | 295 | else if (((float)data_TLC[1] == 15)) |
| paologiorgio | 1:00cee5df0f76 | 296 | { |
| paologiorgio | 1:00cee5df0f76 | 297 | Relay24V = 0; |
| paologiorgio | 0:8f7c961a5966 | 298 | } |
| paologiorgio | 0:8f7c961a5966 | 299 | } |
| paologiorgio | 1:00cee5df0f76 | 300 | else if (((float)data_TLC[0] == 40) && ((float)data_TLC[1] == 24)) |
| paologiorgio | 1:00cee5df0f76 | 301 | { |
| paologiorgio | 1:00cee5df0f76 | 302 | tlmode_option_1 = 0; |
| paologiorgio | 1:00cee5df0f76 | 303 | tlmode_option_2 = 1; |
| paologiorgio | 1:00cee5df0f76 | 304 | tlmode_tlm = 1; |
| paologiorgio | 1:00cee5df0f76 | 305 | rxTlmPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 306 | rxTlmOpt1Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 307 | rxTlmOpt2Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 308 | spacecraft.printf("> Sono entrato in TLMODE 1 \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 309 | } |
| paologiorgio | 1:00cee5df0f76 | 310 | else if (((float)data_TLC[0] == 41) && ((float)data_TLC[1] == 127)) |
| paologiorgio | 1:00cee5df0f76 | 311 | { |
| paologiorgio | 1:00cee5df0f76 | 312 | tlmode_option_2 = 0; |
| paologiorgio | 1:00cee5df0f76 | 313 | tlmode_option_1 = 1; |
| paologiorgio | 1:00cee5df0f76 | 314 | tlmode_tlm = 1; |
| paologiorgio | 1:00cee5df0f76 | 315 | rxTlmPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 316 | rxTlmOpt1Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 317 | rxTlmOpt2Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 318 | spacecraft.printf("> Sono entrato in TLMODE 2 \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 319 | } |
| paologiorgio | 1:00cee5df0f76 | 320 | // Reset global vars |
| paologiorgio | 1:00cee5df0f76 | 321 | else if (((float)data_TLC[0] == 241) && ((float)data_TLC[1] == 127)) |
| paologiorgio | 0:8f7c961a5966 | 322 | { |
| paologiorgio | 1:00cee5df0f76 | 323 | nRxCharCount = 0; |
| paologiorgio | 1:00cee5df0f76 | 324 | rxTlcPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 325 | rxTlmOpt1Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 326 | rxTlmOpt2Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 327 | rxTlcDataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 328 | rxTlmOpt1DataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 329 | rxTlmOpt2DataCounter = 0; |
| paologiorgio | 1:00cee5df0f76 | 330 | tlmode_tlm = 1; |
| paologiorgio | 1:00cee5df0f76 | 331 | tlmode_option_1 = 1; |
| paologiorgio | 1:00cee5df0f76 | 332 | tlmode_option_2 = 1; |
| paologiorgio | 1:00cee5df0f76 | 333 | |
| paologiorgio | 1:00cee5df0f76 | 334 | for(nIndex = 0; nIndex < PACKETDIM; nIndex++) |
| paologiorgio | 0:8f7c961a5966 | 335 | { |
| paologiorgio | 1:00cee5df0f76 | 336 | caRxPacket[nIndex] = 0; |
| paologiorgio | 1:00cee5df0f76 | 337 | } |
| paologiorgio | 1:00cee5df0f76 | 338 | |
| paologiorgio | 1:00cee5df0f76 | 339 | clearBuffer(data_TLC, sizeof(data_TLC)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 340 | clearBuffer(data_TLM, sizeof(data_TLM)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 341 | clearBuffer(data_TLMOpt1, sizeof(data_TLMOpt1)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 342 | clearBuffer(data_TLMOpt2, sizeof(data_TLMOpt2)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 343 | |
| paologiorgio | 1:00cee5df0f76 | 344 | spacecraft.printf(".... Reset variabili effettuato! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 345 | } |
| paologiorgio | 1:00cee5df0f76 | 346 | |
| paologiorgio | 1:00cee5df0f76 | 347 | // Send after setting flags and clear |
| paologiorgio | 1:00cee5df0f76 | 348 | TxTelecommand(); |
| paologiorgio | 1:00cee5df0f76 | 349 | spacecraft.printf(".... Telecomando inviato a MIMA ...."); |
| paologiorgio | 1:00cee5df0f76 | 350 | __enable_irq(); // ********************************************************************* |
| paologiorgio | 1:00cee5df0f76 | 351 | clearBuffer(rx_TLC, sizeof(rx_TLC)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 352 | clearBuffer(data_TLC, sizeof(data_TLC)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 353 | |
| paologiorgio | 1:00cee5df0f76 | 354 | spacecraft.printf(".... Ho ripulito i buffer di ricezione TLC .... \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 355 | |
| paologiorgio | 1:00cee5df0f76 | 356 | /* *********************************************************** */ |
| paologiorgio | 1:00cee5df0f76 | 357 | |
| paologiorgio | 1:00cee5df0f76 | 358 | //__disable_irq(); // da lavorare su queste chiamate perché se da un lato prevengono |
| paologiorgio | 1:00cee5df0f76 | 359 | // blocco del telecomando durante ricezione, dall'altro impediscono al comando di telemetria di ricevere |
| paologiorgio | 1:00cee5df0f76 | 360 | |
| paologiorgio | 1:00cee5df0f76 | 361 | if ((TlcSend) && (tlmode_option_1 == 1) && (tlmode_option_2 == 1) && (tlmode_tlm == 0)) |
| paologiorgio | 1:00cee5df0f76 | 362 | { |
| paologiorgio | 1:00cee5df0f76 | 363 | clearBuffer(data_TLM, sizeof(data_TLM)/sizeof(char)); |
| paologiorgio | 0:8f7c961a5966 | 364 | |
| paologiorgio | 1:00cee5df0f76 | 365 | // Standard telemetry frame |
| paologiorgio | 1:00cee5df0f76 | 366 | rx.start(); |
| paologiorgio | 1:00cee5df0f76 | 367 | rxTimeStart = rx.read(); |
| paologiorgio | 1:00cee5df0f76 | 368 | rxTimeRead = rxTimeStart; |
| paologiorgio | 1:00cee5df0f76 | 369 | |
| paologiorgio | 1:00cee5df0f76 | 370 | while ((rxTlmPtr < packet) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 0:8f7c961a5966 | 371 | { |
| paologiorgio | 1:00cee5df0f76 | 372 | rxTimeRead = rx.read(); |
| paologiorgio | 1:00cee5df0f76 | 373 | } |
| paologiorgio | 1:00cee5df0f76 | 374 | |
| paologiorgio | 1:00cee5df0f76 | 375 | rx.stop(); |
| paologiorgio | 1:00cee5df0f76 | 376 | |
| paologiorgio | 1:00cee5df0f76 | 377 | if ((rxTlmPtr == packet) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 1:00cee5df0f76 | 378 | { |
| paologiorgio | 1:00cee5df0f76 | 379 | __disable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 380 | memcpy(data_TLM, rx_TLM, rxTlmPtr); |
| paologiorgio | 1:00cee5df0f76 | 381 | rxTlmDataCounter = rxTlmPtr; |
| paologiorgio | 1:00cee5df0f76 | 382 | rxTlmPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 383 | //__enable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 384 | |
| paologiorgio | 1:00cee5df0f76 | 385 | data_TLM[rxTlmDataCounter] = 0; |
| paologiorgio | 1:00cee5df0f76 | 386 | |
| paologiorgio | 1:00cee5df0f76 | 387 | TxTelemetry(); |
| paologiorgio | 1:00cee5df0f76 | 388 | __enable_irq(); // *************************************************** |
| paologiorgio | 1:00cee5df0f76 | 389 | spacecraft.printf("\n\r Ricevuto Telemetry Standard \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 390 | |
| paologiorgio | 0:8f7c961a5966 | 391 | } |
| paologiorgio | 1:00cee5df0f76 | 392 | else if ((rxTimeRead - rxTimeStart) >= rxWindow) |
| paologiorgio | 0:8f7c961a5966 | 393 | { |
| paologiorgio | 1:00cee5df0f76 | 394 | spacecraft.printf("\n\r !!! Scattato il timeout in Telemetry !!! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 395 | rxTlmPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 396 | for (int i = 0; i < packet; i++) |
| paologiorgio | 1:00cee5df0f76 | 397 | { |
| paologiorgio | 1:00cee5df0f76 | 398 | rx_TLM[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 399 | data_TLM[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 400 | } |
| paologiorgio | 1:00cee5df0f76 | 401 | } // end-else-if:telecommand-send+timeout |
| paologiorgio | 1:00cee5df0f76 | 402 | |
| paologiorgio | 1:00cee5df0f76 | 403 | TlcSend = false; |
| paologiorgio | 1:00cee5df0f76 | 404 | } // end-if-send-telecommand |
| paologiorgio | 1:00cee5df0f76 | 405 | else if ((TlcSend) && (tlmode_option_1 == 0) && (tlmode_option_2 == 1) && (tlmode_tlm == 1)) |
| paologiorgio | 1:00cee5df0f76 | 406 | { |
| paologiorgio | 1:00cee5df0f76 | 407 | spacecraft.printf("\n\r > Sono entrato in TLMODE 1 - TX Telemetry \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 408 | clearBuffer(data_TLMOpt1, sizeof(data_TLMOpt1)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 409 | |
| paologiorgio | 1:00cee5df0f76 | 410 | rx.start(); |
| paologiorgio | 1:00cee5df0f76 | 411 | rxTimeStart = rx.read(); |
| paologiorgio | 1:00cee5df0f76 | 412 | rxTimeRead = rxTimeStart; |
| paologiorgio | 1:00cee5df0f76 | 413 | |
| paologiorgio | 1:00cee5df0f76 | 414 | while ((rxTlmOpt1Ptr < hsk_rx) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 1:00cee5df0f76 | 415 | { |
| paologiorgio | 1:00cee5df0f76 | 416 | rxTimeRead = rx.read(); |
| paologiorgio | 0:8f7c961a5966 | 417 | } |
| paologiorgio | 1:00cee5df0f76 | 418 | |
| paologiorgio | 1:00cee5df0f76 | 419 | rx.stop(); |
| paologiorgio | 1:00cee5df0f76 | 420 | |
| paologiorgio | 1:00cee5df0f76 | 421 | if ((rxTlmOpt1Ptr == hsk_rx) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 1:00cee5df0f76 | 422 | { |
| paologiorgio | 1:00cee5df0f76 | 423 | __disable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 424 | memcpy(data_TLMOpt1, rx_TLMOpt1, rxTlmOpt1Ptr); |
| paologiorgio | 1:00cee5df0f76 | 425 | rxTlmOpt1DataCounter = rxTlmOpt1Ptr; |
| paologiorgio | 1:00cee5df0f76 | 426 | rxTlmOpt1Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 427 | //__enable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 428 | |
| paologiorgio | 1:00cee5df0f76 | 429 | data_TLMOpt1[rxTlmOpt1DataCounter] = 0; |
| paologiorgio | 1:00cee5df0f76 | 430 | |
| paologiorgio | 1:00cee5df0f76 | 431 | TxTelemetry(); |
| paologiorgio | 1:00cee5df0f76 | 432 | __enable_irq(); // *************************************************** |
| paologiorgio | 1:00cee5df0f76 | 433 | spacecraft.printf("\n\r > Ricevuto Telemetry Opt 1 \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 434 | |
| paologiorgio | 1:00cee5df0f76 | 435 | } |
| paologiorgio | 1:00cee5df0f76 | 436 | else if ((rxTimeRead - rxTimeStart) >= rxWindow) |
| paologiorgio | 1:00cee5df0f76 | 437 | { |
| paologiorgio | 1:00cee5df0f76 | 438 | mima.printf("\n\r !!! Scattato il timeout in Telemetry Opt 1 !!! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 439 | rxTlmOpt1Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 440 | for (int i = 0; i < packet; i++) |
| paologiorgio | 1:00cee5df0f76 | 441 | { |
| paologiorgio | 1:00cee5df0f76 | 442 | rx_TLMOpt1[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 443 | data_TLMOpt1[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 444 | } |
| paologiorgio | 1:00cee5df0f76 | 445 | } |
| paologiorgio | 1:00cee5df0f76 | 446 | TlcSend = false; |
| paologiorgio | 1:00cee5df0f76 | 447 | } // end-else-if-send-telecommand |
| paologiorgio | 1:00cee5df0f76 | 448 | else if ((TlcSend) && (tlmode_option_1 == 1) && (tlmode_option_2 == 0) && (tlmode_tlm == 1)) |
| paologiorgio | 1:00cee5df0f76 | 449 | { |
| paologiorgio | 1:00cee5df0f76 | 450 | spacecraft.printf("\n\r > Sono entrato in TLMODE 2 - TX Telemetry \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 451 | clearBuffer(data_TLMOpt2, sizeof(data_TLMOpt2)/sizeof(char)); |
| paologiorgio | 1:00cee5df0f76 | 452 | |
| paologiorgio | 1:00cee5df0f76 | 453 | rx.start(); |
| paologiorgio | 1:00cee5df0f76 | 454 | rxTimeStart = rx.read(); |
| paologiorgio | 1:00cee5df0f76 | 455 | rxTimeRead = rxTimeStart; |
| paologiorgio | 1:00cee5df0f76 | 456 | |
| paologiorgio | 1:00cee5df0f76 | 457 | while ((rxTlmOpt2Ptr < hsk_sd) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 1:00cee5df0f76 | 458 | { |
| paologiorgio | 1:00cee5df0f76 | 459 | rxTimeRead = rx.read(); |
| paologiorgio | 1:00cee5df0f76 | 460 | } |
| paologiorgio | 1:00cee5df0f76 | 461 | |
| paologiorgio | 1:00cee5df0f76 | 462 | rx.stop(); |
| paologiorgio | 1:00cee5df0f76 | 463 | |
| paologiorgio | 1:00cee5df0f76 | 464 | if ((rxTlmOpt2Ptr == hsk_sd) && ((rxTimeRead - rxTimeStart) < rxWindow)) |
| paologiorgio | 1:00cee5df0f76 | 465 | { |
| paologiorgio | 1:00cee5df0f76 | 466 | __disable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 467 | memcpy(data_TLMOpt2, rx_TLMOpt2, rxTlmOpt2Ptr); |
| paologiorgio | 1:00cee5df0f76 | 468 | rxTlmOpt2DataCounter = rxTlmOpt2Ptr; |
| paologiorgio | 1:00cee5df0f76 | 469 | rxTlmOpt2Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 470 | //__enable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 471 | |
| paologiorgio | 1:00cee5df0f76 | 472 | data_TLMOpt2[rxTlmOpt2DataCounter] = 0; |
| paologiorgio | 1:00cee5df0f76 | 473 | |
| paologiorgio | 1:00cee5df0f76 | 474 | TxTelemetry(); |
| paologiorgio | 1:00cee5df0f76 | 475 | __enable_irq(); // *************************************************** |
| paologiorgio | 1:00cee5df0f76 | 476 | spacecraft.printf("\n\r Ricevuto Telemetry Opt 2 \n\r"); |
| paologiorgio | 0:8f7c961a5966 | 477 | |
| paologiorgio | 1:00cee5df0f76 | 478 | } |
| paologiorgio | 1:00cee5df0f76 | 479 | else if ((rxTimeRead - rxTimeStart) >= rxWindow) |
| paologiorgio | 1:00cee5df0f76 | 480 | { |
| paologiorgio | 1:00cee5df0f76 | 481 | spacecraft.printf("\n\r !!! Scattato il timeout in Telemetry Opt 2 !!! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 482 | rxTlmOpt2Ptr = 0; |
| paologiorgio | 1:00cee5df0f76 | 483 | for (int i = 0; i < packet; i++) |
| paologiorgio | 1:00cee5df0f76 | 484 | { |
| paologiorgio | 1:00cee5df0f76 | 485 | rx_TLMOpt2[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 486 | data_TLMOpt2[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 487 | } |
| paologiorgio | 1:00cee5df0f76 | 488 | } |
| paologiorgio | 1:00cee5df0f76 | 489 | TlcSend = false; |
| paologiorgio | 1:00cee5df0f76 | 490 | } // end-2nd-else-if-send-telecommand |
| paologiorgio | 1:00cee5df0f76 | 491 | |
| paologiorgio | 1:00cee5df0f76 | 492 | spacecraft.printf("\n\r .... Ho inviato il telecomando entro la finestra di timeout .... \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 493 | spacecraft.printf(" *************************************** \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 494 | |
| paologiorgio | 1:00cee5df0f76 | 495 | //__enable_irq(); |
| paologiorgio | 1:00cee5df0f76 | 496 | |
| paologiorgio | 1:00cee5df0f76 | 497 | } // end-if:telecommand |
| paologiorgio | 1:00cee5df0f76 | 498 | else if ((tTimeRead - tTimeStart) >= TIMEOUT) |
| paologiorgio | 1:00cee5df0f76 | 499 | { |
| paologiorgio | 1:00cee5df0f76 | 500 | rxTlcPtr = 0; |
| paologiorgio | 1:00cee5df0f76 | 501 | for (int i = 0; i < packet; i++) |
| paologiorgio | 0:8f7c961a5966 | 502 | { |
| paologiorgio | 1:00cee5df0f76 | 503 | rx_TLC[i] = '\0'; |
| paologiorgio | 1:00cee5df0f76 | 504 | data_TLC[i] = '\0'; |
| paologiorgio | 0:8f7c961a5966 | 505 | } |
| paologiorgio | 1:00cee5df0f76 | 506 | |
| paologiorgio | 1:00cee5df0f76 | 507 | spacecraft.printf(" .... Telecomando non inviato: timeout, riprovare! \n\r"); |
| paologiorgio | 1:00cee5df0f76 | 508 | } // end-else-if:telecommand+timeout |
| paologiorgio | 1:00cee5df0f76 | 509 | } // end-while:true |
| paologiorgio | 1:00cee5df0f76 | 510 | } // end-Main |
| paologiorgio | 1:00cee5df0f76 | 511 | |
| paologiorgio | 1:00cee5df0f76 | 512 | |
| paologiorgio | 1:00cee5df0f76 | 513 | /* ************************************************************* */ |
| paologiorgio | 1:00cee5df0f76 | 514 | /* ******** SYSTEM INTERRPUTS MANAGEMENT AND FUNCTIONS ********* */ |
| paologiorgio | 1:00cee5df0f76 | 515 | /* ************************************************************* */ |
| paologiorgio | 1:00cee5df0f76 | 516 | |
| paologiorgio | 1:00cee5df0f76 | 517 | // Interrupt: DORA receives a byte from Spacecraft |
| paologiorgio | 1:00cee5df0f76 | 518 | void RxTelecommand() |
| paologiorgio | 1:00cee5df0f76 | 519 | { |
| paologiorgio | 1:00cee5df0f76 | 520 | char txChar; |
| paologiorgio | 1:00cee5df0f76 | 521 | while (spacecraft.readable()) |
| paologiorgio | 1:00cee5df0f76 | 522 | { |
| paologiorgio | 1:00cee5df0f76 | 523 | txChar = spacecraft.getc(); |
| paologiorgio | 1:00cee5df0f76 | 524 | rx_TLC[rxTlcPtr++] = txChar; |
| paologiorgio | 1:00cee5df0f76 | 525 | } |
| paologiorgio | 1:00cee5df0f76 | 526 | } |
| paologiorgio | 1:00cee5df0f76 | 527 | |
| paologiorgio | 1:00cee5df0f76 | 528 | // Interrupt: DORA receives a byte from MIMA |
| paologiorgio | 1:00cee5df0f76 | 529 | void RxTelemetry() |
| paologiorgio | 1:00cee5df0f76 | 530 | { |
| paologiorgio | 1:00cee5df0f76 | 531 | char rxChar; |
| paologiorgio | 1:00cee5df0f76 | 532 | while (mima.readable()) |
| paologiorgio | 1:00cee5df0f76 | 533 | { |
| paologiorgio | 1:00cee5df0f76 | 534 | rxChar = mima.getc(); |
| paologiorgio | 1:00cee5df0f76 | 535 | |
| paologiorgio | 1:00cee5df0f76 | 536 | if (tlmode_tlm == 0) // Standard telemetry message |
| paologiorgio | 1:00cee5df0f76 | 537 | { |
| paologiorgio | 1:00cee5df0f76 | 538 | rx_TLM[rxTlmPtr++] = rxChar; |
| paologiorgio | 1:00cee5df0f76 | 539 | } |
| paologiorgio | 1:00cee5df0f76 | 540 | else if (tlmode_option_1 == 0) // TLMODE 1 (all housekeeping telemetries) |
| paologiorgio | 1:00cee5df0f76 | 541 | { |
| paologiorgio | 1:00cee5df0f76 | 542 | rx_TLMOpt1[rxTlmOpt1Ptr++] = rxChar; |
| paologiorgio | 1:00cee5df0f76 | 543 | } |
| paologiorgio | 1:00cee5df0f76 | 544 | else if (tlmode_option_2 == 0) // TLMODE 2 (hsk+scientific data) |
| paologiorgio | 1:00cee5df0f76 | 545 | { |
| paologiorgio | 1:00cee5df0f76 | 546 | rx_TLMOpt2[rxTlmOpt2Ptr++] = rxChar; |
| paologiorgio | 0:8f7c961a5966 | 547 | } |
| paologiorgio | 0:8f7c961a5966 | 548 | } |
| paologiorgio | 0:8f7c961a5966 | 549 | } |
| paologiorgio | 0:8f7c961a5966 | 550 | |
| paologiorgio | 1:00cee5df0f76 | 551 | // Once received a full telecommand frame, send it to MIMA |
| paologiorgio | 1:00cee5df0f76 | 552 | void TxTelecommand() |
| paologiorgio | 0:8f7c961a5966 | 553 | { |
| paologiorgio | 1:00cee5df0f76 | 554 | mima.puts(data_TLC); |
| paologiorgio | 1:00cee5df0f76 | 555 | TlcSend = true; |
| paologiorgio | 0:8f7c961a5966 | 556 | } |
| paologiorgio | 0:8f7c961a5966 | 557 | |
| paologiorgio | 1:00cee5df0f76 | 558 | // Once received a full telemetry frame, send it to Spacecraft |
| paologiorgio | 0:8f7c961a5966 | 559 | void TxTelemetry() |
| paologiorgio | 0:8f7c961a5966 | 560 | { |
| paologiorgio | 1:00cee5df0f76 | 561 | if (tlmode_tlm == 0) |
| paologiorgio | 1:00cee5df0f76 | 562 | { |
| paologiorgio | 1:00cee5df0f76 | 563 | spacecraft.puts(data_TLM); |
| paologiorgio | 1:00cee5df0f76 | 564 | } |
| paologiorgio | 1:00cee5df0f76 | 565 | else if (tlmode_option_1 == 0) |
| paologiorgio | 1:00cee5df0f76 | 566 | { |
| paologiorgio | 1:00cee5df0f76 | 567 | spacecraft.puts(data_TLMOpt1); |
| paologiorgio | 0:8f7c961a5966 | 568 | } |
| paologiorgio | 0:8f7c961a5966 | 569 | else if (tlmode_option_2 == 0) |
| paologiorgio | 0:8f7c961a5966 | 570 | { |
| paologiorgio | 1:00cee5df0f76 | 571 | spacecraft.puts(data_TLMOpt2); |
| paologiorgio | 0:8f7c961a5966 | 572 | } |
| paologiorgio | 0:8f7c961a5966 | 573 | } |
| paologiorgio | 0:8f7c961a5966 | 574 | |
| paologiorgio | 1:00cee5df0f76 | 575 | // Reset |
| paologiorgio | 1:00cee5df0f76 | 576 | void clearBuffer(char *arr, int arrLen) |
| paologiorgio | 0:8f7c961a5966 | 577 | { |
| paologiorgio | 1:00cee5df0f76 | 578 | int myIndex; |
| paologiorgio | 1:00cee5df0f76 | 579 | for (myIndex = 0; myIndex < arrLen; myIndex++) |
| paologiorgio | 0:8f7c961a5966 | 580 | { |
| paologiorgio | 1:00cee5df0f76 | 581 | arr[myIndex] = '\0'; // terminatore |
| paologiorgio | 0:8f7c961a5966 | 582 | } |
| paologiorgio | 0:8f7c961a5966 | 583 | } |