8000 2016-11-22 · Smeedy/esp32-snippets@5dcef5f · GitHub
[go: up one dir, main page]

Skip to content

Commit 5dcef5f

Browse files
author
kolban
committed
2016-11-22
1 parent e00f07a commit 5dcef5f

File tree

7 files changed

+391
-32
lines changed

7 files changed

+391
-32
lines changed

c-utils/c_list.c

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
#include <stdlib.h>
2+
3+
#include "c_list.h"
4+
5+
/**
6+
* A list is an ordered set of entries. We have the following primitives:
7+
* * list_create() - Create an empty list. The return is the list pointer.
8+
* * list_delete() - Delete the list and optionally free all its entries.
9+
* * list_first() - Return the first item in the list.
10+
* * list_insert() - Add an item to the end of the list.
11+
* * list_insert_after() - Add an item to the list after a given entry.
12+
* * list_insert_before() - Add an item to the list before a given entry.
13+
* * list_next() - Get the next item in the list.
14+
* * list_remove() - Remove a specific item from the list.
15+
* * list_removeByValue() - Find the first element in the list with a matching value and remove it.
16+
*/
17+
18+
/**
19+
* Create a new list.
20+
*/
21+
list_t *list_createList() {
22+
list_t *pList = malloc(sizeof(list_t));
23+
pList->next = NULL;
24+
pList->prev = NULL;
25+
pList->value = NULL;
26+
return pList;
27+
} // list_createList
28+
29+
/**
30+
* Delete a list.
31+
*/
32+
void list_deleteList(list_t *pList, int withFree) {
33+
list_t *pNext;
34+
while(pList != NULL) {
35+
pNext = pList->next;
36+
if (withFree) {
37+
free(pList->value);
38+
}
39+
free(pList);
40+
pList = pNext;
41+
}
42+
} // list_deleteList
43+
44+
/**
45+
* Insert a new item at the end of the list.
46+
*[A] -> [endOLD] ------> [A] -> [endOLD] -> [X]
47+
*
48+
*/
49+
void list_insert(list_t *pList, void *value) {
50+
while(pList->next != NULL) {
51+
pList = pList->next;
52+
}
53+
list_insert_after(pList, value);
54+
} // list_insert
55+
56+
/**
57+
* [pEntry] -> [B] ------> [pEntry] -> [X] -> [B]
58+
*
59+
*/
60+
void list_insert_after(list_t *pEntry, void *value) {
61+
list_t *pNew = malloc(sizeof(list_t));
62+
pNew->next = pEntry->next;
63+
pNew->prev = pEntry;
64+
pNew->value = value;
65+
66+
// Order IS important here.
67+
if (pEntry->next != NULL) {
68+
pEntry->next->prev = pNew;
69+
}
70+
pEntry->next = pNew;
71+
} // list_insert_after
72+
73+
/**
74+
* [A] -> [pEntry] ------> [A] -> [X] -> [pEntry]
75+
*
76+
*/
77+
void list_insert_before(list_t *pEntry, void *value) {
78+
// Can't insert before the list itself.
79+
if (pEntry->prev == NULL) {
80+
return;
81+
}
82+
list_t *pNew = malloc(sizeof(list_t));
83+
pNew->next = pEntry;
84+
pNew->prev = pEntry->prev;
85+
pNew->value = value;
86+
87+
// Order IS important here.
88+
pEntry->prev->next = pNew;
89+
pEntry->prev = pNew;
90+
} // list_insert_before
91+
92+
/**
93+
* Remove an item from the list.
94+
*/
95+
void list_remove(list_t *pList, list_t *pEntry, int withFree) {
96+
while(pList != NULL && pList->next != pEntry) {
97+
pList = pList->next;
98+
}
99+
if (pList == NULL) {
100+
return;
101+
}
102+
pList->next = pEntry->next;
103+
if (pEntry->next != NULL) {
104+
pEntry->next->prev = pList;
105+
}
106+
if (withFree) {
107+
free(pEntry->value);
108+
}
109+
free(pEntry);
110+
} // list_delete
111+
112+
/**
113+
* Delete a list entry by value.
114+
*/
115+
void list_removeByValue(list_t *pList, void *value, int withFree) {
116+
list_t *pNext = pList->next;
117+
while(pNext != NULL) {
118+
if (pNext->value == value) {
119+
list_delete(pList, pNext, withFree);
120+
return;
121+
}
122+
} // End while
123+
} // list_deleteByValue
124+
125+
/**
126+
* Get the next item in a list.
127+
*/
128+
list_t *list_next(list_t *pList) {
129+
if (pList == NULL) {
130+
return NULL;
131+
}
132+
return (pList->next);
133+
} // list_next
134+
135+
136+
list_t *list_first(list_t *pList) {
137+
return pList->next;
138+
} // list_first
139+
140+
void *list_get_value(list_t *pList) {
141+
return pList->value;
142+
}
143+

c-utils/c_list.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* c_utils.h
3+
*
4+
* Created on: Nov 15, 2016
5+
* Author: kolban
6+
*/
7+
8+
#ifndef COMPONENTS_C_LIST_H_
9+
#define COMPONENTS_C_LIST_H_
10+
11+
typedef struct _list_t {
12+
void *value;
13+
struct _list_t *next;
14+
struct _list_t *prev;
15+
} list_t;
16+
17+
list_t *list_createList();
18+
void list_deleteList(list_t *pList, int withFree);
19+
void list_insert(list_t *pList, void *value);
20+
void list_remove(list_t *pList, list_t *pEntry, int withFree);
21+
list_t *list_next(list_t *pList);
22+
void list_removeByValue(list_t *pList, void *value, int withFree);
23+
list_t *list_first(list_t *pList);
24+
void list_insert_after(list_t *pEntry, void *value);
25+
void list_insert_before(list_t *pEntry, void *value);
26+
void *list_get_value(list_t *pList);
27+
#endif /* COMPONENTS_C_LIST_H_ */

curl/fragments/testCurl.c

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
#include "freertos/FreeRTOS.h"
2+
#include "esp_wifi.h"
3+
#include "esp_system.h"
4+
#include "esp_event.h"
5+
#include "esp_event_loop.h"
6+
#include "nvs_flash.h"
7+
#include "driver/gpio.h"
8+
#include "esp_log.h"
9+
#include "curl/curl.h"
10+
11+
#define SSID "RASPI3"
12+
#define PASSWORD "password"
13+
14+
/*
15+
#define SSID "guest"
16+
#define PASSWORD "kolbanguest"
17+
*/
18+
19+
static char tag[] = "main";
20+
21+
static size_t writeData(void *buffer, size_t size, size_t nmemb, void *userp) {
22+
ESP_LOGI(tag, "writeData called: buffer=0x%lx, size=%d, nmemb=%d", (unsigned long)buffer, size, nmemb);
23+
ESP_LOGI(tag, "data>> %.*s", size*nmemb, (char *)buffer);
24+
return size * nmemb;
25+
}
26+
27+
void testCurl(void *taskData) {
28+
CURL *handle;
29+
CURLcode res;
30+
31+
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
32+
ESP_LOGI(tag, "Curl version info");
33+
ESP_LOGI(tag, "version: %s - %d", data->version, data->version_num);
34+
ESP_LOGI(tag, "host: %s", data->host);
35+
if (data->features & CURL_VERSION_IPV6) {
36+
ESP_LOGI(tag, "- IP V6 supported");
37+
} else {
38+
ESP_LOGI(tag, "- IP V6 NOT supported");
39+
}
40+
if (data->features & CURL_VERSION_SSL) {
41+
ESP_LOGI(tag, "- SSL supported");
42+
} else {
43+
ESP_LOGI(tag, "- SSL NOT supported");
44+
}
45+
if (data->features & CURL_VERSION_LIBZ) {
46+
ESP_LOGI(tag, "- LIBZ supported");
47+
} else {
48+
ESP_LOGI(tag, "- LIBZ NOT supported");
49+
}
50+
if (data->features & CURL_VERSION_NTLM) {
51+
ESP_LOGI(tag, "- NTLM supported");
52+
} else {
53+
ESP_LOGI(tag, "- NTLM NOT supported");
54+
}
55+
if (data->features & CURL_VERSION_DEBUG) {
56+
ESP_LOGI(tag, "- DEBUG supported");
57+
} else {
58+
ESP_LOGI(tag, "- DEBUG NOT supported");
59+
}
60+
if (data->features & CURL_VERSION_UNIX_SOCKETS) {
61+
ESP_LOGI(tag, "- UNIX sockets supported");
62+
} else {
63+
ESP_LOGI(tag, "- UNIX sockets NOT supported");
64+
}
65+
ESP_LOGI(tag, "Protocols:");
66+
int i=0;
67+
while(data->protocols[i] != NULL) {
68+
ESP_LOGI(tag, "- %s", data->protocols[i]);
69+
i++;
70+
}
71+
72+
73+
74+
// Create a curl handle
75+
handle = curl_easy_init();
76+
if (handle == NULL) {
77+
ESP_LOGI(tag, "Failed to create a curl handle");
78+
vTaskDelete(NULL);
79+
return;
80+
}
81+
82+
ESP_LOGI(tag, "Created a curl handle ...");
83+
84+
//char *url = "http://example.com";
85+
char *url = "ftp://pi:raspberry@192.168.5.1/.profile";
86+
curl_easy_setopt(handle, CURLOPT_URL, url);
87+
/* example.com is redirected, so we tell libcurl to follow redirection */
88+
curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1L);
89+
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writeData);
90+
/* Perform the request, res will get the return code */
91+
res = curl_easy_perform(handle);
92+
if (res != CURLE_OK) {
93+
ESP_LOGI(tag, "curl_easy_perform failed: %s", curl_easy_strerror(res));
94+
} else {
95+
ESP_LOGI(tag, "curl_easy_perform() completed without incident.");
96+
}
97+
curl_easy_cleanup(handle);
98+
vTaskDelete(NULL);
99+
} // End of testCurl
100+
101+
102+
esp_err_t wifi_event_handler(void *ctx, system_event_t *event)
103+
{
104+
if (event->event_id == SYSTEM_EVENT_STA_GOT_IP) {
105+
ESP_LOGI(tag, "Got an IP ... ready to go!");
106+
xTaskCreatePinnedToCore(&testCurl, "testCurl", 10000, NULL, 5, NULL, 0);
107+
return ESP_OK;
108+
}
109+
return ESP_OK;
110+
}
111+
112+
int app_main(void)
113+
{
114+
nvs_flash_init();
115+
system_init();
116+
tcpip_adapter_init();
117+
ESP_ERROR_CHECK( esp_event_loop_init(wifi_event_handler, NULL) );
118+
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
119+
ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
120+
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
121+
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
122+
wifi_config_t sta_config = {
123+
.sta = {
124+
.ssid = SSID,
125+
.password = PASSWORD,
126+
.bssid_set = 0
127+
}
128+
};
129+
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) );
130+
ESP_ERROR_CHECK( esp_wifi_start() );
131+
ESP_ERROR_CHECK( esp_wifi_connect() );
132+
ESP_LOGI(tag, "Registering test vfs");
133+
return 0;
134+
}
135+

error handling/fragments/espToError.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <esp_err.h>
2+
3+
char *espToString(esp_err_t value) {
4+
switch(value) {
5+
case ESP_OK:
6+
return "OK";
7+
case ESP_FAIL:
8+
return "Fail";
9+
case ESP_ERR_NO_MEM:
10+
return "No memory";
11+
case ESP_ERR_INVALID_ARG:
12+
return "Invalid argument";
13+
case ESP_ERR_INVALID_SIZE:
14+
return "Invalid state";
15+
case ESP_ERR_INVALID_STATE:
16+
return "Invalid state";
17+
case ESP_ERR_NOT_FOUND:
18+
return "Not found";
19+
case ESP_ERR_NOT_SUPPORTED:
20+
return "Not supported";
21+
case ESP_ERR_TIMEOUT:
22+
return "Timeout";
23+
}
24+
if (value >= ESP_ERR_WIFI_BASE) {
25+
return "WiFi error";
26+
}
27+
return "Unknown error";
28+
}

mongoose/webserver/main/main.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ static char tag []="mongooseTests";
3131
/**
3232
* Convert a Mongoose event type to a string.
3333
*/
34-
char *eventToString(int ev) {
34+
char *mongoose_eventToString(int ev) {
3535
static char temp[100];
3636
switch (ev) {
3737
case MG_EV_CONNECT:
@@ -76,6 +76,12 @@ char *eventToString(int ev) {
7676
return "MG_EV_MQTT_UNSUBACK";
7777
case MG_EV_MQTT_UNSUBSCRIBE:
7878
return "MG_EV_MQTT_UNSUBSCRIBE";
79+
case MG_EV_WEBSOCKET_HANDSHAKE_REQUEST:
80+
return "MG_EV_WEBSOCKET_HANDSHAKE_REQUEST";
81+
case MG_EV_WEBSOCKET_HANDSHAKE_DONE:
82+
return "MG_EV_WEBSOCKET_HANDSHAKE_DONE";
83+
case MG_EV_WEBSOCKET_FRAME:
84+
return "MG_EV_WEBSOCKET_FRAME";
7985
}
8086
sprintf(temp, "Unknown event: %d", ev);
8187
return temp;

0 commit comments

Comments
 (0)
0