NanoService Example for u-blox Cellular modems
Dependencies: Beep LM75B MMA7660 mbed nsdl_lib
Fork of NSDL_HelloWorld by
Diff: main.cpp
- Revision:
- 11:3b7ae478dcd1
- Parent:
- 9:ccb9e53d5471
diff -r 4cb556c7845e -r 3b7ae478dcd1 main.cpp
--- a/main.cpp Wed Oct 30 00:46:59 2013 +0000
+++ b/main.cpp Thu Oct 31 20:29:30 2013 +0000
@@ -5,7 +5,7 @@
#include "Socket.h"
#include "Endpoint.h"
#include "UDPSocket.h"
-// #include "C12832_lcd.h"
+#include "C12832_lcd.h"
#include "nsdl_support.h"
// Include various resources
#include "temperature.h"
@@ -13,12 +13,58 @@
#include "gps.h"
#include "relay.h"
-// static C12832_LCD lcd;
+static C12832_LCD lcd;
+
+// ****************************************************************************
+// Handlers for debugging crashes
+
+#include <rt_misc.h>
+extern char Image$$RW_IRAM1$$ZI$$Limit[];
+
+extern "C" void HardFault_Handler(void)
+{
+ uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
+ uint32_t sp_limit = __current_sp();
+
+ zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
+
+ struct __initial_stackheap r;
+ r.heap_base = zi_limit;
+ r.heap_limit = sp_limit;
+ r=r;
+
+ mbed_die();
+ while(1);
+}
+
+extern "C" void MemManage_Handler(void)
+{
+ mbed_die();
+ while(1);
+}
+
+extern "C" void BusFault_Handler(void)
+{
+ mbed_die();
+ while(1);
+}
+
+extern "C" void UsageFault_Handler(void)
+{
+ mbed_die();
+ while(1);
+}
// ****************************************************************************
// Configuration section
#define MODEM_UBLOX_CDMA
+//#define MODEM_UBLOX_GSM
+
+#if !defined(MODEM_UBLOX_GSM) && !defined(MODEM_UBLOX_CDMA)
+#warning No modem defined, using GSM by default
+#define MODEM_UBLOX_GSM
+#endif
#ifndef MODEM_APN
#warning APN not specified, using "internet"
@@ -52,18 +98,26 @@
uint8_t ep_type[] = {"mbed_device"};
uint8_t lifetime_ptr[] = {"1200"};
-#ifdef MODEM_UBLOX_GSM
- UbloxUSBGSMModem modem;
-#else
- UbloxUSBCDMAModem modem(p18, true, 1);
-#endif
UDPSocket server;
Endpoint nsp;
// ****************************************************************************
// u-blox Cellular initialization
+// needed for offline debugging to eliminate the semi-hosting calls
+//extern "C" int mbed_interface_uid(char *uid)
+//{
+// uid[27] = '1';
+// uid[28] = 'a';
+// uid[29] = '5';
+// uid[30] = 'b';
+// uid[31] = '3';
+// uid[32] = '\0';
+//
+// return 1;
+//}
-static void cellular_init()
+
+static void cellular_init(CellularModem& modem, const char* apn = NULL, const char* username = NULL, const char* password= NULL)
{
char mbed_uid[33]; // for creating unique name for the board
@@ -79,7 +133,6 @@
mbed_interface_uid(mbed_uid);
mbed_uid[32] = '\0';
strncat(endpoint_name, mbed_uid + 27, 15 - strlen(endpoint_name));
-
}
@@ -96,8 +149,8 @@
printf("name: %s", endpoint_name);
printf("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
- // lcd.locate(0,22);
- // lcd.printf("EP name:%s\n", endpoint_name);
+ lcd.locate(0,22);
+ lcd.printf("EP name:%s\n", endpoint_name);
}
// ****************************************************************************
@@ -147,28 +200,46 @@
return 1;
}
+// running led
+Ticker flash;
+DigitalOut led(LED1);
+void flashLED(void){led = !led;}
+
// ****************************************************************************
// Program entry point
int main()
{
- // lcd.cls();
- // lcd.locate(0,0);
- // lcd.printf("mbed NanoService u-blox");
+ flash.attach(&flashLED, 1.0f);
+
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("mbed NanoService u-blox");
printf("mbed NanoService u-blox Example App 0.1\n");
+#ifdef MODEM_UBLOX_GSM
+ UbloxUSBGSMModem modem;
+#else
+ UbloxUSBCDMAModem modem(p18, true, 1);
+#endif
+
// Initialize Cellular interface first
- cellular_init();
+ puts("cellular_init");
+ cellular_init(modem);
// Initialize NSP node
+ puts("nsp_init");
nsp_init();
// Initialize NSDL stack
+ puts("nsdl_init");
nsdl_init();
// Create NSDL resources
+ puts("create_resources");
create_resources();
// Run the NSDL event loop (never returns)
+ puts("nsdl_event_loop");
nsdl_event_loop();
}



