This commit is contained in:
Marc 2024-07-31 22:13:10 +02:00
parent b0f5150f81
commit d88ac242c3
70 changed files with 4974 additions and 279 deletions

27
.vscode/settings.json vendored
View File

@ -4,5 +4,30 @@
"board/esp32s3-builtin.cfg" "board/esp32s3-builtin.cfg"
], ],
"idf.flashType": "UART", "idf.flashType": "UART",
"idf.portWin": "COM12" "idf.portWin": "COM12",
"files.associations": {
"string_view": "c",
"regex": "c",
"bitset": "c",
"chrono": "c",
"random": "c",
"limits": "c",
"string": "c",
"format": "c",
"*.tcc": "c",
"ctime": "c",
"iomanip": "c",
"task.h": "c",
"semaphore": "c",
"typeinfo": "c",
"freertos.h": "c",
"esp_err.h": "c",
"esp_lcd_panel_rgb.h": "c",
"esp_lcd_touch_gt911.h": "c",
"esp_lcd_panel_io.h": "c",
"esp_check.h": "c",
"compare": "c",
"cstdint": "c"
},
"search.useIgnoreFiles": false
} }

View File

@ -0,0 +1,2 @@
idf_component_register(SRCS "http.c"
INCLUDE_DIRS "include")

159
components/http/http.c Normal file
View File

@ -0,0 +1,159 @@
/*
http.c - HTTP request routines
File based on https://github.com/espressif/esp-idf/tree/master/examples/03_http_request
This file is part of the ESP32 Everest Run project
https://github.com/krzychb/esp32-everest-run
Copyright (c) 2016 Krzysztof Budzynski <krzychb@gazeta.pl>
This work is licensed under the Apache License, Version 2.0, January 2004
See the file LICENSE for details.
*/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include <string.h>
#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include "lwip/netdb.h"
#include "lwip/dns.h"
#include "http.h"
#define RECV_BUFFER_SIZE 64
static const char* TAG = "HTTP";
void http_client_on_connected(http_client_data *client, http_callback http_on_connected_cb)
{
client->http_connected_cb = http_on_connected_cb;
}
void http_client_on_process_chunk(http_client_data *client, http_callback http_process_chunk_cb)
{
client->http_process_chunk_cb = http_process_chunk_cb;
}
void http_client_on_disconnected(http_client_data *client, http_callback http_disconnected_cb)
{
client->http_disconnected_cb = http_disconnected_cb;
}
esp_err_t http_client_request(http_client_data *client, const char *web_server, const char *request_string)
{
const struct addrinfo hints = {
.ai_family = AF_INET,
.ai_socktype = SOCK_STREAM,
};
struct addrinfo *res;
struct in_addr *addr;
int s, r;
char recv_buf[RECV_BUFFER_SIZE];
client->recv_buf = recv_buf;
client->recv_buf_size = sizeof(recv_buf);
int err = getaddrinfo(web_server, "80", &hints, &res);
if (err != 0 || res == NULL) {
ESP_LOGE(TAG, "DNS lookup failed err=%d res=%p", err, res);
vTaskDelay(1000 / portTICK_PERIOD_MS);
return ESP_ERR_HTTP_DNS_LOOKUP_FAILED;
}
/* Code to print the resolved IP.
Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code
*/
addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr));
s = socket(res->ai_family, res->ai_socktype, 0);
if (s < 0) {
ESP_LOGE(TAG, "... Failed to allocate socket.");
freeaddrinfo(res);
vTaskDelay(1000 / portTICK_PERIOD_MS);
return ESP_ERR_HTTP_FAILED_TO_ALLOCATE_SOCKET;
}
ESP_LOGI(TAG, "... allocated socket");
if (connect(s, res->ai_addr, res->ai_addrlen) != 0) {
ESP_LOGE(TAG, "... socket connect failed errno=%d", errno);
close(s);
freeaddrinfo(res);
vTaskDelay(4000 / portTICK_PERIOD_MS);
return ESP_ERR_HTTP_SOCKET_CONNECT_FAILED;
}
ESP_LOGI(TAG, "... connected");
freeaddrinfo(res);
if (client->http_connected_cb) {
client->http_connected_cb((uint32_t*) client);
}
if (write(s, request_string, strlen(request_string)) < 0) {
ESP_LOGE(TAG, "... socket send failed");
close(s);
vTaskDelay(4000 / portTICK_PERIOD_MS);
return ESP_ERR_HTTP_SOCKET_SEND_FAILED;
}
ESP_LOGI(TAG, "... socket send success");
/* Read HTTP response */
do {
bzero(recv_buf, sizeof(recv_buf));
r = read(s, recv_buf, sizeof(recv_buf)-1);
if (client->http_process_chunk_cb) {
client->http_process_chunk_cb((uint32_t*) client);
}
} while (r > 0);
ESP_LOGI(TAG, "... done reading from socket. Last read return=%d errno=%d", r, errno);
close(s);
if (client->http_disconnected_cb) {
client->http_disconnected_cb((uint32_t*) client);
}
return ESP_OK;
}
/* Out of HTTP response return pointer to response body
Function return NULL if end of header cannot be identified
*/
const char* find_response_body(char * response)
{
// Identify end of the response headers
// http://stackoverflow.com/questions/11254037/how-to-know-when-the-http-headers-part-is-ended
char * eol; // end of line
char * bol; // beginning of line
bool nheaderfound = false; // end of response headers has been found
bol = response;
while ((eol = index(bol, '\n')) != NULL) {
// update bol based upon the value of eol
bol = eol + 1;
// test if end of headers has been reached
if ( (!(strncmp(bol, "\r\n", 2))) || (!(strncmp(bol, "\n", 1))) )
{
// note that end of headers has been found
nheaderfound = true;
// update the value of bol to reflect the beginning of the line
// immediately after the headers
if (bol[0] != '\n') {
bol += 1;
}
bol += 1;
break;
}
}
if (nheaderfound) {
return bol;
} else {
return NULL;
}
}

View File

@ -0,0 +1,49 @@
/*
http.h - HTTP request routines
This file is part of the ESP32 Everest Run project
https://github.com/krzychb/esp32-everest-run
Copyright (c) 2016 Krzysztof Budzynski <krzychb@gazeta.pl>
This work is licensed under the Apache License, Version 2.0, January 2004
See the file LICENSE for details.
*/
#ifndef HTTP_H
#define HTTP_H
#ifdef __cplusplus
extern "C" {
#endif
#include "esp_err.h"
typedef void (*http_callback)(uint32_t *args);
typedef struct {
char *recv_buf; /*!< Pointer to a receive buffer, data from the socket are collected here */
int recv_buf_size; /*!< Size of the receive buffer */
char *proc_buf; /*!< Pointer to processing buffer, chunks of data from receive buffer and collected here. */
int proc_buf_size; /*!< Size of processing buffer*/
http_callback http_connected_cb; /*!< Pointer to function called once socket connection is established */
http_callback http_process_chunk_cb; /*!< Pointer to function called to process contents of receive buffer, once it is filled up */
http_callback http_disconnected_cb; /*!< Pointer to function called after disconnecting from the socket */
} http_client_data;
#define ESP_ERR_HTTP_BASE 0x40000
#define ESP_ERR_HTTP_DNS_LOOKUP_FAILED (ESP_ERR_HTTP_BASE + 1)
#define ESP_ERR_HTTP_FAILED_TO_ALLOCATE_SOCKET (ESP_ERR_HTTP_BASE + 2)
#define ESP_ERR_HTTP_SOCKET_CONNECT_FAILED (ESP_ERR_HTTP_BASE + 3)
#define ESP_ERR_HTTP_SOCKET_SEND_FAILED (ESP_ERR_HTTP_BASE + 4)
const char* find_response_body(char * response);
void http_client_on_connected(http_client_data *client, http_callback http_connected_cb);
void http_client_on_process_chunk(http_client_data *client, http_callback http_process_chunk_cb);
void http_client_on_disconnected(http_client_data *client, http_callback http_disconnected_cb);
esp_err_t http_client_request(http_client_data *client, const char *web_server, const char *request_string);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,2 @@
idf_component_register(SRCS "jsmn.c"
INCLUDE_DIRS "include")

View File

@ -0,0 +1,471 @@
/*
* MIT License
*
* Copyright (c) 2010 Serge Zaitsev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* 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 JSMN_H
#define JSMN_H
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef JSMN_STATIC
#define JSMN_API static
#else
#define JSMN_API extern
#endif
/**
* JSON type identifier. Basic types are:
* o Object
* o Array
* o String
* o Other primitive: number, boolean (true/false) or null
*/
typedef enum {
JSMN_UNDEFINED = 0,
JSMN_OBJECT = 1 << 0,
JSMN_ARRAY = 1 << 1,
JSMN_STRING = 1 << 2,
JSMN_PRIMITIVE = 1 << 3
} jsmntype_t;
enum jsmnerr {
/* Not enough tokens were provided */
JSMN_ERROR_NOMEM = -1,
/* Invalid character inside JSON string */
JSMN_ERROR_INVAL = -2,
/* The string is not a full JSON packet, more bytes expected */
JSMN_ERROR_PART = -3
};
/**
* JSON token description.
* type type (object, array, string etc.)
* start start position in JSON data string
* end end position in JSON data string
*/
typedef struct jsmntok {
jsmntype_t type;
int start;
int end;
int size;
#ifdef JSMN_PARENT_LINKS
int parent;
#endif
} jsmntok_t;
/**
* JSON parser. Contains an array of token blocks available. Also stores
* the string being parsed now and current position in that string.
*/
typedef struct jsmn_parser {
unsigned int pos; /* offset in the JSON string */
unsigned int toknext; /* next token to allocate */
int toksuper; /* superior token node, e.g. parent object or array */
} jsmn_parser;
/**
* Create JSON parser over an array of tokens
*/
JSMN_API void jsmn_init(jsmn_parser *parser);
/**
* Run JSON parser. It parses a JSON data string into and array of tokens, each
* describing
* a single JSON object.
*/
JSMN_API int jsmn_parse(jsmn_parser *parser, const char *js, const size_t len,
jsmntok_t *tokens, const unsigned int num_tokens);
#ifndef JSMN_HEADER
/**
* Allocates a fresh unused token from the token pool.
*/
static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, jsmntok_t *tokens,
const size_t num_tokens) {
jsmntok_t *tok;
if (parser->toknext >= num_tokens) {
return NULL;
}
tok = &tokens[parser->toknext++];
tok->start = tok->end = -1;
tok->size = 0;
#ifdef JSMN_PARENT_LINKS
tok->parent = -1;
#endif
return tok;
}
/**
* Fills token type and boundaries.
*/
static void jsmn_fill_token(jsmntok_t *token, const jsmntype_t type,
const int start, const int end) {
token->type = type;
token->start = start;
token->end = end;
token->size = 0;
}
/**
* Fills next available token with JSON primitive.
*/
static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
const size_t len, jsmntok_t *tokens,
const size_t num_tokens) {
jsmntok_t *token;
int start;
start = parser->pos;
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
switch (js[parser->pos]) {
#ifndef JSMN_STRICT
/* In strict mode primitive must be followed by "," or "}" or "]" */
case ':':
#endif
case '\t':
case '\r':
case '\n':
case ' ':
case ',':
case ']':
case '}':
goto found;
default:
/* to quiet a warning from gcc*/
break;
}
if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
parser->pos = start;
return JSMN_ERROR_INVAL;
}
}
#ifdef JSMN_STRICT
/* In strict mode primitive must be followed by a comma/object/array */
parser->pos = start;
return JSMN_ERROR_PART;
#endif
found:
if (tokens == NULL) {
parser->pos--;
return 0;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL) {
parser->pos = start;
return JSMN_ERROR_NOMEM;
}
jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos);
#ifdef JSMN_PARENT_LINKS
token->parent = parser->toksuper;
#endif
parser->pos--;
return 0;
}
/**
* Fills next token with JSON string.
*/
static int jsmn_parse_string(jsmn_parser *parser, const char *js,
const size_t len, jsmntok_t *tokens,
const size_t num_tokens) {
jsmntok_t *token;
int start = parser->pos;
/* Skip starting quote */
parser->pos++;
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
char c = js[parser->pos];
/* Quote: end of string */
if (c == '\"') {
if (tokens == NULL) {
return 0;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL) {
parser->pos = start;
return JSMN_ERROR_NOMEM;
}
jsmn_fill_token(token, JSMN_STRING, start + 1, parser->pos);
#ifdef JSMN_PARENT_LINKS
token->parent = parser->toksuper;
#endif
return 0;
}
/* Backslash: Quoted symbol expected */
if (c == '\\' && parser->pos + 1 < len) {
int i;
parser->pos++;
switch (js[parser->pos]) {
/* Allowed escaped symbols */
case '\"':
case '/':
case '\\':
case 'b':
case 'f':
case 'r':
case 'n':
case 't':
break;
/* Allows escaped symbol \uXXXX */
case 'u':
parser->pos++;
for (i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0';
i++) {
/* If it isn't a hex character we have an error */
if (!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
(js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
(js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
parser->pos = start;
return JSMN_ERROR_INVAL;
}
parser->pos++;
}
parser->pos--;
break;
/* Unexpected symbol */
default:
parser->pos = start;
return JSMN_ERROR_INVAL;
}
}
}
parser->pos = start;
return JSMN_ERROR_PART;
}
/**
* Parse JSON string and fill tokens.
*/
JSMN_API int jsmn_parse(jsmn_parser *parser, const char *js, const size_t len,
jsmntok_t *tokens, const unsigned int num_tokens) {
int r;
int i;
jsmntok_t *token;
int count = parser->toknext;
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
char c;
jsmntype_t type;
c = js[parser->pos];
switch (c) {
case '{':
case '[':
count++;
if (tokens == NULL) {
break;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL) {
return JSMN_ERROR_NOMEM;
}
if (parser->toksuper != -1) {
jsmntok_t *t = &tokens[parser->toksuper];
#ifdef JSMN_STRICT
/* In strict mode an object or array can't become a key */
if (t->type == JSMN_OBJECT) {
return JSMN_ERROR_INVAL;
}
#endif
t->size++;
#ifdef JSMN_PARENT_LINKS
token->parent = parser->toksuper;
#endif
}
token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY);
token->start = parser->pos;
parser->toksuper = parser->toknext - 1;
break;
case '}':
case ']':
if (tokens == NULL) {
break;
}
type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY);
#ifdef JSMN_PARENT_LINKS
if (parser->toknext < 1) {
return JSMN_ERROR_INVAL;
}
token = &tokens[parser->toknext - 1];
for (;;) {
if (token->start != -1 && token->end == -1) {
if (token->type != type) {
return JSMN_ERROR_INVAL;
}
token->end = parser->pos + 1;
parser->toksuper = token->parent;
break;
}
if (token->parent == -1) {
if (token->type != type || parser->toksuper == -1) {
return JSMN_ERROR_INVAL;
}
break;
}
token = &tokens[token->parent];
}
#else
for (i = parser->toknext - 1; i >= 0; i--) {
token = &tokens[i];
if (token->start != -1 && token->end == -1) {
if (token->type != type) {
return JSMN_ERROR_INVAL;
}
parser->toksuper = -1;
token->end = parser->pos + 1;
break;
}
}
/* Error if unmatched closing bracket */
if (i == -1) {
return JSMN_ERROR_INVAL;
}
for (; i >= 0; i--) {
token = &tokens[i];
if (token->start != -1 && token->end == -1) {
parser->toksuper = i;
break;
}
}
#endif
break;
case '\"':
r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
if (r < 0) {
return r;
}
count++;
if (parser->toksuper != -1 && tokens != NULL) {
tokens[parser->toksuper].size++;
}
break;
case '\t':
case '\r':
case '\n':
case ' ':
break;
case ':':
parser->toksuper = parser->toknext - 1;
break;
case ',':
if (tokens != NULL && parser->toksuper != -1 &&
tokens[parser->toksuper].type != JSMN_ARRAY &&
tokens[parser->toksuper].type != JSMN_OBJECT) {
#ifdef JSMN_PARENT_LINKS
parser->toksuper = tokens[parser->toksuper].parent;
#else
for (i = parser->toknext - 1; i >= 0; i--) {
if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) {
if (tokens[i].start != -1 && tokens[i].end == -1) {
parser->toksuper = i;
break;
}
}
}
#endif
}
break;
#ifdef JSMN_STRICT
/* In strict mode primitives are: numbers and booleans */
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 't':
case 'f':
case 'n':
/* And they must not be keys of the object */
if (tokens != NULL && parser->toksuper != -1) {
const jsmntok_t *t = &tokens[parser->toksuper];
if (t->type == JSMN_OBJECT ||
(t->type == JSMN_STRING && t->size != 0)) {
return JSMN_ERROR_INVAL;
}
}
#else
/* In non-strict mode every unquoted value is a primitive */
default:
#endif
r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
if (r < 0) {
return r;
}
count++;
if (parser->toksuper != -1 && tokens != NULL) {
tokens[parser->toksuper].size++;
}
break;
#ifdef JSMN_STRICT
/* Unexpected char in strict mode */
default:
return JSMN_ERROR_INVAL;
#endif
}
}
if (tokens != NULL) {
for (i = parser->toknext - 1; i >= 0; i--) {
/* Unmatched opened object or array */
if (tokens[i].start != -1 && tokens[i].end == -1) {
return JSMN_ERROR_PART;
}
}
}
return count;
}
/**
* Creates a new parser based over a given buffer with an array of tokens
* available.
*/
JSMN_API void jsmn_init(jsmn_parser *parser) {
parser->pos = 0;
parser->toknext = 0;
parser->toksuper = -1;
}
#endif /* JSMN_HEADER */
#ifdef __cplusplus
}
#endif
#endif /* JSMN_H */

7
components/jsmn/jsmn.c Normal file
View File

@ -0,0 +1,7 @@
#include <stdio.h>
#include "jsmn.h"
void func(void)
{
}

View File

@ -0,0 +1,3 @@
idf_component_register(SRCS "meteofrance.c"
INCLUDE_DIRS "include"
REQUIRES http jsmn json esp_http_client esp-tls)

View File

@ -0,0 +1,40 @@
struct node {
struct node *next;
int e;
};
struct Hashtable {
unsigned Tablesize;
struct node *Cells;
};
struct forecast_temp{
float min;
float max;
char desc[20];
char icon[8];
};
struct meteoforecast_data{
int datetime;
struct forecast_temp previsions;
};
typedef void (*weather_data_callback)(struct meteoforecast_data *datas);
typedef struct {
unsigned int humidity;
float temperature;
float pressure;
unsigned long retreival_period;
weather_data_callback data_retreived_cb;
} weather_data;
void printftemp(struct forecast_temp *tmp);
void printffd(struct meteoforecast_data *tmp);
void on_weather_data_retrieval(weather_data_callback data_retreived_cb);
void initialise_weather_data_retrieval(unsigned long retreival_period);

View File

@ -0,0 +1,266 @@
/*
weather.c - Weather data retrieval from api.openweathermap.org
This file is part of the ESP32 Everest Run project
https://github.com/krzychb/esp32-everest-run
Copyright (c) 2016 Krzysztof Budzynski <krzychb@gazeta.pl>
This work is licensed under the Apache License, Version 2.0, January 2004
See the file LICENSE for details.
*/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include <stdio.h>
#include <string.h>
#include "meteofrance.h"
#include "jsmn.h"
#include "cJSON.h"
#include "esp_http_client.h"
#include "esp_tls.h"
static const char* TAG = "Weather";
/* Constants that aren't configurable in menuconfig
Typically only LOCATION_ID may need to be changed
*/
#define WEB_SERVER "webservice.meteofrance.com" //"192.168.0.10" //"www.example.com"// //"webservice.meteofrance.com"
#define WEB_PORT 80//5403 //80
#define WEB_URL "/forecast"
#define TOKEN "__Wj7dVSTjV9YGu1guveLyDq0g7S7TfTjaHBTPTpO0kj8__"
// Location ID to get the weather data for
//#define LOCATION_ID "756135"
#define LATITUDE "49.22017054145735"
#define LONGITUDE "3.92188756221628"
#define WEB_QUERY "token="TOKEN"&lat="LATITUDE"&lon="LONGITUDE
#define MAX_HTTP_OUTPUT_BUFFER 32000
static weather_data weather;
static struct meteoforecast_data datas[5];
inline int MIN(int a, int b) { return a > b ? b : a; }
void printftemp(struct forecast_temp *tmp){
printf(" Temps Min:%f, Max:%f", tmp->min, tmp->max);
}
#define MAX_SIZE 80
void printffd(struct meteoforecast_data *tmp){
struct tm * pTime=localtime( & tmp->datetime );
char buffer[ MAX_SIZE ];
strftime(buffer, MAX_SIZE, "%d/%m/%Y", pTime);
printf(" date:%d, Min:%.1f Max:%.1f Desc:%s\n", tmp->datetime, tmp->previsions.min, tmp->previsions.max, tmp->previsions.desc);
}
esp_err_t _http_event_handler(esp_http_client_event_t *evt)
{
static char *output_buffer; // Buffer to store response of http request from event handler
static int output_len; // Stores number of bytes read
switch(evt->event_id) {
case HTTP_EVENT_ERROR:
ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
break;
case HTTP_EVENT_ON_CONNECTED:
ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
break;
case HTTP_EVENT_HEADER_SENT:
ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
break;
case HTTP_EVENT_ON_HEADER:
ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
break;
case HTTP_EVENT_ON_DATA:
ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
// Clean the buffer in case of a new request
if (output_len == 0 && evt->user_data) {
// we are just starting to copy the output data into the use
memset(evt->user_data, 0, MAX_HTTP_OUTPUT_BUFFER);
}
/*
* Check for chunked encoding is added as the URL for chunked encoding used in this example returns binary data.
* However, event handler can also be used in case chunked encoding is used.
*/
if (!esp_http_client_is_chunked_response(evt->client)) {
// If user_data buffer is configured, copy the response into the buffer
int copy_len = 0;
if (evt->user_data) {
// The last byte in evt->user_data is kept for the NULL character in case of out-of-bound access.
copy_len = MIN(evt->data_len, (MAX_HTTP_OUTPUT_BUFFER - output_len));
if (copy_len) {
memcpy(evt->user_data + output_len, evt->data, copy_len);
}
} else {
int content_len = esp_http_client_get_content_length(evt->client);
if (output_buffer == NULL) {
// We initialize output_buffer with 0 because it is used by strlen() and similar functions therefore should be null terminated.
output_buffer = (char *) calloc(content_len + 1, sizeof(char));
output_len = 0;
if (output_buffer == NULL) {
ESP_LOGE(TAG, "Failed to allocate memory for output buffer");
return ESP_FAIL;
}
}
copy_len = MIN(evt->data_len, (content_len - output_len));
if (copy_len) {
memcpy(output_buffer + output_len, evt->data, copy_len);
}
}
output_len += copy_len;
}
break;
case HTTP_EVENT_ON_FINISH:
ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
if (output_buffer != NULL) {
// Response is accumulated in output_buffer. Uncomment the below line to print the accumulated response
// ESP_LOG_BUFFER_HEX(TAG, output_buffer, output_len);
free(output_buffer);
output_buffer = NULL;
}
output_len = 0;
break;
case HTTP_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
int mbedtls_err = 0;
esp_err_t err = esp_tls_get_and_clear_last_error((esp_tls_error_handle_t)evt->data, &mbedtls_err, NULL);
if (err != 0) {
ESP_LOGI(TAG, "Last esp error code: 0x%x", err);
ESP_LOGI(TAG, "Last mbedtls failure: 0x%x", mbedtls_err);
}
if (output_buffer != NULL) {
free(output_buffer);
output_buffer = NULL;
}
output_len = 0;
break;
case HTTP_EVENT_REDIRECT:
ESP_LOGD(TAG, "HTTP_EVENT_REDIRECT");
esp_http_client_set_header(evt->client, "From", "user@example.com");
esp_http_client_set_header(evt->client, "Accept", "text/html");
esp_http_client_set_redirection(evt->client);
break;
}
return ESP_OK;
}
char *JSON_Types(int type) {
if (type == cJSON_Invalid) return ("cJSON_Invalid");
if (type == cJSON_False) return ("cJSON_False");
if (type == cJSON_True) return ("cJSON_True");
if (type == cJSON_NULL) return ("cJSON_NULL");
if (type == cJSON_Number) return ("cJSON_Number");
if (type == cJSON_String) return ("cJSON_String");
if (type == cJSON_Array) return ("cJSON_Array");
if (type == cJSON_Object) return ("cJSON_Object");
if (type == cJSON_Raw) return ("cJSON_Raw");
return NULL;
}
void JSON_Parse(const cJSON * const root) {
//ESP_LOGI(TAG, "root->type=%s", JSON_Types(root->type));
cJSON *current_element = NULL;
//ESP_LOGI(TAG, "roo->child=%p", root->child);
//ESP_LOGI(TAG, "roo->next =%p", root->next);
int i=0;
cJSON *df = cJSON_GetObjectItem(root,"daily_forecast");
if(!cJSON_IsArray(df)){
ESP_LOGE(TAG,"Pas de tableau ^^");
}else{
cJSON_ArrayForEach(current_element, df) {
struct meteoforecast_data datasT;
ESP_LOGI(TAG, "type=%s", JSON_Types(current_element->type));
cJSON *dt = cJSON_GetObjectItem(current_element,"dt");
if(cJSON_IsNumber(dt)){
datasT.datetime=dt->valueint;
cJSON *temps = cJSON_GetObjectItem(current_element,"T");
datasT.previsions.min=cJSON_GetObjectItem(temps,"min")->valuedouble;
datasT.previsions.max=cJSON_GetObjectItem(temps,"max")->valuedouble;
cJSON *weather12=cJSON_GetObjectItem(current_element,"weather12H");
strncpy(datasT.previsions.desc,cJSON_GetObjectItem(weather12,"desc")->valuestring,19);
strncpy(datasT.previsions.icon,cJSON_GetObjectItem(weather12,"icon")->valuestring,7);
ESP_LOGE(TAG,"Donnees lues");
printffd(&datasT);
datas[i++]=datasT;
if(i==3){break;}
}
}
}
}
static bool process_response_body(const char * body)
{
cJSON *root = cJSON_Parse(body);
JSON_Parse(root);
cJSON_Delete(root);
return true;
}
static void http_request_task(void *pvParameter)
{
while(1) {
char *local_response_buffer = heap_caps_malloc((MAX_HTTP_OUTPUT_BUFFER + 1)*(sizeof(char)),MALLOC_CAP_SPIRAM);
//char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER + 1] = {0};
/**
* NOTE: All the configuration parameters for http_client must be spefied either in URL or as host and path parameters.
* If host and path parameters are not set, query parameter will be ignored. In such cases,
* query parameter should be specified in URL.
*
* If URL as well as host and path parameters are specified, values of host and path will be considered.
*/
esp_http_client_config_t config = {
.host = WEB_SERVER,
.port = WEB_PORT,
.path = WEB_URL,
.query = WEB_QUERY,
.event_handler = _http_event_handler,
.user_data = local_response_buffer, // Pass address of local buffer to get response
.disable_auto_redirect = true,
};
esp_http_client_handle_t client = esp_http_client_init(&config);
char url[50];
esp_http_client_get_url(client,url,50);
ESP_LOGE(TAG,"%s",url);
// GET
esp_err_t err = esp_http_client_perform(client);
if (err == ESP_OK) {
ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %"PRId64,
esp_http_client_get_status_code(client),
esp_http_client_get_content_length(client));
} else {
ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
}
ESP_LOGE(TAG, "%s",local_response_buffer);
bool weather_data_phrased = false;
weather_data_phrased = process_response_body(local_response_buffer);
weather.data_retreived_cb(datas);
esp_http_client_cleanup(client);
//http_client_request(&http_client, WEB_SERVER, get_request);
vTaskDelay(weather.retreival_period / portTICK_PERIOD_MS);
}
}
void on_weather_data_retrieval(weather_data_callback data_retreived_cb)
{
weather.data_retreived_cb = data_retreived_cb;
}
void initialise_weather_data_retrieval(unsigned long retreival_period)
{
weather.retreival_period = retreival_period;
//http_client_on_process_chunk(&http_client, process_chunk);
//http_client_on_disconnected(&http_client, disconnected);
xTaskCreate(&http_request_task, "http_request_task", 10 * 2048, NULL, 5, NULL);
ESP_LOGI(TAG, "HTTP request task started");
}

View File

@ -0,0 +1,3 @@
idf_component_register(SRCS "weather.c"
INCLUDE_DIRS "include"
REQUIRES http jsmn)

View File

@ -0,0 +1,11 @@
menu "Wather data retreival from OpenWeatherMap"
config OPENWEATHERMAP_API_KEY
string "OpenWeatherMap API key"
default "12345678901234567890123456789012"
help
API key obtained from 'https://home.openweathermap.org/' site.
You need to set up a free account on this site first.
endmenu

View File

@ -0,0 +1,2 @@
COMPONENT_ADD_INCLUDEDIRS := .

View File

@ -0,0 +1,40 @@
/*
weather.h - Weather data retrieval from api.openweathermap.org
This file is part of the ESP32 Everest Run project
https://github.com/krzychb/esp32-everest-run
Copyright (c) 2016 Krzysztof Budzynski <krzychb@gazeta.pl>
This work is licensed under the Apache License, Version 2.0, January 2004
See the file LICENSE for details.
*/
#ifndef WEATHER_H
#define WEATHER_H
#include "esp_err.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*weather_data_callback)(uint32_t *args);
typedef struct {
unsigned int humidity;
float temperature;
float pressure;
unsigned long retreival_period;
weather_data_callback data_retreived_cb;
} weather_data;
#define ESP_ERR_WEATHER_BASE 0x50000
#define ESP_ERR_WEATHER_RETREIVAL_FAILED (ESP_ERR_WEATHER_BASE + 1)
void on_weather_data_retrieval(weather_data_callback data_retreived_cb);
void initialise_weather_data_retrieval(unsigned long retreival_period);
#ifdef __cplusplus
}
#endif
#endif // WEATHER_H

View File

@ -0,0 +1,183 @@
/*
weather.c - Weather data retrieval from api.openweathermap.org
This file is part of the ESP32 Everest Run project
https://github.com/krzychb/esp32-everest-run
Copyright (c) 2016 Krzysztof Budzynski <krzychb@gazeta.pl>
This work is licensed under the Apache License, Version 2.0, January 2004
See the file LICENSE for details.
*/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include <stdio.h>
#include <string.h>
#include "weather.h"
#include "http.h"
#include "jsmn.h"
static const char* TAG = "Weather";
/* Constants that aren't configurable in menuconfig
Typically only LOCATION_ID may need to be changed
*/
#define WEB_SERVER "api.openweathermap.org"
#define WEB_URL "http://api.openweathermap.org/data/2.5/weather"
// Location ID to get the weather data for
//#define LOCATION_ID "756135"
#define LATITUDE "49.22017054145735"
#define LONGITUDE "3.92188756221628"
// The API key below is configurable in menuconfig
#define OPENWEATHERMAP_API_KEY "24d95e3a2c27a1843590b91bf2cbf37b__"
static const char *get_request = "GET " WEB_URL"?lat="LATITUDE"&lon="LONGITUDE"&appid="OPENWEATHERMAP_API_KEY" HTTP/1.1\n"
"Host: "WEB_SERVER"\n"
"Connection: close\n"
"User-Agent: esp-idf/1.0 esp32\n"
"\n";
static weather_data weather;
static http_client_data http_client = {0};
/* Collect chunks of data received from server
into complete message and save it in proc_buf
*/
static void process_chunk(uint32_t *args)
{
http_client_data* client = (http_client_data*)args;
int proc_buf_new_size = client->proc_buf_size + client->recv_buf_size;
char *copy_from;
if (client->proc_buf == NULL){
client->proc_buf = malloc(proc_buf_new_size);
copy_from = client->proc_buf;
} else {
proc_buf_new_size -= 1; // chunks of data are '\0' terminated
client->proc_buf = realloc(client->proc_buf, proc_buf_new_size);
copy_from = client->proc_buf + proc_buf_new_size - client->recv_buf_size;
}
if (client->proc_buf == NULL) {
ESP_LOGE(TAG, "Failed to allocate memory");
}
client->proc_buf_size = proc_buf_new_size;
memcpy(copy_from, client->recv_buf, client->recv_buf_size);
}
static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start &&
strncmp(json + tok->start, s, tok->end - tok->start) == 0) {
return 0;
}
return -1;
}
static bool process_response_body(const char * body)
{
/* Using great little JSON parser http://zserge.com/jsmn.html
find specific weather information:
- Humidity,
- Temperature,
- Pressure
in HTTP response body that happens to be a JSON string
Return true if phrasing was successful or false if otherwise
*/
#define JSON_MAX_TOKENS 100
jsmn_parser parser;
jsmntok_t t[JSON_MAX_TOKENS];
jsmn_init(&parser);
ESP_LOGE(TAG,"%s",body);
int r = jsmn_parse(&parser, body, strlen(body), t, JSON_MAX_TOKENS);
if (r < 0) {
ESP_LOGE(TAG, "JSON parse error %d", r);
return false;
}
if (r < 1 || t[0].type != JSMN_OBJECT) {
ESP_LOGE(TAG, "JSMN_OBJECT expected");
return false;
} else {
ESP_LOGI(TAG, "Token(s) found %d", r);
char subbuff[8];
int str_length;
for (int i = 1; i < r; i++) {
if (jsoneq(body, &t[i], "humidity") == 0) {
str_length = t[i+1].end - t[i+1].start;
memcpy(subbuff, body + t[i+1].start, str_length);
subbuff[str_length] = '\0';
weather.humidity = atoi(subbuff);
i++;
} else if (jsoneq(body, &t[i], "temp") == 0) {
str_length = t[i+1].end - t[i+1].start;
memcpy(subbuff, body + t[i+1].start, str_length);
subbuff[str_length] = '\0';
weather.temperature = atof(subbuff);
i++;
} else if (jsoneq(body, &t[i], "pressure") == 0) {
str_length = t[i+1].end - t[i+1].start;
memcpy(subbuff, body + t[i+1].start, str_length);
subbuff[str_length] = '\0';
weather.pressure = atof(subbuff);
i++;
}
}
return true;
}
}
static void disconnected(uint32_t *args)
{
http_client_data* client = (http_client_data*)args;
bool weather_data_phrased = false;
const char * response_body = find_response_body(client->proc_buf);
if (response_body) {
weather_data_phrased = process_response_body(response_body);
} else {
ESP_LOGE(TAG, "No HTTP header found");
}
free(client->proc_buf);
client->proc_buf = NULL;
client->proc_buf_size = 0;
// execute callback if data was retrieved
if (weather_data_phrased) {
if (weather.data_retreived_cb) {
weather.data_retreived_cb((uint32_t*) &weather);
}
}
ESP_LOGD(TAG, "Free heap %u", xPortGetFreeHeapSize());
}
static void http_request_task(void *pvParameter)
{
while(1) {
http_client_request(&http_client, WEB_SERVER, get_request);
vTaskDelay(weather.retreival_period / portTICK_PERIOD_MS);
}
}
void on_weather_data_retrieval(weather_data_callback data_retreived_cb)
{
weather.data_retreived_cb = data_retreived_cb;
}
void initialise_weather_data_retrieval(unsigned long retreival_period)
{
weather.retreival_period = retreival_period;
http_client_on_process_chunk(&http_client, process_chunk);
http_client_on_disconnected(&http_client, disconnected);
xTaskCreate(&http_request_task, "http_request_task", 2 * 2048, NULL, 5, NULL);
ESP_LOGI(TAG, "HTTP request task started");
}

View File

@ -1,11 +1,21 @@
idf_component_register(SRCS "main.c" idf_component_register(SRC_DIRS . fonts
INCLUDE_DIRS "." ${LV_DEMO_DIR} INCLUDE_DIRS "."
REQUIRES esp_wifi nvs_flash mqtt) REQUIRES esp_wifi nvs_flash mqtt meteofrance)
lvgl_port_create_c_image("images/esp_logo.png" "images/" "ARGB8888" "NONE") lvgl_port_create_c_image("images/esp_logo.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p1j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p2j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p3j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p14j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p24j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p25j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p26j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p27j.png" "images/" "ARGB8888" "NONE")
lvgl_port_create_c_image("images/p29j.png" "images/" "ARGB8888" "NONE")
lvgl_port_add_images(${COMPONENT_LIB} "images/") lvgl_port_add_images(${COMPONENT_LIB} "images/")
set_source_files_properties( set_source_files_properties(
PROPERTIES COMPILE_OPTIONS PROPERTIES COMPILE_OPTIONS
"-DLV_LVGL_H_INCLUDE_SIMPLE;-Wno-format;" "-DLV_LVGL_H_INCLUDE_SIMPLE;-Wno-format;-DLV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(montserrat_medium_12) LV_FONT_DECLARE(montserrat_medium_18)"
) )

View File

@ -0,0 +1,881 @@
/*******************************************************************************
* Size: 12 px
* Bpp: 4
* Opts: --bpp 4 --size 12 --no-compress --font Montserrat-Medium.ttf --symbols 0123456789.°éêCABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ' --format lvgl -o montserrat_medium_12.c
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef MONTSERRAT_MEDIUM_12
#define MONTSERRAT_MEDIUM_12 1
#endif
#if MONTSERRAT_MEDIUM_12
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0027 "'" */
0x3c, 0x3b, 0x3b, 0x15,
/* U+002E "." */
0x2a, 0x4, 0xd0,
/* U+0030 "0" */
0x0, 0x9e, 0xe9, 0x0, 0xa, 0xd4, 0x4d, 0xa0,
0x1f, 0x20, 0x2, 0xf1, 0x5e, 0x0, 0x0, 0xd5,
0x6c, 0x0, 0x0, 0xc6, 0x5e, 0x0, 0x0, 0xd5,
0x1f, 0x20, 0x2, 0xf1, 0xa, 0xd4, 0x4d, 0xa0,
0x0, 0x9e, 0xe9, 0x0,
/* U+0031 "1" */
0xef, 0xf3, 0x22, 0xf3, 0x0, 0xf3, 0x0, 0xf3,
0x0, 0xf3, 0x0, 0xf3, 0x0, 0xf3, 0x0, 0xf3,
0x0, 0xf3,
/* U+0032 "2" */
0x19, 0xef, 0xc2, 0x8, 0xb4, 0x3a, 0xe0, 0x0,
0x0, 0x2f, 0x10, 0x0, 0x5, 0xe0, 0x0, 0x2,
0xe5, 0x0, 0x1, 0xd7, 0x0, 0x1, 0xd8, 0x0,
0x1, 0xda, 0x22, 0x21, 0x8f, 0xff, 0xff, 0x70,
/* U+0033 "3" */
0x9f, 0xff, 0xff, 0x1, 0x22, 0x2d, 0x80, 0x0,
0x9, 0xb0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7c,
0xf8, 0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0xe,
0x4b, 0x94, 0x39, 0xf1, 0x3b, 0xff, 0xc3, 0x0,
/* U+0034 "4" */
0x0, 0x0, 0x9b, 0x0, 0x0, 0x4, 0xe1, 0x0,
0x0, 0x1e, 0x50, 0x0, 0x0, 0xaa, 0x0, 0x0,
0x5, 0xe1, 0xd, 0x40, 0x1e, 0x40, 0xd, 0x40,
0x8f, 0xff, 0xff, 0xfd, 0x12, 0x22, 0x2e, 0x62,
0x0, 0x0, 0xe, 0x40,
/* U+0035 "5" */
0xc, 0xff, 0xff, 0x0, 0xe5, 0x22, 0x20, 0xf,
0x10, 0x0, 0x1, 0xff, 0xeb, 0x30, 0x2, 0x23,
0x9f, 0x10, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd,
0x69, 0xb4, 0x38, 0xf1, 0x2a, 0xef, 0xc4, 0x0,
/* U+0036 "6" */
0x0, 0x6d, 0xfd, 0x50, 0x8, 0xd5, 0x23, 0x20,
0x1f, 0x20, 0x0, 0x0, 0x4d, 0x6d, 0xea, 0x10,
0x6f, 0xc4, 0x3c, 0xa0, 0x5f, 0x30, 0x2, 0xf0,
0x2f, 0x20, 0x2, 0xf0, 0xa, 0xc3, 0x2b, 0xa0,
0x1, 0xaf, 0xfa, 0x10,
/* U+0037 "7" */
0xaf, 0xff, 0xff, 0xba, 0x92, 0x22, 0xd7, 0x76,
0x0, 0x3f, 0x10, 0x0, 0xa, 0x90, 0x0, 0x1,
0xf2, 0x0, 0x0, 0x7c, 0x0, 0x0, 0xe, 0x50,
0x0, 0x5, 0xe0, 0x0, 0x0, 0xc8, 0x0, 0x0,
/* U+0038 "8" */
0x3, 0xcf, 0xea, 0x10, 0xe, 0x81, 0x2c, 0xa0,
0x2f, 0x10, 0x5, 0xd0, 0xe, 0x70, 0x1b, 0x90,
0x6, 0xff, 0xff, 0x20, 0x3f, 0x50, 0x18, 0xe0,
0x6c, 0x0, 0x0, 0xf2, 0x3f, 0x61, 0x29, 0xe0,
0x5, 0xcf, 0xfb, 0x20,
/* U+0039 "9" */
0x7, 0xef, 0xc3, 0x6, 0xe3, 0x15, 0xe1, 0x98,
0x0, 0xb, 0x87, 0xd2, 0x3, 0xfb, 0xa, 0xff,
0xd9, 0xc0, 0x0, 0x10, 0x8b, 0x0, 0x0, 0xd,
0x70, 0x62, 0x4b, 0xd0, 0x1c, 0xfe, 0xa1, 0x0,
/* U+0041 "A" */
0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0xdd,
0x90, 0x0, 0x0, 0x4, 0xe3, 0xf1, 0x0, 0x0,
0xb, 0x80, 0xc7, 0x0, 0x0, 0x1f, 0x20, 0x6e,
0x0, 0x0, 0x8c, 0x0, 0x1f, 0x50, 0x0, 0xef,
0xee, 0xef, 0xb0, 0x6, 0xe2, 0x11, 0x14, 0xf2,
0xc, 0x70, 0x0, 0x0, 0xb9,
/* U+0042 "B" */
0xbf, 0xff, 0xfb, 0x20, 0xb7, 0x11, 0x2a, 0xd0,
0xb7, 0x0, 0x3, 0xf0, 0xb7, 0x0, 0x8, 0xc0,
0xbf, 0xff, 0xff, 0x50, 0xb8, 0x22, 0x26, 0xf2,
0xb7, 0x0, 0x0, 0xc7, 0xb7, 0x11, 0x15, 0xf4,
0xbf, 0xff, 0xfd, 0x60,
/* U+0043 "C" */
0x0, 0x3b, 0xef, 0xb3, 0x0, 0x5f, 0x93, 0x38,
0xe0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xe0, 0x0,
0x0, 0x0, 0x6c, 0x0, 0x0, 0x0, 0x4, 0xe0,
0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x0,
0x5f, 0x93, 0x38, 0xe0, 0x0, 0x3b, 0xff, 0xb3,
0x0,
/* U+0044 "D" */
0xbf, 0xff, 0xea, 0x30, 0xb, 0x82, 0x23, 0x9f,
0x40, 0xb7, 0x0, 0x0, 0x7e, 0xb, 0x70, 0x0,
0x0, 0xf3, 0xb7, 0x0, 0x0, 0xe, 0x5b, 0x70,
0x0, 0x0, 0xf3, 0xb7, 0x0, 0x0, 0x7e, 0xb,
0x82, 0x23, 0x9f, 0x40, 0xbf, 0xff, 0xeb, 0x30,
0x0,
/* U+0045 "E" */
0xbf, 0xff, 0xff, 0x3b, 0x82, 0x22, 0x20, 0xb7,
0x0, 0x0, 0xb, 0x70, 0x0, 0x0, 0xbf, 0xff,
0xfa, 0xb, 0x82, 0x22, 0x10, 0xb7, 0x0, 0x0,
0xb, 0x82, 0x22, 0x20, 0xbf, 0xff, 0xff, 0x50,
/* U+0046 "F" */
0xbf, 0xff, 0xff, 0x3b, 0x82, 0x22, 0x20, 0xb7,
0x0, 0x0, 0xb, 0x70, 0x0, 0x0, 0xbf, 0xff,
0xfa, 0xb, 0x82, 0x22, 0x10, 0xb7, 0x0, 0x0,
0xb, 0x70, 0x0, 0x0, 0xb7, 0x0, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x3b, 0xef, 0xc4, 0x0, 0x5f, 0x94, 0x38,
0xe1, 0xe, 0x70, 0x0, 0x0, 0x4, 0xe0, 0x0,
0x0, 0x0, 0x6c, 0x0, 0x0, 0x8, 0x24, 0xe0,
0x0, 0x0, 0xe3, 0xe, 0x60, 0x0, 0xe, 0x30,
0x5f, 0x93, 0x37, 0xf3, 0x0, 0x3b, 0xef, 0xc4,
0x0,
/* U+0048 "H" */
0xb7, 0x0, 0x0, 0xb7, 0xb7, 0x0, 0x0, 0xb7,
0xb7, 0x0, 0x0, 0xb7, 0xb7, 0x0, 0x0, 0xb7,
0xbf, 0xff, 0xff, 0xf7, 0xb8, 0x22, 0x22, 0xc7,
0xb7, 0x0, 0x0, 0xb7, 0xb7, 0x0, 0x0, 0xb7,
0xb7, 0x0, 0x0, 0xb7,
/* U+0049 "I" */
0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
0xb7,
/* U+004A "J" */
0x4, 0xff, 0xff, 0x0, 0x22, 0x5f, 0x0, 0x0,
0x3f, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x3f, 0x0,
0x0, 0x3f, 0x0, 0x0, 0x4e, 0xd, 0x52, 0xba,
0x5, 0xdf, 0xb2,
/* U+004B "K" */
0xb7, 0x0, 0x7, 0xd1, 0xb7, 0x0, 0x5e, 0x20,
0xb7, 0x4, 0xe3, 0x0, 0xb7, 0x3e, 0x40, 0x0,
0xb9, 0xef, 0x20, 0x0, 0xbf, 0x89, 0xd0, 0x0,
0xba, 0x0, 0xca, 0x0, 0xb7, 0x0, 0x1e, 0x70,
0xb7, 0x0, 0x3, 0xf3,
/* U+004C "L" */
0xb7, 0x0, 0x0, 0xb, 0x70, 0x0, 0x0, 0xb7,
0x0, 0x0, 0xb, 0x70, 0x0, 0x0, 0xb7, 0x0,
0x0, 0xb, 0x70, 0x0, 0x0, 0xb7, 0x0, 0x0,
0xb, 0x82, 0x22, 0x20, 0xbf, 0xff, 0xff, 0x0,
/* U+004D "M" */
0xb8, 0x0, 0x0, 0x1, 0xf2, 0xbf, 0x10, 0x0,
0x9, 0xf3, 0xbe, 0xa0, 0x0, 0x2e, 0xf3, 0xb7,
0xe3, 0x0, 0xb7, 0xf3, 0xb6, 0x7b, 0x4, 0xd0,
0xf3, 0xb6, 0xd, 0x4c, 0x50, 0xf3, 0xb6, 0x5,
0xfc, 0x0, 0xf3, 0xb6, 0x0, 0xb3, 0x0, 0xf3,
0xb6, 0x0, 0x0, 0x0, 0xf3,
/* U+004E "N" */
0xb9, 0x0, 0x0, 0xb7, 0xbf, 0x50, 0x0, 0xb7,
0xbc, 0xf2, 0x0, 0xb7, 0xb7, 0xad, 0x0, 0xb7,
0xb7, 0xd, 0x90, 0xb7, 0xb7, 0x2, 0xf5, 0xb7,
0xb7, 0x0, 0x6f, 0xd7, 0xb7, 0x0, 0xa, 0xf7,
0xb7, 0x0, 0x0, 0xd7,
/* U+004F "O" */
0x0, 0x3b, 0xef, 0xb4, 0x0, 0x5, 0xf9, 0x33,
0x8f, 0x60, 0xe, 0x60, 0x0, 0x5, 0xf1, 0x4e,
0x0, 0x0, 0x0, 0xd5, 0x6c, 0x0, 0x0, 0x0,
0xb7, 0x4e, 0x0, 0x0, 0x0, 0xd5, 0xe, 0x60,
0x0, 0x5, 0xf1, 0x5, 0xf9, 0x33, 0x8f, 0x60,
0x0, 0x3b, 0xef, 0xb4, 0x0,
/* U+0050 "P" */
0xbf, 0xff, 0xd8, 0x0, 0xb8, 0x22, 0x5d, 0x90,
0xb7, 0x0, 0x4, 0xe0, 0xb7, 0x0, 0x3, 0xf0,
0xb7, 0x0, 0x2c, 0xa0, 0xbf, 0xff, 0xfa, 0x10,
0xb8, 0x22, 0x0, 0x0, 0xb7, 0x0, 0x0, 0x0,
0xb7, 0x0, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x3b, 0xef, 0xb4, 0x0, 0x4, 0xf9, 0x33,
0x8f, 0x60, 0xe, 0x60, 0x0, 0x5, 0xf1, 0x4e,
0x0, 0x0, 0x0, 0xd5, 0x6c, 0x0, 0x0, 0x0,
0xb7, 0x4e, 0x0, 0x0, 0x0, 0xd6, 0xf, 0x60,
0x0, 0x5, 0xf1, 0x5, 0xf8, 0x32, 0x7f, 0x60,
0x0, 0x4c, 0xff, 0xc5, 0x0, 0x0, 0x0, 0xc,
0xb0, 0x28, 0x0, 0x0, 0x1, 0xbf, 0xe5, 0x0,
0x0, 0x0, 0x0, 0x0,
/* U+0052 "R" */
0xbf, 0xff, 0xd8, 0x0, 0xb8, 0x22, 0x5d, 0x90,
0xb7, 0x0, 0x4, 0xe0, 0xb7, 0x0, 0x3, 0xf0,
0xb7, 0x0, 0x1b, 0xb0, 0xbf, 0xff, 0xfb, 0x10,
0xb8, 0x22, 0xb9, 0x0, 0xb7, 0x0, 0x1f, 0x30,
0xb7, 0x0, 0x7, 0xd0,
/* U+0053 "S" */
0x3, 0xcf, 0xeb, 0x31, 0xf7, 0x23, 0x74, 0x4e,
0x0, 0x0, 0x1, 0xf9, 0x20, 0x0, 0x2, 0xbf,
0xd7, 0x0, 0x0, 0x4, 0xca, 0x0, 0x0, 0x4,
0xe5, 0xb4, 0x23, 0xbb, 0x8, 0xdf, 0xea, 0x10,
/* U+0054 "T" */
0xff, 0xff, 0xff, 0xf2, 0x23, 0xf3, 0x22, 0x0,
0x1f, 0x10, 0x0, 0x1, 0xf1, 0x0, 0x0, 0x1f,
0x10, 0x0, 0x1, 0xf1, 0x0, 0x0, 0x1f, 0x10,
0x0, 0x1, 0xf1, 0x0, 0x0, 0x1f, 0x10, 0x0,
/* U+0055 "U" */
0xd6, 0x0, 0x0, 0xe4, 0xd6, 0x0, 0x0, 0xe4,
0xd6, 0x0, 0x0, 0xe4, 0xd6, 0x0, 0x0, 0xe4,
0xd6, 0x0, 0x0, 0xe4, 0xc7, 0x0, 0x0, 0xf3,
0x9a, 0x0, 0x2, 0xf1, 0x2f, 0x83, 0x5d, 0xa0,
0x4, 0xcf, 0xe8, 0x0,
/* U+0056 "V" */
0xc, 0x70, 0x0, 0x0, 0xd5, 0x6, 0xe0, 0x0,
0x4, 0xe0, 0x0, 0xf4, 0x0, 0xa, 0x80, 0x0,
0x9b, 0x0, 0x1f, 0x20, 0x0, 0x2f, 0x20, 0x7b,
0x0, 0x0, 0xc, 0x80, 0xe4, 0x0, 0x0, 0x5,
0xe5, 0xe0, 0x0, 0x0, 0x0, 0xee, 0x70, 0x0,
0x0, 0x0, 0x8f, 0x10, 0x0,
/* U+0057 "W" */
0x7c, 0x0, 0x0, 0xe8, 0x0, 0x2, 0xf0, 0x2f,
0x10, 0x3, 0xfd, 0x0, 0x7, 0xa0, 0xd, 0x60,
0x8, 0x9f, 0x20, 0xc, 0x50, 0x8, 0xb0, 0xe,
0x3b, 0x70, 0x1f, 0x0, 0x3, 0xf0, 0x3e, 0x6,
0xc0, 0x6b, 0x0, 0x0, 0xe5, 0x89, 0x1, 0xf1,
0xb6, 0x0, 0x0, 0x9a, 0xd4, 0x0, 0xb7, 0xf1,
0x0, 0x0, 0x4f, 0xe0, 0x0, 0x6f, 0xc0, 0x0,
0x0, 0xf, 0xa0, 0x0, 0x1f, 0x70, 0x0,
/* U+0058 "X" */
0x5f, 0x10, 0x0, 0xe5, 0xa, 0xb0, 0x9, 0xa0,
0x1, 0xe6, 0x4e, 0x10, 0x0, 0x4f, 0xe4, 0x0,
0x0, 0xd, 0xe0, 0x0, 0x0, 0x7d, 0xd8, 0x0,
0x2, 0xf3, 0x2f, 0x30, 0xc, 0x80, 0x7, 0xd0,
0x8d, 0x0, 0x0, 0xc9,
/* U+0059 "Y" */
0xc, 0x80, 0x0, 0xa, 0x80, 0x3f, 0x10, 0x3,
0xe0, 0x0, 0xaa, 0x0, 0xc6, 0x0, 0x1, 0xf3,
0x5d, 0x0, 0x0, 0x7, 0xce, 0x40, 0x0, 0x0,
0xe, 0xb0, 0x0, 0x0, 0x0, 0xb7, 0x0, 0x0,
0x0, 0xb, 0x70, 0x0, 0x0, 0x0, 0xb7, 0x0,
0x0,
/* U+005A "Z" */
0x6f, 0xff, 0xff, 0xf5, 0x2, 0x22, 0x29, 0xd0,
0x0, 0x0, 0x3f, 0x30, 0x0, 0x1, 0xe6, 0x0,
0x0, 0xb, 0xa0, 0x0, 0x0, 0x8d, 0x0, 0x0,
0x4, 0xf2, 0x0, 0x0, 0x1e, 0x82, 0x22, 0x21,
0x7f, 0xff, 0xff, 0xf8,
/* U+0061 "a" */
0x8, 0xdf, 0xc3, 0x0, 0xa4, 0x29, 0xd0, 0x0,
0x0, 0x1f, 0x10, 0x8d, 0xee, 0xf2, 0x4e, 0x10,
0xf, 0x24, 0xe0, 0x7, 0xf2, 0x9, 0xed, 0x8f,
0x20,
/* U+0062 "b" */
0xe4, 0x0, 0x0, 0xe, 0x40, 0x0, 0x0, 0xe4,
0x0, 0x0, 0xe, 0x7c, 0xfc, 0x40, 0xef, 0x52,
0x7f, 0x2e, 0x60, 0x0, 0xb8, 0xe4, 0x0, 0x8,
0xae, 0x60, 0x0, 0xb8, 0xef, 0x52, 0x8f, 0x2e,
0x6d, 0xfc, 0x40,
/* U+0063 "c" */
0x2, 0xbf, 0xe8, 0x0, 0xda, 0x24, 0xc3, 0x5d,
0x0, 0x0, 0x7, 0xb0, 0x0, 0x0, 0x5d, 0x0,
0x0, 0x0, 0xda, 0x24, 0xd3, 0x2, 0xbf, 0xe8,
0x0,
/* U+0064 "d" */
0x0, 0x0, 0x1, 0xf1, 0x0, 0x0, 0x1, 0xf1,
0x0, 0x0, 0x1, 0xf1, 0x2, 0xbf, 0xd6, 0xf1,
0xe, 0x92, 0x3d, 0xf1, 0x5d, 0x0, 0x4, 0xf1,
0x7b, 0x0, 0x1, 0xf1, 0x5d, 0x0, 0x3, 0xf1,
0xe, 0x91, 0x2d, 0xf1, 0x2, 0xbf, 0xe6, 0xf1,
/* U+0065 "e" */
0x2, 0xbf, 0xd5, 0x0, 0xe8, 0x14, 0xe4, 0x5c,
0x0, 0x6, 0xb7, 0xfe, 0xee, 0xec, 0x5d, 0x0,
0x0, 0x0, 0xe9, 0x23, 0xa2, 0x2, 0xbf, 0xe9,
0x0,
/* U+0066 "f" */
0x1, 0xcf, 0x60, 0x9a, 0x11, 0xb, 0x60, 0xd,
0xff, 0xf3, 0xb, 0x60, 0x0, 0xb6, 0x0, 0xb,
0x60, 0x0, 0xb6, 0x0, 0xb, 0x60, 0x0, 0xb6,
0x0,
/* U+0067 "g" */
0x2, 0xbf, 0xe6, 0xe2, 0xe, 0xa2, 0x3c, 0xf2,
0x5d, 0x0, 0x2, 0xf2, 0x7b, 0x0, 0x0, 0xf2,
0x5d, 0x0, 0x2, 0xf2, 0xe, 0xa2, 0x3d, 0xf2,
0x2, 0xbf, 0xe5, 0xf2, 0x0, 0x0, 0x2, 0xf0,
0xc, 0x62, 0x3b, 0xa0, 0x6, 0xdf, 0xea, 0x10,
/* U+0068 "h" */
0xe4, 0x0, 0x0, 0xe, 0x40, 0x0, 0x0, 0xe4,
0x0, 0x0, 0xe, 0x7d, 0xfc, 0x20, 0xee, 0x42,
0xac, 0xe, 0x60, 0x2, 0xf0, 0xe4, 0x0, 0xf,
0x1e, 0x40, 0x0, 0xf2, 0xe4, 0x0, 0xf, 0x2e,
0x40, 0x0, 0xf2,
/* U+0069 "i" */
0xd, 0x40, 0x82, 0x0, 0x0, 0xe4, 0xe, 0x40,
0xe4, 0xe, 0x40, 0xe4, 0xe, 0x40, 0xe4,
/* U+006A "j" */
0x0, 0xd, 0x50, 0x0, 0x72, 0x0, 0x0, 0x0,
0x0, 0xd4, 0x0, 0xd, 0x40, 0x0, 0xd4, 0x0,
0xd, 0x40, 0x0, 0xd4, 0x0, 0xd, 0x40, 0x0,
0xd4, 0x0, 0xd, 0x40, 0x22, 0xf2, 0xd, 0xf8,
0x0,
/* U+006B "k" */
0xe4, 0x0, 0x0, 0xe, 0x40, 0x0, 0x0, 0xe4,
0x0, 0x0, 0xe, 0x40, 0xb, 0xa0, 0xe4, 0xb,
0xb0, 0xe, 0x4b, 0xc0, 0x0, 0xee, 0xfd, 0x0,
0xe, 0xc1, 0xd9, 0x0, 0xe4, 0x2, 0xf4, 0xe,
0x40, 0x6, 0xe1,
/* U+006C "l" */
0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
0xe4, 0xe4,
/* U+006D "m" */
0xe7, 0xdf, 0xb2, 0x9e, 0xe8, 0xe, 0xd3, 0x2c,
0xfb, 0x23, 0xe5, 0xe6, 0x0, 0x4f, 0x10, 0x9,
0x9e, 0x40, 0x3, 0xf0, 0x0, 0x8a, 0xe4, 0x0,
0x3f, 0x0, 0x8, 0xae, 0x40, 0x3, 0xf0, 0x0,
0x8a, 0xe4, 0x0, 0x3f, 0x0, 0x8, 0xa0,
/* U+006E "n" */
0xe6, 0xdf, 0xc2, 0xe, 0xe4, 0x1a, 0xc0, 0xe6,
0x0, 0x1f, 0xe, 0x40, 0x0, 0xf1, 0xe4, 0x0,
0xf, 0x2e, 0x40, 0x0, 0xf2, 0xe4, 0x0, 0xf,
0x20,
/* U+006F "o" */
0x2, 0xbf, 0xe8, 0x0, 0xe, 0xa2, 0x3e, 0x80,
0x5d, 0x0, 0x4, 0xf0, 0x7b, 0x0, 0x1, 0xf1,
0x5d, 0x0, 0x4, 0xf0, 0xd, 0xa2, 0x3e, 0x80,
0x2, 0xbf, 0xe8, 0x0,
/* U+0070 "p" */
0xe7, 0xdf, 0xc4, 0xe, 0xf4, 0x16, 0xf2, 0xe6,
0x0, 0xa, 0x8e, 0x40, 0x0, 0x8a, 0xe7, 0x0,
0xb, 0x8e, 0xf5, 0x28, 0xf2, 0xe6, 0xcf, 0xc4,
0xe, 0x40, 0x0, 0x0, 0xe4, 0x0, 0x0, 0xe,
0x40, 0x0, 0x0,
/* U+0071 "q" */
0x2, 0xbf, 0xd5, 0xf1, 0xe, 0xa2, 0x3e, 0xf1,
0x5d, 0x0, 0x4, 0xf1, 0x7b, 0x0, 0x1, 0xf1,
0x5d, 0x0, 0x4, 0xf1, 0xe, 0xa2, 0x3e, 0xf1,
0x2, 0xbf, 0xd5, 0xf1, 0x0, 0x0, 0x1, 0xf1,
0x0, 0x0, 0x1, 0xf1, 0x0, 0x0, 0x1, 0xf1,
/* U+0072 "r" */
0xe6, 0xd8, 0xee, 0x61, 0xe7, 0x0, 0xe4, 0x0,
0xe4, 0x0, 0xe4, 0x0, 0xe4, 0x0,
/* U+0073 "s" */
0x9, 0xef, 0xc2, 0x6d, 0x22, 0x61, 0x7d, 0x20,
0x0, 0x9, 0xfe, 0x91, 0x0, 0x2, 0xc9, 0x56,
0x22, 0xb8, 0x4c, 0xfe, 0xa0,
/* U+0074 "t" */
0x5, 0x30, 0x0, 0xb6, 0x0, 0xdf, 0xff, 0x30,
0xb6, 0x0, 0xb, 0x60, 0x0, 0xb6, 0x0, 0xb,
0x60, 0x0, 0xaa, 0x11, 0x2, 0xdf, 0x60,
/* U+0075 "u" */
0xf3, 0x0, 0x2f, 0xf, 0x30, 0x2, 0xf0, 0xf3,
0x0, 0x2f, 0xf, 0x30, 0x2, 0xf0, 0xe4, 0x0,
0x4f, 0xa, 0xb2, 0x2c, 0xf0, 0x1b, 0xfe, 0x6f,
0x0,
/* U+0076 "v" */
0xd, 0x50, 0x0, 0x98, 0x6, 0xc0, 0x0, 0xf2,
0x1, 0xf2, 0x6, 0xb0, 0x0, 0xa8, 0xc, 0x50,
0x0, 0x3e, 0x3e, 0x0, 0x0, 0xd, 0xd8, 0x0,
0x0, 0x6, 0xf2, 0x0,
/* U+0077 "w" */
0xc5, 0x0, 0x3f, 0x10, 0x7, 0x86, 0xa0, 0x9,
0xf6, 0x0, 0xd3, 0x1f, 0x0, 0xe7, 0xb0, 0x2d,
0x0, 0xb5, 0x4c, 0xe, 0x18, 0x80, 0x6, 0xa9,
0x60, 0xa6, 0xd3, 0x0, 0x1e, 0xe1, 0x4, 0xed,
0x0, 0x0, 0xbb, 0x0, 0xe, 0x80, 0x0,
/* U+0078 "x" */
0x5d, 0x0, 0x4e, 0x10, 0xa9, 0x1e, 0x40, 0x1,
0xed, 0x90, 0x0, 0x8, 0xf1, 0x0, 0x2, 0xeb,
0xa0, 0x0, 0xc7, 0xd, 0x60, 0x7c, 0x0, 0x3f,
0x20,
/* U+0079 "y" */
0xd, 0x50, 0x0, 0x98, 0x7, 0xb0, 0x0, 0xe2,
0x1, 0xf2, 0x5, 0xc0, 0x0, 0xa7, 0xb, 0x50,
0x0, 0x4d, 0x1e, 0x0, 0x0, 0xe, 0xb9, 0x0,
0x0, 0x8, 0xf3, 0x0, 0x0, 0x5, 0xd0, 0x0,
0x5, 0x2c, 0x60, 0x0, 0x1c, 0xf9, 0x0, 0x0,
/* U+007A "z" */
0x7f, 0xff, 0xfb, 0x0, 0x2, 0xf3, 0x0, 0xc,
0x70, 0x0, 0x9c, 0x0, 0x4, 0xe1, 0x0, 0x1e,
0x50, 0x0, 0x8f, 0xff, 0xfd,
/* U+00B0 "°" */
0x6, 0xb7, 0x3, 0x80, 0x84, 0x64, 0x3, 0x73,
0x80, 0x84, 0x6, 0xb7, 0x0,
/* U+00E9 "é" */
0x0, 0x1, 0xe5, 0x0, 0x0, 0xb5, 0x0, 0x0,
0x0, 0x0, 0x0, 0x2b, 0xfd, 0x50, 0xe, 0x81,
0x4e, 0x45, 0xc0, 0x0, 0x6b, 0x7f, 0xee, 0xee,
0xc5, 0xd0, 0x0, 0x0, 0xe, 0x92, 0x3a, 0x20,
0x2b, 0xfe, 0x90,
/* U+00EA "ê" */
0x0, 0x4f, 0xa0, 0x0, 0x2c, 0x29, 0x60, 0x0,
0x0, 0x0, 0x0, 0x2b, 0xfd, 0x50, 0xe, 0x81,
0x4e, 0x45, 0xc0, 0x0, 0x6b, 0x7f, 0xee, 0xee,
0xc5, 0xd0, 0x0, 0x0, 0xe, 0x92, 0x3a, 0x20,
0x2b, 0xfe, 0x90
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 52, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 40, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 5},
{.bitmap_index = 4, .adv_w = 44, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 43, .adv_w = 71, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 61, .adv_w = 110, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 93, .adv_w = 110, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 125, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 161, .adv_w = 110, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 193, .adv_w = 118, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 229, .adv_w = 115, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 261, .adv_w = 124, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 297, .adv_w = 118, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 329, .adv_w = 141, .box_w = 10, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 374, .adv_w = 145, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 410, .adv_w = 139, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 451, .adv_w = 159, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 492, .adv_w = 129, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 524, .adv_w = 122, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 556, .adv_w = 148, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 597, .adv_w = 156, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 633, .adv_w = 60, .box_w = 2, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 642, .adv_w = 98, .box_w = 6, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 669, .adv_w = 138, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 705, .adv_w = 114, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 737, .adv_w = 183, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 782, .adv_w = 156, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 818, .adv_w = 161, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 863, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 899, .adv_w = 161, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 959, .adv_w = 140, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 995, .adv_w = 119, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1027, .adv_w = 113, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1059, .adv_w = 152, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1095, .adv_w = 137, .box_w = 10, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 1140, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1203, .adv_w = 129, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1239, .adv_w = 124, .box_w = 9, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 1280, .adv_w = 126, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1316, .adv_w = 115, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1341, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1376, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1401, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1441, .adv_w = 118, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1466, .adv_w = 68, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1491, .adv_w = 132, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 1531, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1566, .adv_w = 54, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1581, .adv_w = 55, .box_w = 5, .box_h = 13, .ofs_x = -2, .ofs_y = -3},
{.bitmap_index = 1614, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1649, .adv_w = 54, .box_w = 2, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1659, .adv_w = 203, .box_w = 11, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1698, .adv_w = 131, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1723, .adv_w = 122, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1751, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 1786, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 1826, .adv_w = 79, .box_w = 4, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1840, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1861, .adv_w = 79, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1884, .adv_w = 130, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1909, .adv_w = 107, .box_w = 8, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 1937, .adv_w = 173, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1976, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2001, .adv_w = 107, .box_w = 8, .box_h = 10, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 2041, .adv_w = 100, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2062, .adv_w = 80, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
{.bitmap_index = 2075, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2110, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint16_t unicode_list_0[] = {
0x0, 0x7, 0xe
};
static const uint16_t unicode_list_4[] = {
0x0, 0x39, 0x3a
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 15, .glyph_id_start = 1,
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
},
{
.range_start = 48, .range_length = 10, .glyph_id_start = 4,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 65, .range_length = 26, .glyph_id_start = 14,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 40,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 176, .range_length = 59, .glyph_id_start = 66,
.unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 1, 2, 3, 0, 4, 5,
6, 7, 8, 9, 10, 3, 11, 12,
13, 14, 15, 16, 17, 18, 18, 19,
20, 21, 18, 18, 14, 22, 14, 23,
24, 25, 19, 26, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 30,
36, 36, 37, 33, 30, 30, 31, 31,
38, 39, 40, 41, 36, 42, 42, 43,
42, 44, 45, 34, 34
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 1, 2, 3, 4, 5, 6,
7, 8, 3, 9, 10, 11, 12, 13,
14, 13, 13, 13, 14, 13, 13, 15,
13, 13, 13, 13, 14, 13, 14, 13,
16, 17, 18, 19, 19, 20, 21, 22,
23, 24, 25, 25, 25, 0, 25, 24,
26, 27, 24, 24, 28, 28, 25, 28,
25, 28, 29, 30, 31, 32, 32, 33,
32, 34, 35, 25, 25
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
9, -11, 1, 9, 4, 3, -8, 1,
9, 1, 8, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 4, -11, 0, -2, -2, 2,
2, -2, 0, -2, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -12, 1, -2,
0, -1, -1, -2, 0, 0, -1, 0,
0, -2, 0, 0, -4, 0, -4, 0,
-5, -6, -6, -4, 0, 0, 0, 0,
-2, 0, 0, 2, 0, 1, -2, 0,
1, 0, 2, -1, 0, 0, 0, -4,
0, -1, 0, 0, 1, 0, 0, 2,
0, -1, 0, -2, 0, -3, 0, 0,
0, -2, 0, 0, 0, 0, 0, -1,
1, -1, -1, 0, -2, 0, 0, 0,
-1, -1, 0, -2, -2, 0, 0, 1,
0, 0, 0, 0, -1, 0, -2, -2,
-2, 0, 0, 0, 0, 0, -1, 0,
0, 0, 0, -1, -2, 0, -3, -6,
4, 0, -5, -1, -2, 0, -1, -9,
2, -1, 0, 0, 2, 1, -1, -10,
0, -10, -2, -17, -1, 5, 0, 2,
0, 0, 0, 0, 0, 0, -3, -2,
0, -6, 0, 0, 0, 0, -1, -1,
0, -1, -2, 0, 0, 0, 0, 0,
-2, 0, -2, 0, -1, -2, -2, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -2, -2, 0, -2, -1, 2, 0,
0, 0, 0, 0, 0, -1, 0, 0,
1, 0, 0, 0, 0, -2, 0, -2,
-1, -2, 0, 0, 0, 2, 0, -2,
0, 0, 0, 0, -2, -3, 0, -4,
6, -10, -4, 2, 0, -2, -12, -3,
0, -3, 0, -12, 0, -3, -5, -1,
0, 0, 1, -1, 2, -1, -7, 0,
-10, -5, -4, -5, -6, -2, -5, 0,
-4, -5, 1, 1, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, -1, 0,
0, -1, 0, -2, 0, -3, -4, -4,
-1, 0, 0, 0, 0, -2, 0, 0,
0, 0, 1, -1, 0, 0, -8, 6,
-2, -8, 0, 2, -3, 0, -10, -1,
-2, 2, 0, -2, 3, 0, -7, -3,
-7, -6, -8, 0, 0, 0, -1, 0,
0, 0, -1, -1, -2, -5, -6, 0,
-18, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, -1, -2, -3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, -4, 2,
-1, -1, -5, -2, 0, -2, -2, -3,
0, -3, 0, -1, -2, -1, -1, -3,
-2, 0, -1, 0, -4, 0, 0, 0,
-4, 0, -3, 0, -3, -3, 2, -3,
-4, 0, -2, -2, -2, 0, 0, 0,
0, 0, -2, 0, 0, -3, 0, -2,
0, -4, -5, -6, -2, 0, 0, 0,
0, 15, 0, 0, 1, 0, 0, -2,
0, 2, 0, 2, -3, 0, -1, -2,
-6, -1, -1, -1, -1, 0, 0, -1,
0, 0, 0, 0, -2, -2, -2, 0,
-1, 0, -1, 0, 0, 0, -1, -2,
-1, -2, -2, -2, 0, 8, -2, -2,
3, 0, 0, -9, -3, 2, -3, 1,
-6, 0, -2, -3, -1, 1, 0, 0,
-3, 0, 0, -4, 0, -3, -2, -3,
-2, -2, 0, -3, 1, -4, -3, 6,
0, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -2,
0, 0, 0, 0, 0, 0, 0, 0,
0, -3, 0, 0, 0, 0, -2, 0,
0, -2, -2, 0, 0, 0, 0, 0,
-1, 0, 0, 0, 0, 0, -1, 0,
0, 0, 0, -4, 4, 0, -1, -9,
0, 0, -4, -2, -5, 0, -5, 0,
-3, -8, -2, -8, -7, -9, 0, -2,
0, -4, -2, -1, -2, -3, -5, -3,
-7, -8, -4, -2, 0, 6, -4, -7,
0, 1, -6, 0, -10, -1, -2, 1,
0, -2, 0, -1, -12, -2, -10, -2,
-14, 0, 1, 0, -1, 0, 0, 0,
0, -1, -1, -7, -1, 0, -12, 0,
-5, 0, 0, -1, -3, -6, -2, 0,
-1, 0, -9, -2, 0, -6, 0, -6,
-2, -3, -5, -2, -3, -3, 0, -2,
-4, -2, -4, 0, 1, 0, -1, -6,
0, 4, 0, 0, 0, 0, 0, -1,
-4, 0, 0, 0, 0, 0, 0, 0,
-2, 0, -2, 0, 0, -4, -2, 0,
-1, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 3, -6, 4, 0,
-2, 0, -1, 2, 0, -2, 0, -2,
0, 0, 0, 0, 0, -2, 0, 0,
-2, -3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, -2, 0, -3,
2, -6, -4, 8, 3, 2, -17, -1,
4, -2, 0, -7, 0, -2, -2, -2,
2, -2, -2, -6, -2, 0, -5, 0,
-11, -2, 6, -2, -7, 1, -2, -6,
-6, -2, 8, 0, -7, -5, 6, 0,
1, -14, -2, 2, -3, -1, -7, -3,
-4, -3, -3, -2, 0, 0, -4, -4,
-2, -11, 0, -11, -3, 0, -7, -11,
-1, -6, -3, -6, -5, 5, 0, 0,
-6, 2, 0, 0, -10, 0, -2, -4,
-3, -6, -4, -5, 0, -2, -6, -2,
-4, -4, -6, -2, -3, 0, -6, -2,
0, -2, -4, -4, -5, -5, -7, -2,
-4, 0, -7, -6, 6, -2, 1, -18,
-3, 4, -4, -3, -8, -2, -6, -2,
-3, -2, -2, -4, -6, -1, 0, -12,
0, -12, -4, 5, -7, -13, -4, -7,
-8, -10, -6, 4, 0, 4, -4, 4,
0, 0, -6, -1, 0, -1, 0, 0,
0, -2, 0, 0, 0, 0, 0, -2,
0, 0, 0, 0, -2, 0, 0, 0,
0, -1, -1, -2, 0, 0, 0, 0,
0, 0, -4, -1, 0, 0, 0, -4,
0, -2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, -2, 0,
0, -4, -3, -2, 0, -5, -2, -4,
0, 0, -5, 0, -2, -2, 0, 0,
0, 0, -16, -4, -8, -2, -7, 0,
-1, 0, 0, 0, 0, 0, 0, 0,
0, -3, -3, -2, -3, 0, 4, -1,
-4, -1, -3, -4, 0, -2, -1, -1,
0, 0, -1, 0, 0, -17, -2, -3,
0, -4, 0, 0, -1, -2, 0, 0,
0, 0, 1, 0, -1, -3, -1, 3,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, -4, 0, 0, -5, -2,
-4, 0, 0, -5, 0, -2, 0, 0,
0, 0, 0, -19, 0, -4, -7, -10,
0, -3, 0, 0, 0, 0, 0, 0,
0, 0, -2, -3, -1, -3, 0, -2,
2, 9, 3, 4, -5, 2, 8, 2,
6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 0, -2, 15,
8, 15, 0, 0, 0, 2, 0, 0,
7, 0, 0, 0, -1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-3, -16, -2, -2, -8, -9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, -2, 2,
3, 2, -6, 0, 0, -2, 2, 0,
0, 0, 0, 0, -5, 0, -2, -1,
-4, 0, -2, 0, -4, -1, 0, -1,
-3, 0, -2, -5, -4, -2, 0, 0,
0, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -3, -16,
-2, -2, -8, -9, 0, 0, 0, 0,
0, 10, 0, 0, 0, 0, 0, 0,
0, 0, 0, -2, 1, -1, 1, -1,
-5, 0, 4, 0, 2, -8, -2, -5,
0, -3, -7, -4, -5, -8, -7, 0,
-2, -1, -2, -1, 0, -1, -1, 3,
0, 3, -1, 0, 6, 0, 0, 0,
-1, -2, -2, 0, 0, -5, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, -2, 0, -2,
0, 2, -3, -4, -1, 0, -6, -1,
-4, -1, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-3, 0, 0, 0, 0, -2, 0, -2,
0, 0, -1, 0, -6, 1, 2, 2,
0, -5, 1, 3, 1, 6, -5, 0,
-1, 0, -1, -8, 0, 0, -6, -5,
0, -3, 0, -3, 0, -3, 0, -1,
3, 0, -2, -6, -2, 7, 0, 0,
-2, 2, 0, 0, -6, 0, -1, -1,
0, 0, 0, -2, 0, -2, -8, -2,
-4, 0, -6, 0, -2, 0, -3, 0,
1, 0, -2, 0, -2, -6, 0, -2,
2, 0, 1, 0, -2, -1, 0, -2,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0,
-2, -2, 0, 0, 4, -12, 1, 8,
6, 3, -8, 1, 8, 0, 7, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 45,
.right_class_cnt = 35,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 5,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t montserrat_medium_12 = {
#else
lv_font_t montserrat_medium_12 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 13, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = NULL,
#endif
.user_data = NULL,
};
#endif /*#if MONTSERRAT_MEDIUM_12*/

File diff suppressed because it is too large Load Diff

692
main/fonts/notomedium16.c Normal file
View File

@ -0,0 +1,692 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 1
* Opts: --bpp 1 --size 16 --no-compress --font Montserrat-Medium.ttf --symbols 0123456789.°éCABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz --format lvgl -o notomedium16.c
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NOTOMEDIUM16
#define NOTOMEDIUM16 1
#endif
#if NOTOMEDIUM16
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+002E "." */
0xf0,
/* U+0030 "0" */
0x1c, 0x31, 0x98, 0xd8, 0x3c, 0x1e, 0xf, 0x7,
0x83, 0xc1, 0xb1, 0x98, 0xc7, 0xc0,
/* U+0031 "1" */
0xf8, 0xc6, 0x31, 0x8c, 0x63, 0x18, 0xc6, 0x30,
/* U+0032 "2" */
0x7c, 0xc6, 0x3, 0x3, 0x3, 0x7, 0xe, 0x1c,
0x38, 0x30, 0x60, 0xff,
/* U+0033 "3" */
0x7f, 0x1, 0x81, 0x80, 0x80, 0xc0, 0xf0, 0x1c,
0x3, 0x1, 0x80, 0xd0, 0xcf, 0xc0,
/* U+0034 "4" */
0x6, 0x3, 0x80, 0xc0, 0x60, 0x30, 0xc, 0xc6,
0x33, 0xc, 0xff, 0xc0, 0xc0, 0x30, 0xc,
/* U+0035 "5" */
0x3f, 0x30, 0x18, 0xc, 0x6, 0x3, 0xf0, 0xc,
0x3, 0x1, 0x80, 0xf0, 0xcf, 0xc0,
/* U+0036 "6" */
0x1f, 0x18, 0x98, 0x18, 0xc, 0x6, 0xf3, 0x8d,
0xc3, 0xc1, 0xb0, 0xd8, 0xc3, 0xc0,
/* U+0037 "7" */
0xff, 0xe0, 0xb0, 0xc0, 0x40, 0x60, 0x30, 0x10,
0x18, 0xc, 0x4, 0x6, 0x2, 0x0,
/* U+0038 "8" */
0x3e, 0x71, 0xb0, 0x78, 0x36, 0x31, 0xf1, 0x8d,
0x83, 0xc1, 0xe0, 0xd8, 0xc7, 0xc0,
/* U+0039 "9" */
0x3c, 0x31, 0xb0, 0x58, 0x3c, 0x1b, 0x1c, 0xf6,
0x3, 0x1, 0x81, 0x91, 0x8f, 0x80,
/* U+0041 "A" */
0x6, 0x0, 0xe0, 0xf, 0x0, 0x90, 0x19, 0x81,
0x18, 0x30, 0x83, 0xc, 0x7f, 0xc6, 0x6, 0x40,
0x6c, 0x3,
/* U+0042 "B" */
0xfe, 0x30, 0xcc, 0x1b, 0x6, 0xc1, 0xb0, 0xcf,
0xf3, 0x6, 0xc0, 0xf0, 0x3c, 0x1f, 0xfc,
/* U+0043 "C" */
0xf, 0x86, 0x19, 0x81, 0x70, 0xc, 0x1, 0x80,
0x30, 0x6, 0x0, 0xe0, 0xc, 0x8, 0xc3, 0x7,
0xc0,
/* U+0044 "D" */
0xff, 0x18, 0x33, 0x3, 0x60, 0x3c, 0x7, 0x80,
0xf0, 0x1e, 0x3, 0xc0, 0x78, 0x1b, 0x6, 0x7f,
0x80,
/* U+0045 "E" */
0xff, 0x60, 0x30, 0x18, 0xc, 0x6, 0x3, 0xfd,
0x80, 0xc0, 0x60, 0x30, 0x1f, 0xf0,
/* U+0046 "F" */
0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xc0,
0xc0, 0xc0, 0xc0, 0xc0,
/* U+0047 "G" */
0x1f, 0x8c, 0x36, 0x3, 0x0, 0xc0, 0x30, 0xc,
0xf, 0x3, 0xc0, 0xd8, 0x33, 0xc, 0x7e,
/* U+0048 "H" */
0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3f,
0xff, 0x3, 0xc0, 0xf0, 0x3c, 0xf, 0x3,
/* U+0049 "I" */
0xff, 0xff, 0xff,
/* U+004A "J" */
0x7e, 0xc, 0x18, 0x30, 0x60, 0xc1, 0x83, 0x6,
0xf, 0x33, 0xc0,
/* U+004B "K" */
0xc0, 0xb0, 0x6c, 0x33, 0x18, 0xcc, 0x36, 0xf,
0xc3, 0x98, 0xc7, 0x30, 0xcc, 0x1b, 0x3,
/* U+004C "L" */
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0xc0, 0xc0, 0xff,
/* U+004D "M" */
0xc0, 0x3c, 0x3, 0xe0, 0x7e, 0x7, 0xd0, 0xbd,
0x9b, 0xc9, 0x3c, 0xf3, 0xc6, 0x3c, 0x63, 0xc0,
0x3c, 0x3,
/* U+004E "N" */
0xc0, 0xf8, 0x3e, 0xf, 0xc3, 0xd8, 0xf3, 0x3c,
0xcf, 0x1b, 0xc3, 0xf0, 0x7c, 0x1f, 0x3,
/* U+004F "O" */
0xf, 0x83, 0xc, 0x60, 0x6c, 0x6, 0xc0, 0x3c,
0x3, 0xc0, 0x3c, 0x3, 0xc0, 0x76, 0x6, 0x30,
0xc1, 0xf8,
/* U+0050 "P" */
0xfe, 0x61, 0xb0, 0x78, 0x3c, 0x1e, 0xf, 0xd,
0xfc, 0xc0, 0x60, 0x30, 0x18, 0x0,
/* U+0051 "Q" */
0xf, 0x83, 0xc, 0x60, 0x64, 0x6, 0xc0, 0x3c,
0x3, 0xc0, 0x3c, 0x3, 0xc0, 0x76, 0x6, 0x30,
0xc1, 0xf8, 0x3, 0x10, 0xf,
/* U+0052 "R" */
0xfe, 0x61, 0xb0, 0x78, 0x3c, 0x1e, 0xf, 0xd,
0xfc, 0xc6, 0x61, 0x30, 0xd8, 0x30,
/* U+0053 "S" */
0x3f, 0x30, 0xb0, 0x18, 0xe, 0x3, 0xf0, 0xfc,
0x7, 0x1, 0x80, 0xf0, 0xcf, 0xc0,
/* U+0054 "T" */
0xff, 0x86, 0x3, 0x1, 0x80, 0xc0, 0x60, 0x30,
0x18, 0xc, 0x6, 0x3, 0x1, 0x80,
/* U+0055 "U" */
0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x3c,
0xf, 0x3, 0xc0, 0xd0, 0x26, 0x18, 0xfc,
/* U+0056 "V" */
0xc0, 0x28, 0xd, 0x81, 0x30, 0x63, 0xc, 0x61,
0x4, 0x60, 0xc8, 0x1b, 0x1, 0xe0, 0x38, 0x3,
0x0,
/* U+0057 "W" */
0x81, 0x81, 0x60, 0xc1, 0xb0, 0x70, 0xc8, 0x78,
0x46, 0x24, 0x23, 0x13, 0x30, 0x99, 0x90, 0x48,
0x48, 0x34, 0x2c, 0x1e, 0x1e, 0x6, 0x6, 0x3,
0x3, 0x0,
/* U+0058 "X" */
0x60, 0xcc, 0x10, 0xc6, 0xd, 0x80, 0xe0, 0x1c,
0x3, 0x80, 0xd0, 0x13, 0x6, 0x31, 0x83, 0x20,
0x60,
/* U+0059 "Y" */
0xc0, 0x70, 0x36, 0x18, 0x84, 0x33, 0x6, 0x81,
0xe0, 0x30, 0xc, 0x3, 0x0, 0xc0, 0x30,
/* U+005A "Z" */
0xff, 0x81, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x60,
0x60, 0x30, 0x30, 0x30, 0x1f, 0xf0,
/* U+0061 "a" */
0x7c, 0x46, 0x3, 0x3, 0x7f, 0xc3, 0xc3, 0xc7,
0x7b,
/* U+0062 "b" */
0xc0, 0x60, 0x30, 0x1b, 0xce, 0x36, 0xf, 0x7,
0x83, 0xc1, 0xe0, 0xf8, 0xdb, 0xc0,
/* U+0063 "c" */
0x3e, 0x63, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x63,
0x1e,
/* U+0064 "d" */
0x1, 0x80, 0xc0, 0x67, 0xb6, 0x3e, 0xf, 0x7,
0x83, 0xc1, 0xe0, 0xd8, 0xe7, 0xb0,
/* U+0065 "e" */
0x3c, 0x66, 0xc3, 0xc1, 0xff, 0xc0, 0xc0, 0x62,
0x3e,
/* U+0066 "f" */
0x3d, 0x86, 0x3e, 0x61, 0x86, 0x18, 0x61, 0x86,
0x18,
/* U+0067 "g" */
0x3d, 0xb1, 0xf0, 0x78, 0x3c, 0x1e, 0xf, 0x6,
0xc7, 0x3d, 0x80, 0xd0, 0xcf, 0xc0,
/* U+0068 "h" */
0xc0, 0xc0, 0xc0, 0xde, 0xe6, 0xc3, 0xc3, 0xc3,
0xc3, 0xc3, 0xc3, 0xc3,
/* U+0069 "i" */
0xf3, 0xff, 0xff,
/* U+006A "j" */
0x18, 0xc0, 0x31, 0x8c, 0x63, 0x18, 0xc6, 0x31,
0x8f, 0xc0,
/* U+006B "k" */
0xc0, 0x60, 0x30, 0x18, 0x6c, 0x66, 0x63, 0x61,
0xf8, 0xec, 0x63, 0x30, 0xd8, 0x20,
/* U+006C "l" */
0xff, 0xff, 0xff,
/* U+006D "m" */
0xde, 0xf3, 0x9e, 0x6c, 0x30, 0xf0, 0xc3, 0xc3,
0xf, 0xc, 0x3c, 0x30, 0xf0, 0xc3, 0xc3, 0xc,
/* U+006E "n" */
0xde, 0xe6, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
0xc3,
/* U+006F "o" */
0x3e, 0x31, 0xb0, 0x78, 0x3c, 0x1e, 0xf, 0x6,
0xc6, 0x3e, 0x0,
/* U+0070 "p" */
0xde, 0x71, 0xb0, 0x78, 0x3c, 0x1e, 0xf, 0x7,
0xc6, 0xde, 0x60, 0x30, 0x18, 0x0,
/* U+0071 "q" */
0x3d, 0xb1, 0xf0, 0x78, 0x3c, 0x1e, 0xf, 0x6,
0xc7, 0x3d, 0x80, 0xc0, 0x60, 0x30,
/* U+0072 "r" */
0xdf, 0x31, 0x8c, 0x63, 0x18, 0xc0,
/* U+0073 "s" */
0x7d, 0x8b, 0x7, 0x7, 0xc3, 0xc1, 0xc3, 0xfc,
/* U+0074 "t" */
0x61, 0x8f, 0x98, 0x61, 0x86, 0x18, 0x61, 0x83,
0xc0,
/* U+0075 "u" */
0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x67,
0x7b,
/* U+0076 "v" */
0xc1, 0xa0, 0x98, 0xcc, 0x62, 0x21, 0xb0, 0x50,
0x38, 0x18, 0x0,
/* U+0077 "w" */
0xc3, 0x5, 0xc, 0x34, 0x38, 0x99, 0xa2, 0x24,
0x98, 0x93, 0x43, 0xc5, 0x6, 0x1c, 0x18, 0x60,
/* U+0078 "x" */
0x43, 0x31, 0xd, 0x83, 0x81, 0x80, 0xe0, 0xd8,
0xc6, 0x43, 0x0,
/* U+0079 "y" */
0xc1, 0xa0, 0x98, 0xcc, 0x42, 0x21, 0xb0, 0x50,
0x38, 0x8, 0xc, 0x24, 0x1e, 0x0,
/* U+007A "z" */
0xfe, 0xc, 0x30, 0xc1, 0x6, 0x18, 0x60, 0xfe,
/* U+00B0 "°" */
0x76, 0xe3, 0x1d, 0xb8,
/* U+00E9 "é" */
0xc, 0x18, 0x0, 0x3c, 0x66, 0xc3, 0xc1, 0xff,
0xc0, 0xc0, 0x62, 0x3e
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 58, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1, .adv_w = 171, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 15, .adv_w = 95, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 23, .adv_w = 147, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 35, .adv_w = 146, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 49, .adv_w = 171, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 64, .adv_w = 147, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 78, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 92, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 106, .adv_w = 165, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 120, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 134, .adv_w = 187, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 152, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 167, .adv_w = 185, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 184, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 201, .adv_w = 172, .box_w = 9, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 215, .adv_w = 163, .box_w = 8, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 227, .adv_w = 198, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 242, .adv_w = 208, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 257, .adv_w = 79, .box_w = 2, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 260, .adv_w = 131, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 271, .adv_w = 184, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 286, .adv_w = 152, .box_w = 8, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 298, .adv_w = 244, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 316, .adv_w = 208, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 331, .adv_w = 215, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 349, .adv_w = 185, .box_w = 9, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 363, .adv_w = 215, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 384, .adv_w = 186, .box_w = 9, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 398, .adv_w = 159, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 412, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 426, .adv_w = 202, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 441, .adv_w = 182, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 458, .adv_w = 288, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 484, .adv_w = 172, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 501, .adv_w = 166, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 516, .adv_w = 168, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 530, .adv_w = 153, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 539, .adv_w = 175, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 553, .adv_w = 146, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 562, .adv_w = 175, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 576, .adv_w = 157, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 585, .adv_w = 90, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 594, .adv_w = 177, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 608, .adv_w = 174, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 620, .adv_w = 71, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 623, .adv_w = 73, .box_w = 5, .box_h = 15, .ofs_x = -2, .ofs_y = -3},
{.bitmap_index = 633, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 647, .adv_w = 71, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 650, .adv_w = 271, .box_w = 14, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 666, .adv_w = 174, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 675, .adv_w = 163, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 686, .adv_w = 175, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 700, .adv_w = 175, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 714, .adv_w = 105, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 720, .adv_w = 128, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 728, .adv_w = 106, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 737, .adv_w = 173, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 746, .adv_w = 143, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 757, .adv_w = 230, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 773, .adv_w = 141, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 784, .adv_w = 143, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 798, .adv_w = 133, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 806, .adv_w = 107, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 6},
{.bitmap_index = 810, .adv_w = 157, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint8_t glyph_id_ofs_list_0[] = {
0, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10
};
static const uint16_t unicode_list_3[] = {
0x0, 0x39
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 46, .range_length = 12, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 12, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL
},
{
.range_start = 65, .range_length = 26, .glyph_id_start = 12,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 38,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 176, .range_length = 58, .glyph_id_start = 64,
.unicode_list = unicode_list_3, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 1, 2, 0, 3, 4, 5, 6,
7, 8, 9, 2, 10, 11, 12, 13,
14, 15, 16, 17, 17, 18, 19, 20,
17, 17, 13, 21, 13, 22, 23, 24,
18, 25, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 29, 35, 35,
36, 32, 29, 29, 30, 30, 37, 38,
39, 40, 35, 41, 41, 42, 41, 43,
44, 33
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 1, 2, 3, 4, 5, 6, 7,
2, 8, 9, 10, 11, 12, 13, 12,
12, 12, 13, 12, 12, 14, 12, 12,
12, 12, 13, 12, 13, 12, 15, 16,
17, 18, 18, 19, 20, 21, 22, 23,
24, 24, 24, 0, 24, 23, 25, 26,
23, 23, 27, 27, 24, 27, 24, 27,
28, 29, 30, 31, 31, 32, 31, 33,
34, 24
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, -3, -3, 3, 3, -2, 0, -3,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -16, -3, 0, -1, -1, -3, 0,
0, -2, 0, 0, -2, 0, 0, -6,
0, -5, 0, -6, -8, -8, -5, 0,
0, 0, 0, -2, 0, 0, 3, 0,
2, -3, 0, 1, 3, -1, 0, 0,
0, -5, 0, -1, 0, 0, 1, 0,
0, 3, 0, -2, 0, -3, 0, -4,
0, 0, 0, -3, 0, 0, 0, 0,
0, -1, 1, -2, -2, 0, 0, 0,
0, -1, -1, 0, -3, -3, 0, 0,
1, 0, 0, 0, 0, -2, 0, -3,
-3, -3, 0, 0, 0, 0, 0, -2,
0, 0, 0, 0, -2, -3, 0, -4,
5, 0, -6, -1, -3, 0, -1, -12,
3, -2, 0, 0, 3, 1, -2, -13,
0, -14, -2, -22, -2, 7, 0, 3,
0, 0, 0, 0, 1, 0, -5, -3,
0, -8, 0, 0, 0, -1, -1, 0,
-1, -3, 0, 0, 0, 0, 0, -3,
0, -3, 0, -2, -3, -2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-2, -2, 0, -3, 3, 0, 0, 0,
0, 0, 0, -2, 0, 0, 2, 0,
0, 0, 0, -3, 0, -3, -2, -3,
0, 0, 0, 2, 0, -2, 0, 0,
0, 0, -3, -4, 0, -5, -13, -5,
3, 0, -2, -17, -5, 0, -5, 0,
-16, 0, -5, -7, -2, 0, 0, 1,
-1, 2, -2, -10, 0, -13, -6, -5,
-6, -8, -3, -7, -1, -5, -7, 2,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, -1, 0, 0, -1, 0, -3,
0, -4, -6, -6, -1, 0, 0, 0,
0, -2, 0, 0, 0, 0, 1, -2,
0, 0, 8, -2, -11, 0, 3, -4,
0, -13, -1, -3, 3, 0, -3, 4,
0, -9, -4, -9, -8, -11, 0, 0,
0, -1, 0, 0, 0, -1, -1, -3,
-7, -8, -1, -24, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -3, 0, -1, -3, -4,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 3, -6,
3, -2, -1, -7, -3, 0, -3, -3,
-4, 0, -4, 0, -1, -2, -1, -2,
-4, -3, 0, -2, 0, -6, 0, 0,
0, -5, 0, -4, 0, -4, -4, 3,
-5, 0, -3, -3, -3, 0, 0, 0,
0, 0, -3, 0, 0, -4, 0, -3,
0, -6, -6, -8, -2, 0, 0, 0,
0, 20, 0, 0, 1, 0, 0, -3,
0, 3, 3, -4, 0, -2, -3, -8,
-2, -2, -2, -1, 0, 0, -1, 0,
0, 0, 0, -3, -2, -2, 0, -2,
0, -2, 0, 0, 0, -2, -3, -2,
-2, -3, -2, 0, -3, -3, 4, 0,
0, -12, -4, 3, -4, 2, -8, 0,
-2, -4, -1, 1, 0, 0, -4, 0,
0, -5, 0, -4, -3, -4, -3, -3,
0, -4, 1, -5, -4, 8, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, -4, 0, 0, 0,
0, -3, 0, 0, -3, -3, 0, 0,
0, 0, 0, -1, 0, 0, 0, 0,
0, -2, 0, 0, 0, -6, 5, 1,
-2, -12, 0, 0, -6, -3, -7, 0,
-6, 0, -4, -11, -3, -10, -10, -12,
0, -3, 0, -6, -3, -1, -3, -4,
-7, -5, -9, -10, -6, -3, 8, -6,
-9, 0, 1, -8, 0, -13, -2, -3,
1, 0, -3, 0, -2, -17, -3, -13,
-3, -19, 0, 1, 0, -2, 0, 0,
0, 0, -1, -2, -10, -2, 0, -17,
-7, 0, 0, -1, -4, -8, -3, 0,
-2, 0, -12, -3, 0, -8, 0, -8,
-2, -4, -6, -3, -4, -4, 0, -3,
-5, -3, -5, 0, 1, 0, -2, -8,
0, 5, 0, 0, 0, 0, -2, -5,
0, 0, 0, 0, 0, 0, 0, -3,
0, -3, 0, 0, -5, -3, 0, -1,
0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 4, 5, 0, -3, 0,
-2, 3, 0, -3, 0, -3, 0, 0,
0, 0, 0, -3, 0, 0, -3, -4,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -3, -3, 0, -4, -8, -5,
10, 5, 3, -22, -2, 5, -3, 0,
-9, 0, -3, -3, -2, 3, -3, -2,
-8, -2, 0, -7, 0, -14, -3, 7,
-3, -10, 1, -3, -8, -8, -3, 10,
-9, -6, 8, 0, 1, -19, -2, 3,
-4, -2, -9, -4, -6, -4, -4, -2,
0, 0, -6, -5, -3, -14, 0, -14,
-4, 0, -9, -15, -1, -8, -4, -8,
-7, 7, 0, -8, 3, 0, 0, -14,
0, -3, -6, -4, -8, -6, -6, 0,
-3, -8, -3, -6, -5, -8, -3, -4,
0, -8, -3, 0, -3, -5, -6, -7,
-7, -10, -3, -5, -9, -8, 8, -3,
1, -24, -5, 5, -6, -4, -11, -3,
-8, -3, -4, -2, -3, -5, -8, -1,
0, -17, 0, -15, -6, 6, -10, -17,
-5, -9, -11, -13, -8, 5, 5, -5,
5, 0, 0, -8, -1, 0, -1, 0,
0, 0, -2, 0, 0, 0, 0, 0,
-3, 0, 0, 1, 0, -3, 0, 0,
0, 0, -2, -2, -3, 0, 0, 0,
0, 0, -6, -1, 0, 0, 0, -6,
0, -3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, -3, 0,
0, -5, -3, 0, -7, -3, -6, 0,
0, -7, 0, -3, -3, 0, 0, 0,
0, -21, -5, -10, -3, -9, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
-4, -5, -2, -4, 5, -2, -6, -2,
-4, -5, 0, -3, -1, -2, 0, 0,
-1, 0, 0, -23, -2, -4, 0, -6,
0, 0, -2, -2, 0, 0, 0, 0,
2, 0, -2, -4, -2, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0, 0, 0,
0, 0, -7, -3, -5, 0, 0, -7,
0, -3, 0, 0, 0, 0, 0, -25,
0, -5, -9, -13, 0, -4, 0, 0,
0, 0, 0, 0, 0, 0, -3, -4,
-1, -4, -3, 3, 13, 4, 6, -7,
3, 11, 3, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -3,
0, -2, 20, 11, 20, 0, 0, 0,
3, 0, 0, 9, 0, 0, -2, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -4, -22, -3, -2, -10, -13,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 3, -3,
2, 5, 3, -8, 0, -1, -2, 3,
0, 0, 0, 0, 0, -6, 0, -2,
-2, -5, 0, -3, 0, -6, -2, 0,
-2, -4, 0, -3, -7, -5, -3, 0,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -4, -22,
-3, -2, -10, -13, 0, 0, 0, 0,
0, 13, 0, 0, 0, 0, 0, 0,
0, 0, -3, 1, -2, 1, -2, -7,
1, 6, 1, 2, -10, -3, -6, 0,
-4, -10, -5, -7, -11, -10, 0, -2,
-2, -3, -2, 0, -2, -1, 4, 0,
4, -2, 0, 8, 0, 0, -2, -3,
-3, 0, 0, -7, 0, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -3, -3, 0, -3, 3, -4,
-5, -2, 0, -7, -2, -6, -2, -3,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -5, 0, 0,
0, 0, -3, 0, -3, 0, 0, -1,
-8, 2, 3, 3, -1, -7, 2, 4,
2, 8, -7, 0, -2, 0, -2, -10,
0, 0, -8, -7, 0, -4, 0, -4,
0, -4, 0, -2, 4, 0, -2, -8,
-3, 9, 0, -3, 2, 0, 0, -8,
0, -2, -1, 0, 0, 0, -2, 0,
-2, -10, -3, -6, 0, -8, 0, -3,
0, -5, 0, 2, 0, -3, 0, -3,
-8, 0, -3, 3, 1, 0, -3, -2,
0, -3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -2, 0, 0, 0, 0,
1, 0, -3, -3, 0, 0, -16, 1,
11, 8, 4, -10, 2, 11, 0, 9,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 44,
.right_class_cnt = 34,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR == 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
#endif
#if LVGL_VERSION_MAJOR >= 8
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 4,
.bpp = 1,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR == 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t notomedium16 = {
#else
lv_font_t notomedium16 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 15, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
.fallback = NULL,
#endif
.user_data = NULL,
};
#endif /*#if NOTOMEDIUM16*/

8
main/images/E.svg Normal file
View File

@ -0,0 +1,8 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 50 50" width="100px" height="100px" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="40.4,39.1 33.2,24.6 40,10.9 4.2,25 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 384 B

8
main/images/ENE.svg Normal file
View File

@ -0,0 +1,8 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="44.7,32.2 32.5,21.5 33.5,6.2 5.8,33 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 385 B

10
main/images/ESE.svg Normal file
View File

@ -0,0 +1,10 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" width="100px" height="100px" xml:space="preserve">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="33.9,44 32.8,27.8 44.3,17.7 5.8,17 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 382 B

10
main/images/N.svg Normal file
View File

@ -0,0 +1,10 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="39.1,9.6 24.6,16.8 10.9,10 25,45.8 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 382 B

9
main/images/NNO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="32.2,5.3 21.5,17.5 6.2,16.5 33,44.2 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 382 B

9
main/images/NO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="24.1,4.1 18.9,19.5 4.4,24.4 39.7,39.7 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 384 B

9
main/images/O.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="45.8,25 9.6,10.9 16.8,25.4 10,39.1 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 381 B

9
main/images/ONO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="16.1,6 17.2,22.2 5.7,32.3 44.2,33 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 380 B

9
main/images/OSO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="5.3,17.8 17.5,28.5 16.5,43.8 44.2,17 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 383 B

9
main/images/S.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="10.9,40.4 25.4,33.2 39.1,40 25,4.2 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 381 B

9
main/images/SE.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="25.9,45.9 31.1,30.5 45.6,25.6 10.3,10.3 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 386 B

9
main/images/SO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="4.1,25.9 19.5,31.1 24.4,45.6 39.7,10.3 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 385 B

9
main/images/SSE.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="17.8,44.7 28.5,32.5 43.8,33.5 17,5.8 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 383 B

9
main/images/SSO.svg Normal file
View File

@ -0,0 +1,9 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<polygon class="st0" points="6,33.9 22.2,32.8 32.3,44.3 33,5.8 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 380 B

10
main/images/Variable.svg Normal file
View File

@ -0,0 +1,10 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="100px" height="100px">
<style type="text/css">
.st0{fill:#003661;}
</style>
<g>
<path id="path5607" class="st0" d="M32.3,13.1c1.1,0.7,2.1,1.5,2.9,2.4c5.6,5.6,5.6,14.7,0,20.4c-5.5,5.6-14.5,5.6-20,0.1l-0.1-0.1
c-5.5-5.7-5.5-14.8,0.1-20.4l3.7,6.9l2.1-15.2L4.1,10.8l8,2c-7.2,7.2-7.2,18.8,0,26.1c7.1,7.2,18.5,7.3,25.7,0.3
c0.1-0.1,0.3-0.3,0.3-0.3c7.2-7.3,7.2-18.9,0-26.3c-1.5-1.3-3.1-2.5-4.8-3.3L32.3,13.1z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 644 B

27
main/images/images.txt Normal file
View File

@ -0,0 +1,27 @@
E
ENE
ESE
N
NNO
NO
O
ONO
OSO
S
SE
SO
SSE
SSO
Variable
p14bisj
p14j
p16bisj
p1j
p1n
p26j
p26n
p29j
p2j
p2n
p4j
p4n

BIN
main/images/p14bisj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

55
main/images/p14bisj.svg Normal file
View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" x="0px" y="0px"
viewBox="0 0 85.2 85.2" style="enable-background:new 0 0 85.2 85.2;" xml:space="preserve">
<style type="text/css">
.p14bisj-0{opacity:0.3;}
.p14bisj-1{fill:#231F20;}
.p14bisj-2{fill:#D8D9D8;}
.p14bisj-3{fill:#79CCF1;}
.p14bisj-4{fill:#FFFFFF;}
</style>
<title>22Plan de travail 1</title>
<g class="p14bisj-0">
<path class="p14bisj-1" d="M68.9,31.4c-4.3-6.9-13.4-9-20.4-4.7c-3.4,2.2-5.8,5.6-6.6,9.6c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5h25.7c6.3-0.3,11.1-5.7,10.8-11.9
C78.2,36.7,74.2,32.3,68.9,31.4L68.9,31.4z"/>
<path class="p14bisj-1" d="M33.2,25.5c-0.8-4.5-4.7-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6l-1.2,0.5
c-1.4-3-6-3.1-6.7-3.1c-2.8,1-4.6,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9c0,0,0,0,0,0H33c2.9,0,5.2-2.3,5.3-5.1
C38.3,27.8,36,25.5,33.2,25.5L33.2,25.5z"/>
</g>
<path class="p14bisj-2" d="M66.3,28.9C62,21.9,52.9,19.8,46,24c-3.5,2.2-6,5.7-6.7,9.7c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5H65c6.3-0.4,11-5.8,10.7-12C75.4,34.2,71.5,29.8,66.3,28.9
L66.3,28.9z"/>
<path class="p14bisj-2" d="M30.5,22.9c-0.8-4.5-4.7-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6L18.2,23
c-1.4-3-6-3.1-6.7-3.1c-2.8,1-4.6,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9h16.4c2.9,0,5.2-2.3,5.3-5.1C35.7,25.2,33.4,22.9,30.5,22.9
L30.5,22.9z"/>
<path class="p14bisj-3" d="M36.7,60.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C36.9,61.8,36.5,61.3,36.7,60.7C36.7,60.8,36.7,60.7,36.7,60.7z"/>
<path class="p14bisj-3" d="M34.3,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C34.5,69.8,34.2,69.3,34.3,68.7C34.3,68.7,34.3,68.7,34.3,68.7z"/>
<path class="p14bisj-3" d="M47.7,60.7l1.4-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C47.9,61.8,47.5,61.3,47.7,60.7C47.7,60.8,47.7,60.7,47.7,60.7z"/>
<path class="p14bisj-3" d="M45.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C45.5,69.8,45.2,69.3,45.4,68.7C45.4,68.7,45.4,68.7,45.4,68.7z"/>
<path class="p14bisj-3" d="M58.7,60.7l1.4-4.8c0.1-0.5,0.7-0.8,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C58.9,61.8,58.6,61.3,58.7,60.7C58.7,60.8,58.7,60.8,58.7,60.7z"/>
<path class="p14bisj-3" d="M56.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C56.5,69.8,56.2,69.3,56.4,68.7C56.4,68.7,56.4,68.7,56.4,68.7z"/>
<path class="p14bisj-3" d="M72.3,55.2L72.3,55.2c0.5,0.2,0.8,0.7,0.7,1.2l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C71.2,55.4,71.8,55.1,72.3,55.2C72.3,55.2,72.3,55.2,72.3,55.2L72.3,55.2z"/>
<path class="p14bisj-3" d="M70,63.2L70,63.2c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C68.9,63.4,69.5,63.1,70,63.2C70,63.2,70,63.2,70,63.2L70,63.2z"/>
<path class="p14bisj-4" d="M67.3,55.2L67.3,55.2c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C66.2,55.4,66.8,55.1,67.3,55.2C67.3,55.2,67.3,55.2,67.3,55.2L67.3,55.2z"/>
<path class="p14bisj-4" d="M65,63.2L65,63.2c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C63.9,63.4,64.5,63.1,65,63.2C65,63.2,65,63.2,65,63.2L65,63.2z"/>
<path class="p14bisj-4" d="M53.7,60.7l1.3-4.8c0.1-0.5,0.7-0.8,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C53.9,61.8,53.6,61.3,53.7,60.7C53.7,60.7,53.7,60.7,53.7,60.7z"/>
<path class="p14bisj-4" d="M51.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C51.5,69.8,51.2,69.3,51.4,68.7C51.4,68.7,51.4,68.7,51.4,68.7z"/>
<path class="p14bisj-4" d="M42.7,60.7l1.4-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C42.9,61.8,42.5,61.3,42.7,60.7C42.7,60.8,42.7,60.7,42.7,60.7z"/>
<path class="p14bisj-4" d="M40.3,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0.1,0,0.1,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C40.6,69.9,40.2,69.3,40.3,68.7C40.3,68.8,40.3,68.7,40.3,68.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
main/images/p14j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

55
main/images/p14j.svg Normal file
View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" x="0px" y="0px"
viewBox="0 0 85.2 85.2" style="enable-background:new 0 0 85.2 85.2;" xml:space="preserve">
<style type="text/css">
.p14j-0{opacity:0.3;}
.p14j-1{fill:#231F20;}
.p14j-2{fill:#D8D9D8;}
.p14j-3{fill:#79CCF1;}
.p14j-4{fill:#FFFFFF;}
</style>
<title>22Plan de travail 1</title>
<g class="p14j-0">
<path class="p14j-1" d="M68.9,31.4c-4.3-6.9-13.4-9-20.4-4.7c-3.4,2.2-5.8,5.6-6.6,9.6c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5h25.7c6.3-0.3,11.1-5.7,10.8-11.9
C78.2,36.7,74.2,32.3,68.9,31.4L68.9,31.4z"/>
<path class="p14j-1" d="M33.2,25.5c-0.8-4.5-4.7-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6l-1.2,0.5
c-1.4-3-6-3.1-6.7-3.1c-2.8,1-4.6,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9c0,0,0,0,0,0H33c2.9,0,5.2-2.3,5.3-5.1
C38.3,27.8,36,25.5,33.2,25.5L33.2,25.5z"/>
</g>
<path class="p14j-2" d="M66.3,28.9C62,21.9,52.9,19.8,46,24c-3.5,2.2-6,5.7-6.7,9.7c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5H65c6.3-0.4,11-5.8,10.7-12C75.4,34.2,71.5,29.8,66.3,28.9
L66.3,28.9z"/>
<path class="p14j-2" d="M30.5,22.9c-0.8-4.5-4.7-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6L18.2,23
c-1.4-3-6-3.1-6.7-3.1c-2.8,1-4.6,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9h16.4c2.9,0,5.2-2.3,5.3-5.1C35.7,25.2,33.4,22.9,30.5,22.9
L30.5,22.9z"/>
<path class="p14j-3" d="M36.7,60.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C36.9,61.8,36.5,61.3,36.7,60.7C36.7,60.8,36.7,60.7,36.7,60.7z"/>
<path class="p14j-3" d="M34.3,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C34.5,69.8,34.2,69.3,34.3,68.7C34.3,68.7,34.3,68.7,34.3,68.7z"/>
<path class="p14j-3" d="M47.7,60.7l1.4-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C47.9,61.8,47.5,61.3,47.7,60.7C47.7,60.8,47.7,60.7,47.7,60.7z"/>
<path class="p14j-3" d="M45.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C45.5,69.8,45.2,69.3,45.4,68.7C45.4,68.7,45.4,68.7,45.4,68.7z"/>
<path class="p14j-3" d="M58.7,60.7l1.4-4.8c0.1-0.5,0.7-0.8,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C58.9,61.8,58.6,61.3,58.7,60.7C58.7,60.8,58.7,60.8,58.7,60.7z"/>
<path class="p14j-3" d="M56.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C56.5,69.8,56.2,69.3,56.4,68.7C56.4,68.7,56.4,68.7,56.4,68.7z"/>
<path class="p14j-3" d="M72.3,55.2L72.3,55.2c0.5,0.2,0.8,0.7,0.7,1.2l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C71.2,55.4,71.8,55.1,72.3,55.2C72.3,55.2,72.3,55.2,72.3,55.2L72.3,55.2z"/>
<path class="p14j-3" d="M70,63.2L70,63.2c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C68.9,63.4,69.5,63.1,70,63.2C70,63.2,70,63.2,70,63.2L70,63.2z"/>
<path class="p14j-4" d="M67.3,55.2L67.3,55.2c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C66.2,55.4,66.8,55.1,67.3,55.2C67.3,55.2,67.3,55.2,67.3,55.2L67.3,55.2z"/>
<path class="p14j-4" d="M65,63.2L65,63.2c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l0,0l-1.4,4.8c-0.1,0.5-0.7,0.8-1.2,0.7l0,0
c-0.5-0.1-0.8-0.7-0.7-1.2l0,0l1.4-4.8C63.9,63.4,64.5,63.1,65,63.2C65,63.2,65,63.2,65,63.2L65,63.2z"/>
<path class="p14j-4" d="M53.7,60.7l1.3-4.8c0.1-0.5,0.7-0.8,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C53.9,61.8,53.6,61.3,53.7,60.7C53.7,60.7,53.7,60.7,53.7,60.7z"/>
<path class="p14j-4" d="M51.4,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C51.5,69.8,51.2,69.3,51.4,68.7C51.4,68.7,51.4,68.7,51.4,68.7z"/>
<path class="p14j-4" d="M42.7,60.7l1.4-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0,0,0,0l0,0c0.5,0.1,0.9,0.7,0.7,1.2c0,0,0,0,0,0l-1.3,4.8
c-0.1,0.5-0.7,0.9-1.2,0.7c0,0,0,0,0,0l0,0C42.9,61.8,42.5,61.3,42.7,60.7C42.7,60.8,42.7,60.7,42.7,60.7z"/>
<path class="p14j-4" d="M40.3,68.7l1.3-4.8c0.1-0.5,0.7-0.9,1.2-0.7c0,0,0.1,0,0.1,0l0,0c0.5,0.1,0.8,0.7,0.7,1.2c0,0,0,0,0,0l-1.4,4.8
c-0.1,0.5-0.7,0.8-1.2,0.7c0,0,0,0,0,0l0,0C40.6,69.9,40.2,69.3,40.3,68.7C40.3,68.8,40.3,68.7,40.3,68.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
main/images/p16bisj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

47
main/images/p16bisj.svg Normal file
View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_26" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="50" x="0px" y="0px"
viewBox="0 0 85.2 85.2" style="enable-background:new 0 0 85.2 85.2;" xml:space="preserve">
<style type="text/css">
.p16bisj-0{fill:#79CCF1;}
.p16bisj-1{fill:#FFFFFF;}
.p16bisj-2{opacity:0.3;}
.p16bisj-3{fill:#231F20;}
.p16bisj-4{fill:#D8D9D8;}
.p16bisj-5{fill:#FDDA00;}
.p16bisj-6{fill:#F47A20;}
</style>
<title>26Plan de travail 1</title>
<path class="p16bisj-0" d="M40.8,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C40.9,69.7,40.8,69.4,40.8,69.2L40.8,69.2z"/>
<path class="p16bisj-0" d="M53,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C53.1,69.7,52.9,69.4,53,69.2L53,69.2L53,69.2z"/>
<path class="p16bisj-0" d="M29.3,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C29.4,69.7,29.2,69.4,29.3,69.2L29.3,69.2z"/>
<path class="p16bisj-0" d="M64.6,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3L71,55c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14
c-0.1,0.3-0.4,0.4-0.7,0.3L65,69.7C64.7,69.7,64.6,69.4,64.6,69.2L64.6,69.2z"/>
<path class="p16bisj-1" d="M46.8,69.2l5-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C47,69.7,46.8,69.5,46.8,69.2C46.8,69.2,46.8,69.1,46.8,69.2L46.8,69.2z"/>
<path class="p16bisj-1" d="M59,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-5,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C59,69.7,58.9,69.4,59,69.2L59,69.2L59,69.2z"/>
<path class="p16bisj-1" d="M35.3,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3l-0.8-0.2C35.4,69.7,35.2,69.4,35.3,69.2L35.3,69.2z"/>
<path class="p16bisj-1" d="M70.6,69.2l4.9-14.1c0.1-0.3,0.4-0.4,0.7-0.3l0.8,0.2c0.3,0,0.4,0.3,0.4,0.5c0,0,0,0,0,0l0,0l-4.9,14.1
c-0.1,0.3-0.4,0.4-0.7,0.3L71,69.7C70.7,69.7,70.6,69.4,70.6,69.2L70.6,69.2z"/>
<g class="p16bisj-2">
<path class="p16bisj-3" d="M68.9,31.5c-4.3-6.9-13.4-9-20.4-4.7c-3.4,2.2-5.8,5.6-6.6,9.6c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5h25.7c6.3-0.3,11.1-5.7,10.8-11.9
C78.2,36.8,74.2,32.4,68.9,31.5L68.9,31.5z"/>
<path class="p16bisj-3" d="M33.2,25.6c-0.8-4.5-4.8-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6l-1.2,0.5
c-1.4-3-6-3.1-6.7-3.1c-2.8,0.9-4.7,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9H33c2.9,0,5.2-2.3,5.3-5.1C38.3,28,36,25.6,33.2,25.6
L33.2,25.6L33.2,25.6z"/>
</g>
<path class="p16bisj-4" d="M66.3,28.9C62,21.9,52.9,19.8,46,24.1c-3.5,2.2-6,5.7-6.8,9.8c2.8,0.3,5.2,1.8,6.6,4.2l-1.1,0.6
c-2-3.4-5.8-3.8-8.5-3.7c-4.4,1.7-6.6,6.6-4.9,11c1.3,3.3,4.4,5.5,7.9,5.5H65c6.3-0.2,11.2-5.5,11-11.8
C75.8,34.3,71.7,29.7,66.3,28.9L66.3,28.9z"/>
<path class="p16bisj-4" d="M30.5,23c-0.8-4.5-4.7-7.7-9.3-7.6c-2.9,0-5.7,1.3-7.5,3.6c2,0.3,4.5,1.2,5.6,3.6l-1.2,0.5
c-1.4-3-6-3.1-6.7-3.1c-2.8,0.9-4.7,3.5-4.7,6.5c0.1,3.9,3.3,7,7.2,6.9h16.4c2.9,0,5.2-2.3,5.3-5.1C35.7,25.3,33.4,23,30.5,23
L30.5,23L30.5,23L30.5,23z"/>
<polygon class="p16bisj-5" points="52.4,38.2 60.1,38.2 57.8,44.7 61.8,44.7 51.1,65.2 53.5,50.1 50.1,50.1 "/>
<polygon class="p16bisj-6" points="50.8,36.7 58.6,36.7 56.3,43.1 60.3,43.1 49.5,63.7 52,48.6 48.5,48.6 "/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
main/images/p1j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

1
main/images/p1j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p1j-1{fill:#eeeb61;opacity:0.51;isolation:isolate;}.p1j-2{fill:#f5b21a;stroke:#fde901;stroke-miterlimit:10;}</style></defs><title>Plan de travail 1</title><circle class="p1j-1" cx="42.62" cy="42.64" r="26.14"/><circle class="p1j-2" cx="42.62" cy="42.64" r="19.94"/></svg>

After

Width:  |  Height:  |  Size: 409 B

BIN
main/images/p1n.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

1
main/images/p1n.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_2" data-name="Calque 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p1n-1{fill:#44454e;}.p1n-1,.p1n-2{opacity:0.18;isolation:isolate;}.p1n-2{fill:#636573;}.p1n-3{fill:#fdfcea;}.p1n-4{fill:#fff;}</style></defs><title>2Plan de travail 1</title><circle class="p1n-1" cx="43.92" cy="43.2" r="26.14"/><path class="p1n-2" d="M43.4,25.08a17.48,17.48,0,0,1,6.2-.32A17.58,17.58,0,0,0,57.17,57,17.58,17.58,0,1,1,43.4,25.08Z"/><path class="p1n-3" d="M37.88,26.35A17.61,17.61,0,0,1,44,26a17.58,17.58,0,0,0,7.57,32.19,17.58,17.58,0,1,1-19-29.58A17.28,17.28,0,0,1,37.88,26.35Z"/><path class="p1n-4" d="M55.69,48.64a1,1,0,0,0,1-1V44.18a1,1,0,1,0-2.07,0v3.46a1,1,0,0,0,1,1Z"/><path class="p1n-4" d="M58.44,45.88a1,1,0,0,0-1-1H54A1,1,0,0,0,54,47h3.46a1,1,0,0,0,1-1S58.44,46,58.44,45.88Z"/><path class="p1n-4" d="M22.88,31.56a1,1,0,0,0,1-1V27a1,1,0,1,0-2.07,0v3.46a1,1,0,0,0,.94,1.06h.13Z"/><path class="p1n-4" d="M25.63,28.8a1,1,0,0,0-1-1H21.14a1,1,0,0,0,0,2.07H24.6a1,1,0,0,0,1-1V28.8Z"/><path class="p1n-4" d="M51.61,26.8a1,1,0,0,0,1-1V22.35a1,1,0,1,0-2.07,0v3.46a1,1,0,0,0,1,1Z"/><path class="p1n-4" d="M54.37,24a1,1,0,0,0-1-1H49.88a1,1,0,0,0,0,2.07h3.46a1,1,0,0,0,1-1V24Z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
main/images/p24j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

1
main/images/p24j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_37" data-name="Calque 37" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p24j-1{fill:#eeeb61;opacity:0.51;isolation:isolate;}.p24j-2{fill:#f5b21a;stroke:#fde901;stroke-miterlimit:10;}.p24j-3{fill:#919191;}.p24j-4{fill:#79ccf1;}.p24j-5{fill:#fff;}.p24j-6{fill:#fdda00;}.p24j-7{fill:#f47a20;}.p24j-8{fill:#cf2e29;}</style></defs><title>37Plan de travail 1</title><circle class="p24j-1" cx="47.34" cy="26.73" r="16.34" transform="translate(-0.15 0.27) rotate(-0.32)"/><circle class="p24j-2" cx="47.34" cy="26.73" r="12.47"/><path class="p24j-3" d="M67.27,33.35a14.77,14.77,0,0,0-27,4.91,8.62,8.62,0,0,1,6.64,4.21l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48H66a11.37,11.37,0,0,0,1.23-22.58Z"/><path class="p24j-3" d="M31.51,27.37a9.29,9.29,0,0,0-9.3-7.65,9.56,9.56,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1a6.94,6.94,0,0,0-4.7,6.46A7.08,7.08,0,0,0,15,37.76h16.4a5.21,5.21,0,1,0,.13-10.42Z"/><rect class="p24j-4" x="33.52" y="65.16" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="matrix(0.29, -0.96, 0.96, 0.29, -33.18, 87.37)"/><rect class="p24j-4" x="45.66" y="65.13" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-24.58 98.96) rotate(-72.96)"/><rect class="p24j-4" x="21.95" y="65.15" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-41.35 76.3) rotate(-72.96)"/><rect class="p24j-4" x="57.31" y="65.16" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-16.37 110.12) rotate(-72.96)"/><rect class="p24j-5" x="39.56" y="65.15" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-28.91 93.14) rotate(-72.96)"/><rect class="p24j-5" x="51.71" y="65.14" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-20.31 104.75) rotate(-72.96)"/><rect class="p24j-5" x="28" y="65.16" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-37.08 82.09) rotate(-72.96)"/><rect class="p24j-5" x="63.35" y="65.16" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-12.09 115.89) rotate(-72.96)"/><polygon class="p24j-6" points="49.13 43.88 57.62 43.88 55.09 50.86 59.43 50.86 47.72 73.3 50.42 56.83 46.65 56.83 49.13 43.88"/><polygon class="p24j-7" points="47.44 42.17 55.91 42.17 53.4 49.17 57.73 49.17 46.01 71.6 48.7 55.14 44.96 55.14 47.44 42.17"/><rect class="p24j-8" x="60.5" y="48.54" width="16.98" height="16.98"/><path class="p24j-5" d="M73.5,61.68a11.63,11.63,0,0,1-3.42.58,5.74,5.74,0,0,1-4.14-1.39,5,5,0,0,1-1.45-3.73c0-3.4,2.49-5.36,5.85-5.36a7.07,7.07,0,0,1,2.84.5l-.49,1.86a5.58,5.58,0,0,0-2.39-.44,3.34,3.34,0,1,0,1,6.52V58.14H69.69V56.33H73.5Z"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
main/images/p25j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

1
main/images/p25j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_39" data-name="Calque 39" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p25-1{fill:#79ccf1;}.p25-2{fill:#fff;}.p25-3{fill:#919191;}.p25-4{fill:#fdda00;}.p25-5{fill:#f47a20;}.p25-6{fill:#cf2e29;}</style></defs><title>39Plan de travail 1</title><rect class="p25-1" x="34.07" y="60.53" width="17.99" height="1.94" rx="0.55" ry="0.55" transform="translate(-28.26 84.94) rotate(-73.19)"/><rect class="p25-1" x="46.71" y="60.53" width="17.99" height="1.94" rx="0.55" ry="0.55" transform="translate(-19.28 97.04) rotate(-73.19)"/><rect class="p25-1" x="22.51" y="60.54" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-36.55 73.57) rotate(-72.96)"/><rect class="p25-1" x="57.87" y="60.53" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-11.54 107.38) rotate(-72.96)"/><rect class="p25-2" x="40.12" y="60.53" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-24.09 90.41) rotate(-72.96)"/><rect class="p25-2" x="52.28" y="60.53" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-15.5 102.04) rotate(-72.96)"/><rect class="p25-2" x="39.37" y="51.83" width="17.99" height="1.94" rx="0.55" ry="0.55" transform="translate(-16.16 83.82) rotate(-73.19)"/><rect class="p25-2" x="63.93" y="60.54" width="17.94" height="1.93" rx="0.55" ry="0.55" transform="translate(-7.26 113.18) rotate(-72.96)"/><path class="p25-3" d="M65.21,28.61a14.78,14.78,0,0,0-27.07,4.94,8.64,8.64,0,0,1,6.64,4.21l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48H63.93a11.37,11.37,0,0,0,1.23-22.58Z"/><path class="p25-3" d="M29.45,22.63A9.3,9.3,0,0,0,20.15,15a9.59,9.59,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1a6.94,6.94,0,0,0-4.7,6.46A7.08,7.08,0,0,0,12.91,33H29.35a5.21,5.21,0,1,0,.13-10.42h0Z"/><polygon class="p25-4" points="48.51 39.49 56.37 39.49 54.04 45.99 58.05 45.99 47.18 66.76 49.68 51.51 46.2 51.51 48.51 39.49"/><polygon class="p25-5" points="46.94 37.91 54.79 37.91 52.46 44.41 56.47 44.41 45.6 65.2 48.11 49.94 44.63 49.94 46.94 37.91"/><rect class="p25-6" x="62.56" y="45.67" width="16.98" height="16.98"/><path class="p25-2" d="M75.55,58.81a11.31,11.31,0,0,1-3.42.58A5.65,5.65,0,0,1,68,58a5,5,0,0,1-1.45-3.72c0-3.4,2.49-5.36,5.85-5.36a7.07,7.07,0,0,1,2.84.5l-.49,1.85a5.9,5.9,0,0,0-2.39-.44A3.34,3.34,0,1,0,72,57.5a3.24,3.24,0,0,0,1.27-.18V55.25H71.75V53.44h3.8Z"/></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
main/images/p26j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

1
main/images/p26j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_40" data-name="Calque 40" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p26j-1{fill:#eeeb61;opacity:0.51;isolation:isolate;}.p26j-2{fill:#f5b21a;stroke:#fde901;stroke-miterlimit:10;}.p26j-3{fill:#919191;}.p26j-4{fill:#fdda00;}.p26j-5{fill:#f47a20;}</style></defs><title>40Plan de travail 1</title><circle class="p26j-1" cx="50" cy="28.6" r="17.77"/><circle class="p26j-2" cx="50" cy="28.6" r="13.55"/><path class="p26j-3" d="M69,34.89A14.77,14.77,0,0,0,42,39.8,8.61,8.61,0,0,1,48.62,44l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48h25.7a11.37,11.37,0,0,0,1.23-22.58Z"/><path class="p26j-3" d="M33.2,28.9a9.3,9.3,0,0,0-9.3-7.65,9.53,9.53,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64L20.84,29c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H33.06a5.21,5.21,0,0,0,.13-10.42Z"/><polygon class="p26j-4" points="51.49 46.78 59.29 46.78 56.96 53.22 60.95 53.22 50.18 73.83 52.67 58.7 49.2 58.7 51.49 46.78"/><polygon class="p26j-5" points="49.93 45.22 57.71 45.22 55.41 51.66 59.39 51.66 48.62 72.28 51.09 57.14 47.65 57.14 49.93 45.22"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
main/images/p26j.svg.1 Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_40" data-name="Calque 40" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p26j-1{fill:#eeeb61;opacity:0.51;isolation:isolate;}.p26j-2{fill:#f5b21a;stroke:#fde901;stroke-miterlimit:10;}.p26j-3{fill:#919191;}.p26j-4{fill:#fdda00;}.p26j-5{fill:#f47a20;}</style></defs><title>40Plan de travail 1</title><circle class="p26j-1" cx="50" cy="28.6" r="17.77"/><circle class="p26j-2" cx="50" cy="28.6" r="13.55"/><path class="p26j-3" d="M69,34.89A14.77,14.77,0,0,0,42,39.8,8.61,8.61,0,0,1,48.62,44l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48h25.7a11.37,11.37,0,0,0,1.23-22.58Z"/><path class="p26j-3" d="M33.2,28.9a9.3,9.3,0,0,0-9.3-7.65,9.53,9.53,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64L20.84,29c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H33.06a5.21,5.21,0,0,0,.13-10.42Z"/><polygon class="p26j-4" points="51.49 46.78 59.29 46.78 56.96 53.22 60.95 53.22 50.18 73.83 52.67 58.7 49.2 58.7 51.49 46.78"/><polygon class="p26j-5" points="49.93 45.22 57.71 45.22 55.41 51.66 59.39 51.66 48.62 72.28 51.09 57.14 47.65 57.14 49.93 45.22"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
main/images/p26n.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

1
main/images/p26n.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_41" data-name="Calque 41" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p26n-1{fill:#44454e;opacity:0.25;}.p26n-1,.p26n-3{isolation:isolate;}.p26n-2{fill:#fff;}.p26n-3{fill:#636573;opacity:0.18;}.p26n-4{fill:#fdfcea;}.p26n-5{fill:#919191;}.p26n-6{fill:#fdda00;}.p26n-7{fill:#f47a20;}</style></defs><title>41Plan de travail 1</title><circle class="p26n-1" cx="50.99" cy="33.16" r="22.87" transform="translate(-0.07 0.11) rotate(-0.12)"/><path class="p26n-2" d="M61.3,36.15a.89.89,0,0,0,.89-.89h0v-3a.89.89,0,1,0-1.77-.19.61.61,0,0,0,0,.19v3a.89.89,0,0,0,.88.9h0Z"/><path class="p26n-2" d="M63.71,33.74a.89.89,0,0,0-.89-.89h-3a.89.89,0,0,0-.19,1.77h3.25A.9.9,0,0,0,63.71,33.74Z"/><path class="p26n-2" d="M32.58,21.25a.89.89,0,0,0,.89-.89h0v-3a.89.89,0,1,0-1.77-.19.61.61,0,0,0,0,.19v3a.89.89,0,0,0,.88.9h0Z"/><path class="p26n-2" d="M35,18.86a.89.89,0,0,0-.89-.89h-3a.89.89,0,1,0-.19,1.77h3.22A.9.9,0,0,0,35,18.86Z"/><path class="p26n-2" d="M57.72,18.86a.89.89,0,0,0,.89-.89h0V15a.89.89,0,1,0-1.77-.19.61.61,0,0,0,0,.19v3a.89.89,0,0,0,.88.9h0Z"/><path class="p26n-2" d="M60.14,16.39a.89.89,0,0,0-.89-.89h-3a.89.89,0,1,0-.19,1.77h3.22A.9.9,0,0,0,60.14,16.39Z"/><path class="p26n-3" d="M51.58,16.38A15.43,15.43,0,0,1,57,16.09a15.51,15.51,0,0,0,6.69,28.44,15.56,15.56,0,0,1-17.09-26A15.4,15.4,0,0,1,51.58,16.38Z"/><path class="p26n-4" d="M46.88,18.44a15.16,15.16,0,0,1,5.37-.28,15.39,15.39,0,0,0,6.63,28.17,15.41,15.41,0,1,1-12-27.91Z"/><path class="p26n-5" d="M69,37.86a14.77,14.77,0,0,0-27,4.91A8.62,8.62,0,0,1,48.6,47l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48H67.72A11.37,11.37,0,0,0,69,37.86Z"/><path class="p26n-5" d="M33.2,31.86a9.29,9.29,0,0,0-9.32-7.61,9.53,9.53,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64L20.82,32c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H33a5.21,5.21,0,0,0,.13-10.42Z"/><polygon class="p26n-6" points="52.42 48.64 60.31 48.64 57.95 55.12 61.99 55.12 51.1 75.98 53.61 60.67 50.11 60.67 52.42 48.64"/><polygon class="p26n-7" points="50.85 47.05 58.72 47.05 56.38 53.55 60.41 53.55 49.52 74.41 52.02 59.1 48.54 59.1 50.85 47.05"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
main/images/p27j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

1
main/images/p27j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_42" data-name="Calque 42" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p27-1{fill:#919191;}.p27-2{fill:#fdda00;}.p27-3{fill:#f47a20;}</style></defs><title>42Plan de travail 1</title><path class="p27-1" d="M69,32.55a14.77,14.77,0,0,0-27.08,4.93,8.66,8.66,0,0,1,6.66,4.23l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.47H67.72A11.37,11.37,0,0,0,69,32.57Z"/><path class="p27-1" d="M33.2,26.57a9.31,9.31,0,0,0-9.3-7.65,9.56,9.56,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1A6.93,6.93,0,0,0,9.43,30,7.08,7.08,0,0,0,16.65,37H33.06a5.21,5.21,0,0,0,.13-10.42h0Z"/><polygon class="p27-2" points="53.94 42.42 61.72 42.42 59.39 48.84 63.38 48.84 52.64 69.4 55.12 54.31 51.66 54.31 53.94 42.42"/><polygon class="p27-3" points="52.39 40.87 60.15 40.87 57.85 47.28 61.81 47.28 51.08 67.84 53.54 52.74 50.11 52.74 52.39 40.87"/></svg>

After

Width:  |  Height:  |  Size: 928 B

BIN
main/images/p29j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

1
main/images/p29j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_45" data-name="Calque 45" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p29-1{fill:#919191;}.p29-2{fill:#fdda00;}.p29-3{fill:#f47a20;}</style></defs><title>45Plan de travail 1</title><path class="p29-1" d="M69,32.13a14.77,14.77,0,0,0-27,4.93,8.62,8.62,0,0,1,6.64,4.21l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48H67.72A11.37,11.37,0,0,0,69,32.14Z"/><path class="p29-1" d="M33.2,26.15a9.3,9.3,0,0,0-9.32-7.59,9.53,9.53,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H33a5.21,5.21,0,0,0,.13-10.42Z"/><polygon class="p29-2" points="50.55 43.58 58.48 43.58 56.11 50.12 60.17 50.12 49.23 71.08 51.75 55.68 48.23 55.68 50.55 43.58"/><polygon class="p29-3" points="48.97 41.98 56.88 41.98 54.54 48.53 58.58 48.53 47.63 69.5 50.15 54.1 46.65 54.1 48.97 41.98"/><polygon class="p29-2" points="65.59 43.58 73.52 43.58 71.17 50.12 75.21 50.12 64.27 71.08 66.79 55.68 63.28 55.68 65.59 43.58"/><polygon class="p29-3" points="64.01 41.98 71.93 41.98 69.58 48.53 73.63 48.53 62.69 69.5 65.19 54.1 61.69 54.1 64.01 41.98"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
main/images/p2j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

13
main/images/p2j.svg Normal file
View File

@ -0,0 +1,13 @@
<svg version="1.1" id="Calque_5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="50" height="50" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.51;fill:#EEEB61;enable-background:new ;}
.st1{fill:#F5B21A;stroke:#FDE901;stroke-width:0.5866;stroke-miterlimit:5.8658;}
.st2{opacity:0.8;fill:#FFFFFF;stroke:#CAD9E8;stroke-width:2;stroke-miterlimit:10;enable-background:new ;}
</style>
<circle class="st0" cx="24.9" cy="24.2" r="13.4" />
<circle class="st1" cx="24.9" cy="24.2" r="10.2" />
<path class="st2" d="M40.1,26.5c-2.5-4.1-7.9-5.3-11.9-2.8c-2.2,1.3-3.6,3.5-4,6c-2.8,0.3-4.8,2.7-4.5,5.5c0.2,2.4,2.2,4.3,4.6,4.5
h15.1c3.7-0.3,6.4-3.4,6.2-7.1C45.3,29.5,43.1,27,40.1,26.5z" />
<path class="st2" d="M7.2,19.1c0.9-1.3,2.4-2.1,4-2.1c2.2,0,4.2,1.6,4.6,3.8c1.4,0,2.6,1.1,2.7,2.5c0,1.4-1.1,2.6-2.5,2.7H7.6
c-1.9,0-3.5-1.5-3.6-3.4C3.9,20.8,5.3,19.2,7.2,19.1L7.2,19.1z" />
</svg>

After

Width:  |  Height:  |  Size: 1014 B

BIN
main/images/p2n.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

32
main/images/p2n.svg Normal file
View File

@ -0,0 +1,32 @@
<svg version="1.1" id="Calque_5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="50" height="50">
<style type="text/css">
.st0{opacity:0.18;fill:#43444D;enable-background:new ;}
.st1{fill:#FFFFFF;}
.st2{opacity:0.18;fill:#626472;enable-background:new ;}
.st3{fill:#FDFCE9;}
.st4{opacity:0.8;fill:#FFFFFF;stroke:#CAD9E8;stroke-width:2;stroke-miterlimit:10;enable-background:new ;}
</style>
<circle class="st0" cx="25.9" cy="24.7" r="15.3"/>
<path class="st1" d="M32.7,26.8c0.4,0,0.6-0.2,0.6-0.6v-2.1c0-0.4-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6l0,0v2.1
C32.2,26.5,32.4,26.8,32.7,26.8L32.7,26.8z"/>
<path class="st1" d="M34.4,25.1c0-0.4-0.2-0.6-0.6-0.6h-2.1c-0.4,0-0.6,0.3-0.6,0.6c0,0.3,0.3,0.6,0.6,0.6h2.1
C34.1,25.8,34.4,25.5,34.4,25.1L34.4,25.1z"/>
<path class="st1" d="M13.5,16.7c0.4,0,0.6-0.2,0.6-0.6V14c0-0.4-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6v2.1
C12.9,16.4,13.1,16.7,13.5,16.7L13.5,16.7z"/>
<path class="st1" d="M15.1,15.1c0-0.4-0.2-0.6-0.6-0.6h-2.1c-0.4,0-0.6,0.3-0.6,0.6s0.3,0.6,0.6,0.6h2.1
C14.8,15.7,15.1,15.5,15.1,15.1L15.1,15.1L15.1,15.1z"/>
<path class="st1" d="M30.4,15.1c0.4,0,0.6-0.2,0.6-0.6v-2.1c0-0.4-0.3-0.6-0.6-0.6c-0.3,0-0.6,0.3-0.6,0.6v2.1
C29.8,14.8,30,15.1,30.4,15.1L30.4,15.1z"/>
<path class="st1" d="M32,13.5c0-0.4-0.2-0.6-0.6-0.6h-2.1c-0.4,0-0.6,0.3-0.6,0.6s0.3,0.6,0.6,0.6h2.1C31.7,14.1,32,13.8,32,13.5
L32,13.5L32,13.5z"/>
<path class="st2" d="M25.1,15c1.2-0.3,2.4-0.4,3.6-0.2c-4.8,3.1-6.1,9.5-3,14.3c1.7,2.6,4.4,4.3,7.5,4.6c-4.8,3.1-11.2,1.6-14.3-3.1
c-3.1-4.8-1.6-11.2,3.1-14.3C22.9,15.8,23.9,15.3,25.1,15z"/>
<path class="st3" d="M23.1,14.8c1.2-0.3,2.4-0.4,3.6-0.2c-4.8,3.1-6.1,9.5-3,14.3c1.7,2.6,4.4,4.3,7.5,4.6c-4.8,3.1-11.2,1.7-14.2-3
c-3.1-4.8-1.6-11.2,3.1-14.3C21,15.6,22.1,15.1,23.1,14.8z"/>
<path class="st4" d="M40.2,27.4c-2.5-4-7.9-5.3-11.9-2.8c-2.2,1.3-3.6,3.5-4,6c-2.8,0.2-4.8,2.7-4.5,5.5c0.2,2.4,2.2,4.3,4.6,4.5
h15.1c3.7-0.2,6.5-3.3,6.3-7C45.7,30.5,43.3,27.9,40.2,27.4L40.2,27.4z"/>
<path class="st4" d="M7.3,20c0.9-1.3,2.3-2.1,3.9-2.1c2.2-0.1,4.2,1.6,4.6,3.8c1.4-0.1,2.6,1.1,2.6,2.5c0.1,1.4-1.1,2.6-2.5,2.6H7.6
c-1.9,0-3.4-1.5-3.5-3.3C4.2,21.7,5.5,20.2,7.3,20L7.3,20z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
main/images/p3j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

1
main/images/p3j.svg Normal file
View File

@ -0,0 +1 @@
<svg id="Calque_7" data-name="Calque 7" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85.23 85.24" width="50" height="50"><defs><style>.p3j-1{opacity:0.3;}.p3j-2{fill:#231f20;}.p3j-3{fill:#d8d9d8;}</style></defs><title>7Plan de travail 1</title><g class="p3j-1"><path class="p3j-2" d="M69.47,40a14.77,14.77,0,0,0-27.1,4.91A8.65,8.65,0,0,1,49,49.12l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67a8.52,8.52,0,0,0,3,16.48H68.22A11.37,11.37,0,0,0,69.45,40Z"/><path class="p3j-2" d="M33.69,34a9.3,9.3,0,0,0-9.3-7.65A9.54,9.54,0,0,0,16.88,30c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H33.56a5.21,5.21,0,0,0,.13-10.42Z"/></g><path class="p3j-3" d="M66.88,37.4a14.77,14.77,0,0,0-27,4.91,8.61,8.61,0,0,1,6.63,4.23l-1.14.64c-2-3.42-5.82-3.85-8.47-3.67A8.52,8.52,0,0,0,39.9,60H65.61A11.37,11.37,0,0,0,66.88,37.4Z"/><path class="p3j-3" d="M31.08,31.43a9.3,9.3,0,0,0-9.3-7.65,9.53,9.53,0,0,0-7.5,3.57c2,.32,4.53,1.21,5.63,3.64l-1.19.54c-1.36-3-6-3.1-6.71-3.1a6.92,6.92,0,0,0-4.7,6.46,7.08,7.08,0,0,0,7.22,6.93H31a5.21,5.21,0,0,0,.13-10.42Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
main/images/p4j.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

17
main/images/p4j.svg Normal file
View File

@ -0,0 +1,17 @@
<svg version="1.1" id="Calque_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="50" height="50">
<style type="text/css">
.st0{opacity:0.51;fill:#EEEB61;enable-background:new ;}
.st1{fill:#F5B21A;stroke:#FDE901;stroke-width:0.5866;stroke-miterlimit:5.8658;}
.st2{opacity:0.9;}
.st3{fill:#F4F4F4;stroke:#CAD9E8;stroke-width:2;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="25" cy="25.8" r="15.3"/>
<circle class="st1" cx="25" cy="25.8" r="11.7"/>
<g class="st2">
<path class="st3" d="M7.4,20.9h24.3c0.5,0,1,0.4,1,1v1.5c0,0.5-0.4,1-1,1H7.4c-0.5,0-1-0.4-1-1v-1.5C6.4,21.3,6.9,20.9,7.4,20.9z"
/>
<path class="st3" d="M18.3,27.8h24.3c0.5,0,1,0.4,1,1v1.5c0,0.5-0.4,1-1,1H18.3c-0.5,0-1-0.4-1-1v-1.5
C17.3,28.3,17.7,27.8,18.3,27.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 898 B

BIN
main/images/p4n.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

34
main/images/p4n.svg Normal file
View File

@ -0,0 +1,34 @@
<svg version="1.1" id="Calque_5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve" width="50" height="50">
<style type="text/css">
.st0{opacity:0.18;fill:#43444D;enable-background:new ;}
.st1{fill:#FFFFFF;}
.st2{opacity:0.18;fill:#626472;enable-background:new ;}
.st3{fill:#FDFCE9;}
.st4{opacity:0.9;}
.st5{fill:#F4F4F4;stroke:#CAD9E8;stroke-width:2;stroke-miterlimit:10;}
</style>
<g>
<ellipse class="st0" cx="25.2" cy="25" rx="14.9" ry="15.3"/>
<path class="st1" d="M32,27c0.3,0,0.6-0.2,0.6-0.6v-2.1c0-0.4-0.3-0.6-0.6-0.6c-0.3,0-0.6,0.3-0.6,0.6v2.1C31.4,26.8,31.6,27,32,27
L32,27z"/>
<path class="st1" d="M33.5,25.4c0-0.4-0.2-0.6-0.6-0.6H31c-0.3,0-0.6,0.3-0.6,0.6c0,0.3,0.3,0.6,0.6,0.6h2
C33.3,26,33.5,25.8,33.5,25.4L33.5,25.4z"/>
<path class="st1" d="M13.3,17.6c0.3,0,0.6-0.2,0.6-0.6v-2c0-0.4-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6v2C12.6,17.3,12.9,17.6,13.3,17.6
L13.3,17.6z"/>
<path class="st1" d="M14.8,16c0-0.4-0.2-0.6-0.6-0.6h-2c-0.3,0-0.6,0.3-0.6,0.6c0,0.3,0.3,0.6,0.6,0.6h2
C14.6,16.6,14.8,16.4,14.8,16L14.8,16L14.8,16z"/>
<path class="st1" d="M29.6,16c0.3,0,0.6-0.2,0.6-0.6v-2.1c0-0.4-0.3-0.6-0.6-0.6S29,13,29,13.3v2.1C29,15.7,29.3,16,29.6,16
L29.6,16z"/>
<path class="st1" d="M31.2,14.4c0-0.4-0.2-0.6-0.6-0.6h-2c-0.3,0-0.6,0.3-0.6,0.6s0.3,0.6,0.6,0.6h2C31,15,31.2,14.7,31.2,14.4
L31.2,14.4L31.2,14.4z"/>
<path class="st2" d="M25.7,15c1.1-0.3,2.3-0.4,3.5-0.2c-4.6,3.1-5.9,9.5-2.9,14.3c1.7,2.6,4.3,4.3,7.3,4.6
c-4.7,3.1-10.9,1.6-13.9-3.1c-3-4.8-1.6-11.2,3-14.3C23.6,15.8,24.7,15.3,25.7,15z"/>
<path class="st3" d="M22.6,15.1c1.1-0.3,2.3-0.4,3.5-0.2c-4.6,3.1-5.9,9.5-2.9,14.3c1.6,2.5,4.3,4.2,7.2,4.6
c-4.7,3.1-10.9,1.6-13.9-3.1c-3-4.8-1.7-11.2,3-14.3C20.5,15.8,21.5,15.4,22.6,15.1L22.6,15.1z"/>
<g class="st4">
<path class="st5" d="M7.4,20.7H31c0.5,0,1,0.4,1,1v1.5c0,0.5-0.4,1-1,1H7.4c-0.5,0-1-0.4-1-1v-1.5C6.5,21.1,6.9,20.7,7.4,20.7z"/>
<path class="st5" d="M18,27.6h23.6c0.5,0,1,0.4,1,1v1.5c0,0.5-0.4,1-1,1H18c-0.5,0-1-0.4-1-1v-1.5C17,28.1,17.4,27.6,18,27.6z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

File diff suppressed because it is too large Load Diff

View File

@ -675,6 +675,14 @@ CONFIG_ESP_EVENT_POST_FROM_ISR=y
CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
# end of Event Loop Library # end of Event Loop Library
#
# ESP HTTP client
#
# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set
# end of ESP HTTP client
# #
# Hardware Settings # Hardware Settings
# #
@ -1464,9 +1472,21 @@ CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set # CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set # CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set # CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set CONFIG_MQTT_USE_CUSTOM_CONFIG=y
CONFIG_MQTT_TCP_DEFAULT_PORT=1883
CONFIG_MQTT_SSL_DEFAULT_PORT=8883
CONFIG_MQTT_WS_DEFAULT_PORT=80
CONFIG_MQTT_WSS_DEFAULT_PORT=443
CONFIG_MQTT_BUFFER_SIZE=1024
CONFIG_MQTT_TASK_STACK_SIZE=6144
# CONFIG_MQTT_DISABLE_API_LOCKS is not set
CONFIG_MQTT_TASK_PRIORITY=5
CONFIG_MQTT_POLL_READ_TIMEOUT_MS=10000
CONFIG_MQTT_EVENT_QUEUE_SIZE=1
# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set # CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
# CONFIG_MQTT_OUTBOX_DATA_ON_EXTERNAL_MEMORY is not set
# CONFIG_MQTT_CUSTOM_OUTBOX is not set # CONFIG_MQTT_CUSTOM_OUTBOX is not set
CONFIG_MQTT_OUTBOX_EXPIRED_TIMEOUT_MS=30000
# end of ESP-MQTT Configurations # end of ESP-MQTT Configurations
# #
@ -1921,22 +1941,11 @@ CONFIG_LV_USE_GRID=y
# Others # Others
# #
# CONFIG_LV_USE_SNAPSHOT is not set # CONFIG_LV_USE_SNAPSHOT is not set
CONFIG_LV_USE_SYSMON=y # CONFIG_LV_USE_SYSMON is not set
CONFIG_LV_USE_PERF_MONITOR=y
# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_LEFT is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_MID is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_RIGHT is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_MID is not set
CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT=y
# CONFIG_LV_PERF_MONITOR_ALIGN_LEFT_MID is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_RIGHT_MID is not set
# CONFIG_LV_PERF_MONITOR_ALIGN_CENTER is not set
# CONFIG_LV_USE_PERF_MONITOR_LOG_MODE is not set
# CONFIG_LV_USE_MONKEY is not set # CONFIG_LV_USE_MONKEY is not set
# CONFIG_LV_USE_PROFILER is not set # CONFIG_LV_USE_PROFILER is not set
# CONFIG_LV_USE_GRIDNAV is not set # CONFIG_LV_USE_GRIDNAV is not set
# CONFIG_LV_USE_FRAGMENT is not set CONFIG_LV_USE_FRAGMENT=y
# CONFIG_LV_USE_IMGFONT is not set # CONFIG_LV_USE_IMGFONT is not set
# CONFIG_LV_USE_IME_PINYIN is not set # CONFIG_LV_USE_IME_PINYIN is not set
# CONFIG_LV_USE_FILE_EXPLORER is not set # CONFIG_LV_USE_FILE_EXPLORER is not set