Uart serie example, loopback

Dependencies:   mbed BLE_API nRF51822

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 #include "mbed.h"
00003 #include "nrf51.h"
00004 #include "nrf51_bitfields.h"
00005 
00006 #include "BLE.h"
00007 #include "UARTService.h"
00008 
00009 
00010 #define LOG(...)    { pc.printf(__VA_ARGS__); }
00011 
00012 #define LED_GREEN   p21
00013 #define LED_RED     p22
00014 #define LED_BLUE    p23
00015 #define BUTTON_PIN  p17
00016 #define BATTERY_PIN p1
00017 
00018 #define MPU6050_SDA p12
00019 #define MPU6050_SCL p13
00020 
00021 #define UART_TX     p9
00022 #define UART_RX     p11
00023 #define UART_CTS    p8
00024 #define UART_RTS    p10
00025 
00026 
00027 
00028 DigitalOut blue(LED_BLUE);
00029 DigitalOut green(LED_GREEN);
00030 DigitalOut red(LED_RED);
00031 
00032 InterruptIn button(BUTTON_PIN);
00033 AnalogIn    battery(BATTERY_PIN);
00034 Serial pc(UART_TX, UART_RX);
00035 
00036 InterruptIn motion_probe(p14);
00037 
00038 int read_none_count = 0;
00039 
00040 BLEDevice  ble;
00041 UARTService *uartServicePtr;
00042 
00043 volatile bool bleIsConnected = false;
00044 volatile uint8_t tick_event = 0;
00045 
00046 
00047 
00048 void check_i2c_bus(void);
00049 unsigned short inv_orientation_matrix_to_scalar( const signed char *mtx);
00050 
00051 
00052 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
00053 {
00054     LOG("Connected!\n");
00055     bleIsConnected = true;
00056 }
00057 
00058 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *cbParams)
00059 {
00060     LOG("Disconnected!\n");
00061     LOG("Restarting the advertising process\n");
00062     ble.startAdvertising();
00063     bleIsConnected = false;
00064 }
00065 
00066 void tick(void)
00067 {
00068     static uint32_t count = 0;
00069     
00070     LOG("%d\r\n", count++);
00071     green = !green;
00072 }
00073 void detect(void)
00074 {
00075     static uint32_t count = 0;
00076     
00077     LOG("%d\r\n", count++);
00078     blue = !blue;
00079 }
00080 void flush_uart_ble(){
00081     //envia un \n para forzar el envio del buffer y vaciarlo, en hex 0x0a 
00082     char end='\n';
00083     uartServicePtr->write(&end,1);
00084     }
00085     
00086 void onDataWrittenCallback(const GattWriteCallbackParams *params) {//ocurre cuando llega un dato por bluetooth
00087     if (params->handle == uartServicePtr->getTXCharacteristicHandle()) {
00088         
00089         for (int16_t x=0;x<params->len;x++)
00090             pc.printf("%02X ", params->data[x]);
00091         uartServicePtr->write(params->data,params->len);
00092         flush_uart_ble();
00093         //uartServicePtr->flush();
00094 
00095     }
00096 }
00097 
00098 
00099 int main(void)
00100 {
00101     blue  = 1;
00102     green = 1;
00103     red   = 1;
00104 
00105     pc.baud(115200);
00106     
00107     wait(1);
00108     
00109     LOG("---- Seeed Tiny BLE ----\n");
00110     
00111         
00112     Ticker ticker;
00113     ticker.attach(tick, 3);
00114 
00115     button.fall(detect);
00116 
00117     LOG("Initialising the nRF51822\n");
00118     ble.init();
00119     ble.gap().onDisconnection(disconnectionCallback);
00120     ble.gap().onConnection(connectionCallback);
00121     ble.onDataWritten(onDataWrittenCallback);
00122 
00123 
00124     /* setup advertising */
00125     ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
00126     ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
00127     ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
00128                                      (const uint8_t *)"smurfs", sizeof("smurfs"));
00129     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
00130                                      (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
00131                               
00132     UARTService uartService(ble);
00133     uartServicePtr = &uartService;
00134     //uartService.retargetStdout();
00135 
00136     ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
00137     ble.gap().startAdvertising();
00138     
00139     while (true) {
00140        //hacer algo
00141        ble.waitForEvent();
00142     }
00143 }
00144 
00145 
00146 
00147 
00148