Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FXOS8700CQ MODSERIAL
Revision 61:f6b93129f954, committed 2016-08-01
- Comitter:
- stefanrousseau
- Date:
- Mon Aug 01 18:29:04 2016 +0000
- Parent:
- 60:2aa16fd02dfd
- Child:
- 62:73c564e883e9
- Commit message:
- Moved cellular modem routines from main.cpp to cell_modem.cpp; Moved HTS221 routines from main.cpp to sensors.cpp
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cell_modem.cpp Mon Aug 01 18:29:04 2016 +0000
@@ -0,0 +1,319 @@
+#include "mbed.h"
+#include <cctype>
+#include <string>
+#include "SerialBuffered.h"
+
+#include "config_me.h"
+#include "wnc_control.h"
+#include "hardware.h"
+
+#define MDM_DBG_OFF 0
+#define MDM_DBG_AT_CMDS (1 << 0)
+int mdm_dbgmask = MDM_DBG_OFF;
+
+#define WNC_WAIT_FOR_AT_CMD_MS 40
+
+DigitalOut mdm_uart2_rx_boot_mode_sel(PTC17); // on powerup, 0 = boot mode, 1 = normal boot
+DigitalOut mdm_power_on(PTB9); // 0 = turn modem on, 1 = turn modem off (should be held high for >5 seconds to cycle modem)
+DigitalOut mdm_wakeup_in(PTC2); // 0 = let modem sleep, 1 = keep modem awake -- Note: pulled high on shield
+
+DigitalOut mdm_reset(PTC12); // active high
+
+DigitalOut shield_3v3_1v8_sig_trans_ena(PTC4); // 0 = disabled (all signals high impedence, 1 = translation active
+DigitalOut mdm_uart1_cts(PTD0);
+
+#define TOUPPER(a) (a) //toupper(a)
+
+const char ok_str[] = "OK";
+const char error_str[] = "ERROR";
+
+#define MDM_OK 0
+#define MDM_ERR_TIMEOUT -1
+
+#define MAX_AT_RSP_LEN 255
+
+ssize_t mdm_getline(char *buff, size_t size, int timeout_ms) {
+ int cin = -1;
+ int cin_last;
+
+ if (NULL == buff || size == 0) {
+ return -1;
+ }
+
+ size_t len = 0;
+ Timer timer;
+ timer.start();
+ while ((len < (size-1)) && (timer.read_ms() < timeout_ms)) {
+ if (mdm.readable()) {
+ cin_last = cin;
+ cin = mdm.getc();
+ if (isprint(cin)) {
+ buff[len++] = (char)cin;
+ continue;
+ } else if (('\r' == cin_last) && ('\n' == cin)) {
+ break;
+ }
+ }
+// wait_ms(1);
+ }
+ buff[len] = (char)NULL;
+
+ return len;
+}
+
+int mdm_sendAtCmd(const char *cmd, const char **rsp_list, int timeout_ms) {
+ // Per WNC wait:
+ wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
+
+ if (cmd && strlen(cmd) > 0) {
+ if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
+ printf(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
+ }
+ mdm.puts(cmd);
+ mdm.puts("\r\n");
+ }
+
+ if (rsp_list) {
+ Timer timer;
+ char rsp[MAX_AT_RSP_LEN+1];
+ int len;
+
+ timer.start();
+ while (timer.read_ms() < timeout_ms) {
+ len = mdm_getline(rsp, sizeof(rsp), timeout_ms - timer.read_ms());
+
+ if (len < 0)
+ return MDM_ERR_TIMEOUT;
+
+ if (len == 0)
+ continue;
+
+ if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
+ printf(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", rsp);
+ }
+
+ if (rsp_list) {
+ int rsp_idx = 0;
+ while (rsp_list[rsp_idx]) {
+ if (strcasecmp(rsp, rsp_list[rsp_idx]) == 0) {
+ return rsp_idx;
+ }
+ rsp_idx++;
+ }
+ }
+ }
+ return MDM_ERR_TIMEOUT;
+ }
+ return MDM_OK;
+}
+
+int mdm_init(void) {
+ // Hard reset the modem (doesn't go through
+ // the signal level translator)
+ mdm_reset = 0;
+
+ // disable signal level translator (necessary
+ // for the modem to boot properly). All signals
+ // except mdm_reset go through the level translator
+ // and have internal pull-up/down in the module. While
+ // the level translator is disabled, these pins will
+ // be in the correct state.
+ shield_3v3_1v8_sig_trans_ena = 0;
+
+ // While the level translator is disabled and ouptut pins
+ // are tristated, make sure the inputs are in the same state
+ // as the WNC Module pins so that when the level translator is
+ // enabled, there are no differences.
+ mdm_uart2_rx_boot_mode_sel = 1; // UART2_RX should be high
+ mdm_power_on = 0; // powr_on should be low
+ mdm_wakeup_in = 1; // wake-up should be high
+ mdm_uart1_cts = 0; // indicate that it is ok to send
+
+ // Now, wait for the WNC Module to perform its initial boot correctly
+ wait(1.0);
+
+ // The WNC module initializes comms at 115200 8N1 so set it up
+ mdm.baud(115200);
+
+ //Now, enable the level translator, the input pins should now be the
+ //same as how the M14A module is driving them with internal pull ups/downs.
+ //When enabled, there will be no changes in these 4 pins...
+ shield_3v3_1v8_sig_trans_ena = 1;
+
+ // Now, give the modem 60 seconds to start responding by
+ // sending simple 'AT' commands to modem once per second.
+ Timer timer;
+ timer.start();
+ while (timer.read() < 60) {
+ const char * rsp_lst[] = { ok_str, error_str, NULL };
+ int rc = mdm_sendAtCmd("AT", rsp_lst, 500);
+ if (rc == 0)
+ return true; //timer.read();
+ wait_ms(1000 - (timer.read_ms() % 1000));
+ pc.printf("\r%d",timer.read_ms()/1000);
+ }
+ return false;
+}
+
+int mdm_sendAtCmdRsp(const char *cmd, const char **rsp_list, int timeout_ms, string * rsp, int * len) {
+ static char cmd_buf[3200]; // Need enough room for the WNC sockreads (over 3000 chars)
+ size_t n = strlen(cmd);
+
+ // Per WNC wait:
+ wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
+
+ if (cmd && n > 0) {
+ if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
+ printf(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
+ }
+// mdm.puts(cmd);
+// mdm.puts("\r\n");
+ while (n--) {
+ mdm.putc(*cmd++);
+ wait_us(1000);
+ };
+ mdm.putc('\r');
+ wait_us(1000);
+ mdm.putc('\n');
+ wait_us(1000);
+ }
+
+ if (rsp_list) {
+ rsp->erase(); // Clean up from prior cmd response
+ *len = 0;
+ Timer timer;
+ timer.start();
+ while (timer.read_ms() < timeout_ms) {
+ int lenCmd = mdm_getline(cmd_buf, sizeof(cmd_buf), timeout_ms - timer.read_ms());
+
+ if (lenCmd == 0)
+ continue;
+
+ if (lenCmd < 0)
+ return MDM_ERR_TIMEOUT;
+ else {
+ *len += lenCmd;
+ *rsp += cmd_buf;
+ }
+
+ if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
+ printf(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", cmd_buf);
+ }
+
+ int rsp_idx = 0;
+ while (rsp_list[rsp_idx]) {
+ if (strcasecmp(cmd_buf, rsp_list[rsp_idx]) == 0) {
+ return rsp_idx;
+ }
+ rsp_idx++;
+ }
+ }
+ return MDM_ERR_TIMEOUT;
+ }
+
+ return MDM_OK;
+}
+
+void reinitialize_mdm(void)
+{
+ // Initialize the modem
+ printf(GRN "Modem RE-initializing..." DEF "\r\n");
+ if (!mdm_init()) {
+ printf(RED "\n\rModem RE-initialization failed!" DEF "\n");
+ }
+ printf("\r\n");
+}
+// These are built on the fly
+string MyServerIpAddress;
+string MySocketData;
+
+//********************************************************************************************************************************************
+//* Process JSON response messages
+//********************************************************************************************************************************************
+bool extract_JSON(char* search_field, char* found_string)
+{
+ char* beginquote;
+ char* endquote;
+ beginquote = strchr(search_field, '{'); //start of JSON
+ endquote = strchr(search_field, '}'); //end of JSON
+ if (beginquote)
+ {
+ uint16_t ifoundlen;
+ if (endquote)
+ {
+ ifoundlen = (uint16_t) (endquote - beginquote) + 1;
+ strncpy(found_string, beginquote, ifoundlen );
+ found_string[ifoundlen] = 0; //null terminate
+ return true;
+ }
+ else
+ {
+ endquote = strchr(search_field, '\0'); //end of string... sometimes the end bracket is missing
+ ifoundlen = (uint16_t) (endquote - beginquote) + 1;
+ strncpy(found_string, beginquote, ifoundlen );
+ found_string[ifoundlen] = 0; //null terminate
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+} //extract_JSON
+
+int cell_modem_init()
+{
+ int i;
+
+ pc.baud(115200);
+ // Initialize the modem
+ printf(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
+ do {
+ i=mdm_init();
+ if (!i) {
+ pc.printf(RED "Modem initialization failed!" DEF "\n");
+ }
+ } while (!i);
+
+ //Software init
+ software_init_mdm();
+
+ // Resolve URL to IP address to connect to
+ resolve_mdm();
+ // Open the socket (connect to the server)
+ sockopen_mdm();
+ return (0);
+}
+
+int cell_modem_Sendreceive(char* tx_string, char* rx_string)
+{
+ int iStatus = 0; //error by default
+ printf(DEF "\r\n");
+ printf(BLU "Sending to modem : %s" DEF "\r\n", &tx_string[0]);
+ sockwrite_mdm(&tx_string[0]);
+ if (sockread_mdm(&MySocketData, 1024, 20))
+ {
+ printf(DEF "\r\n");
+ printf(YEL "Read back : %s" DEF "\r\n", &MySocketData[0]);
+ char stringToCharBuf[BUF_SIZE_FOR_N_MAX_SOCKREAD*MAX_WNC_SOCKREAD_PAYLOAD+1]; // WNC can return max of 1500 (per sockread)
+ if ((MySocketData.length() + 1) < sizeof(stringToCharBuf))
+ {
+ strcpy(stringToCharBuf, MySocketData.c_str());
+ if (extract_JSON(stringToCharBuf, &rx_string[0]))
+ {
+ printf(GRN "JSON : %s" DEF "\n", &rx_string[0]);
+ iStatus = 1; //all good
+ }
+ }
+ else
+ {
+ printf(RED "BUFFER not big enough for sock data!" DEF "\r\n");
+ }
+ }
+ else
+ {
+ printf(RED "No response..." DEF "\r\n");
+ }
+ return iStatus;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cell_modem.h Mon Aug 01 18:29:04 2016 +0000 @@ -0,0 +1,5 @@ +#ifndef __CELL_MODEM_H_ +#define __CELL_MODEM_H_ +int cell_modem_init(); +int cell_modem_Sendreceive(char* tx_string, char* rx_string); +#endif \ No newline at end of file
--- a/hardware.h Sat Jul 30 16:26:22 2016 +0000 +++ b/hardware.h Mon Aug 01 18:29:04 2016 +0000 @@ -1,12 +1,38 @@ #ifndef Hardware_H_ #define Hardware_H_ #include "MODSERIAL.h" +#include "SerialBuffered.h" extern I2C i2c; //SDA, SCL -- define the I2C pins being used extern MODSERIAL pc; //UART to USB host +extern SerialBuffered mdm; //UART to WNC modem //Un-comment the definition below if you want to use the USB rx for another purpose. //otherwise the USB rx will be used to receive virtual sensor data from Avnet's //"Sensor Simulator Dashboard" utility #define USE_VIRTUAL_SENSORS +// comment out the following line if color is not supported on the terminal +#define USE_COLOR +#ifdef USE_COLOR + #define BLK "\033[30m" + #define RED "\033[31m" + #define GRN "\033[32m" + #define YEL "\033[33m" + #define BLU "\033[34m" + #define MAG "\033[35m" + #define CYN "\033[36m" + #define WHT "\033[37m" + #define DEF "\033[39m" +#else + #define BLK + #define RED + #define GRN + #define YEL + #define BLU + #define MAG + #define CYN + #define WHT + #define DEF #endif + +#endif
--- a/main.cpp Sat Jul 30 16:26:22 2016 +0000
+++ b/main.cpp Mon Aug 01 18:29:04 2016 +0000
@@ -2,271 +2,18 @@
#include <cctype>
#include <string>
#include "SerialBuffered.h"
-#include "HTS221.h"
#include "config_me.h"
-#include "wnc_control.h"
#include "sensors.h"
-
+#include "cell_modem.h"
#include "hardware.h"
-I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
-// comment out the following line if color is not supported on the terminal
-#define USE_COLOR
-#ifdef USE_COLOR
- #define BLK "\033[30m"
- #define RED "\033[31m"
- #define GRN "\033[32m"
- #define YEL "\033[33m"
- #define BLU "\033[34m"
- #define MAG "\033[35m"
- #define CYN "\033[36m"
- #define WHT "\033[37m"
- #define DEF "\033[39m"
-#else
- #define BLK
- #define RED
- #define GRN
- #define YEL
- #define BLU
- #define MAG
- #define CYN
- #define WHT
- #define DEF
-#endif
-
-#define MDM_DBG_OFF 0
-#define MDM_DBG_AT_CMDS (1 << 0)
-int mdm_dbgmask = MDM_DBG_OFF;
-
-#define WNC_WAIT_FOR_AT_CMD_MS 40
-
-//Serial pc(USBTX, USBRX);
+I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
MODSERIAL pc(USBTX, USBRX, 256, 256); // tx, rx with default tx, rx buffer sizes
-
SerialBuffered mdm(PTD3, PTD2, 4096);
DigitalOut led_green(LED_GREEN);
DigitalOut led_red(LED_RED);
DigitalOut led_blue(LED_BLUE);
-DigitalOut mdm_uart2_rx_boot_mode_sel(PTC17); // on powerup, 0 = boot mode, 1 = normal boot
-DigitalOut mdm_power_on(PTB9); // 0 = turn modem on, 1 = turn modem off (should be held high for >5 seconds to cycle modem)
-DigitalOut mdm_wakeup_in(PTC2); // 0 = let modem sleep, 1 = keep modem awake -- Note: pulled high on shield
-
-DigitalOut mdm_reset(PTC12); // active high
-
-DigitalOut shield_3v3_1v8_sig_trans_ena(PTC4); // 0 = disabled (all signals high impedence, 1 = translation active
-DigitalOut mdm_uart1_cts(PTD0);
-
-#define TOUPPER(a) (a) //toupper(a)
-
-const char ok_str[] = "OK";
-const char error_str[] = "ERROR";
-
-#define MDM_OK 0
-#define MDM_ERR_TIMEOUT -1
-
-#define MAX_AT_RSP_LEN 255
-
-ssize_t mdm_getline(char *buff, size_t size, int timeout_ms) {
- int cin = -1;
- int cin_last;
-
- if (NULL == buff || size == 0) {
- return -1;
- }
-
- size_t len = 0;
- Timer timer;
- timer.start();
- while ((len < (size-1)) && (timer.read_ms() < timeout_ms)) {
- if (mdm.readable()) {
- cin_last = cin;
- cin = mdm.getc();
- if (isprint(cin)) {
- buff[len++] = (char)cin;
- continue;
- } else if (('\r' == cin_last) && ('\n' == cin)) {
- break;
- }
- }
-// wait_ms(1);
- }
- buff[len] = (char)NULL;
-
- return len;
-}
-
-int mdm_sendAtCmd(const char *cmd, const char **rsp_list, int timeout_ms) {
- // Per WNC wait:
- wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
-
- if (cmd && strlen(cmd) > 0) {
- if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
- printf(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
- }
- mdm.puts(cmd);
- mdm.puts("\r\n");
- }
-
- if (rsp_list) {
- Timer timer;
- char rsp[MAX_AT_RSP_LEN+1];
- int len;
-
- timer.start();
- while (timer.read_ms() < timeout_ms) {
- len = mdm_getline(rsp, sizeof(rsp), timeout_ms - timer.read_ms());
-
- if (len < 0)
- return MDM_ERR_TIMEOUT;
-
- if (len == 0)
- continue;
-
- if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
- printf(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", rsp);
- }
-
- if (rsp_list) {
- int rsp_idx = 0;
- while (rsp_list[rsp_idx]) {
- if (strcasecmp(rsp, rsp_list[rsp_idx]) == 0) {
- return rsp_idx;
- }
- rsp_idx++;
- }
- }
- }
- return MDM_ERR_TIMEOUT;
- }
- return MDM_OK;
-}
-
-int mdm_init(void) {
- // Hard reset the modem (doesn't go through
- // the signal level translator)
- mdm_reset = 0;
-
- // disable signal level translator (necessary
- // for the modem to boot properly). All signals
- // except mdm_reset go through the level translator
- // and have internal pull-up/down in the module. While
- // the level translator is disabled, these pins will
- // be in the correct state.
- shield_3v3_1v8_sig_trans_ena = 0;
-
- // While the level translator is disabled and ouptut pins
- // are tristated, make sure the inputs are in the same state
- // as the WNC Module pins so that when the level translator is
- // enabled, there are no differences.
- mdm_uart2_rx_boot_mode_sel = 1; // UART2_RX should be high
- mdm_power_on = 0; // powr_on should be low
- mdm_wakeup_in = 1; // wake-up should be high
- mdm_uart1_cts = 0; // indicate that it is ok to send
-
- // Now, wait for the WNC Module to perform its initial boot correctly
- wait(1.0);
-
- // The WNC module initializes comms at 115200 8N1 so set it up
- mdm.baud(115200);
-
- //Now, enable the level translator, the input pins should now be the
- //same as how the M14A module is driving them with internal pull ups/downs.
- //When enabled, there will be no changes in these 4 pins...
- shield_3v3_1v8_sig_trans_ena = 1;
-
- // Now, give the modem 60 seconds to start responding by
- // sending simple 'AT' commands to modem once per second.
- Timer timer;
- timer.start();
- while (timer.read() < 60) {
- const char * rsp_lst[] = { ok_str, error_str, NULL };
- int rc = mdm_sendAtCmd("AT", rsp_lst, 500);
- if (rc == 0)
- return true; //timer.read();
- wait_ms(1000 - (timer.read_ms() % 1000));
- pc.printf("\r%d",timer.read_ms()/1000);
- }
- return false;
-}
-
-int mdm_sendAtCmdRsp(const char *cmd, const char **rsp_list, int timeout_ms, string * rsp, int * len) {
- static char cmd_buf[3200]; // Need enough room for the WNC sockreads (over 3000 chars)
- size_t n = strlen(cmd);
-
- // Per WNC wait:
- wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
-
- if (cmd && n > 0) {
- if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
- printf(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
- }
-// mdm.puts(cmd);
-// mdm.puts("\r\n");
- while (n--) {
- mdm.putc(*cmd++);
- wait_us(1000);
- };
- mdm.putc('\r');
- wait_us(1000);
- mdm.putc('\n');
- wait_us(1000);
- }
-
- if (rsp_list) {
- rsp->erase(); // Clean up from prior cmd response
- *len = 0;
- Timer timer;
- timer.start();
- while (timer.read_ms() < timeout_ms) {
- int lenCmd = mdm_getline(cmd_buf, sizeof(cmd_buf), timeout_ms - timer.read_ms());
-
- if (lenCmd == 0)
- continue;
-
- if (lenCmd < 0)
- return MDM_ERR_TIMEOUT;
- else {
- *len += lenCmd;
- *rsp += cmd_buf;
- }
-
- if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
- printf(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", cmd_buf);
- }
-
- int rsp_idx = 0;
- while (rsp_list[rsp_idx]) {
- if (strcasecmp(cmd_buf, rsp_list[rsp_idx]) == 0) {
- return rsp_idx;
- }
- rsp_idx++;
- }
- }
- return MDM_ERR_TIMEOUT;
- }
-
- return MDM_OK;
-}
-
-void reinitialize_mdm(void)
-{
- // Initialize the modem
- printf(GRN "Modem RE-initializing..." DEF "\r\n");
- if (!mdm_init()) {
- printf(RED "\n\rModem RE-initialization failed!" DEF "\n");
- }
- printf("\r\n");
-}
-// These are built on the fly
-string MyServerIpAddress;
-string MySocketData;
-
-// These are to be built on the fly
-string my_temp;
-string my_humidity;
-
-#define CTOF(x) ((x)*1.8+32)
//********************************************************************************************************************************************
//* Create string with sensor readings that can be sent to flow as an HTTP get
@@ -360,39 +107,8 @@
} //SetLedColor()
//********************************************************************************************************************************************
-//* Process JSON response messages
+//* Process the JSON response. In this example we are only extracting a LED color.
//********************************************************************************************************************************************
-bool extract_JSON(char* search_field, char* found_string)
-{
- char* beginquote;
- char* endquote;
- beginquote = strchr(search_field, '{'); //start of JSON
- endquote = strchr(search_field, '}'); //end of JSON
- if (beginquote)
- {
- uint16_t ifoundlen;
- if (endquote)
- {
- ifoundlen = (uint16_t) (endquote - beginquote) + 1;
- strncpy(found_string, beginquote, ifoundlen );
- found_string[ifoundlen] = 0; //null terminate
- return true;
- }
- else
- {
- endquote = strchr(search_field, '\0'); //end of string... sometimes the end bracket is missing
- ifoundlen = (uint16_t) (endquote - beginquote) + 1;
- strncpy(found_string, beginquote, ifoundlen );
- found_string[ifoundlen] = 0; //null terminate
- return false;
- }
- }
- else
- {
- return false;
- }
-} //extract_JSON
-
bool parse_JSON(char* json_string)
{
char* beginquote;
@@ -458,108 +174,48 @@
} //parse_JSON
int main() {
- int i;
- HTS221 hts221;
- pc.baud(115200);
-
- void hts221_init(void);
-
- // Set LED to RED until init finishes
- SetLedColor(0x1);
+ static unsigned ledOnce = 0;
- pc.printf(BLU "Hello World from the Cellular IoT Kit!\r\n\n\r");
- pc.printf(GRN "Initialize the HTS221\n\r");
+ pc.baud(115200);
+ pc.printf(GRN "Hello World from the Cellular IoT Kit!\r\n\r\n");
- i = hts221.begin();
- if( i )
- pc.printf(BLU "HTS221 Detected! (0x%02X)\n\r",i);
- else
- pc.printf(RED "HTS221 NOT DETECTED!!\n\r");
-
- printf("Temp is: %0.2f F \n\r",CTOF(hts221.readTemperature()));
- printf("Humid is: %02d %%\n\r",hts221.readHumidity());
-
+ //Initialize the I2C sensors that are present
sensors_init();
read_sensors();
+ // Set LED to RED until init finishes
+ SetLedColor(0x1); //Red
// Initialize the modem
- printf(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
- do {
- i=mdm_init();
- if (!i) {
- pc.printf(RED "Modem initialization failed!" DEF "\n");
- }
- } while (!i);
-
- //Software init
- software_init_mdm();
-
- // Resolve URL to IP address to connect to
- resolve_mdm();
+ pc.printf("\r\n");
+ cell_modem_init();
+ // Set LED BLUE for partial init
+ SetLedColor(0x4); //Blue
//Create a 1ms timer tick function:
+ iTimer1Interval_ms = SENSOR_UPDATE_INTERVAL_MS;
OneMsTicker.attach(OneMsFunction, 0.001f) ;
- iTimer1Interval_ms = SENSOR_UPDATE_INTERVAL_MS;
-
- // Open the socket (connect to the server)
- sockopen_mdm();
-
- // Set LED BLUE for partial init
- SetLedColor(0x4);
-
// Send and receive data perpetually
while(1) {
- static unsigned ledOnce = 0;
#ifdef USE_VIRTUAL_SENSORS
ProcessUsbInterface();
#endif
if (bTimerExpiredFlag)
{
bTimerExpiredFlag = false;
- puts("HTS221 START\r\n");
- sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
- sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
- puts("READ OTHER SENSORS START\r\n");
read_sensors(); //read available external sensors from a PMOD and the on-board motion sensor
char modem_string[512];
- puts("GENERATE MODEM STRING\r\n");
GenerateModemString(&modem_string[0]);
- printf(BLU "\r\nSending to modem : %s" DEF "\r\n", modem_string);
- sockwrite_mdm(modem_string);
- printf("READ START\r\n");
- if (sockread_mdm(&MySocketData, 1024, 20))
+ char myJsonResponse[512];
+ if (cell_modem_Sendreceive(&modem_string[0], &myJsonResponse[0]))
{
- // If any non-zero response from server, make it GREEN one-time
- // then the actual FLOW responses will set the color.
if (!ledOnce)
{
ledOnce = 1;
- SetLedColor(0x2);
+ SetLedColor(0x2); //Green
}
- printf(YEL "Read back : %s" DEF "\r\n", &MySocketData[0]);
- char myJsonResponse[512];
- char stringToCharBuf[BUF_SIZE_FOR_N_MAX_SOCKREAD*MAX_WNC_SOCKREAD_PAYLOAD+1]; // WNC can return max of 1500 (per sockread)
- if ((MySocketData.length() + 1) < sizeof(stringToCharBuf))
- {
- puts("STRING COPY\r\n");
- strcpy(stringToCharBuf, MySocketData.c_str());
- puts("EXTRACT JSON\r\n");
- if (extract_JSON(stringToCharBuf, &myJsonResponse[0]))
- {
- printf(GRN "JSON : %s" DEF "\n", &myJsonResponse[0]);
- puts("PARSE JSON\r\n");
- parse_JSON(&myJsonResponse[0]);
- }
- }
- else
- puts("BUFFER not big enough for sock data!\r\n");
+ parse_JSON(&myJsonResponse[0]);
}
- else
- {
- printf(RED "No response..." DEF "\r\n");
- }
- puts("SOCKREAD DONE\r\n");
} //bTimerExpiredFlag
} //forever loop
}
--- a/sensors.cpp Sat Jul 30 16:26:22 2016 +0000
+++ b/sensors.cpp Mon Aug 01 18:29:04 2016 +0000
@@ -2,6 +2,8 @@
#include "sensors.h"
#include "hardware.h"
#include "FXOS8700CQ.h"
+#include "HTS221.h"
+#include <string>
//I2C for pmod sensors:
#define Si1145_PMOD_I2C_ADDR 0xC0 //this is for 7-bit addr 0x60 for the Si7020
@@ -312,7 +314,7 @@
//* Read the FXOS8700CQ - 6-axis combo Sensor Accelerometer and Magnetometer
//********************************************************************************************************************************************
bool bMotionSensor_present = false;
-void init_motion_sensor()
+void Init_motion_sensor()
{
// Note: this class is instantiated here because if it is statically declared, the cellular shield init kills the I2C bus...
// Class instantiation with pin names for the motion sensor on the FRDM-K64F board:
@@ -333,9 +335,9 @@
bMotionSensor_present = true;
fxos.enable();
}
-} //init_motion_sensor
+} //Init_motion_sensor()
-void read_motion_sensor()
+void Read_motion_sensor()
{
// Note: this class is instantiated here because if it is statically declared, the cellular shield init kills the I2C bus...
// Class instantiation with pin names for the motion sensor on the FRDM-K64F board:
@@ -359,8 +361,46 @@
sprintf(SENSOR_DATA.AccelY, "%2.3f", fAccelScaled_y);
sprintf(SENSOR_DATA.AccelZ, "%2.3f", fAccelScaled_z);
} //bMotionSensor_present
-} //read_motion_sensor
+} //Read_motion_sensor()
+
+
+//********************************************************************************************************************************************
+//* Read the HTS221 temperature & humidity sensor on the Cellular Shield
+//********************************************************************************************************************************************
+// These are to be built on the fly
+string my_temp;
+string my_humidity;
+HTS221 hts221;
+#define CTOF(x) ((x)*1.8+32)
+bool bHTS221_present = false;
+void Init_HTS221()
+{
+ int i;
+ void hts221_init(void);
+ i = hts221.begin();
+ if (i)
+ {
+ bHTS221_present = true;
+ pc.printf(BLU "HTS221 Detected (0x%02X)\n\r",i);
+ printf(" Temp is: %0.2f F \n\r",CTOF(hts221.readTemperature()));
+ printf(" Humid is: %02d %%\n\r",hts221.readHumidity());
+ }
+ else
+ {
+ bHTS221_present = false;
+ pc.printf(RED "HTS221 NOT DETECTED!\n\r");
+ }
+} //Init_HTS221()
+
+void Read_HTS221()
+{
+ if (bHTS221_present)
+ {
+ sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
+ sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
+ } //bHTS221_present
+} //Read_HTS221()
#ifdef USE_VIRTUAL_SENSORS
bool bUsbConnected = false;
@@ -497,14 +537,16 @@
#ifdef USE_VIRTUAL_SENSORS
pc.attach(&UsbUartRxCallback, MODSERIAL::RxIrq);
#endif
+ Init_HTS221();
Init_Si7020();
Init_Si1145();
- init_motion_sensor();
+ Init_motion_sensor();
} //sensors_init
void read_sensors(void)
{
+ Read_HTS221();
Read_Si7020();
Read_Si1145();
- read_motion_sensor();
+ Read_motion_sensor();
} //read_sensors