CO528 - Assessment 3 - Guard Room Project

Dependencies:   C12832 MMA7660 mbed-http

Fork of http-example by sandbox

Files at this revision

API Documentation at this revision

Comitter:
fpaf2
Date:
Wed May 03 12:06:22 2017 +0000
Parent:
14:3c173847e681
Commit message:
CO528 - Assessment 3 - Guard Room project

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
MMA7660.lib Show annotated file Show diff for this revision Revisions of this file
mbedtls_entropy_config.h Show annotated file Show diff for this revision Revisions of this file
source/Core.cpp Show annotated file Show diff for this revision Revisions of this file
source/Core.h Show annotated file Show diff for this revision Revisions of this file
source/main-http-socket-reuse.cpp Show diff for this revision Revisions of this file
source/main-http.cpp Show diff for this revision Revisions of this file
source/main-https-socket-reuse.cpp Show diff for this revision Revisions of this file
source/main-https.cpp Show diff for this revision Revisions of this file
diff -r 3c173847e681 -r 8965fc128e7b C12832.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Wed May 03 12:06:22 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/askksa12543/code/C12832/#990d5eec2ef6
diff -r 3c173847e681 -r 8965fc128e7b MMA7660.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA7660.lib	Wed May 03 12:06:22 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MMA7660/#36a163511e34
diff -r 3c173847e681 -r 8965fc128e7b mbedtls_entropy_config.h
--- a/mbedtls_entropy_config.h	Thu Mar 30 15:15:47 2017 +0200
+++ b/mbedtls_entropy_config.h	Wed May 03 12:06:22 2017 +0000
@@ -17,8 +17,6 @@
  *  This file is part of mbed TLS (https://tls.mbed.org)
  */
 
-#include "select-demo.h"
-
 /* Enable entropy for K64F and K22F. This means entropy is disabled for all other targets. */
 /* Do **NOT** deploy this code in production on other targets! */
 /* See https://tls.mbed.org/kb/how-to/add-entropy-sources-to-entropy-pool */
diff -r 3c173847e681 -r 8965fc128e7b source/Core.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/Core.cpp	Wed May 03 12:06:22 2017 +0000
@@ -0,0 +1,151 @@
+#include "Core.h"
+
+// Speaker
+PwmOut spkr(D6);
+
+// Using Arduino pin notation
+C12832 lcd(D11, D13, D12, D7, D10);
+
+// Orientation
+MMA7660 MMA(D14,D15);
+
+// Led color
+DigitalOut r(D5);
+DigitalOut b(D8);
+DigitalOut g(D9);
+
+// Used for USB connection
+Serial host(USBTX, USBRX);
+
+Core::Core() {
+    r = 1.0;
+    b = 1.0;
+    g = 1.0;
+    _message = "Searching..";
+    _quiet = true;
+    host.baud(38400);
+    
+    _network = easy_connect(true);
+    if (!_network) {
+        printf("Cannot connect to the network, see serial output");
+        return;
+    }
+}
+
+bool Core::doorIsOpening() {
+    if (MMA.x() > 0.2 || MMA.x() < -0.2) {
+        return true;
+    }
+    return false;
+}
+
+void Core::displayMessageOnScreen() {
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("%s", _message); // Around 60max
+    printf("%s\n", _message);
+}
+
+void Core::triggerAlarm() {
+    static bool state = true;
+    
+    if (state) {
+        r = 0;
+        g = 1;
+        b = 1;
+        spkr.period(1.0/1000);
+        spkr=0.5;
+
+    } else {
+        r = 1;
+        g = 1;
+        b = 0;        
+        spkr.period(1.0/500);
+        spkr=0.5;
+    }
+    state = !state;
+}
+
+void Core::dumpResponseGet(HttpResponse* res) {    
+    char *pch;
+    char *cstr = new char[res->get_body_as_string().length() + 1];
+    
+    strcpy(cstr, res->get_body_as_string().c_str());
+    pch = strtok (cstr,"{}:,");
+    int i = 0;
+    while (pch != NULL) {
+        pch = strtok (NULL, "{}:,");
+        if (i == 2) {
+            _message = pch;
+        } else if (i == 4) {
+            if (strcmp(pch, "false") == 0) {
+                _quiet = false;
+            } else {
+                _quiet = true;
+            }
+            
+        }
+        i++;
+    }
+}
+
+void Core::getRequest() {
+    HttpRequest* get_req = new HttpRequest(_network, HTTP_GET, "http://10.0.0.91:8080/api/alarms/room1");
+    HttpResponse* get_res = get_req->send();
+    
+    if (!get_res) {
+        printf("HttpRequest get failed (error code %d)\n", get_req->get_error());
+        return;
+    }
+
+    dumpResponseGet(get_res);
+
+    printf("\n end response get\n");
+    delete get_req;
+}
+
+void Core::putRequest() {
+    HttpRequest* put_req = new HttpRequest(_network, HTTP_PUT, "http://10.0.0.91:8080/api/alarms/room1");
+    put_req->set_header("Content-Type", "application/json");
+
+    const char body[] = "{\"message\":\"Warning - Intruder !\", \"quiet\":\"false\"}";
+
+    HttpResponse* put_res = put_req->send(body, strlen(body));
+    if (!put_res) {
+        printf("HttpRequest put failed (error code %d)\n", put_req->get_error());
+        return;
+    }
+    delete put_req;
+}
+
+void Core::shutDownAlarm(void) {
+    r = 1;
+    g = 1;
+    b = 1;
+    spkr=0;
+}
+
+void Core::guard(void) {
+    // Inifinte loop
+    while (1) {
+        if (doorIsOpening()) {
+            putRequest(); // Update infos from local to API
+        }
+        getRequest(); // Update infos from API to local
+        if (_quiet == false) {
+            triggerAlarm();
+        } else {
+            shutDownAlarm();
+        }
+        displayMessageOnScreen();
+    wait(0.5);
+    }
+}
+
+int main()
+{
+    Core *core = new Core();
+    
+    core->guard();
+    delete core;
+}
\ No newline at end of file
diff -r 3c173847e681 -r 8965fc128e7b source/Core.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/Core.h	Wed May 03 12:06:22 2017 +0000
@@ -0,0 +1,63 @@
+/* mbed library for the mbed Lab Board  128*32 pixel LCD
+ * use C12832 controller
+ * Copyright (c) 2012 Peter Drescher - DC2PD
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef CORE_H
+#define CORE_H
+
+#include <string>
+#include "MMA7660.h"
+#include "C12832.h"
+#include "easy-connect.h"
+#include "http_request.h"
+//#include "select-demo.h"
+
+/** This classe is being used to control the temperature program
+  *
+  */
+
+class Core {
+public:
+    /** Create a Core object and initialise all the values
+      *
+      */
+    Core();
+    
+    /** Plays the program, this is the heart of this class
+      *
+      */
+    void    guard(void);
+    
+private:
+    bool    doorIsOpening(void);
+    void    displayMessageOnScreen(void);
+    void    triggerAlarm(void);
+    void    shutDownAlarm(void);
+    void    updateInfoWithAPI(void);
+    void    dumpResponsePut(HttpResponse *);
+    void    dumpResponseGet(HttpResponse *);
+    void    putRequest(void);
+    void    getRequest(void);
+    
+    /** These are the variables used in the program
+      *
+      */
+    bool                _quiet;
+    std::string         _message;
+    NetworkInterface*   _network;
+};
+
+
+
+
+#endif
diff -r 3c173847e681 -r 8965fc128e7b source/main-http-socket-reuse.cpp
--- a/source/main-http-socket-reuse.cpp	Thu Mar 30 15:15:47 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTP_SOCKET_REUSE
-
-#include "mbed.h"
-#include "easy-connect.h"
-#include "http_request.h"
-
-Serial pc(USBTX, USBRX);
-
-void dump_response(HttpResponse* res) {
-    printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
-    printf("Headers:\n");
-    for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
-        printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
-    }
-    printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
-    pc.baud(115200);
-    // Connect to the network (see mbed_app.json for the connectivity method used)
-    NetworkInterface *network = easy_connect(true);
-    if (!network) {
-        printf("Cannot connect to the network, see serial output");
-        return 1;
-    }
-
-    // Create a TCP socket
-    printf("\n----- Setting up TCP connection -----\n");
-
-    TCPSocket* socket = new TCPSocket();
-    nsapi_error_t open_result = socket->open(network);
-    if (open_result != 0) {
-        printf("Opening TCPSocket failed... %d\n", open_result);
-        return 1;
-    }
-
-    nsapi_error_t connect_result = socket->connect("httpbin.org", 80);
-    if (connect_result != 0) {
-        printf("Connecting over TCPSocket failed... %d\n", connect_result);
-        return 1;
-    }
-
-    printf("Connected over TCP to httpbin.org:80\n");
-
-    // Do a GET request to httpbin.org
-    {
-        HttpRequest* get_req = new HttpRequest(socket, HTTP_GET, "http://httpbin.org/status/418");
-
-        // By default the body is automatically parsed and stored in a string, this is memory heavy.
-        // To receive chunked response, pass in a callback as third parameter to 'send'.
-        HttpResponse* get_res = get_req->send();
-        if (!get_res) {
-            printf("HttpRequest failed (error code %d)\n", get_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTP GET response -----\n");
-        dump_response(get_res);
-
-        delete get_req;
-    }
-
-    // POST request to httpbin.org
-    {
-        HttpRequest* post_req = new HttpRequest(socket, HTTP_POST, "http://httpbin.org/post");
-        post_req->set_header("Content-Type", "application/json");
-
-        const char body[] = "{\"hello\":\"world\"}";
-
-        HttpResponse* post_res = post_req->send(body, strlen(body));
-        if (!post_res) {
-            printf("HttpRequest failed (error code %d)\n", post_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTP POST response -----\n");
-        dump_response(post_res);
-
-        delete post_req;
-    }
-
-    delete socket;
-
-    Thread::wait(osWaitForever);
-}
-
-#endif
diff -r 3c173847e681 -r 8965fc128e7b source/main-http.cpp
--- a/source/main-http.cpp	Thu Mar 30 15:15:47 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTP
-
-#include "mbed.h"
-#include "easy-connect.h"
-#include "http_request.h"
-
-Serial pc(USBTX, USBRX);
-
-void dump_response(HttpResponse* res) {
-    printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
-    printf("Headers:\n");
-    for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
-        printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
-    }
-    printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
-    pc.baud(115200);
-    // Connect to the network (see mbed_app.json for the connectivity method used)
-    NetworkInterface *network = easy_connect(true);
-    if (!network) {
-        printf("Cannot connect to the network, see serial output");
-        return 1;
-    }
-
-    // Do a GET request to httpbin.org
-    {
-        // By default the body is automatically parsed and stored in a buffer, this is memory heavy.
-        // To receive chunked response, pass in a callback as last parameter to the constructor.
-        HttpRequest* get_req = new HttpRequest(network, HTTP_GET, "http://httpbin.org/status/418");
-
-        HttpResponse* get_res = get_req->send();
-        if (!get_res) {
-            printf("HttpRequest failed (error code %d)\n", get_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTP GET response -----\n");
-        dump_response(get_res);
-
-        delete get_req;
-    }
-
-    // POST request to httpbin.org
-    {
-        HttpRequest* post_req = new HttpRequest(network, HTTP_POST, "http://httpbin.org/post");
-        post_req->set_header("Content-Type", "application/json");
-
-        const char body[] = "{\"hello\":\"world\"}";
-
-        HttpResponse* post_res = post_req->send(body, strlen(body));
-        if (!post_res) {
-            printf("HttpRequest failed (error code %d)\n", post_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTP POST response -----\n");
-        dump_response(post_res);
-
-        delete post_req;
-    }
-
-    Thread::wait(osWaitForever);
-}
-
-#endif
diff -r 3c173847e681 -r 8965fc128e7b source/main-https-socket-reuse.cpp
--- a/source/main-https-socket-reuse.cpp	Thu Mar 30 15:15:47 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-#include "select-demo.h"
-
-/**
- * This demo shows how to re-use sockets, so the TLS handshake only has to happen once
- */
-
-#if DEMO == DEMO_HTTPS_SOCKET_REUSE
-
-#include "mbed.h"
-#include "easy-connect.h"
-#include "https_request.h"
-
-Serial pc(USBTX, USBRX);
-
-/* List of trusted root CA certificates
- * currently one: Let's Encrypt, the CA for httpbin.org
- *
- * To add more root certificates, just concatenate them.
- */
-const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
-    "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
-    "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
-    "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
-    "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
-    "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
-    "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
-    "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
-    "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
-    "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
-    "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
-    "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
-    "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
-    "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
-    "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
-    "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
-    "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
-    "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
-    "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
-    "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
-    "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
-    "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
-    "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
-    "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
-    "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
-    "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
-    "-----END CERTIFICATE-----\n";
-
-void dump_response(HttpResponse* res) {
-    mbedtls_printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
-    mbedtls_printf("Headers:\n");
-    for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
-        mbedtls_printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
-    }
-    mbedtls_printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
-    pc.baud(115200);
-
-    NetworkInterface* network = easy_connect(true);
-    if (!network) {
-        return 1;
-    }
-
-    // Create a TLS socket (which holds a TCPSocket)
-    printf("\n----- Setting up TLS connection -----\n");
-
-    TLSSocket* socket = new TLSSocket(network, "httpbin.org", 443, SSL_CA_PEM);
-    socket->set_debug(true);
-    if (socket->connect() != 0) {
-        printf("TLS Connect failed %d\n", socket->error());
-        return 1;
-    }
-
-    // GET request to httpbin.org
-    {
-        HttpsRequest* get_req = new HttpsRequest(socket, HTTP_GET, "https://httpbin.org/status/418");
-        get_req->set_debug(true);
-
-        HttpResponse* get_res = get_req->send();
-        if (!get_res) {
-            printf("HttpRequest failed (error code %d)\n", get_req->get_error());
-            return 1;
-        }
-        printf("\n----- HTTPS GET response -----\n");
-        dump_response(get_res);
-
-        delete get_req;
-    }
-
-    // POST request to httpbin.org
-    {
-        HttpsRequest* post_req = new HttpsRequest(socket, HTTP_POST, "https://httpbin.org/post");
-        post_req->set_debug(true);
-        post_req->set_header("Content-Type", "application/json");
-
-        const char body[] = "{\"hello\":\"world\"}";
-
-        HttpResponse* post_res = post_req->send(body, strlen(body));
-        if (!post_res) {
-            printf("HttpRequest failed (error code %d)\n", post_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTPS POST response -----\n");
-        dump_response(post_res);
-
-        delete post_req;
-    }
-
-    delete socket;
-
-    Thread::wait(osWaitForever);
-}
-
-#endif
diff -r 3c173847e681 -r 8965fc128e7b source/main-https.cpp
--- a/source/main-https.cpp	Thu Mar 30 15:15:47 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-#include "select-demo.h"
-
-#if DEMO == DEMO_HTTPS
-
-#include "mbed.h"
-#include "easy-connect.h"
-#include "https_request.h"
-
-Serial pc(USBTX, USBRX);
-
-/* List of trusted root CA certificates
- * currently two: GlobalSign, the CA for developer.mbed.org and Let's Encrypt, the CA for httpbin.org
- *
- * To add more root certificates, just concatenate them.
- */
-const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
-    "MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n"
-    "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"
-    "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\n"
-    "MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"
-    "YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\n"
-    "aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\n"
-    "jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\n"
-    "xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n"
-    "1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\n"
-    "snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\n"
-    "U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n"
-    "9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\n"
-    "BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\n"
-    "AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\n"
-    "yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\n"
-    "38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\n"
-    "AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\n"
-    "DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\n"
-    "HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n"
-    "-----END CERTIFICATE-----\n"
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
-    "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
-    "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
-    "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
-    "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
-    "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
-    "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
-    "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
-    "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
-    "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
-    "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
-    "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
-    "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
-    "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
-    "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
-    "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
-    "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
-    "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
-    "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
-    "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
-    "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
-    "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
-    "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
-    "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
-    "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
-    "-----END CERTIFICATE-----\n";
-
-void dump_response(HttpResponse* res) {
-    mbedtls_printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str());
-
-    mbedtls_printf("Headers:\n");
-    for (size_t ix = 0; ix < res->get_headers_length(); ix++) {
-        mbedtls_printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str());
-    }
-    mbedtls_printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str());
-}
-
-int main() {
-    pc.baud(115200);
-
-    NetworkInterface* network = easy_connect(true);
-    if (!network) {
-        return 1;
-    }
-
-    // GET request to developer.mbed.org
-    {
-        printf("\n----- HTTPS GET request -----\n");
-
-        HttpsRequest* get_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_GET, "https://developer.mbed.org/media/uploads/mbed_official/hello.txt");
-        get_req->set_debug(true);
-
-        HttpResponse* get_res = get_req->send();
-        if (!get_res) {
-            printf("HttpRequest failed (error code %d)\n", get_req->get_error());
-            return 1;
-        }
-        printf("\n----- HTTPS GET response -----\n");
-        dump_response(get_res);
-
-        delete get_req;
-    }
-
-    // POST request to httpbin.org
-    {
-        printf("\n----- HTTPS POST request -----\n");
-
-        HttpsRequest* post_req = new HttpsRequest(network, SSL_CA_PEM, HTTP_POST, "https://httpbin.org/post");
-        post_req->set_debug(true);
-        post_req->set_header("Content-Type", "application/json");
-
-        const char body[] = "{\"hello\":\"world\"}";
-
-        HttpResponse* post_res = post_req->send(body, strlen(body));
-        if (!post_res) {
-            printf("HttpRequest failed (error code %d)\n", post_req->get_error());
-            return 1;
-        }
-
-        printf("\n----- HTTPS POST response -----\n");
-        dump_response(post_res);
-
-        delete post_req;
-    }
-
-    Thread::wait(osWaitForever);
-}
-
-#endif