network/http_server/main.c

/*******************************************************************************
* # License
* Copyright 2019 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* The licensor of this software is Silicon Laboratories Inc. Your use of this
* software is governed by the terms of Silicon Labs Master Software License
* Agreement (MSLA) available at
* www.silabs.com/about-us/legal/master-software-license-agreement. This
* software is distributed to you in Source Code format and is governed by the
* sections of the MSLA applicable to Source Code.
*
******************************************************************************/
/*
* Documentation for this app is available online.
* See https://docs.silabs.com/gecko-os/4/standard/latest/sdk/examples/network/http-server
*/
#include "gos.h"
#include "common.h"
#include "example_app_util.h"
#define APPLICATION_START_LINE "\r\n\r\nHTTP Server example starting..."
bool led_value;
char ip_str_buffer[32];
GOS_HTTP_SERVER_DYNAMIC_PAGE("/", root_page_request),
GOS_HTTP_SERVER_DYNAMIC_PAGE("/toggle_light", toggle_light_request),
GOS_HTTP_SERVER_DYNAMIC_PAGE("/set_light/%s", set_light_request),
GOS_HTTP_SERVER_DYNAMIC_PAGE("/get_params", get_params_request),
GOS_HTTP_SERVER_DYNAMIC_PAGE("/json_parser", json_parser_request),
GOS_HTTP_SERVER_DYNAMIC_PAGE("/json_generator", json_generator_request),
/*************************************************************************************************/
void gos_app_init(void)
{
gos_result_t result;
GOS_LOG(APPLICATION_START_LINE);
if (gos_load_app_settings("settings.ini") != GOS_SUCCESS)
{
GOS_LOG("Failed to load settings");
return;
}
if (GOS_FAILED(result, gos_gpio_init(PLATFORM_STD_LED, GOS_GPIO_OUTPUT_PUSH_PULL, !PLATFORM_LED_ACTIVE_STATE)))
{
GOS_LOG("Failed to initialize LED: %d", result);
}
example_app_util_network_up(GOS_INTERFACE_ANY, true, network_event_handler);
}
/*************************************************************************************************/
static void network_event_handler(bool is_up)
{
if (is_up == true)
{
"wlan.network.ip" : "ethernet.network.ip", ip_str_buffer, sizeof(ip_str_buffer));
GOS_LOG("Network up");
GOS_LOG("HTTP Server running");
GOS_LOG("Available HTTP server routes:");
for (int i = 0; i < ARRAY_COUNT(gos_hs_dynamic_pages); ++i)
{
GOS_LOG("%2d: http://%s%s", i, ip_str_buffer, gos_hs_dynamic_pages[i].path);
}
GOS_LOG("\r\nNote: To test the 'json_parser' route issue the following cURL command:\r\n");
GOS_LOG("Linux/Mac:\r\ncurl -X POST -d '{\"light\":true,\"msg\":\"testing...\",\"retval\":\"it works!\"}' http://%s/json_parser\r\n", ip_str_buffer);
GOS_LOG("Windows:\r\ncurl -X POST -d \"{\\\"light\\\":true,\\\"msg\\\":\\\"testing...\\\",\\\"retval\\\":\\\"it works!\\\"}\" http://%s/json_parser\r\n", ip_str_buffer);
}
else
{
GOS_LOG("Network down");
}
}