modified for project

Dependencies:   Servo Cayenne-LPP

Committer:
suhaimiamiruddin
Date:
Fri Jun 11 14:01:47 2021 +0000
Revision:
61:de4f2279be57
Parent:
59:7b58c5775a56
eggs tracker lorawan

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:7037ed05f54f 1 /**
mbed_official 0:7037ed05f54f 2 * Copyright (c) 2017, Arm Limited and affiliates.
mbed_official 0:7037ed05f54f 3 * SPDX-License-Identifier: Apache-2.0
mbed_official 0:7037ed05f54f 4 *
mbed_official 0:7037ed05f54f 5 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 0:7037ed05f54f 6 * you may not use this file except in compliance with the License.
mbed_official 0:7037ed05f54f 7 * You may obtain a copy of the License at
mbed_official 0:7037ed05f54f 8 *
mbed_official 0:7037ed05f54f 9 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 0:7037ed05f54f 10 *
mbed_official 0:7037ed05f54f 11 * Unless required by applicable law or agreed to in writing, software
mbed_official 0:7037ed05f54f 12 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 0:7037ed05f54f 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 0:7037ed05f54f 14 * See the License for the specific language governing permissions and
mbed_official 0:7037ed05f54f 15 * limitations under the License.
mbed_official 0:7037ed05f54f 16 */
mbed_official 0:7037ed05f54f 17 #include <stdio.h>
superphil06 58:81c66fac6476 18 #include "th02.h"
superphil06 57:5ec0379d69d6 19 #include "CayenneLPP.h"
mbed_official 0:7037ed05f54f 20 #include "lorawan/LoRaWANInterface.h"
mbed_official 0:7037ed05f54f 21 #include "lorawan/system/lorawan_data_structures.h"
mbed_official 0:7037ed05f54f 22 #include "events/EventQueue.h"
mbed_official 0:7037ed05f54f 23
mbed_official 0:7037ed05f54f 24 // Application helpers
mbed_official 0:7037ed05f54f 25 #include "DummySensor.h"
mbed_official 0:7037ed05f54f 26 #include "trace_helper.h"
mbed_official 0:7037ed05f54f 27 #include "lora_radio_helper.h"
superphil06 58:81c66fac6476 28 #include "Servo.h"
mbed_official 0:7037ed05f54f 29
mbed_official 0:7037ed05f54f 30 using namespace events;
mbed_official 0:7037ed05f54f 31
mbed_official 12:5015dfead3f2 32 // Max payload size can be LORAMAC_PHY_MAXPAYLOAD.
suhaimiamiruddin 61:de4f2279be57 33 // This example only communicates with much shorter messages (<30 uint8_ts).
mbed_official 12:5015dfead3f2 34 // If longer messages are used, these buffers must be changed accordingly.
mbed_official 12:5015dfead3f2 35 uint8_t tx_buffer[30];
mbed_official 12:5015dfead3f2 36 uint8_t rx_buffer[30];
mbed_official 0:7037ed05f54f 37
superphil06 57:5ec0379d69d6 38 #define MAX_SIZE 200 // depends on spreading factor and frequency used
superphil06 57:5ec0379d69d6 39
superphil06 57:5ec0379d69d6 40 CayenneLPP Payload(MAX_SIZE);
superphil06 57:5ec0379d69d6 41
superphil06 57:5ec0379d69d6 42 float celsius = -4.1;
superphil06 57:5ec0379d69d6 43 float accel[] = {1.234, -1.234, 0};
superphil06 57:5ec0379d69d6 44 float rh = 30;
superphil06 57:5ec0379d69d6 45 float hpa = 1014.1;
superphil06 57:5ec0379d69d6 46 float latitude = 42.3519;
superphil06 57:5ec0379d69d6 47 float longitude = -87.9094;
superphil06 57:5ec0379d69d6 48 float altitude=10;
superphil06 57:5ec0379d69d6 49
superphil06 57:5ec0379d69d6 50 int size = 0;
superphil06 57:5ec0379d69d6 51
superphil06 57:5ec0379d69d6 52
suhaimiamiruddin 61:de4f2279be57 53 /*DigitalOut Alarme (PC_13);// alarme LED output
superphil06 58:81c66fac6476 54 Servo Myservo(PA_7); //servomotor output
suhaimiamiruddin 61:de4f2279be57 55 TH02 MyTH02 (I2C_SDA,I2C_SCL,TH02_I2C_ADDR<<1);// connect hsensor on RX2 TX2*/
suhaimiamiruddin 61:de4f2279be57 56
mbed_official 0:7037ed05f54f 57 /*
mbed_official 0:7037ed05f54f 58 * Sets up an application dependent transmission timer in ms. Used only when Duty Cycling is off for testing
mbed_official 0:7037ed05f54f 59 */
superphil06 59:7b58c5775a56 60 #define TX_TIMER 20000
mbed_official 0:7037ed05f54f 61
mbed_official 0:7037ed05f54f 62 /**
mbed_official 0:7037ed05f54f 63 * Maximum number of events for the event queue.
mbed_official 12:5015dfead3f2 64 * 10 is the safe number for the stack events, however, if application
mbed_official 0:7037ed05f54f 65 * also uses the queue for whatever purposes, this number should be increased.
mbed_official 0:7037ed05f54f 66 */
superphil06 59:7b58c5775a56 67 #define MAX_NUMBER_OF_EVENTS 30
mbed_official 0:7037ed05f54f 68
mbed_official 0:7037ed05f54f 69 /**
mbed_official 0:7037ed05f54f 70 * Maximum number of retries for CONFIRMED messages before giving up
mbed_official 0:7037ed05f54f 71 */
mbed_official 0:7037ed05f54f 72 #define CONFIRMED_MSG_RETRY_COUNTER 3
mbed_official 0:7037ed05f54f 73
mbed_official 0:7037ed05f54f 74 /**
mbed_official 0:7037ed05f54f 75 * Dummy pin for dummy sensor
mbed_official 0:7037ed05f54f 76 */
mbed_official 0:7037ed05f54f 77 #define PC_9 0
mbed_official 0:7037ed05f54f 78
mbed_official 0:7037ed05f54f 79 /**
mbed_official 0:7037ed05f54f 80 * Dummy sensor class object
mbed_official 0:7037ed05f54f 81 */
mbed_official 0:7037ed05f54f 82 DS1820 ds1820(PC_9);
mbed_official 0:7037ed05f54f 83
suhaimiamiruddin 61:de4f2279be57 84 //adc internal temperature
suhaimiamiruddin 61:de4f2279be57 85 AnalogIn adc_temp(ADC_TEMP);
suhaimiamiruddin 61:de4f2279be57 86 #define TCAL_30 ((uint16_t *)(0x1FF8007A ))//des valeurs pour la calibration
suhaimiamiruddin 61:de4f2279be57 87 #define TCAL_130 ((uint16_t *)(0x1FF8007E ))
suhaimiamiruddin 61:de4f2279be57 88
suhaimiamiruddin 61:de4f2279be57 89 #define CALIBRATION_REFERENCE_VOLTAGE ((uint16_t *)(0x1FF80078 ))
suhaimiamiruddin 61:de4f2279be57 90
suhaimiamiruddin 61:de4f2279be57 91 #define REFERENCE_VOLTAGE 3.0F // supplied with Vref+ or VDDA
suhaimiamiruddin 61:de4f2279be57 92
suhaimiamiruddin 61:de4f2279be57 93 uint8_t calculcrc(uint8_t[],int);
suhaimiamiruddin 61:de4f2279be57 94 uint8_t simplecrc8(uint8_t);
suhaimiamiruddin 61:de4f2279be57 95
mbed_official 0:7037ed05f54f 96 /**
mbed_official 0:7037ed05f54f 97 * This event queue is the global event queue for both the
mbed_official 0:7037ed05f54f 98 * application and stack. To conserve memory, the stack is designed to run
mbed_official 0:7037ed05f54f 99 * in the same thread as the application and the application is responsible for
mbed_official 0:7037ed05f54f 100 * providing an event queue to the stack that will be used for ISR deferment as
mbed_official 0:7037ed05f54f 101 * well as application information event queuing.
mbed_official 0:7037ed05f54f 102 */
mbed_official 46:a124538e2891 103 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
mbed_official 0:7037ed05f54f 104
mbed_official 0:7037ed05f54f 105 /**
mbed_official 0:7037ed05f54f 106 * Event handler.
mbed_official 0:7037ed05f54f 107 *
mbed_official 0:7037ed05f54f 108 * This will be passed to the LoRaWAN stack to queue events for the
mbed_official 0:7037ed05f54f 109 * application which in turn drive the application.
mbed_official 0:7037ed05f54f 110 */
mbed_official 0:7037ed05f54f 111 static void lora_event_handler(lorawan_event_t event);
mbed_official 0:7037ed05f54f 112
mbed_official 0:7037ed05f54f 113 /**
mbed_official 46:a124538e2891 114 * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper.
mbed_official 0:7037ed05f54f 115 */
mbed_official 2:dc95ac6d6d4e 116 static LoRaWANInterface lorawan(radio);
mbed_official 0:7037ed05f54f 117
mbed_official 0:7037ed05f54f 118 /**
mbed_official 0:7037ed05f54f 119 * Application specific callbacks
mbed_official 0:7037ed05f54f 120 */
mbed_official 0:7037ed05f54f 121 static lorawan_app_callbacks_t callbacks;
mbed_official 0:7037ed05f54f 122
superphil06 58:81c66fac6476 123 void servo(uint8_t uAngle)
superphil06 58:81c66fac6476 124 {
superphil06 58:81c66fac6476 125
superphil06 58:81c66fac6476 126 }
superphil06 58:81c66fac6476 127
superphil06 58:81c66fac6476 128
superphil06 58:81c66fac6476 129
mbed_official 0:7037ed05f54f 130 /**
mbed_official 0:7037ed05f54f 131 * Entry point for application
mbed_official 0:7037ed05f54f 132 */
mbed_official 46:a124538e2891 133 int main(void)
mbed_official 0:7037ed05f54f 134 {
mbed_official 0:7037ed05f54f 135 // setup tracing
mbed_official 0:7037ed05f54f 136 setup_trace();
suhaimiamiruddin 61:de4f2279be57 137 /* th02 temerature sensor section
superphil06 58:81c66fac6476 138 int iTemp,iTime,iTempbrute,iRH,iRHbrute;
superphil06 58:81c66fac6476 139 printf ("\n\r start reading TH02 for first time");
suhaimiamiruddin 61:de4f2279be57 140 MyTH02.startTempConv(true,true);*/
superphil06 58:81c66fac6476 141
superphil06 58:81c66fac6476 142
superphil06 58:81c66fac6476 143
mbed_official 0:7037ed05f54f 144
mbed_official 0:7037ed05f54f 145 // stores the status of a call to LoRaWAN protocol
mbed_official 0:7037ed05f54f 146 lorawan_status_t retcode;
mbed_official 0:7037ed05f54f 147
mbed_official 0:7037ed05f54f 148 // Initialize LoRaWAN stack
mbed_official 2:dc95ac6d6d4e 149 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 150 printf("\r\n LoRa initialization failed! \r\n");
mbed_official 0:7037ed05f54f 151 return -1;
mbed_official 0:7037ed05f54f 152 }
mbed_official 0:7037ed05f54f 153
mbed_official 0:7037ed05f54f 154 printf("\r\n Mbed LoRaWANStack initialized \r\n");
mbed_official 0:7037ed05f54f 155
mbed_official 0:7037ed05f54f 156 // prepare application callbacks
mbed_official 0:7037ed05f54f 157 callbacks.events = mbed::callback(lora_event_handler);
mbed_official 2:dc95ac6d6d4e 158 lorawan.add_app_callbacks(&callbacks);
mbed_official 0:7037ed05f54f 159
mbed_official 0:7037ed05f54f 160 // Set number of retries in case of CONFIRMED messages
mbed_official 2:dc95ac6d6d4e 161 if (lorawan.set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER)
mbed_official 46:a124538e2891 162 != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 163 printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
mbed_official 0:7037ed05f54f 164 return -1;
mbed_official 0:7037ed05f54f 165 }
mbed_official 0:7037ed05f54f 166
mbed_official 0:7037ed05f54f 167 printf("\r\n CONFIRMED message retries : %d \r\n",
mbed_official 0:7037ed05f54f 168 CONFIRMED_MSG_RETRY_COUNTER);
mbed_official 0:7037ed05f54f 169
mbed_official 0:7037ed05f54f 170 // Enable adaptive data rate
mbed_official 2:dc95ac6d6d4e 171 if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 172 printf("\r\n enable_adaptive_datarate failed! \r\n");
mbed_official 0:7037ed05f54f 173 return -1;
mbed_official 0:7037ed05f54f 174 }
mbed_official 0:7037ed05f54f 175
mbed_official 0:7037ed05f54f 176 printf("\r\n Adaptive data rate (ADR) - Enabled \r\n");
mbed_official 0:7037ed05f54f 177
mbed_official 2:dc95ac6d6d4e 178 retcode = lorawan.connect();
mbed_official 0:7037ed05f54f 179
mbed_official 0:7037ed05f54f 180 if (retcode == LORAWAN_STATUS_OK ||
mbed_official 46:a124538e2891 181 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
mbed_official 0:7037ed05f54f 182 } else {
mbed_official 0:7037ed05f54f 183 printf("\r\n Connection error, code = %d \r\n", retcode);
mbed_official 0:7037ed05f54f 184 return -1;
mbed_official 0:7037ed05f54f 185 }
mbed_official 0:7037ed05f54f 186
mbed_official 0:7037ed05f54f 187 printf("\r\n Connection - In Progress ...\r\n");
mbed_official 0:7037ed05f54f 188
mbed_official 0:7037ed05f54f 189 // make your event queue dispatching events forever
mbed_official 0:7037ed05f54f 190 ev_queue.dispatch_forever();
mbed_official 3:8c7198d1a2a1 191
mbed_official 3:8c7198d1a2a1 192 return 0;
mbed_official 0:7037ed05f54f 193 }
mbed_official 0:7037ed05f54f 194
suhaimiamiruddin 61:de4f2279be57 195 /*****************************************************
mbed_official 0:7037ed05f54f 196 * Sends a message to the Network Server
suhaimiamiruddin 61:de4f2279be57 197 *****************************************************/
mbed_official 0:7037ed05f54f 198 static void send_message()
superphil06 58:81c66fac6476 199 {int iTime,iTempbrute,iRHbrute;
superphil06 58:81c66fac6476 200 uint16_t packet_len;
superphil06 58:81c66fac6476 201 int16_t retcode;
suhaimiamiruddin 61:de4f2279be57 202 int32_t sensor_value, temp_value, rh_value;
suhaimiamiruddin 61:de4f2279be57 203 float adcCalTemp30C,adcCalTemp130C,ftemp;
suhaimiamiruddin 61:de4f2279be57 204 double temp;
suhaimiamiruddin 61:de4f2279be57 205 uint8_t badge, crc1, crc2;uint8_t ibadge[] = {0x1A, 0x14, 0xA3, 0xB5, 0xC4, 0x03, 0x2E, 0x61, 0x52, 0x32, 0x46};
superphil06 57:5ec0379d69d6 206
superphil06 59:7b58c5775a56 207 /*MyTH02.startTempConv(true,true);
superphil06 58:81c66fac6476 208 iTime= MyTH02.waitEndConversion();// wait until onversion is done
superphil06 58:81c66fac6476 209 iTempbrute= MyTH02.getConversionValue();
superphil06 58:81c66fac6476 210 sensor_value=MyTH02.getLastRawTemp();
suhaimiamiruddin 61:de4f2279be57 211 printf ("\n\r temp value=%d %d",sensor_value,iTempbrute );*/
mbed_official 0:7037ed05f54f 212
suhaimiamiruddin 61:de4f2279be57 213 adcCalTemp30C = *TCAL_30 * (REFERENCE_VOLTAGE/ *CALIBRATION_REFERENCE_VOLTAGE);
suhaimiamiruddin 61:de4f2279be57 214 adcCalTemp130C = *TCAL_130 * (REFERENCE_VOLTAGE/ *CALIBRATION_REFERENCE_VOLTAGE);
suhaimiamiruddin 61:de4f2279be57 215
suhaimiamiruddin 61:de4f2279be57 216 /*printf("reference voltage %x\r\n", *CALIBRATION_REFERENCE_VOLTAGE);
suhaimiamiruddin 61:de4f2279be57 217 printf("30 degrees %x\r\n", *TCAL_30);
suhaimiamiruddin 61:de4f2279be57 218 printf("130 degrees %x\r\n", *TCAL_130);*/
suhaimiamiruddin 61:de4f2279be57 219
suhaimiamiruddin 61:de4f2279be57 220 badge = 0x1A;
suhaimiamiruddin 61:de4f2279be57 221 crc1 = simplecrc8(badge);
suhaimiamiruddin 61:de4f2279be57 222 printf("crcsend = %x\r\n\n\n", crc1);
suhaimiamiruddin 61:de4f2279be57 223 crc2 = calculcrc(ibadge, sizeof(ibadge));
suhaimiamiruddin 61:de4f2279be57 224 printf("crcreceive = %x\r\n", crc2);
suhaimiamiruddin 61:de4f2279be57 225
suhaimiamiruddin 61:de4f2279be57 226 /* temp=adc_temp.read_u16();
suhaimiamiruddin 61:de4f2279be57 227 printf("ADC Temp Value = %f\r\n", temp);
suhaimiamiruddin 61:de4f2279be57 228 ftemp = ( ( (130 - 30)*(temp - *TCAL_30) ) / (*TCAL_130 - *TCAL_30) ) + 30;
suhaimiamiruddin 61:de4f2279be57 229 printf("temperature = %f \r\n",ftemp); */
suhaimiamiruddin 61:de4f2279be57 230
mbed_official 0:7037ed05f54f 231 if (ds1820.begin()) {
mbed_official 0:7037ed05f54f 232 ds1820.startConversion();
mbed_official 0:7037ed05f54f 233 sensor_value = ds1820.read();
mbed_official 56:39847849d219 234 printf("\r\n Dummy Sensor Value = %d \r\n", sensor_value);
mbed_official 0:7037ed05f54f 235 ds1820.startConversion();
mbed_official 0:7037ed05f54f 236 } else {
mbed_official 0:7037ed05f54f 237 printf("\r\n No sensor found \r\n");
mbed_official 0:7037ed05f54f 238 return;
superphil06 59:7b58c5775a56 239 }
superphil06 58:81c66fac6476 240
superphil06 57:5ec0379d69d6 241 Payload.reset();
suhaimiamiruddin 61:de4f2279be57 242 Payload.addTemperature(1, (float) sensor_value/100);
suhaimiamiruddin 61:de4f2279be57 243 Payload.addRelativeHumidity(2, (float) sensor_value/10);
suhaimiamiruddin 61:de4f2279be57 244 Payload.addDigitalInput(3, sensor_value);
superphil06 59:7b58c5775a56 245
superphil06 58:81c66fac6476 246
superphil06 58:81c66fac6476 247
superphil06 57:5ec0379d69d6 248 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, Payload.getBuffer(), Payload.getSize(),
superphil06 57:5ec0379d69d6 249 MSG_UNCONFIRMED_FLAG);
mbed_official 0:7037ed05f54f 250
mbed_official 0:7037ed05f54f 251 if (retcode < 0) {
mbed_official 0:7037ed05f54f 252 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
mbed_official 46:a124538e2891 253 : printf("\r\n send() - Error code %d \r\n", retcode);
mbed_official 26:f07f5febf97f 254
mbed_official 26:f07f5febf97f 255 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
mbed_official 26:f07f5febf97f 256 //retry in 3 seconds
mbed_official 26:f07f5febf97f 257 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 258 ev_queue.call_in(3000, send_message);
mbed_official 26:f07f5febf97f 259 }
mbed_official 26:f07f5febf97f 260 }
mbed_official 0:7037ed05f54f 261 return;
mbed_official 0:7037ed05f54f 262 }
mbed_official 0:7037ed05f54f 263
suhaimiamiruddin 61:de4f2279be57 264 printf("\r\n %d uint8_ts scheduled for transmission \r\n", retcode);
suhaimiamiruddin 61:de4f2279be57 265 memset(Payload.getBuffer(), 0, Payload.getSize());
mbed_official 0:7037ed05f54f 266 }
mbed_official 0:7037ed05f54f 267
suhaimiamiruddin 61:de4f2279be57 268 /*************************************************
mbed_official 0:7037ed05f54f 269 * Receive a message from the Network Server
suhaimiamiruddin 61:de4f2279be57 270 *************************************************/
mbed_official 0:7037ed05f54f 271 static void receive_message()
superphil06 58:81c66fac6476 272 {int num_port;
mbed_official 47:b6d132f1079f 273 uint8_t port;
mbed_official 47:b6d132f1079f 274 int flags;
mbed_official 47:b6d132f1079f 275 int16_t retcode = lorawan.receive(rx_buffer, sizeof(rx_buffer), port, flags);
mbed_official 0:7037ed05f54f 276
mbed_official 0:7037ed05f54f 277 if (retcode < 0) {
mbed_official 0:7037ed05f54f 278 printf("\r\n receive() - Error code %d \r\n", retcode);
mbed_official 0:7037ed05f54f 279 return;
mbed_official 0:7037ed05f54f 280 }
mbed_official 0:7037ed05f54f 281
suhaimiamiruddin 61:de4f2279be57 282 printf(" RX Data on port %u (%d uint8_ts): ", port, retcode);
mbed_official 0:7037ed05f54f 283 for (uint8_t i = 0; i < retcode; i++) {
superphil06 59:7b58c5775a56 284 printf("%02x", rx_buffer[i]);
mbed_official 0:7037ed05f54f 285 }
superphil06 58:81c66fac6476 286 printf("\n test value=%d", port);
superphil06 59:7b58c5775a56 287 // code todo here
superphil06 59:7b58c5775a56 288
superphil06 58:81c66fac6476 289
mbed_official 12:5015dfead3f2 290 memset(rx_buffer, 0, sizeof(rx_buffer));
mbed_official 0:7037ed05f54f 291 }
mbed_official 0:7037ed05f54f 292
suhaimiamiruddin 61:de4f2279be57 293 /******************
mbed_official 0:7037ed05f54f 294 * Event handler
suhaimiamiruddin 61:de4f2279be57 295 *****************/
mbed_official 0:7037ed05f54f 296 static void lora_event_handler(lorawan_event_t event)
mbed_official 0:7037ed05f54f 297 {
mbed_official 0:7037ed05f54f 298 switch (event) {
mbed_official 0:7037ed05f54f 299 case CONNECTED:
mbed_official 0:7037ed05f54f 300 printf("\r\n Connection - Successful \r\n");
mbed_official 0:7037ed05f54f 301 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 302 send_message();
mbed_official 0:7037ed05f54f 303 } else {
mbed_official 0:7037ed05f54f 304 ev_queue.call_every(TX_TIMER, send_message);
mbed_official 0:7037ed05f54f 305 }
mbed_official 0:7037ed05f54f 306
mbed_official 0:7037ed05f54f 307 break;
mbed_official 0:7037ed05f54f 308 case DISCONNECTED:
mbed_official 0:7037ed05f54f 309 ev_queue.break_dispatch();
mbed_official 0:7037ed05f54f 310 printf("\r\n Disconnected Successfully \r\n");
mbed_official 0:7037ed05f54f 311 break;
mbed_official 0:7037ed05f54f 312 case TX_DONE:
mbed_official 0:7037ed05f54f 313 printf("\r\n Message Sent to Network Server \r\n");
mbed_official 0:7037ed05f54f 314 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 315 send_message();
mbed_official 0:7037ed05f54f 316 }
mbed_official 0:7037ed05f54f 317 break;
mbed_official 0:7037ed05f54f 318 case TX_TIMEOUT:
mbed_official 0:7037ed05f54f 319 case TX_ERROR:
mbed_official 0:7037ed05f54f 320 case TX_CRYPTO_ERROR:
mbed_official 0:7037ed05f54f 321 case TX_SCHEDULING_ERROR:
mbed_official 0:7037ed05f54f 322 printf("\r\n Transmission Error - EventCode = %d \r\n", event);
mbed_official 0:7037ed05f54f 323 // try again
mbed_official 0:7037ed05f54f 324 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 325 send_message();
mbed_official 0:7037ed05f54f 326 }
mbed_official 0:7037ed05f54f 327 break;
mbed_official 0:7037ed05f54f 328 case RX_DONE:
mbed_official 0:7037ed05f54f 329 printf("\r\n Received message from Network Server \r\n");
mbed_official 0:7037ed05f54f 330 receive_message();
mbed_official 0:7037ed05f54f 331 break;
mbed_official 0:7037ed05f54f 332 case RX_TIMEOUT:
superphil06 59:7b58c5775a56 333 printf("\r\n timeout in reception - Code = %d \r\n", event);
superphil06 59:7b58c5775a56 334 break;
mbed_official 0:7037ed05f54f 335 case RX_ERROR:
mbed_official 0:7037ed05f54f 336 printf("\r\n Error in reception - Code = %d \r\n", event);
mbed_official 0:7037ed05f54f 337 break;
mbed_official 0:7037ed05f54f 338 case JOIN_FAILURE:
mbed_official 0:7037ed05f54f 339 printf("\r\n OTAA Failed - Check Keys \r\n");
mbed_official 0:7037ed05f54f 340 break;
mbed_official 26:f07f5febf97f 341 case UPLINK_REQUIRED:
mbed_official 26:f07f5febf97f 342 printf("\r\n Uplink required by NS \r\n");
mbed_official 26:f07f5febf97f 343 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 344 send_message();
mbed_official 26:f07f5febf97f 345 }
mbed_official 26:f07f5febf97f 346 break;
mbed_official 0:7037ed05f54f 347 default:
mbed_official 0:7037ed05f54f 348 MBED_ASSERT("Unknown Event");
mbed_official 0:7037ed05f54f 349 }
mbed_official 0:7037ed05f54f 350 }
mbed_official 0:7037ed05f54f 351
mbed_official 0:7037ed05f54f 352 // EOF
suhaimiamiruddin 61:de4f2279be57 353
suhaimiamiruddin 61:de4f2279be57 354 /******************
suhaimiamiruddin 61:de4f2279be57 355 * Calcul CRC
suhaimiamiruddin 61:de4f2279be57 356 *****************/
suhaimiamiruddin 61:de4f2279be57 357 uint8_t calculcrc(uint8_t *byteVal, int taille)
suhaimiamiruddin 61:de4f2279be57 358 {
suhaimiamiruddin 61:de4f2279be57 359 uint8_t generator = 0x07;
suhaimiamiruddin 61:de4f2279be57 360 uint8_t crc = 0; /* start with 0 so first byte can be 'xored' in */
suhaimiamiruddin 61:de4f2279be57 361
suhaimiamiruddin 61:de4f2279be57 362 printf("byteval = %x%x%x%x%x%x%x%x%x%x\r\n", *byteVal, *(byteVal+1), *(byteVal+2), *(byteVal+3), *(byteVal+4), *(byteVal+5), *(byteVal+6), *(byteVal+7), *(byteVal+8), *(byteVal+9), *(byteVal+10));
suhaimiamiruddin 61:de4f2279be57 363
suhaimiamiruddin 61:de4f2279be57 364 for(int i=0; i<taille; i++)
suhaimiamiruddin 61:de4f2279be57 365 {
suhaimiamiruddin 61:de4f2279be57 366 printf("current byte = %x\r\n",byteVal[i]);
suhaimiamiruddin 61:de4f2279be57 367 crc ^= byteVal[i]; /* XOR-in the next input byte */
suhaimiamiruddin 61:de4f2279be57 368 printf("current crc = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 369
suhaimiamiruddin 61:de4f2279be57 370 for (int j = 0; j < 8; j++)
suhaimiamiruddin 61:de4f2279be57 371 {
suhaimiamiruddin 61:de4f2279be57 372 printf("msbcrc = %x\r\n", crc & 0x80);
suhaimiamiruddin 61:de4f2279be57 373 if ((crc & 0x80) != 0)
suhaimiamiruddin 61:de4f2279be57 374 {
suhaimiamiruddin 61:de4f2279be57 375 crc = (uint8_t)((crc << 1) ^ generator);
suhaimiamiruddin 61:de4f2279be57 376 printf("crc = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 377 }
suhaimiamiruddin 61:de4f2279be57 378 else
suhaimiamiruddin 61:de4f2279be57 379 {
suhaimiamiruddin 61:de4f2279be57 380 crc <<= 1;
suhaimiamiruddin 61:de4f2279be57 381 printf("msbcrc 0 so we shift = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 382 }
suhaimiamiruddin 61:de4f2279be57 383 }
suhaimiamiruddin 61:de4f2279be57 384 }
suhaimiamiruddin 61:de4f2279be57 385
suhaimiamiruddin 61:de4f2279be57 386 return crc;
suhaimiamiruddin 61:de4f2279be57 387 }
suhaimiamiruddin 61:de4f2279be57 388
suhaimiamiruddin 61:de4f2279be57 389 uint8_t simplecrc8(uint8_t byteVal)
suhaimiamiruddin 61:de4f2279be57 390 {
suhaimiamiruddin 61:de4f2279be57 391 uint8_t generator = 0x07;
suhaimiamiruddin 61:de4f2279be57 392 uint8_t crc = byteVal; /* init crc directly with input byte instead of 0, avoid useless 8 bitshifts until input byte is in crc register */
suhaimiamiruddin 61:de4f2279be57 393 printf("byteval = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 394
suhaimiamiruddin 61:de4f2279be57 395 for (int i = 0; i < 8; i++)
suhaimiamiruddin 61:de4f2279be57 396 {
suhaimiamiruddin 61:de4f2279be57 397 printf("msbcrc = %x\r\n", crc & 0x80);
suhaimiamiruddin 61:de4f2279be57 398 if ((crc & 0x80) != 0)
suhaimiamiruddin 61:de4f2279be57 399 { /* most significant bit set, shift crc register and perform XOR operation, taking not-saved 9th set bit into account */
suhaimiamiruddin 61:de4f2279be57 400 crc = (uint8_t)((crc << 1) ^ generator);
suhaimiamiruddin 61:de4f2279be57 401 printf("crc after xor with generator = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 402 }
suhaimiamiruddin 61:de4f2279be57 403 else
suhaimiamiruddin 61:de4f2279be57 404 { /* most significant bit not set, go to next bit */
suhaimiamiruddin 61:de4f2279be57 405 crc <<= 1;
suhaimiamiruddin 61:de4f2279be57 406 printf("msbcrc is zero, we shift = %x\r\n", crc);
suhaimiamiruddin 61:de4f2279be57 407 }
suhaimiamiruddin 61:de4f2279be57 408 }
suhaimiamiruddin 61:de4f2279be57 409
suhaimiamiruddin 61:de4f2279be57 410 return crc;
suhaimiamiruddin 61:de4f2279be57 411 }