2025-07-03 01:04:37 +02:00
2025-04-26 21:23:40 +02:00
2025-05-03 20:52:01 +02:00
2025-05-03 20:20:15 +02:00
2025-05-03 20:18:49 +02:00
2025-07-03 01:04:37 +02:00
2025-05-03 20:20:15 +02:00
2025-05-03 20:20:15 +02:00

linuxSmartie

Alphanumeric LCD software for Linux (kind of LCDSmartie for Windows but no GUI, no config file, no plugins, no Windows). Written with C++26, should compile with at least C++20.

Hardcoded to work with 4x40 character display because that's what I have and I don't plan on using anything else.

Vaguely inspired by suckless software philosophy.

The config is the source code

Same as plugins. Just write more features scrub, learn some C++, damn

TODOs

  • In the LCDDisplay lib, reimplement all the features I have in picoSmartie + maybe finally add keypad support for both so I can toggle backlight (?) or change screens if I want any
  • Screens could be automatic tbh, like if it detects media playing it switches to media screen, if GPU power > 80W it switches to main (hwmon) screen
  • Gonna need custom chars for sure at some point
  • Measure execution time of main loop, if it's close enough to 1000ms, add network monitoring
  • Add more getters in general, CPU temp/clock/power/Vcore would be the big one
  • GPU is about as done as it's gonna be
  • Needs bar graphs still
  • Parse gpu_metrics for GPU metrics

LCD layout

It looks something like this

****************************************
0.4      0    ||09:30:36|         124fps
53/40/35C 4.53GB          544MB   32/40C
26W  424R      65.9W    0R   7/244W  11W
1,200V 1186MHz  3150       2/9MHz 0,112V
****************************************

Ok but what does it all mean

In general left side is CPU/system stuff, right side is GPU stuff

{act core cnt} {whea} {time} {bar/1cpu%}{bar/AllCPU%}{TIME}{gpu%} {xbat} {fps}

{dieAvg}/{cache}/{iod}C {ram}GB  {vram}GB  {edge}/{junction}C

{cpuPpt}W {cpufan}R {wallPow}W {gpufan}R {gpuPpt}/{cap}W {gpuBoard}W

{cpuV}V {avgCpuFreq}MHz {gpuCoreClkCap} {gpuCoreClk}/{gpuMemClk}MHz {gpuV}V

Not all of this will be possible ofc but it's a start

Raw LCD Smartie lines below:

Text01="$dll(hwinfo,1,Average Active Core Count,1)$Fill(9)$dll(hwinfo,1,Total Errors,0)$Fill(14)$dll(tinybar2,8,$dll(hwinfo,1,Max CPU/Thread Usage,),1)$Fill(5)$dll(tinybar2,7,$dll(hwinfo,1,Total CPU Usage,),1)$Time(hh:mm:ss)$dll(tinybar2,6,$dll(hwinfo,1,GPU Utilization,),1)$dll(xbat,1,i,1)$Fill(33)$Right($dll(hwinfo,1,Framerate (Presented),0),$4%)fps"
Text02="$dll(hwinfo,1,1|CPU Die (average),0|a)/$dll(hwinfo,1,1|L3 Cache (CCD1),0)/$dll(hwinfo,1,1|CPU IOD Hotspot,0)$Chr(176)$Fill(10)$dll(format,2,$dll(hwinfo,1,1|8|4,0),0##B)B$Fill(24)$Right($dll(format,2,$dll(hwinfo,1,GPU D3D Memory Dedicated,0),0##B),$6%)B$Fill(34)$Right($dll(hwinfo,1,GPU|1|1,)/$dll(hwinfo,1,GPU|1|4,)$Chr(176),$7%)"
Text03="$dll(hwinfo,1,5|1,0)W$Fill(5)$dll(hwinfo,1,3|2,)R$Fill(14)$Right($dll(tasmopwr,1,tasmota-plug-pc.lan,)W,$6%)$Fill(21)$Right($dll(hwinfo,1,GPU|3|1,)R,$5%)$Fill(27)$Right($dll(hwinfo,1,GPU|5|9,0)/$dll(hwinfo,1,GPU|5|10,0)W,$8%)$Fill(36)$Right($dll(hwinfo,1,GPU|5|7,0)W,$4%)"
Text04="$dll(hwinfo,1,Vcore,3)V $Right($dll(hwinfo,1,Average Effective Clock,a)MHz,$7%)$Fill(16)$dll(hwinfo,1,GPU Shader Clock Frequency Limit,)$Fill(21)$Right($dll(hwinfo,1,GPU|6|2,)/$dll(hwinfo,1,GPU|6|4,)MHz,$12%)$Fill(34)$dll(hwinfo,1,GPU|2|1,3)V$CustomChar(1,16,6,9,8,8,9,6,0)"

So what's still missing

  • Tasmota wall power, doable
  • Average CPU freq, doable
  • Per-core CPU load, doable but annoying
  • FPS counter, maybe possible?
  • Active core count, probably impossible but loadAvg is better?
  • GPU board power, probably impossible, it was estimated on windows anyway
  • CPU cache/iod, likely impossible, zenpower doesnt show it
  • GPU clock limit, probably impossible, amdgpu doesnt show it?
  • CPU fan, likely impossible, no modules
Description
No description provided
Readme 648 KiB
Languages
C 95.5%
Makefile 2.7%
C++ 1.8%