CAN to BLE translator - and back
Dependencies: BLE_API CANnucleo X_NUCLEO_IDB0XA1 mbed
main.cpp@7:b834d20f9aa1, 2016-04-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |