This is the firmware for the 'Connecting devices to Pelion Device Management using Mbed Edge' tutorial

Committer:
Jan Jongboom
Date:
Tue Aug 14 12:17:46 2018 +0200
Revision:
0:2f1d715b6434
Child:
2:f76a61a91e47
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jan Jongboom 0:2f1d715b6434 1 #include "mbed.h"
Jan Jongboom 0:2f1d715b6434 2
Jan Jongboom 0:2f1d715b6434 3 Serial pc(USBTX, USBRX);
Jan Jongboom 0:2f1d715b6434 4
Jan Jongboom 0:2f1d715b6434 5 static char serial_buffer[1024] = { 0 };
Jan Jongboom 0:2f1d715b6434 6 static uint32_t serial_ix = 0;
Jan Jongboom 0:2f1d715b6434 7 static bool serial_line_ready = false;
Jan Jongboom 0:2f1d715b6434 8 static bool button_pressed = false;
Jan Jongboom 0:2f1d715b6434 9 static uint32_t button_count = 0;
Jan Jongboom 0:2f1d715b6434 10
Jan Jongboom 0:2f1d715b6434 11 static DigitalOut led(LED1);
Jan Jongboom 0:2f1d715b6434 12 static InterruptIn btn(BUTTON1);
Jan Jongboom 0:2f1d715b6434 13
Jan Jongboom 0:2f1d715b6434 14 void rx_irq() {
Jan Jongboom 0:2f1d715b6434 15 char c = pc.getc();
Jan Jongboom 0:2f1d715b6434 16
Jan Jongboom 0:2f1d715b6434 17 if (c == '\r') {
Jan Jongboom 0:2f1d715b6434 18 serial_line_ready = true;
Jan Jongboom 0:2f1d715b6434 19 }
Jan Jongboom 0:2f1d715b6434 20 else if (c == '\n') {
Jan Jongboom 0:2f1d715b6434 21 return;
Jan Jongboom 0:2f1d715b6434 22 }
Jan Jongboom 0:2f1d715b6434 23 else {
Jan Jongboom 0:2f1d715b6434 24 serial_buffer[serial_ix] = c;
Jan Jongboom 0:2f1d715b6434 25
Jan Jongboom 0:2f1d715b6434 26 serial_ix++;
Jan Jongboom 0:2f1d715b6434 27 }
Jan Jongboom 0:2f1d715b6434 28
Jan Jongboom 0:2f1d715b6434 29 if (serial_ix >= 1023) {
Jan Jongboom 0:2f1d715b6434 30 memset(serial_buffer, 0, 1024);
Jan Jongboom 0:2f1d715b6434 31 serial_ix = 0;
Jan Jongboom 0:2f1d715b6434 32 }
Jan Jongboom 0:2f1d715b6434 33 }
Jan Jongboom 0:2f1d715b6434 34
Jan Jongboom 0:2f1d715b6434 35 void btn_irq() {
Jan Jongboom 0:2f1d715b6434 36 button_pressed = true;
Jan Jongboom 0:2f1d715b6434 37 button_count++;
Jan Jongboom 0:2f1d715b6434 38 }
Jan Jongboom 0:2f1d715b6434 39
Jan Jongboom 0:2f1d715b6434 40 int main() {
Jan Jongboom 0:2f1d715b6434 41 pc.baud(115200);
Jan Jongboom 0:2f1d715b6434 42 pc.printf("Hello from proprietary serial device #1\r\n");
Jan Jongboom 0:2f1d715b6434 43
Jan Jongboom 0:2f1d715b6434 44 pc.attach(callback(&rx_irq));
Jan Jongboom 0:2f1d715b6434 45 btn.fall(callback(&btn_irq));
Jan Jongboom 0:2f1d715b6434 46
Jan Jongboom 0:2f1d715b6434 47 while (1) {
Jan Jongboom 0:2f1d715b6434 48 if (serial_line_ready) {
Jan Jongboom 0:2f1d715b6434 49 if (strcmp(serial_buffer, "+LED1") == 0) {
Jan Jongboom 0:2f1d715b6434 50 led = 1;
Jan Jongboom 0:2f1d715b6434 51 }
Jan Jongboom 0:2f1d715b6434 52 else if (strcmp(serial_buffer, "-LED1") == 0) {
Jan Jongboom 0:2f1d715b6434 53 led = 0;
Jan Jongboom 0:2f1d715b6434 54 }
Jan Jongboom 0:2f1d715b6434 55 else {
Jan Jongboom 0:2f1d715b6434 56 printf("Unknown command '%s'\r\n", serial_buffer);
Jan Jongboom 0:2f1d715b6434 57 }
Jan Jongboom 0:2f1d715b6434 58
Jan Jongboom 0:2f1d715b6434 59 serial_line_ready = false;
Jan Jongboom 0:2f1d715b6434 60 memset(serial_buffer, 0, 1024);
Jan Jongboom 0:2f1d715b6434 61 serial_ix = 0;
Jan Jongboom 0:2f1d715b6434 62 }
Jan Jongboom 0:2f1d715b6434 63
Jan Jongboom 0:2f1d715b6434 64 if (button_pressed) {
Jan Jongboom 0:2f1d715b6434 65 printf("<BTN=%lu\r\n", button_count);
Jan Jongboom 0:2f1d715b6434 66 button_pressed = false;
Jan Jongboom 0:2f1d715b6434 67 }
Jan Jongboom 0:2f1d715b6434 68
Jan Jongboom 0:2f1d715b6434 69 wait_ms(1);
Jan Jongboom 0:2f1d715b6434 70 }
Jan Jongboom 0:2f1d715b6434 71 }