Program to test export to simplicity studio

Dependencies:   mbed-dev

Committer:
michaelVisimid
Date:
Sun Jan 29 00:41:07 2017 +0000
Revision:
0:d3c49f58b603
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaelVisimid 0:d3c49f58b603 1 /***************************************************************************//**
michaelVisimid 0:d3c49f58b603 2 * @file main.cpp
michaelVisimid 0:d3c49f58b603 3 * @brief Demo program for the mbed asynchronous serial API.
michaelVisimid 0:d3c49f58b603 4 *******************************************************************************
michaelVisimid 0:d3c49f58b603 5 * @section License
michaelVisimid 0:d3c49f58b603 6 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
michaelVisimid 0:d3c49f58b603 7 *******************************************************************************
michaelVisimid 0:d3c49f58b603 8 *
michaelVisimid 0:d3c49f58b603 9 * Permission is granted to anyone to use this software for any purpose,
michaelVisimid 0:d3c49f58b603 10 * including commercial applications, and to alter it and redistribute it
michaelVisimid 0:d3c49f58b603 11 * freely, subject to the following restrictions:
michaelVisimid 0:d3c49f58b603 12 *
michaelVisimid 0:d3c49f58b603 13 * 1. The origin of this software must not be misrepresented; you must not
michaelVisimid 0:d3c49f58b603 14 * claim that you wrote the original software.
michaelVisimid 0:d3c49f58b603 15 * 2. Altered source versions must be plainly marked as such, and must not be
michaelVisimid 0:d3c49f58b603 16 * misrepresented as being the original software.
michaelVisimid 0:d3c49f58b603 17 * 3. This notice may not be removed or altered from any source distribution.
michaelVisimid 0:d3c49f58b603 18 *
michaelVisimid 0:d3c49f58b603 19 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
michaelVisimid 0:d3c49f58b603 20 * obligation to support this Software. Silicon Labs is providing the
michaelVisimid 0:d3c49f58b603 21 * Software "AS IS", with no express or implied warranties of any kind,
michaelVisimid 0:d3c49f58b603 22 * including, but not limited to, any implied warranties of merchantability
michaelVisimid 0:d3c49f58b603 23 * or fitness for any particular purpose or warranties against infringement
michaelVisimid 0:d3c49f58b603 24 * of any proprietary rights of a third party.
michaelVisimid 0:d3c49f58b603 25 *
michaelVisimid 0:d3c49f58b603 26 * Silicon Labs will not be liable for any consequential, incidental, or
michaelVisimid 0:d3c49f58b603 27 * special damages, or any other relief, or for any claim by any third party,
michaelVisimid 0:d3c49f58b603 28 * arising from your use of this Software.
michaelVisimid 0:d3c49f58b603 29 *
michaelVisimid 0:d3c49f58b603 30 ******************************************************************************/
michaelVisimid 0:d3c49f58b603 31
michaelVisimid 0:d3c49f58b603 32 #include "mbed.h"
michaelVisimid 0:d3c49f58b603 33
michaelVisimid 0:d3c49f58b603 34 /*------------ Constant definitions --------------*/
michaelVisimid 0:d3c49f58b603 35 #define TX_PIN USBTX
michaelVisimid 0:d3c49f58b603 36 #define RX_PIN USBRX
michaelVisimid 0:d3c49f58b603 37 #define BRATE 115200
michaelVisimid 0:d3c49f58b603 38 #define LED_PIN LED0
michaelVisimid 0:d3c49f58b603 39 #define TOGGLE_RATE (0.5f)
michaelVisimid 0:d3c49f58b603 40 #define BUFF_LENGTH 5
michaelVisimid 0:d3c49f58b603 41
michaelVisimid 0:d3c49f58b603 42 /*-------- Check if platform compatible ----------*/
michaelVisimid 0:d3c49f58b603 43 #if DEVICE_SERIAL_ASYNCH
michaelVisimid 0:d3c49f58b603 44 Serial test_connection(USBTX, USBRX);
michaelVisimid 0:d3c49f58b603 45 #else
michaelVisimid 0:d3c49f58b603 46 #error "Platform not compatible with Low Power APIs for Serial"
michaelVisimid 0:d3c49f58b603 47 #endif
michaelVisimid 0:d3c49f58b603 48
michaelVisimid 0:d3c49f58b603 49 /*------------------ Variables -------------------*/
michaelVisimid 0:d3c49f58b603 50 LowPowerTicker blinker;
michaelVisimid 0:d3c49f58b603 51 bool blinking = false;
michaelVisimid 0:d3c49f58b603 52 event_callback_t serialEventCb;
michaelVisimid 0:d3c49f58b603 53 DigitalOut LED(LED_PIN);
michaelVisimid 0:d3c49f58b603 54 uint8_t rx_buf[BUFF_LENGTH + 1];
michaelVisimid 0:d3c49f58b603 55
michaelVisimid 0:d3c49f58b603 56 /*------------------ Callbacks -------------------*/
michaelVisimid 0:d3c49f58b603 57 void blink(void) {
michaelVisimid 0:d3c49f58b603 58 LED = !LED;
michaelVisimid 0:d3c49f58b603 59 }
michaelVisimid 0:d3c49f58b603 60
michaelVisimid 0:d3c49f58b603 61 /**
michaelVisimid 0:d3c49f58b603 62 * This is a callback! Do not call frequency-dependent operations here.
michaelVisimid 0:d3c49f58b603 63 *
michaelVisimid 0:d3c49f58b603 64 * For a more thorough explanation, go here:
michaelVisimid 0:d3c49f58b603 65 * https://developer.mbed.org/teams/SiliconLabs/wiki/Using-the-improved-mbed-sleep-API#mixing-sleep-with-synchronous-code
michaelVisimid 0:d3c49f58b603 66 **/
michaelVisimid 0:d3c49f58b603 67 void serialCb(int events) {
michaelVisimid 0:d3c49f58b603 68 /* Something triggered the callback, either buffer is full or 'S' is received */
michaelVisimid 0:d3c49f58b603 69 unsigned char i;
michaelVisimid 0:d3c49f58b603 70 if(events & SERIAL_EVENT_RX_CHARACTER_MATCH) {
michaelVisimid 0:d3c49f58b603 71 //Received 'S', check for buffer length
michaelVisimid 0:d3c49f58b603 72 for(i = 0; i < BUFF_LENGTH; i++) {
michaelVisimid 0:d3c49f58b603 73 //Found the length!
michaelVisimid 0:d3c49f58b603 74 if(rx_buf[i] == 'S') break;
michaelVisimid 0:d3c49f58b603 75 }
michaelVisimid 0:d3c49f58b603 76
michaelVisimid 0:d3c49f58b603 77 // Toggle blinking
michaelVisimid 0:d3c49f58b603 78 if(blinking) {
michaelVisimid 0:d3c49f58b603 79 blinker.detach();
michaelVisimid 0:d3c49f58b603 80 blinking = false;
michaelVisimid 0:d3c49f58b603 81 } else {
michaelVisimid 0:d3c49f58b603 82 blinker.attach(blink, TOGGLE_RATE);
michaelVisimid 0:d3c49f58b603 83 blinking = true;
michaelVisimid 0:d3c49f58b603 84 }
michaelVisimid 0:d3c49f58b603 85 } else if (events & SERIAL_EVENT_RX_COMPLETE) {
michaelVisimid 0:d3c49f58b603 86 i = BUFF_LENGTH - 1;
michaelVisimid 0:d3c49f58b603 87 } else {
michaelVisimid 0:d3c49f58b603 88 rx_buf[0] = 'E';
michaelVisimid 0:d3c49f58b603 89 rx_buf[1] = 'R';
michaelVisimid 0:d3c49f58b603 90 rx_buf[2] = 'R';
michaelVisimid 0:d3c49f58b603 91 rx_buf[3] = '!';
michaelVisimid 0:d3c49f58b603 92 rx_buf[4] = 0;
michaelVisimid 0:d3c49f58b603 93 i = 3;
michaelVisimid 0:d3c49f58b603 94 }
michaelVisimid 0:d3c49f58b603 95
michaelVisimid 0:d3c49f58b603 96 // Echo string, no callback
michaelVisimid 0:d3c49f58b603 97 test_connection.write(rx_buf, i+1, 0, 0);
michaelVisimid 0:d3c49f58b603 98
michaelVisimid 0:d3c49f58b603 99 // Reset serial reception
michaelVisimid 0:d3c49f58b603 100 test_connection.read(rx_buf, BUFF_LENGTH, serialEventCb, SERIAL_EVENT_RX_ALL, 'S');
michaelVisimid 0:d3c49f58b603 101 }
michaelVisimid 0:d3c49f58b603 102
michaelVisimid 0:d3c49f58b603 103 /*-------------------- Main ----------------------*/
michaelVisimid 0:d3c49f58b603 104 int main() {
michaelVisimid 0:d3c49f58b603 105 /* Very Simple Main (tm) */
michaelVisimid 0:d3c49f58b603 106 serialEventCb.attach(serialCb);
michaelVisimid 0:d3c49f58b603 107
michaelVisimid 0:d3c49f58b603 108 /* Setup serial connection */
michaelVisimid 0:d3c49f58b603 109 test_connection.baud(BRATE);
michaelVisimid 0:d3c49f58b603 110 test_connection.printf("Low Power API test\n\nSend 'S' to toggle blinking\n");
michaelVisimid 0:d3c49f58b603 111 test_connection.read(rx_buf, BUFF_LENGTH, serialEventCb, SERIAL_EVENT_RX_ALL, 'S');
michaelVisimid 0:d3c49f58b603 112
michaelVisimid 0:d3c49f58b603 113 /* Let the callbacks take care of everything */
michaelVisimid 0:d3c49f58b603 114 while(1) sleep();
michaelVisimid 0:d3c49f58b603 115 }