ok
27
.vscode/settings.json
vendored
@ -4,5 +4,30 @@
|
||||
"board/esp32s3-builtin.cfg"
|
||||
],
|
||||
"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
|
||||
}
|
||||
2
components/http/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
||||
idf_component_register(SRCS "http.c"
|
||||
INCLUDE_DIRS "include")
|
||||
159
components/http/http.c
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
49
components/http/include/http.h
Normal 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
|
||||
2
components/jsmn/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
||||
idf_component_register(SRCS "jsmn.c"
|
||||
INCLUDE_DIRS "include")
|
||||
471
components/jsmn/include/jsmn.h
Normal 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
@ -0,0 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include "jsmn.h"
|
||||
|
||||
void func(void)
|
||||
{
|
||||
|
||||
}
|
||||
3
components/meteofrance/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
||||
idf_component_register(SRCS "meteofrance.c"
|
||||
INCLUDE_DIRS "include"
|
||||
REQUIRES http jsmn json esp_http_client esp-tls)
|
||||
40
components/meteofrance/include/meteofrance.h
Normal 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);
|
||||
|
||||
266
components/meteofrance/meteofrance.c
Normal 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");
|
||||
}
|
||||
3
components/weather/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
||||
idf_component_register(SRCS "weather.c"
|
||||
INCLUDE_DIRS "include"
|
||||
REQUIRES http jsmn)
|
||||
11
components/weather/Kconfig.projbuild
Normal 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
|
||||
2
components/weather/component.mk
Normal file
@ -0,0 +1,2 @@
|
||||
COMPONENT_ADD_INCLUDEDIRS := .
|
||||
|
||||
40
components/weather/include/weather.h
Normal 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
|
||||
183
components/weather/weather.c
Normal 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");
|
||||
}
|
||||
@ -1,11 +1,21 @@
|
||||
idf_component_register(SRCS "main.c"
|
||||
INCLUDE_DIRS "." ${LV_DEMO_DIR}
|
||||
REQUIRES esp_wifi nvs_flash mqtt)
|
||||
idf_component_register(SRC_DIRS . fonts
|
||||
INCLUDE_DIRS "."
|
||||
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/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/")
|
||||
|
||||
set_source_files_properties(
|
||||
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)"
|
||||
)
|
||||
|
||||
881
main/fonts/montserrat_medium_12.c
Normal 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*/
|
||||
|
||||
1158
main/fonts/montserrat_medium_18.c
Normal file
692
main/fonts/notomedium16.c
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
|
After Width: | Height: | Size: 1.6 KiB |
55
main/images/p14bisj.svg
Normal 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
|
After Width: | Height: | Size: 1.6 KiB |
55
main/images/p14j.svg
Normal 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
|
After Width: | Height: | Size: 1.9 KiB |
47
main/images/p16bisj.svg
Normal 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
|
After Width: | Height: | Size: 1.3 KiB |
1
main/images/p1j.svg
Normal 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
|
After Width: | Height: | Size: 1.7 KiB |
1
main/images/p1n.svg
Normal 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
|
After Width: | Height: | Size: 2.3 KiB |
1
main/images/p24j.svg
Normal 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
|
After Width: | Height: | Size: 1.9 KiB |
1
main/images/p25j.svg
Normal 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
|
After Width: | Height: | Size: 1.7 KiB |
1
main/images/p26j.svg
Normal 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
@ -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
|
After Width: | Height: | Size: 1.9 KiB |
1
main/images/p26n.svg
Normal 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
|
After Width: | Height: | Size: 1.2 KiB |
1
main/images/p27j.svg
Normal 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
|
After Width: | Height: | Size: 1.5 KiB |
1
main/images/p29j.svg
Normal 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
|
After Width: | Height: | Size: 2.1 KiB |
13
main/images/p2j.svg
Normal 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
|
After Width: | Height: | Size: 2.4 KiB |
32
main/images/p2n.svg
Normal 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
|
After Width: | Height: | Size: 1.1 KiB |
1
main/images/p3j.svg
Normal 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
|
After Width: | Height: | Size: 1.8 KiB |
17
main/images/p4j.svg
Normal 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
|
After Width: | Height: | Size: 1.8 KiB |
34
main/images/p4n.svg
Normal 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 |
364
main/main.c
@ -1,8 +1,3 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "esp_err.h"
|
||||
@ -18,8 +13,11 @@
|
||||
#include "esp_event.h"
|
||||
#include "nvs_flash.h"
|
||||
#include "mqtt_client.h"
|
||||
#include "meteofrance.h"
|
||||
|
||||
#include "esp_lcd_touch_gt911.h"
|
||||
LV_FONT_DECLARE(montserrat_medium_12)
|
||||
LV_FONT_DECLARE(montserrat_medium_18)
|
||||
|
||||
/* LCD size */
|
||||
#define EXAMPLE_LCD_H_RES (800)
|
||||
@ -96,7 +94,6 @@ static lv_indev_t *lvgl_touch_indev = NULL;
|
||||
lv_obj_t *chart;
|
||||
lv_chart_series_t *ser1;
|
||||
|
||||
|
||||
static esp_err_t app_lcd_init(void)
|
||||
{
|
||||
esp_err_t ret = ESP_OK;
|
||||
@ -144,7 +141,8 @@ static esp_err_t app_lcd_init(void)
|
||||
return ret;
|
||||
|
||||
err:
|
||||
if (lcd_panel) {
|
||||
if (lcd_panel)
|
||||
{
|
||||
esp_lcd_panel_del(lcd_panel);
|
||||
}
|
||||
return ret;
|
||||
@ -159,8 +157,7 @@ static esp_err_t app_touch_init(void)
|
||||
.sda_pullup_en = GPIO_PULLUP_DISABLE,
|
||||
.scl_io_num = EXAMPLE_TOUCH_I2C_SCL,
|
||||
.scl_pullup_en = GPIO_PULLUP_DISABLE,
|
||||
.master.clk_speed = EXAMPLE_TOUCH_I2C_CLK_HZ
|
||||
};
|
||||
.master.clk_speed = EXAMPLE_TOUCH_I2C_CLK_HZ};
|
||||
ESP_RETURN_ON_ERROR(i2c_param_config(EXAMPLE_TOUCH_I2C_NUM, &i2c_conf), TAG, "I2C configuration failed");
|
||||
ESP_RETURN_ON_ERROR(i2c_driver_install(EXAMPLE_TOUCH_I2C_NUM, i2c_conf.mode, 0, 0, 0), TAG, "I2C initialization failed");
|
||||
|
||||
@ -231,8 +228,7 @@ static esp_err_t app_lvgl_init(void)
|
||||
#if LVGL_VERSION_MAJOR >= 9
|
||||
.swap_bytes = false,
|
||||
#endif
|
||||
}
|
||||
};
|
||||
}};
|
||||
const lvgl_port_display_rgb_cfg_t rgb_cfg = {
|
||||
.flags = {
|
||||
#if EXAMPLE_LCD_RGB_BOUNCE_BUFFER_MODE
|
||||
@ -245,8 +241,7 @@ static esp_err_t app_lvgl_init(void)
|
||||
#else
|
||||
.avoid_tearing = false,
|
||||
#endif
|
||||
}
|
||||
};
|
||||
}};
|
||||
lvgl_disp = lvgl_port_add_disp_rgb(&disp_cfg, &rgb_cfg);
|
||||
|
||||
/* Add touch input (for selected screen) */
|
||||
@ -261,14 +256,17 @@ static esp_err_t app_lvgl_init(void)
|
||||
|
||||
static void _app_button_cb(lv_event_t *e)
|
||||
{
|
||||
lvgl_port_lock(0);
|
||||
lv_disp_rotation_t rotation = lv_disp_get_rotation(lvgl_disp);
|
||||
rotation++;
|
||||
if (rotation > LV_DISPLAY_ROTATION_270) {
|
||||
if (rotation > LV_DISPLAY_ROTATION_270)
|
||||
{
|
||||
rotation = LV_DISPLAY_ROTATION_0;
|
||||
}
|
||||
|
||||
/* LCD HW rotation */
|
||||
lv_disp_set_rotation(lvgl_disp, rotation);
|
||||
lvgl_port_unlock();
|
||||
}
|
||||
|
||||
static void app_main_display(void)
|
||||
@ -310,6 +308,10 @@ lv_subject_t tempIntSubj;
|
||||
lv_subject_t tempExtSubj;
|
||||
lv_subject_t hauteurCuveSubj;
|
||||
lv_subject_t hauteurCuveEvolSubj;
|
||||
lv_subject_t tempD1Subj;
|
||||
lv_subject_t tempD2Subj;
|
||||
lv_subject_t tempD3Subj;
|
||||
lv_subject_t *tmpSubj[3] = {&tempD1Subj, &tempD2Subj, &tempD3Subj};
|
||||
|
||||
char *upEvent = "monter";
|
||||
char *downEvent = "descendre";
|
||||
@ -346,7 +348,146 @@ static void event_handler(lv_event_t *e)
|
||||
break;
|
||||
}
|
||||
}
|
||||
LV_IMAGE_DECLARE(p1j);
|
||||
LV_IMAGE_DECLARE(p2j);
|
||||
LV_IMAGE_DECLARE(p3j);
|
||||
LV_IMAGE_DECLARE(p14j);
|
||||
LV_IMAGE_DECLARE(p24j);
|
||||
LV_IMAGE_DECLARE(p25j);
|
||||
LV_IMAGE_DECLARE(p26j);
|
||||
LV_IMAGE_DECLARE(p27j);
|
||||
LV_IMAGE_DECLARE(p29j);
|
||||
|
||||
static void weatherdata_obs_cb(lv_observer_t *observer, lv_subject_t *subject)
|
||||
{
|
||||
// Retrieve weatherdata
|
||||
struct meteoforecast_data *data = subject->value.pointer;
|
||||
char buff[40] = {};
|
||||
// sprintf(buff,"%s %.1f %.1f", data->previsions.desc, data->previsions.min, data->previsions.max);
|
||||
lv_obj_t *parent = (lv_obj_t *)(observer->target);
|
||||
lv_obj_t *desc_icon = lv_obj_get_child(parent, 0);
|
||||
lv_obj_t *temps = lv_obj_get_child(parent, 1);
|
||||
if (strcmp(data->previsions.icon, "p1j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p1j);
|
||||
}else if (strcmp(data->previsions.icon, "p2j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p2j);
|
||||
}else if (strcmp(data->previsions.icon, "p3j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p3j);
|
||||
}else if (strcmp(data->previsions.icon, "p14j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p14j);
|
||||
}else if (strcmp(data->previsions.icon, "p24j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p24j);
|
||||
}else if (strcmp(data->previsions.icon, "p25j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p25j);
|
||||
}else if (strcmp(data->previsions.icon, "p26j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p26j);
|
||||
}else if (strcmp(data->previsions.icon, "p27j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p27j);
|
||||
}else if (strcmp(data->previsions.icon, "p29j") == 0)
|
||||
{
|
||||
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p29j);
|
||||
}
|
||||
lv_label_set_text(lv_obj_get_child(desc_icon, 1), data->previsions.desc);
|
||||
lv_label_set_text_fmt(lv_obj_get_child(temps, 0), "%.1f°C", data->previsions.max);
|
||||
lv_label_set_text_fmt(lv_obj_get_child(temps, 1), "%.1f°C", data->previsions.min);
|
||||
}
|
||||
|
||||
static lv_style_t style_container;
|
||||
|
||||
struct weatherDay_fragment_t
|
||||
{
|
||||
/* IMPORTANT: don't miss this part */
|
||||
lv_fragment_t base;
|
||||
/* States, object references and data fields for this fragment */
|
||||
int dayNr;
|
||||
const char *title;
|
||||
float minTemp;
|
||||
float maxTemp;
|
||||
};
|
||||
static void weatherDay_fragment_ctor(lv_fragment_t *self, int args)
|
||||
{
|
||||
((struct weatherDay_fragment_t *)self)->dayNr = args;
|
||||
}
|
||||
|
||||
static lv_style_t style_font_16;
|
||||
static lv_style_t style_font_12;
|
||||
|
||||
static lv_obj_t *weatherDay_fragment_create_obj(lv_fragment_t *self, lv_obj_t *parent)
|
||||
{
|
||||
lvgl_port_lock(0);
|
||||
|
||||
lv_obj_t *sup = lv_obj_create(parent);
|
||||
lv_obj_set_flex_flow(sup, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_add_style(sup, &style_container, 0);
|
||||
lv_obj_set_size(sup, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
|
||||
|
||||
static lv_style_t no_padding;
|
||||
lv_style_init(&no_padding);
|
||||
lv_style_set_pad_all(&no_padding, 0);
|
||||
|
||||
lv_obj_t *container = lv_obj_create(sup);
|
||||
lv_obj_set_flex_flow(container, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_flex_align(container,LV_FLEX_ALIGN_CENTER,LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
lv_obj_add_style(container, &no_padding, 0);
|
||||
lv_obj_set_width(container, 100);
|
||||
lv_obj_set_height(container, 90);
|
||||
|
||||
lv_obj_t *img1 = lv_image_create(container);
|
||||
lv_obj_add_style(img1, &no_padding, 0);
|
||||
lv_obj_set_style_bg_color(img1,lv_palette_lighten(LV_PALETTE_BLUE_GREY, 4),0);
|
||||
lv_image_set_inner_align(img1, LV_IMAGE_ALIGN_TOP_LEFT);
|
||||
lv_image_set_offset_y(img1, -8);
|
||||
lv_image_set_offset_x(img1, -8);
|
||||
lv_obj_set_size(img1,40,40);
|
||||
lv_image_set_src(img1, &p1j);
|
||||
//lv_obj_set_style_border_width(img1,2,0);
|
||||
//lv_obj_set_style_border_color(img1, lv_palette_main(LV_PALETTE_BLUE_GREY), 0);
|
||||
lv_obj_align(img1, LV_ALIGN_CENTER, 0, 0);
|
||||
|
||||
lv_obj_t *desc = lv_label_create(container);
|
||||
lv_obj_add_style(desc, &style_font_12, 0);
|
||||
|
||||
lv_obj_t *container2 = lv_obj_create(sup);
|
||||
lv_obj_set_width(container2, LV_SIZE_CONTENT);
|
||||
lv_obj_set_height(container2, 90);
|
||||
lv_obj_add_style(container2, &no_padding, 0);
|
||||
lv_obj_set_style_pad_top(container2,5,0);
|
||||
lv_obj_set_style_pad_bottom(container2,5,0);
|
||||
lv_obj_set_flex_flow(container2, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_flex_align(container2, LV_FLEX_ALIGN_SPACE_BETWEEN, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START);
|
||||
|
||||
static lv_style_t tempStyle;
|
||||
lv_style_init(&tempStyle);
|
||||
//lv_style_set_text_font(&tempStyle,¬omedium16);
|
||||
|
||||
lv_obj_t *max = lv_label_create(container2);
|
||||
lv_obj_add_style(max, &tempStyle,0);
|
||||
lv_obj_add_style(max, &style_font_16, 0);
|
||||
lv_obj_set_style_text_color(max,lv_color_hex(0xFF0000),0);
|
||||
lv_obj_t *min = lv_label_create(container2);
|
||||
lv_obj_add_style(min, &tempStyle,0);
|
||||
lv_obj_add_style(min, &style_font_16, 0);
|
||||
lv_obj_set_style_text_color(min,lv_color_hex(0x3000FF),0);
|
||||
lv_subject_add_observer_obj(tmpSubj[((struct weatherDay_fragment_t *)self)->dayNr], weatherdata_obs_cb, sup, NULL);
|
||||
lvgl_port_unlock();
|
||||
return container;
|
||||
}
|
||||
const lv_fragment_class_t sample_cls = {
|
||||
/* Initialize something needed */
|
||||
.constructor_cb = weatherDay_fragment_ctor,
|
||||
/* Create view objects */
|
||||
.create_obj_cb = weatherDay_fragment_create_obj,
|
||||
/* IMPORTANT: size of your fragment struct */
|
||||
.instance_size = sizeof(struct weatherDay_fragment_t),
|
||||
};
|
||||
|
||||
void draw_ihm()
|
||||
{
|
||||
@ -354,21 +495,30 @@ void draw_ihm()
|
||||
lv_subject_init_string(&tempIntSubj, tempIntStr, NULL, 6, "--");
|
||||
lv_subject_init_string(&hauteurCuveSubj, hauteurCuveStr, NULL, 9, "--");
|
||||
lv_subject_init_string(&hauteurCuveEvolSubj, hauteurCuveEvolStr, NULL, 9, "--");
|
||||
lv_subject_init_pointer(&tempD1Subj, "--");
|
||||
lv_subject_init_pointer(&tempD2Subj, "--");
|
||||
lv_subject_init_pointer(&tempD3Subj, "--");
|
||||
|
||||
// keys.clear();
|
||||
lv_obj_clean(lv_scr_act());
|
||||
|
||||
static lv_style_t style_btn;
|
||||
lv_style_init(&style_btn);
|
||||
|
||||
lv_style_init(&style_font_16);
|
||||
lv_style_set_text_font(&style_font_16, &montserrat_medium_18);
|
||||
|
||||
lv_style_init(&style_font_12);
|
||||
lv_style_set_text_font(&style_font_12, &montserrat_medium_12);
|
||||
|
||||
// lv_style_set_bg_color(&style_btn, lv_color_hex(0x115588));
|
||||
// lv_style_set_bg_opa(&style_btn, LV_OPA_50);
|
||||
// lv_style_set_border_width(&style_btn, 2);
|
||||
// lv_style_set_border_color(&style_btn, lv_color_black());
|
||||
lv_style_set_width(&style_btn, 180);
|
||||
lv_style_set_height(&style_btn, 180);
|
||||
lv_style_set_width(&style_btn, 80);
|
||||
lv_style_set_height(&style_btn, 100);
|
||||
|
||||
// Un style pour les conteneurs (température, cuve ...)
|
||||
static lv_style_t style_container;
|
||||
lv_style_init(&style_container);
|
||||
lv_style_set_pad_all(&style_container, 5);
|
||||
// lv_style_set_height(&style_container,LV_SIZE_CONTENT);
|
||||
@ -391,19 +541,28 @@ void draw_ihm()
|
||||
lv_obj_set_size(cont_col, 250, 480);
|
||||
lv_obj_align(cont_col, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
lv_obj_set_flex_flow(cont_col, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_flex_align(cont_col,LV_FLEX_ALIGN_CENTER,LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
|
||||
/*Create a container with COLUMN flex direction*/
|
||||
lv_obj_t *cont_col2 = lv_obj_create(lv_screen_active());
|
||||
lv_obj_set_style_pad_all(cont_col2, 5, 0);
|
||||
lv_obj_set_flex_align(cont_col2, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
|
||||
/*Create a container with COLUMN flex direction*/
|
||||
lv_obj_t *cont_col3 = lv_obj_create(lv_screen_active());
|
||||
lv_obj_set_style_pad_all(cont_col3, 5, 0);
|
||||
lv_obj_set_size(cont_col3, 300, 480);
|
||||
lv_obj_set_flex_flow(cont_col3, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_flex_align(cont_col3, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
|
||||
lv_obj_set_height(cont_col2, 480);
|
||||
lv_obj_set_width(cont_col2, LV_SIZE_CONTENT);
|
||||
lv_obj_align_to(cont_col2, cont_col, LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
|
||||
lv_obj_set_flex_flow(cont_col2, LV_FLEX_FLOW_COLUMN);
|
||||
|
||||
lv_obj_t *label1 = lv_label_create(cont_col);
|
||||
lv_label_set_text(label1, "Temperatures");
|
||||
lv_obj_set_style_text_font(label1, &montserrat_medium_18,0);
|
||||
lv_label_set_text(label1, "Températures");
|
||||
lv_obj_set_pos(label1, 0, 0);
|
||||
|
||||
/*Create a container with COLUMN flex direction*/
|
||||
@ -463,17 +622,48 @@ void draw_ihm()
|
||||
lv_obj_center(label);
|
||||
|
||||
/*Create a chart*/
|
||||
/*
|
||||
chart = lv_chart_create(lv_screen_active());
|
||||
lv_obj_set_size(chart, 200, 200);
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_LINE); /*Show lines and points too*/
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_LINE); //Show lines and points too
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 130);
|
||||
ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_PRIMARY_Y);;
|
||||
ser1->y_points[0] = lv_rand(0, 40);
|
||||
ser1->y_points[1] = lv_rand(0, 40);
|
||||
ser1->y_points[2] = lv_rand(0, 40);
|
||||
lv_chart_refresh(chart); //Required after direct set
|
||||
*/
|
||||
/*
|
||||
lv_obj_t *tempD1Cont = lv_obj_create(cont_col3);
|
||||
lv_obj_add_style(tempD1Cont, &style_container, 0);
|
||||
lv_obj_t *tempD1 = lv_label_create(tempD1Cont);
|
||||
lv_obj_add_style(tempD1, &style_lbvValue, 0);
|
||||
lv_label_bind_text(tempD1, &tempD1Subj, "%i");
|
||||
lv_subject_add_observer_obj(&tempD1Subj, weatherdata_obs_cb, tempD1, NULL);
|
||||
lv_obj_t *tempD2Cont = lv_obj_create(cont_col3);
|
||||
lv_obj_add_style(tempD2Cont, &style_container, 0);
|
||||
lv_obj_t *tempD2 = lv_label_create(tempD2Cont);
|
||||
lv_obj_add_style(tempD2, &style_lbvValue, 0);
|
||||
lv_label_bind_text(tempD2, &tempD2Subj, "%i");
|
||||
lv_subject_add_observer_obj(&tempD2Subj, weatherdata_obs_cb, tempD2, NULL);
|
||||
|
||||
lv_chart_refresh(chart); /*Required after direct set*/
|
||||
lv_obj_t *tempD3Cont = lv_obj_create(cont_col3);
|
||||
lv_obj_add_style(tempD3Cont, &style_container, 0);
|
||||
lv_obj_t *tempD3 = lv_label_create(tempD3Cont);
|
||||
lv_obj_add_style(tempD3, &style_lbvValue, 0);
|
||||
lv_label_bind_text(tempD3, &tempD3Subj, "%i");
|
||||
lv_subject_add_observer_obj(&tempD3Subj, weatherdata_obs_cb, tempD3, NULL);
|
||||
*/
|
||||
lv_fragment_manager_t *manager = lv_fragment_manager_create(NULL);
|
||||
|
||||
lv_fragment_t *fragment = lv_fragment_create(&sample_cls, 0);
|
||||
lv_fragment_manager_add(manager, fragment, &cont_col3);
|
||||
|
||||
fragment = lv_fragment_create(&sample_cls, 1);
|
||||
lv_fragment_manager_add(manager, fragment, &cont_col3);
|
||||
|
||||
fragment = lv_fragment_create(&sample_cls, 2);
|
||||
lv_fragment_manager_add(manager, fragment, &cont_col3);
|
||||
}
|
||||
|
||||
/* The examples use WiFi configuration that you can set via project configuration menu
|
||||
@ -527,18 +717,26 @@ static int s_retry_num = 0;
|
||||
static void wifi_event_handler(void *arg, esp_event_base_t event_base,
|
||||
int32_t event_id, void *event_data)
|
||||
{
|
||||
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
|
||||
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
|
||||
{
|
||||
esp_wifi_connect();
|
||||
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
|
||||
if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
|
||||
}
|
||||
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
|
||||
{
|
||||
if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY)
|
||||
{
|
||||
esp_wifi_connect();
|
||||
s_retry_num++;
|
||||
ESP_LOGI(TAG, "retry to connect to the AP");
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
|
||||
}
|
||||
ESP_LOGI(TAG, "connect to the AP fail");
|
||||
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
|
||||
}
|
||||
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
|
||||
{
|
||||
ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;
|
||||
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
|
||||
s_retry_num = 0;
|
||||
@ -600,40 +798,51 @@ void wifi_init_sta(void)
|
||||
|
||||
/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
|
||||
* happened. */
|
||||
if (bits & WIFI_CONNECTED_BIT) {
|
||||
if (bits & WIFI_CONNECTED_BIT)
|
||||
{
|
||||
ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
|
||||
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
|
||||
} else if (bits & WIFI_FAIL_BIT) {
|
||||
}
|
||||
else if (bits & WIFI_FAIL_BIT)
|
||||
{
|
||||
ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
|
||||
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
ESP_LOGE(TAG, "UNEXPECTED EVENT");
|
||||
}
|
||||
}
|
||||
|
||||
static void log_error_if_nonzero(const char *message, int error_code)
|
||||
{
|
||||
if (error_code != 0) {
|
||||
if (error_code != 0)
|
||||
{
|
||||
ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code);
|
||||
}
|
||||
}
|
||||
|
||||
void splitIt(char * payload, unsigned int length, int * datas){
|
||||
void splitIt(char *payload, unsigned int length, float *datas)
|
||||
{
|
||||
char *sep = ",";
|
||||
char *token;
|
||||
char *saveptr1;
|
||||
|
||||
token = strtok_r(payload, sep, &saveptr1);
|
||||
datas[0]=atoi(token);
|
||||
datas[0] = atoff(token);
|
||||
ESP_LOGE(TAG,"%f",datas[0]);
|
||||
|
||||
token = strtok_r(NULL, sep, &saveptr1);
|
||||
datas[1]=atoi(token);
|
||||
datas[1] = atoff(token);
|
||||
ESP_LOGE(TAG,"%f",datas[1]);
|
||||
|
||||
token = strtok_r(NULL, sep, &saveptr1);
|
||||
datas[2]=atoi(token);
|
||||
datas[2] = atoff(token);
|
||||
ESP_LOGE(TAG,"%f",datas[2]);
|
||||
|
||||
token = strtok_r(NULL, sep, &saveptr1);
|
||||
datas[3]=atoi(token);
|
||||
datas[3] = atoff(token);
|
||||
ESP_LOGE(TAG,"%f",datas[3]);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -652,7 +861,8 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_
|
||||
esp_mqtt_event_handle_t event = event_data;
|
||||
esp_mqtt_client_handle_t client = event->client;
|
||||
int msg_id;
|
||||
switch ((esp_mqtt_event_id_t)event_id) {
|
||||
switch ((esp_mqtt_event_id_t)event_id)
|
||||
{
|
||||
case MQTT_EVENT_CONNECTED:
|
||||
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
||||
msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0);
|
||||
@ -695,27 +905,35 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_
|
||||
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
||||
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
|
||||
printf("DATA=%.*s\r\n", event->data_len, event->data);
|
||||
if(strncmp(event->topic, topicTempExt,27)==0){
|
||||
if (strncmp(event->topic, topicTempExt, 27) == 0)
|
||||
{
|
||||
lvgl_port_lock(0);
|
||||
lv_subject_copy_string(&tempExtSubj, event->data);
|
||||
lvgl_port_unlock();
|
||||
}else if(strncmp(event->topic, topicTempInt,27)==0){
|
||||
}
|
||||
else if (strncmp(event->topic, topicTempInt, 27) == 0)
|
||||
{
|
||||
lvgl_port_lock(0);
|
||||
lv_subject_copy_string(&tempIntSubj, event->data);
|
||||
lvgl_port_unlock();
|
||||
}else if(strncmp(event->topic, topicHauteurCuveEvol,22)==0){
|
||||
int datas[4] ={};
|
||||
}
|
||||
else if (strncmp(event->topic, topicHauteurCuveEvol, 22) == 0)
|
||||
{
|
||||
/* float datas[4] = {};
|
||||
splitIt(event->data, event->data_len, datas);
|
||||
ser1->y_points[0]=130-datas[0];
|
||||
ser1->y_points[1]=130-datas[1];
|
||||
ser1->y_points[2]=130-datas[2];
|
||||
ser1->y_points[3]=130-datas[3];
|
||||
ser1->y_points[0] = 130 - (int)datas[0];
|
||||
ser1->y_points[1] = 130 - (int)datas[1];
|
||||
ser1->y_points[2] = 130 - (int)datas[2];
|
||||
ser1->y_points[3] = 130 - (int)datas[3];
|
||||
lvgl_port_lock(0);
|
||||
lv_chart_refresh(chart);
|
||||
lvgl_port_unlock();
|
||||
*/
|
||||
|
||||
// lv_subject_copy_string(&hauteurCuveEvolSubj, event->data);
|
||||
}else if(strncmp(event->topic, topicHauteurCuve,18)==0){
|
||||
}
|
||||
else if (strncmp(event->topic, topicHauteurCuve, 18) == 0)
|
||||
{
|
||||
lvgl_port_lock(0);
|
||||
char *datas = NULL;
|
||||
datas = (char *)malloc(event->data_len * sizeof(char));
|
||||
@ -723,18 +941,20 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_
|
||||
datas[event->data_len] = '\0';
|
||||
lv_subject_copy_string(&hauteurCuveSubj, datas);
|
||||
lvgl_port_unlock();
|
||||
}else{
|
||||
}
|
||||
else
|
||||
{
|
||||
ESP_LOGE(TAG, "None match :-(");
|
||||
}
|
||||
break;
|
||||
case MQTT_EVENT_ERROR:
|
||||
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|
||||
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
|
||||
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT)
|
||||
{
|
||||
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
|
||||
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
|
||||
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
|
||||
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -747,19 +967,24 @@ static void mqtt_app_start(void)
|
||||
{
|
||||
esp_mqtt_client_config_t mqtt_cfg = {
|
||||
.broker.address.uri = "mqtt://192.168.0.10",
|
||||
};
|
||||
.network.timeout_ms = 1000};
|
||||
#if CONFIG_BROKER_URL_FROM_STDIN
|
||||
char line[128];
|
||||
|
||||
if (strcmp(mqtt_cfg.broker.address.uri, "FROM_STDIN") == 0) {
|
||||
if (strcmp(mqtt_cfg.broker.address.uri, "FROM_STDIN") == 0)
|
||||
{
|
||||
int count = 0;
|
||||
printf("Please enter url of mqtt broker\n");
|
||||
while (count < 128) {
|
||||
while (count < 128)
|
||||
{
|
||||
int c = fgetc(stdin);
|
||||
if (c == '\n') {
|
||||
if (c == '\n')
|
||||
{
|
||||
line[count] = '\0';
|
||||
break;
|
||||
} else if (c > 0 && c < 127) {
|
||||
}
|
||||
else if (c > 0 && c < 127)
|
||||
{
|
||||
line[count] = c;
|
||||
++count;
|
||||
}
|
||||
@ -767,7 +992,9 @@ static void mqtt_app_start(void)
|
||||
}
|
||||
mqtt_cfg.broker.address.uri = line;
|
||||
printf("Broker url: %s\n", line);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
ESP_LOGE(TAG, "Configuration mismatch: wrong broker url");
|
||||
abort();
|
||||
}
|
||||
@ -779,6 +1006,31 @@ static void mqtt_app_start(void)
|
||||
esp_mqtt_client_start(client);
|
||||
}
|
||||
|
||||
void weather_data_retreived(struct meteoforecast_data datas[3])
|
||||
{
|
||||
// struct meteoforecast_data* weather = (meteoforecast_data*) args;
|
||||
struct meteoforecast_data j1 = {};
|
||||
ESP_LOGE(TAG, "debut debug");
|
||||
printf("%i\n", datas[0].datetime);
|
||||
printf("%s\n", datas[0].previsions.desc);
|
||||
printf("%f\n", datas[0].previsions.min);
|
||||
printf("%i\n", datas[1].datetime);
|
||||
printf("%s\n", datas[1].previsions.desc);
|
||||
printf("%f\n", datas[1].previsions.min);
|
||||
printf("%i\n", datas[2].datetime);
|
||||
printf("%s\n", datas[2].previsions.desc);
|
||||
printf("%f\n", datas[2].previsions.min);
|
||||
ESP_LOGE(TAG, "fin debug");
|
||||
|
||||
if (lvgl_port_lock(0))
|
||||
{
|
||||
lv_subject_set_pointer(&tempD1Subj, &datas[0]);
|
||||
lv_subject_set_pointer(&tempD2Subj, &datas[1]);
|
||||
lv_subject_set_pointer(&tempD3Subj, &datas[2]);
|
||||
lvgl_port_unlock();
|
||||
}
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
/* LCD HW initialization */
|
||||
@ -792,7 +1044,8 @@ void app_main(void)
|
||||
|
||||
// Initialize NVS
|
||||
esp_err_t ret = nvs_flash_init();
|
||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
|
||||
{
|
||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||
ret = nvs_flash_init();
|
||||
}
|
||||
@ -806,6 +1059,9 @@ void app_main(void)
|
||||
wifi_init_sta();
|
||||
mqtt_app_start();
|
||||
|
||||
initialise_weather_data_retrieval(60000);
|
||||
on_weather_data_retrieval(weather_data_retreived);
|
||||
ESP_LOGW(TAG, "Weather data retrieval initialized");
|
||||
|
||||
/* Show LVGL objects */
|
||||
lvgl_port_lock(0);
|
||||
|
||||
37
sdkconfig
@ -675,6 +675,14 @@ CONFIG_ESP_EVENT_POST_FROM_ISR=y
|
||||
CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
|
||||
# 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
|
||||
#
|
||||
@ -1464,9 +1472,21 @@ CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
|
||||
# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
|
||||
# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED 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_OUTBOX_DATA_ON_EXTERNAL_MEMORY is not set
|
||||
# CONFIG_MQTT_CUSTOM_OUTBOX is not set
|
||||
CONFIG_MQTT_OUTBOX_EXPIRED_TIMEOUT_MS=30000
|
||||
# end of ESP-MQTT Configurations
|
||||
|
||||
#
|
||||
@ -1921,22 +1941,11 @@ CONFIG_LV_USE_GRID=y
|
||||
# Others
|
||||
#
|
||||
# CONFIG_LV_USE_SNAPSHOT is not set
|
||||
CONFIG_LV_USE_SYSMON=y
|
||||
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_SYSMON is not set
|
||||
# CONFIG_LV_USE_MONKEY is not set
|
||||
# CONFIG_LV_USE_PROFILER 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_IME_PINYIN is not set
|
||||
# CONFIG_LV_USE_FILE_EXPLORER is not set
|
||||
|
||||