Skip to content

Commit

Permalink
Merge pull request #89 from project-mahiwa/feat/wifi
Browse files Browse the repository at this point in the history
feat Wifi機能の実装,mahiwa対応,数値系printの実装
  • Loading branch information
usuyuki authored Dec 17, 2023
2 parents aee1b2f + 8585a4f commit 45104ea
Show file tree
Hide file tree
Showing 17 changed files with 112 additions and 7,431 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ jobs:
- name: Install PlatformIO Core
run: pip install --upgrade platformio

- name: copy user.h (gitignoreしているのでコピーして作る)
run: cp ./user_h_for_ci ./src/wasm/user.h

- name: ビルドチェック
run: |
# esp32系(Xtensa,esp32c3)とpico系で最低限チェック
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/statistic-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ jobs:
- name: Install PlatformIO Core
run: pip install --upgrade platformio

- name: copy user.h (gitignoreしているのでコピーして作る)
run: cp ./user_h_for_ci ./src/wasm/user.h

- name: 静的解析(cppcheck)
run: |
# esp32系とpico系で最低限チェック
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,8 @@ build
*.exe
*.out
*.app


# 環境パスが入って毎回diffるので対象外
.vscode/c_cpp_properties.json
.vscode/launch.json
503 changes: 0 additions & 503 deletions .vscode/c_cpp_properties.json

This file was deleted.

44 changes: 0 additions & 44 deletions .vscode/launch.json

This file was deleted.

5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
"*.tcc": "cpp",
"random": "cpp",
"algorithm": "cpp",
"numeric": "cpp"
"numeric": "cpp",
"cmath": "cpp",
"cinttypes": "cpp",
"cstdlib": "cpp"
}
}
13 changes: 10 additions & 3 deletions src/lib/roader/wasm-roader.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include <lib/roader/wasm-roader.hpp>
// wasmファイルをヘッダファイルにしたもの(ヘッダファイルでなくcpp内で読むこと @see https://github.com/project-mahiwa/mahiwa-backend/issues/49 )
#include <wasm/rust-serial-print-and-arduino-delay.hpp>
#include <wasm/user.h>
// cppcheck-suppress unusedFunction
void wasm_task(void *)
{
Expand All @@ -18,8 +18,7 @@ void wasm_task(void *)

IM3Module module;
// tinygo_wasi_wasm, tinygo_wasi_wasm_lenはxxdで出せる
M3Result result = m3_ParseModule(env, &module, rust_hello_world_wasm,
rust_hello_world_wasm_len);
M3Result result = m3_ParseModule(env, &module, user_wasm, user_wasm_len);
if (result)
{
wasm3_error_printer("m3_ParseModule", result);
Expand Down Expand Up @@ -73,4 +72,12 @@ void wasm_task(void *)
Serial.println(info.line);
}
}

Serial.println("Project Mahiwa : WebAssembly done");
// 止めるとpanicするので正常に終わった後はループし続けさせる
while (true)
{
delay(10000);
Serial.println("WebAssembly already done. if you want to re run, please restart.");
}
}
5 changes: 3 additions & 2 deletions src/lib/roader/wasm-roader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
// wasm3のexampleの値に従う
// m3_NewRuntimeの第2引数
// https://github.com/wasm3/wasm3-arduino/blob/main/src/m3_env.c#L170
#define WASM_STACK_SLOTS 1024
#define NATIVE_STACK_SIZE (16 * 1024)
#define WASM_STACK_SLOTS (32 * 2024)

#define NATIVE_STACK_SIZE (32 * 2024)

void wasm_task(void *);
21 changes: 13 additions & 8 deletions src/lib/wasm-functions/arduino/arduino.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ m3ApiRawFunction(m3_max)
m3ApiGetArg(long, y);
m3ApiReturnType(long);

Serial.print("max:");
Serial.println(max(x, y));
m3ApiReturn(max(x, y));

m3ApiSuccess();
Expand Down Expand Up @@ -320,25 +322,28 @@ M3Result mahiwa_LinkArduino(IM3Runtime runtime)
/**
* Random Numbers
*/
m3_LinkRawFunction(module, arduino, "random", "I()", &m3_random);
// randomがWASIと競合するらしく,TinyGoではオーバーライドされて壊れるので,名前を変える
m3_LinkRawFunction(module, arduino, "randomArduino", "I()", &m3_random);
m3_LinkRawFunction(module, arduino, "randomSeed", "v(I)", &m3_randomSeed);
/**
* Trigonometry
*/
m3_LinkRawFunction(module, arduino, "cos", "F(i)", &m3_cos);
m3_LinkRawFunction(module, arduino, "sin", "F(i)", &m3_sin);
m3_LinkRawFunction(module, arduino, "tan", "F(i)", &m3_tan);
m3_LinkRawFunction(module, arduino, "cos", "F(F)", &m3_cos);
m3_LinkRawFunction(module, arduino, "sin", "F(F)", &m3_sin);
m3_LinkRawFunction(module, arduino, "tan", "F(F)", &m3_tan);
/**
* Math
*/
m3_LinkRawFunction(module, arduino, "abs", "i(i)", &m3_abs);
m3_LinkRawFunction(module, arduino, "constrain", "i(iii)", &m3_constrain);
m3_LinkRawFunction(module, arduino, "map", "I(IIIII)", &m3_map);
m3_LinkRawFunction(module, arduino, "max", "I(I)", &m3_max);
m3_LinkRawFunction(module, arduino, "min", "I(I)", &m3_min);
m3_LinkRawFunction(module, arduino, "pow", "F(I)", &m3_pow);
m3_LinkRawFunction(module, arduino, "max", "I(II)", &m3_max);
m3_LinkRawFunction(module, arduino, "min", "I(II)", &m3_min);
// powがWASIと競合するらしく,TinyGoではオーバーライドされて壊れるので,名前を変える
m3_LinkRawFunction(module, arduino, "powArduino", "F(II)", &m3_pow);
m3_LinkRawFunction(module, arduino, "sq", "i(i)", &m3_sq);
m3_LinkRawFunction(module, arduino, "sqrt", "F(i)", &m3_sqrt);
// sqrtがWASIと競合するらしく,TinyGoではオーバーライドされて壊れるので,名前を変える
m3_LinkRawFunction(module, arduino, "sqrtArduino", "F(i)", &m3_sqrt);
/**
* analog I/O
*/
Expand Down
32 changes: 32 additions & 0 deletions src/lib/wasm-functions/arduino/serial.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <lib/wasm-functions/arduino/serial.hpp>
// printlnはprintと改行をライブラリで組み合わせ作るようにする
m3ApiRawFunction(m3_print)
{
// cppcheck-suppress cstyleCast
Expand All @@ -12,12 +13,43 @@ m3ApiRawFunction(m3_print)
m3ApiSuccess();
}

// 本当はprintNumでintもfloatも実装したいが,Cには複合型やオーバーロードの仕組みがない
m3ApiRawFunction(m3_printInt)
{
m3ApiGetArg(int, num);
Serial.print(num);
m3ApiSuccess();
}
m3ApiRawFunction(m3_printLong)
{
m3ApiGetArg(long, num);
Serial.print(num);
m3ApiSuccess();
}
m3ApiRawFunction(m3_printFloat)
{
m3ApiGetArg(float, num);
m3ApiGetArg(uint8_t, format);
Serial.print(num, format);
m3ApiSuccess();
}
m3ApiRawFunction(m3_printDouble)
{
m3ApiGetArg(double, num);
m3ApiGetArg(uint8_t, format);
Serial.print(num, format);
m3ApiSuccess();
}
M3Result mahiwa_LinkSerial(IM3Runtime runtime)
{
IM3Module module = runtime->modules;
const char *serial = "serial";

m3_LinkRawFunction(module, serial, "print", "v(*i)", &m3_print);
m3_LinkRawFunction(module, serial, "printInt", "v(i)", &m3_printInt);
m3_LinkRawFunction(module, serial, "printLong", "v(I)", &m3_printLong);
m3_LinkRawFunction(module, serial, "printFloat", "v(fi)", &m3_printFloat);
m3_LinkRawFunction(module, serial, "printDouble", "v(Fi)", &m3_printDouble);

return m3Err_none;
}
23 changes: 23 additions & 0 deletions src/lib/wasm-functions/mahiwa/wifi/wifi.cpp_
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <lib/wasm-functions/mahiwa/wifi/wifi.hpp>
m3ApiRawFunction(m3_print)
{
// cppcheck-suppress cstyleCast
m3ApiGetArgMem(const uint8_t *, out);
// cppcheck-suppress cstyleCast
m3ApiGetArg(uint32_t, out_len);
byte buff[out_len + 1];
memcpy(buff, out, out_len);
buff[out_len] = '\0';
Serial.print((char *)buff);
m3ApiSuccess();
}

M3Result mahiwa_LinkWifi(IM3Runtime runtime)
{
IM3Module module = runtime->modules;
const char *serial = "wifi";

m3_LinkRawFunction(module, serial, "print", "v(*i)", &m3_print);

return m3Err_none;
}
6 changes: 6 additions & 0 deletions src/lib/wasm-functions/mahiwa/wifi/wifi.hpp_
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#pragma once

#include <m3_env.h>
#include <Arduino.h>

M3Result mahiwa_LinkWifi(IM3Runtime runtime);
7 changes: 6 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@ void setup()
while (!Serial)
{
}
Serial.println(cos(0));

Serial.println("Project Mahiwa started!!!!!");
Serial.println("Project Mahiwa started🎉");
Serial.print("cos(0.0)");
Serial.println(cos(0.0));
Serial.print("max(100,200)");
Serial.println(max(100, 200));
#ifdef ESP32
Serial.println("ESP32 Mode");
// xTaskCreatePinnedToCoreはFreeRTOSの関数
Expand Down
1 change: 1 addition & 0 deletions src/wasm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
user.h
Loading

0 comments on commit 45104ea

Please sign in to comment.