This commit is contained in:
jasinco 2025-09-10 20:44:58 +08:00
commit f0839115c9
12 changed files with 29566 additions and 0 deletions

2
.clangd Normal file
View file

@ -0,0 +1,2 @@
CompileFlags:
CompilationDatabase: builddir/

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
builddir
subprojects/*
!subprojects/*.wrap

5
README.md Normal file
View file

@ -0,0 +1,5 @@
# Definition
Tag are AS IS an e-paper which displays price, ... etc
Peer are AS IS an remote ESP32 that control a tag or tags

2
justfile Normal file
View file

@ -0,0 +1,2 @@
build:
meson compile -C ./builddir/

35
meshtalos.cpp Normal file
View file

@ -0,0 +1,35 @@
#include <meshtalos.hpp>
namespace meshtalos {
extern "C" {
static void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_HTTP_MSG) { // New HTTP request received
struct mg_http_message *hm =
(struct mg_http_message *)ev_data; // Parsed HTTP request
if (mg_match(hm->uri, mg_str("/api/hello"), NULL)) { // REST API call?
mg_http_reply(c, 200, "", "{%m:%d}\n", MG_ESC("status"),
1); // Yes. Respond JSON
} else {
struct mg_http_serve_opts opts = {.root_dir = ".", .fs = &mg_fs_posix};
mg_http_serve_dir(c, hm, &opts); // For all other URLs, Serve static files
}
}
}
}
Meshtalos::Meshtalos(lfs_t *lfs) : _lfs(lfs) {
number = 6;
mg_mgr_init(&_mgr);
}
void Meshtalos::listen() {
mg_http_listen(&_mgr, ("http://" + listen_address).c_str(), ev_handler, NULL);
for (;;) {
mg_mgr_poll(&_mgr, 1000);
}
}
int Meshtalos::get_number() const { return number; }
} // namespace meshtalos

38
meshtalos.hpp Normal file
View file

@ -0,0 +1,38 @@
#pragma once
#include <string>
#if defined _WIN32 || defined __CYGWIN__
#ifdef BUILDING_MESHTALOS
#define MESHTALOS_PUBLIC __declspec(dllexport)
#else
#define MESHTALOS_PUBLIC __declspec(dllimport)
#endif
#else
#ifdef BUILDING_MESHTALOS
#define MESHTALOS_PUBLIC __attribute__((visibility("default")))
#else
#define MESHTALOS_PUBLIC
#endif
#endif
#include "./mongoose.h"
#include <lfs.h>
namespace meshtalos {
// Ciallo(∠・ω< )⌒☆
class MESHTALOS_PUBLIC Meshtalos {
public:
std::string listen_address = "0.0.0.0:8080";
lfs_t *_lfs;
Meshtalos(lfs_t *lfs = NULL);
void listen();
int get_number() const;
private:
struct mg_mgr _mgr;
int number;
};
} // namespace meshtalos

11
meshtalos_test.cpp Normal file
View file

@ -0,0 +1,11 @@
#include "./meshtalos.hpp"
#include <iostream>
int main(int argc, char **argv) {
if (argc != 1) {
std::cout << argv[0] << " takes no arguments.\n";
return 1;
}
meshtalos::Meshtalos c;
c.listen();
}

52
meson.build Normal file
View file

@ -0,0 +1,52 @@
project(
'MESHTalos',
['cpp','c'],
version : '0.1',
meson_version : '>= 1.3.0',
default_options : ['warning_level=3', 'cpp_std=c++20', 'c_std=gnu11'],
)
dependencies = [
dependency('littlefs')
]
# These arguments are only used to build the shared library
# not the executables that use the library.
lib_args = ['-DBUILDING_MESHTALOS']
lib = library(
'meshtalos',
'meshtalos.cpp',
'./mongoose.c',
install : true,
cpp_shared_args : lib_args,
gnu_symbol_visibility : 'hidden',
dependencies : dependencies,
)
test_exe = executable(
'meshtalos_test',
'meshtalos_test.cpp',
dependencies : dependencies,
link_with : lib,
)
test('meshtalos', test_exe)
# Make this library usable as a Meson subproject.
meshtalos_dep = declare_dependency(
include_directories : include_directories('.'),
dependencies : dependencies,
link_with : lib,
)
meson.override_dependency('MESHTalos', meshtalos_dep)
# Make this library usable from the system's
# package manager.
install_headers('meshtalos.hpp', subdir : 'meshtalos')
pkg_mod = import('pkgconfig')
pkg_mod.generate(
lib,
description : 'Meson sample project.',
subdirs : 'meshtalos',
)

25608
mongoose.c Normal file

File diff suppressed because it is too large Load diff

3781
mongoose.h Normal file

File diff suppressed because it is too large Load diff

15
storage.hpp Normal file
View file

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
#include <vector>
struct TagInfo {
char *name;
uint32_t price;
int32_t sale; // unit is percent, rounded
};
struct Peer {
char peer_id[6];
uint64_t last_online;
std::vector<TagInfo> tags;
};

13
subprojects/littlefs.wrap Normal file
View file

@ -0,0 +1,13 @@
[wrap-file]
directory = littlefs-2.11.0
source_url = https://github.com/littlefs-project/littlefs/archive/refs/tags/v2.11.0.tar.gz
source_filename = littlefs-2.11.0.tar.gz
source_hash = 54ed6382d75cbd4898fa89ddc0db7bf82abadfd8b209e12950cb10a05a6dc424
patch_filename = littlefs_2.11.0-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/littlefs_2.11.0-1/get_patch
patch_hash = a6e963fda9547db589e9ac7b5fcc6a5fd3553a59efe32ac7053e2d0a1053331b
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/littlefs_2.11.0-1/littlefs-2.11.0.tar.gz
wrapdb_version = 2.11.0-1
[provide]
littlefs = littlefs_dep