CAN to BLE translator - and back

Dependencies:   BLE_API CANnucleo X_NUCLEO_IDB0XA1 mbed

Committer:
filippomontano
Date:
Tue Apr 12 06:32:27 2016 +0000
Revision:
7:b834d20f9aa1
Parent:
6:f85bc6e59111
Pulizia generale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
filippomontano 0:345c72cbcd60 1 #include "mbed.h"
filippomontano 0:345c72cbcd60 2 #include "ble/BLE.h"
filippomontano 0:345c72cbcd60 3 #include "CAN.h"
filippomontano 0:345c72cbcd60 4
filippomontano 3:5bce2e8d2797 5 #define TARGET_NUCLEO_F072RB 1
filippomontano 0:345c72cbcd60 6 #define LED_PIN PA_5
filippomontano 0:345c72cbcd60 7
filippomontano 3:5bce2e8d2797 8 #define BLE_GATT_CHAR_PROPERTIES_NOTIFY 0x10
filippomontano 3:5bce2e8d2797 9
filippomontano 6:f85bc6e59111 10 uint8_t CANId2BLESlot(unsigned int id);
filippomontano 6:f85bc6e59111 11 unsigned int BLESlot2CANId(uint8_t id);
filippomontano 6:f85bc6e59111 12 void onMsgReceived(void);
filippomontano 6:f85bc6e59111 13
filippomontano 6:f85bc6e59111 14 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params);
filippomontano 3:5bce2e8d2797 15 void writeCharCallback(const GattWriteCallbackParams *params);
filippomontano 3:5bce2e8d2797 16 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params);
filippomontano 3:5bce2e8d2797 17 void onBleInitError(BLE &ble, ble_error_t error);
filippomontano 0:345c72cbcd60 18
filippomontano 5:9f30eba41c77 19 void periodicCallback(void);
filippomontano 7:b834d20f9aa1 20
filippomontano 7:b834d20f9aa1 21
filippomontano 7:b834d20f9aa1 22 void initMEM(void);
filippomontano 7:b834d20f9aa1 23 void dumpMEM(void);
filippomontano 5:9f30eba41c77 24
filippomontano 7:b834d20f9aa1 25 CANMessage rxMsg;
filippomontano 7:b834d20f9aa1 26 CANMessage txMsg;
filippomontano 7:b834d20f9aa1 27
filippomontano 7:b834d20f9aa1 28 BLE ble;
filippomontano 7:b834d20f9aa1 29
filippomontano 7:b834d20f9aa1 30 char shareddata[64][8]= { };
filippomontano 0:345c72cbcd60 31
filippomontano 3:5bce2e8d2797 32 DigitalOut led(LED_PIN),CAN_show(PC_12);
filippomontano 7:b834d20f9aa1 33 DigitalIn button(PC_13);
filippomontano 3:5bce2e8d2797 34
filippomontano 7:b834d20f9aa1 35 const uint8_t firstBleRdPointer=1;
filippomontano 7:b834d20f9aa1 36 const uint8_t lastBleRdPointer=14;
filippomontano 7:b834d20f9aa1 37 const uint8_t firstCanRdPointer=57;
filippomontano 7:b834d20f9aa1 38 const uint8_t lastCanRdPointer=63;
filippomontano 3:5bce2e8d2797 39
filippomontano 3:5bce2e8d2797 40 const static char DEVICE_NAME[] = "STNucleo - RGM - FM";
filippomontano 7:b834d20f9aa1 41 const static uint16_t uuid16_list[] = {0xFFFF};
filippomontano 3:5bce2e8d2797 42
filippomontano 7:b834d20f9aa1 43 static volatile bool triggerSensorPolling = false;
filippomontano 6:f85bc6e59111 44
filippomontano 6:f85bc6e59111 45 uint8_t canWrPointer= 255;
filippomontano 6:f85bc6e59111 46 uint8_t canRdPointer= 255;
filippomontano 6:f85bc6e59111 47 uint8_t bleWrPointerA= 255;
filippomontano 6:f85bc6e59111 48 uint8_t bleRdPointerA= 255;
filippomontano 6:f85bc6e59111 49 uint8_t bleWrPointerB= 255;
filippomontano 6:f85bc6e59111 50 uint8_t bleRdPointerB= 255;
filippomontano 6:f85bc6e59111 51
filippomontano 6:f85bc6e59111 52 uint8_t canRdLastPointer= 255; // puntatore per sapere che cosa ho mandato per ultimo. a runtime devo andare a modificarlo per sapere al ciclo dopo cosa ho già mandato
filippomontano 6:f85bc6e59111 53 uint8_t bleRdLastPointer= 255; // puntatore per sapere che cosa ho mandato per ultimo. a runtime devo andare a modificarlo per sapere al ciclo dopo cosa ho già mandato
filippomontano 6:f85bc6e59111 54
filippomontano 7:b834d20f9aa1 55 Ticker ticker; //synchronous counter - IRQ enabled
filippomontano 7:b834d20f9aa1 56 Timer timerA; //unsynchronous counter - no IRQ
filippomontano 6:f85bc6e59111 57
filippomontano 7:b834d20f9aa1 58 //CAN can(PB_8, PB_9); // alternatives for CAN Rx pin name, CAN Tx pin name
filippomontano 3:5bce2e8d2797 59
filippomontano 3:5bce2e8d2797 60 uint16_t customServiceUUID = 0xA000; // service UUID
filippomontano 3:5bce2e8d2797 61 uint16_t readCharUUID = 0xA001; // read characteristic UUID
filippomontano 3:5bce2e8d2797 62 uint16_t writeCharUUID = 0xA002; // write characteristic UUID
filippomontano 3:5bce2e8d2797 63
filippomontano 3:5bce2e8d2797 64 static uint8_t readValue[128] = {0};
filippomontano 3:5bce2e8d2797 65 ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue, BLE_GATT_CHAR_PROPERTIES_NOTIFY , NULL,0); //aggiunto il BLE_GATT_CHAR_PROPERTIES_NOTIFY => appena arriva lo rimanda
filippomontano 3:5bce2e8d2797 66
filippomontano 3:5bce2e8d2797 67 static uint8_t writeValue[128] = {0};
filippomontano 3:5bce2e8d2797 68 WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue);
filippomontano 3:5bce2e8d2797 69
filippomontano 3:5bce2e8d2797 70 GattCharacteristic *characteristics[] = {&readChar, &writeChar};
filippomontano 3:5bce2e8d2797 71 GattService customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
filippomontano 7:b834d20f9aa1 72
filippomontano 3:5bce2e8d2797 73 uint8_t retry=1;
filippomontano 3:5bce2e8d2797 74 char symbol=' ';
filippomontano 7:b834d20f9aa1 75
filippomontano 0:345c72cbcd60 76 volatile bool CANmsgAvailable = false;
filippomontano 3:5bce2e8d2797 77 volatile bool BLExmit = false;
filippomontano 7:b834d20f9aa1 78 bool signal=true;
filippomontano 7:b834d20f9aa1 79
filippomontano 3:5bce2e8d2797 80 float stopTimer=2.0;
filippomontano 6:f85bc6e59111 81
filippomontano 7:b834d20f9aa1 82 uint8_t readdata[20]= {}; //BLE data
filippomontano 7:b834d20f9aa1 83 char kantMsg[8]= {0}; //CAN data
filippomontano 7:b834d20f9aa1 84
filippomontano 0:345c72cbcd60 85 int main()
filippomontano 0:345c72cbcd60 86 {
filippomontano 7:b834d20f9aa1 87 uint8_t j=0,k=0;
filippomontano 7:b834d20f9aa1 88 int mcan=0;
filippomontano 7:b834d20f9aa1 89 initMEM();
filippomontano 7:b834d20f9aa1 90 printf("\r\nBoard started\r\n");
filippomontano 0:345c72cbcd60 91 led = 1; // turn LED on
filippomontano 6:f85bc6e59111 92 bleRdLastPointer=lastBleRdPointer;
filippomontano 7:b834d20f9aa1 93 canRdPointer=lastCanRdPointer;
filippomontano 6:f85bc6e59111 94 BLE::Instance().init(bleInitComplete);
filippomontano 6:f85bc6e59111 95 CAN can(PA_11, PA_12); // CAN Rx pin name, CAN Tx pin name
filippomontano 3:5bce2e8d2797 96
filippomontano 6:f85bc6e59111 97 //canRdLastPointer=lastCanRdPointer;
filippomontano 6:f85bc6e59111 98 can.frequency(500000); // set bit rate to 500kbps as S018
filippomontano 7:b834d20f9aa1 99 printf("CAN started at 500kbps\r\n");
filippomontano 6:f85bc6e59111 100 timerA.start();
filippomontano 6:f85bc6e59111 101 can.attach(&onMsgReceived, CAN::RxIrq); // attach 'CAN receive-complete' interrupt handler
filippomontano 3:5bce2e8d2797 102 while(true) {
filippomontano 5:9f30eba41c77 103 // if(ble.getGapState().connected) {
filippomontano 6:f85bc6e59111 104 if(triggerSensorPolling && ble.getGapState().connected) {
filippomontano 6:f85bc6e59111 105 triggerSensorPolling=false;
filippomontano 6:f85bc6e59111 106 } else {
filippomontano 6:f85bc6e59111 107 ble.waitForEvent();
filippomontano 5:9f30eba41c77 108 }
filippomontano 6:f85bc6e59111 109
filippomontano 5:9f30eba41c77 110 if(ble.gap().getState().connected) {
filippomontano 7:b834d20f9aa1 111 stopTimer=0.1;
filippomontano 7:b834d20f9aa1 112
filippomontano 3:5bce2e8d2797 113 } else {
filippomontano 7:b834d20f9aa1 114
filippomontano 7:b834d20f9aa1 115 stopTimer=1;
filippomontano 7:b834d20f9aa1 116 //stopTimer=5;
filippomontano 6:f85bc6e59111 117 // ble.waitForEvent();
filippomontano 7:b834d20f9aa1 118
filippomontano 3:5bce2e8d2797 119 }
filippomontano 3:5bce2e8d2797 120
filippomontano 3:5bce2e8d2797 121 if(timerA.read()>=stopTimer) {
filippomontano 5:9f30eba41c77 122 // BLExmit=ble.getGapState().connected;
filippomontano 5:9f30eba41c77 123 BLExmit=ble.gap().getState().connected;
filippomontano 0:345c72cbcd60 124 timerA.stop();
filippomontano 0:345c72cbcd60 125 timerA.reset();
filippomontano 0:345c72cbcd60 126 led=!led.read();
filippomontano 0:345c72cbcd60 127 timerA.start();
filippomontano 7:b834d20f9aa1 128 if(!button) dumpMEM();
filippomontano 7:b834d20f9aa1 129
filippomontano 7:b834d20f9aa1 130
filippomontano 7:b834d20f9aa1 131 if(++canRdPointer>lastCanRdPointer) {
filippomontano 7:b834d20f9aa1 132 canRdPointer=firstCanRdPointer;
filippomontano 7:b834d20f9aa1 133 }
filippomontano 7:b834d20f9aa1 134 mcan = BLESlot2CANId(canRdPointer);
filippomontano 7:b834d20f9aa1 135 for(int m=0; m<8; m++) {
filippomontano 7:b834d20f9aa1 136 kantMsg[m] = shareddata[canRdPointer][m];
filippomontano 7:b834d20f9aa1 137 }
filippomontano 7:b834d20f9aa1 138 if(can.write(CANMessage(mcan, kantMsg, 8))) { // transmit message
filippomontano 7:b834d20f9aa1 139 //if(can.write(txMsg)) { // transmit message
filippomontano 7:b834d20f9aa1 140 // printf("CAN message sent %x, 0x%.3x",canRdPointer, mcan);
filippomontano 7:b834d20f9aa1 141 // for(int c=0; c<8; c++) {
filippomontano 7:b834d20f9aa1 142 // printf(" %.2x",kantMsg[c]);
filippomontano 7:b834d20f9aa1 143 // }
filippomontano 7:b834d20f9aa1 144 // printf("\r\n");
filippomontano 7:b834d20f9aa1 145 }
filippomontano 7:b834d20f9aa1 146
filippomontano 3:5bce2e8d2797 147
filippomontano 0:345c72cbcd60 148 }
filippomontano 6:f85bc6e59111 149 if(CANmsgAvailable) {
filippomontano 6:f85bc6e59111 150 CANmsgAvailable = false; // reset flag for next use
filippomontano 6:f85bc6e59111 151 can.read(rxMsg); // read message into Rx message storage
filippomontano 6:f85bc6e59111 152 j=CANId2BLESlot(rxMsg.id);
filippomontano 6:f85bc6e59111 153 if(j!=bleRdPointerA && j!=bleRdPointerB) {
filippomontano 7:b834d20f9aa1 154 // printf("CAN message rcvd %.2x, 0x%.3x \r\n",j,rxMsg.id);
filippomontano 6:f85bc6e59111 155 for(int i = 0; i < rxMsg.len; i++) {
filippomontano 6:f85bc6e59111 156 shareddata[j][i]=rxMsg.data[i];
filippomontano 7:b834d20f9aa1 157 // printf(" %.2x",rxMsg.data[i]);
filippomontano 6:f85bc6e59111 158 }
filippomontano 7:b834d20f9aa1 159 //printf("\r\n");
filippomontano 6:f85bc6e59111 160 }
filippomontano 6:f85bc6e59111 161 }
filippomontano 3:5bce2e8d2797 162 if(BLExmit) {
filippomontano 3:5bce2e8d2797 163 BLExmit=false;
filippomontano 3:5bce2e8d2797 164 retry++;
filippomontano 5:9f30eba41c77 165 if(retry==0xff) ble.gap().startAdvertising();
filippomontano 7:b834d20f9aa1 166 // printf ("%#x ",retry);
filippomontano 3:5bce2e8d2797 167 k++;
filippomontano 6:f85bc6e59111 168 if(k>lastBleRdPointer)
filippomontano 6:f85bc6e59111 169 k=firstBleRdPointer;
filippomontano 3:5bce2e8d2797 170 readValue[0]=k;
filippomontano 7:b834d20f9aa1 171 // printf (" <%.2x ---",readValue[0]);
filippomontano 3:5bce2e8d2797 172 for(int i=1; i<8; i++) {
filippomontano 3:5bce2e8d2797 173 readValue[i]=shareddata[k][i];
filippomontano 7:b834d20f9aa1 174 // printf ("%.2x ",readValue[i]);
filippomontano 0:345c72cbcd60 175 }
filippomontano 7:b834d20f9aa1 176 readValue[8]= ++k;;
filippomontano 7:b834d20f9aa1 177 // printf ("> <%.2x ---",readValue[8]);
filippomontano 7:b834d20f9aa1 178
filippomontano 7:b834d20f9aa1 179 for(int i=9; i<18; i++) {
filippomontano 7:b834d20f9aa1 180 readValue[i]=shareddata[k][i-9];
filippomontano 7:b834d20f9aa1 181 // printf ("%.2x ",readValue[i]);
filippomontano 5:9f30eba41c77 182 }
filippomontano 7:b834d20f9aa1 183 // printf (">\n\r");
filippomontano 7:b834d20f9aa1 184 ble.updateCharacteristicValue(readChar.getValueHandle(), readValue,18);
filippomontano 0:345c72cbcd60 185 }
filippomontano 0:345c72cbcd60 186 }
filippomontano 0:345c72cbcd60 187 }
filippomontano 3:5bce2e8d2797 188
filippomontano 3:5bce2e8d2797 189 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
filippomontano 0:345c72cbcd60 190 {
filippomontano 3:5bce2e8d2797 191 BLE& ble = params->ble;
filippomontano 3:5bce2e8d2797 192 ble_error_t error = params->error;
filippomontano 3:5bce2e8d2797 193
filippomontano 3:5bce2e8d2797 194 if (error != BLE_ERROR_NONE) {
filippomontano 3:5bce2e8d2797 195 onBleInitError(ble, error);
filippomontano 3:5bce2e8d2797 196 return;
filippomontano 3:5bce2e8d2797 197 }
filippomontano 3:5bce2e8d2797 198
filippomontano 3:5bce2e8d2797 199 if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
filippomontano 3:5bce2e8d2797 200 return;
filippomontano 3:5bce2e8d2797 201 }
filippomontano 5:9f30eba41c77 202
filippomontano 3:5bce2e8d2797 203 ble.gap().onDisconnection(disconnectionCallback);
filippomontano 3:5bce2e8d2797 204
filippomontano 3:5bce2e8d2797 205 /* Setup primary service. */
filippomontano 3:5bce2e8d2797 206
filippomontano 3:5bce2e8d2797 207 /* Setup advertising. */
filippomontano 7:b834d20f9aa1 208 printf("Setup of BLE Advertising\r\n");
filippomontano 3:5bce2e8d2797 209 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
filippomontano 3:5bce2e8d2797 210 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
filippomontano 3:5bce2e8d2797 211 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
filippomontano 3:5bce2e8d2797 212 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
filippomontano 3:5bce2e8d2797 213 ble.gap().setAdvertisingInterval(1000);// 1000ms
filippomontano 3:5bce2e8d2797 214 ble.gap().startAdvertising();
filippomontano 3:5bce2e8d2797 215 ble.onDataWritten(writeCharCallback);
filippomontano 3:5bce2e8d2797 216 ble.addService(customService);
filippomontano 5:9f30eba41c77 217 ticker.detach();
filippomontano 5:9f30eba41c77 218 ticker.attach(periodicCallback, 1); // blink LED every second
filippomontano 3:5bce2e8d2797 219
filippomontano 3:5bce2e8d2797 220 printf("Starting Loop\r\n");
filippomontano 6:f85bc6e59111 221
filippomontano 6:f85bc6e59111 222
filippomontano 3:5bce2e8d2797 223 }
filippomontano 3:5bce2e8d2797 224 void onBleInitError(BLE &ble, ble_error_t error)
filippomontano 3:5bce2e8d2797 225 {
filippomontano 3:5bce2e8d2797 226 (void)ble;
filippomontano 3:5bce2e8d2797 227 (void)error;
filippomontano 3:5bce2e8d2797 228 printf(" ### BLE init error ###\r\n");
filippomontano 3:5bce2e8d2797 229
filippomontano 3:5bce2e8d2797 230
filippomontano 3:5bce2e8d2797 231 /* Initialization error handling should go here */
filippomontano 0:345c72cbcd60 232 }
filippomontano 6:f85bc6e59111 233 void onMsgReceived(void)
filippomontano 6:f85bc6e59111 234 {
filippomontano 6:f85bc6e59111 235 CANmsgAvailable = true;
filippomontano 6:f85bc6e59111 236 }
filippomontano 7:b834d20f9aa1 237
filippomontano 7:b834d20f9aa1 238 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
filippomontano 7:b834d20f9aa1 239 {
filippomontano 7:b834d20f9aa1 240 (void)params;
filippomontano 7:b834d20f9aa1 241 printf("\r\nTarget loss... wait for reconnection \r\n");
filippomontano 7:b834d20f9aa1 242
filippomontano 7:b834d20f9aa1 243 BLE::Instance().gap().startAdvertising(); // restart advertising
filippomontano 7:b834d20f9aa1 244 dumpMEM();
filippomontano 7:b834d20f9aa1 245 }
filippomontano 7:b834d20f9aa1 246
filippomontano 7:b834d20f9aa1 247 void writeCharCallback(const GattWriteCallbackParams *params)
filippomontano 7:b834d20f9aa1 248 {
filippomontano 7:b834d20f9aa1 249
filippomontano 7:b834d20f9aa1 250 uint8_t j=0;
filippomontano 7:b834d20f9aa1 251
filippomontano 7:b834d20f9aa1 252 // check to see what characteristic was written, by handle
filippomontano 7:b834d20f9aa1 253 if(params->handle == writeChar.getValueHandle()) {
filippomontano 7:b834d20f9aa1 254 j= BLESlot2CANId(params->data[0]);
filippomontano 7:b834d20f9aa1 255 printf("\n\r Data received: length = %d, data = ",params->len);
filippomontano 7:b834d20f9aa1 256 if(canRdPointer != j && canRdPointer != j+1) {
filippomontano 7:b834d20f9aa1 257 bleWrPointerA=j;
filippomontano 7:b834d20f9aa1 258 bleWrPointerB=j+1;
filippomontano 7:b834d20f9aa1 259 for(int x=0; x < 9; x++) {
filippomontano 7:b834d20f9aa1 260 printf("%c",params->data[x]);
filippomontano 7:b834d20f9aa1 261 shareddata[j][x]=params->data[x];
filippomontano 7:b834d20f9aa1 262 }
filippomontano 7:b834d20f9aa1 263 for(int x=9; x < 18; x++) {
filippomontano 7:b834d20f9aa1 264 printf("%c",params->data[x]);
filippomontano 7:b834d20f9aa1 265 shareddata[j+1][x-9]=params->data[x];
filippomontano 7:b834d20f9aa1 266 }
filippomontano 7:b834d20f9aa1 267 bleWrPointerA=255;
filippomontano 7:b834d20f9aa1 268 bleWrPointerB=255;
filippomontano 7:b834d20f9aa1 269 }
filippomontano 7:b834d20f9aa1 270 }
filippomontano 7:b834d20f9aa1 271 }
filippomontano 7:b834d20f9aa1 272 void periodicCallback(void)
filippomontano 7:b834d20f9aa1 273 {
filippomontano 7:b834d20f9aa1 274 if(!ble.getGapState().connected) {
filippomontano 7:b834d20f9aa1 275 printf("? ");
filippomontano 7:b834d20f9aa1 276 ticker.attach(periodicCallback, 1); // blink LED every 5 second
filippomontano 7:b834d20f9aa1 277 } else
filippomontano 7:b834d20f9aa1 278 ticker.attach(periodicCallback, 0.1); // blink LED every second
filippomontano 7:b834d20f9aa1 279
filippomontano 7:b834d20f9aa1 280 triggerSensorPolling = true;
filippomontano 7:b834d20f9aa1 281 }
filippomontano 7:b834d20f9aa1 282
filippomontano 6:f85bc6e59111 283 uint8_t CANId2BLESlot(unsigned int id)
filippomontano 0:345c72cbcd60 284 {
filippomontano 6:f85bc6e59111 285 uint8_t retval=0;
filippomontano 6:f85bc6e59111 286 switch(id) {
filippomontano 6:f85bc6e59111 287 case 0x313:
filippomontano 6:f85bc6e59111 288 retval=1;
filippomontano 6:f85bc6e59111 289 break;
filippomontano 6:f85bc6e59111 290 case 0x314:
filippomontano 6:f85bc6e59111 291 retval=2;
filippomontano 6:f85bc6e59111 292 break;
filippomontano 6:f85bc6e59111 293 case 0x310:
filippomontano 6:f85bc6e59111 294 retval=3;
filippomontano 6:f85bc6e59111 295 break;
filippomontano 6:f85bc6e59111 296 case 0x315:
filippomontano 6:f85bc6e59111 297 retval=4;
filippomontano 6:f85bc6e59111 298 break;
filippomontano 6:f85bc6e59111 299 case 0x111:
filippomontano 6:f85bc6e59111 300 retval=5;
filippomontano 6:f85bc6e59111 301 break;
filippomontano 6:f85bc6e59111 302 case 0x112:
filippomontano 6:f85bc6e59111 303 retval=6;
filippomontano 6:f85bc6e59111 304 break;
filippomontano 6:f85bc6e59111 305 case 0x400:
filippomontano 6:f85bc6e59111 306 retval=7;
filippomontano 6:f85bc6e59111 307 break;
filippomontano 6:f85bc6e59111 308 case 0x450:
filippomontano 6:f85bc6e59111 309 retval=8;
filippomontano 6:f85bc6e59111 310 break;
filippomontano 6:f85bc6e59111 311 case 0x451:
filippomontano 6:f85bc6e59111 312 retval=9;
filippomontano 6:f85bc6e59111 313 break;
filippomontano 6:f85bc6e59111 314 case 0x452:
filippomontano 6:f85bc6e59111 315 retval=10;
filippomontano 6:f85bc6e59111 316 break;
filippomontano 6:f85bc6e59111 317 case 0x453:
filippomontano 6:f85bc6e59111 318 retval=11;
filippomontano 6:f85bc6e59111 319 break;
filippomontano 6:f85bc6e59111 320 case 0x454:
filippomontano 6:f85bc6e59111 321 retval=12;
filippomontano 6:f85bc6e59111 322 break;
filippomontano 6:f85bc6e59111 323 case 0x455:
filippomontano 6:f85bc6e59111 324 retval=13;
filippomontano 6:f85bc6e59111 325 break;
filippomontano 6:f85bc6e59111 326 default:
filippomontano 6:f85bc6e59111 327 retval=0;
filippomontano 6:f85bc6e59111 328 break;
filippomontano 6:f85bc6e59111 329 }
filippomontano 6:f85bc6e59111 330 return retval;
filippomontano 6:f85bc6e59111 331 }
filippomontano 6:f85bc6e59111 332 unsigned int BLESlot2CANId(uint8_t id)
filippomontano 6:f85bc6e59111 333 {
filippomontano 6:f85bc6e59111 334 unsigned int retval=0;
filippomontano 6:f85bc6e59111 335 switch(id) {
filippomontano 6:f85bc6e59111 336 case 63:
filippomontano 7:b834d20f9aa1 337 retval=0x301;
filippomontano 7:b834d20f9aa1 338 break;
filippomontano 7:b834d20f9aa1 339 case 62:
filippomontano 7:b834d20f9aa1 340 retval=0x302;
filippomontano 7:b834d20f9aa1 341 break;
filippomontano 7:b834d20f9aa1 342 case 61:
filippomontano 6:f85bc6e59111 343 retval=0x303;
filippomontano 6:f85bc6e59111 344 break;
filippomontano 7:b834d20f9aa1 345 case 60:
filippomontano 6:f85bc6e59111 346 retval=0x304;
filippomontano 6:f85bc6e59111 347 break;
filippomontano 7:b834d20f9aa1 348 case 59:
filippomontano 7:b834d20f9aa1 349 retval=0x101;
filippomontano 7:b834d20f9aa1 350 break;
filippomontano 7:b834d20f9aa1 351 case 58:
filippomontano 7:b834d20f9aa1 352 retval=0x102
filippomontano 7:b834d20f9aa1 353 ;
filippomontano 7:b834d20f9aa1 354 break;
filippomontano 7:b834d20f9aa1 355 case 57:
filippomontano 7:b834d20f9aa1 356 retval=0x040;
filippomontano 7:b834d20f9aa1 357 break;
filippomontano 6:f85bc6e59111 358 default:
filippomontano 6:f85bc6e59111 359 retval=0x0;
filippomontano 6:f85bc6e59111 360 break;
filippomontano 6:f85bc6e59111 361 }
filippomontano 6:f85bc6e59111 362 return retval;
filippomontano 6:f85bc6e59111 363 }
filippomontano 7:b834d20f9aa1 364 void initMEM(void)
filippomontano 3:5bce2e8d2797 365 {
filippomontano 7:b834d20f9aa1 366 for(int im = 0; im<64; im++) {
filippomontano 7:b834d20f9aa1 367 for (int jm=0; jm<8; jm++) {
filippomontano 7:b834d20f9aa1 368 shareddata[im][jm]=0x00;
filippomontano 3:5bce2e8d2797 369 }
filippomontano 6:f85bc6e59111 370 }
filippomontano 7:b834d20f9aa1 371 for (int jm=0; jm<8; jm++) {
filippomontano 7:b834d20f9aa1 372 kantMsg[jm]=0;
filippomontano 7:b834d20f9aa1 373 }
filippomontano 3:5bce2e8d2797 374 }
filippomontano 7:b834d20f9aa1 375 void dumpMEM(void)
filippomontano 6:f85bc6e59111 376 {
filippomontano 7:b834d20f9aa1 377 printf("\r\n --- Memory Dump ---");
filippomontano 7:b834d20f9aa1 378 for(int im = 0; im<64; im++) {
filippomontano 7:b834d20f9aa1 379 printf("\r\n%.2x", im);
filippomontano 7:b834d20f9aa1 380 for (int jm=0; jm<8; jm++) {
filippomontano 7:b834d20f9aa1 381 printf(" %.2x", shareddata[im][jm]);
filippomontano 7:b834d20f9aa1 382 }
filippomontano 7:b834d20f9aa1 383 }
filippomontano 7:b834d20f9aa1 384 printf("\r\n --- End of Dump ---\r\n");
filippomontano 6:f85bc6e59111 385 }