Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CppRSSI

A Windows GUI tool that turns WiFi signal strength (RSSI) readings into a color-coded, rotatable pseudo-3D "heatmap" of a room, with export to Wavefront .obj for Blender.

⚠️ Please read: what this is and isn't

Consumer WiFi hardware cannot do what LiDAR does. It has no way to bounce a beam off a wall and measure a distance. What it can give you is RSSI (received signal strength, in dBm) of access points that are visible from wherever you're standing.

CppRSSI is built around that honestly, with two clearly separated modes (switchable any time from the Mode menu, and always labeled in the UI, the point list, and the exported files):

Mode What it does
Real WiFi Scan You physically walk to a spot in the room, type its (x, y, z) coordinates, and click Scan Here. The app queries real RSSI through the Windows Native WiFi (WLAN) API for the selected SSID. Points you collect are interpolated (Inverse Distance Weighting) into a pseudo-3D surface.
Simulated / Demo A synthetic data generator, so you can test the color gradient, the 3D viewport, OBJ export, and dynamic/motion mode without a real room or even a WiFi adapter. Every simulated point is tagged [SIM] in the list and [SIMULATED] in exported files.

This is a real-signal heatmap visualizer, not a laser scanner. Treat the "3D model" as a strength surface, not a geometric survey of your walls and furniture.

Features

  • Real RSSI capture via WlanGetNetworkBssList (Windows WLAN API)
  • Color gradient exactly as specified: White → Yellow → Orange → Red → Purple → Blue → Dark Blue → Very Dark Blue → Near-black Dark Blue → Black (black = no reply / no usable signal at that point)
  • Static mode (manual scans, maximum accuracy) and Dynamic mode (auto re-scan every 2s, flags & highlights moved/changed points in green)
  • Rotatable/zoomable isometric 3D viewport, drawn with plain GDI (no OpenGL/DirectX runtime dependency)
  • Interpolated per-floor heatmap surface (IDW) layered into pseudo-3D
  • Export to .obj + .mtl for Blender (File → Import → Wavefront (.obj))
  • 4 built-in themes: Light, Dark, Midnight Blue, Matrix
  • English-only UI/strings to avoid MinGW console/GUI codepage issues

Project layout

CppRSSI/
  src/
    main.cpp       - GUI, app state, event handling, entry point
    wifiscan.h      - Windows WLAN API wrapper (real RSSI capture)
    render3d.h      - minimal isometric 3D projection + GDI drawing
    heatmap.h        - IDW interpolation + surface rendering
    colormap.h        - RSSI -> RGB gradient
    scandata.h          - shared point/data model
    objexport.h           - .obj/.mtl exporter for Blender
    themes.h                - color themes
  Makefile
  README.md

What you should customize before shipping

  • src/main.cpp, search for "your_text_here" in wWinMain — replace with whatever startup description you want printed to the console.
  • App name / window title: L"CppRSSI - WiFi Room Scanner" in wWinMain.
  • Default RSSI range (RssiRange in colormap.h) if -30/-100 dBm doesn't match your hardware.
  • Icon: point wc.hIcon in wWinMain at your own .ico resource if wanted.

Building

Option A — cross-compile from Linux (what was used to verify this code)

sudo apt install mingw-w64
cd CppRSSI
make
# -> build/CppRSSI.exe

Option B — build natively on Windows with MSYS2

pacman -S mingw-w64-x86_64-gcc make
# open the "MSYS2 MinGW x64" shell, then:
cd CppRSSI
make

The Makefile auto-detects whether x86_64-w64-mingw32-g++ (cross) or a plain g++ (native MinGW64 shell) should be used.

Why the .exe runs on machines without MinGW installed

The Makefile links with -static -static-libgcc -static-libstdc++, so the C++/MinGW runtime is baked into the executable. The only DLLs the binary imports are standard Windows system DLLs that ship with every install of Windows (user32, gdi32, comctl32, comdlg32, wlanapi, ole32, kernel32). You can verify this yourself with:

x86_64-w64-mingw32-objdump -p build/CppRSSI.exe | grep "DLL Name"

Using the app

  1. Pick a Mode (Simulated/Demo is selected by default so nothing real happens until you choose it).
  2. Type the coordinates (in meters) of where you're standing, or leave 0,0,0 for the origin.
  3. In Real mode, pick the target SSID from the dropdown (auto-populated from currently visible networks) and click Scan Here. In Simulated mode, click Add Simulated Point.
  4. Drag with the left mouse button in the viewport to rotate; scroll to zoom.
  5. Switch View → Dynamic to auto re-scan every 2 seconds and flag points whose signal changed enough to suggest movement (highlighted in green if "Highlight moved points" is checked).
  6. File → Export as .obj to save a Blender-ready mesh, one small cube per point, colored to match the on-screen gradient.

License

MIT — see LICENSE. This is meant to be a starting point for your own open-source project; replace author/contact info as you like.

About

A C++ Windows application for visualizing Wi-Fi signal strength (RSSI) as an interactive pseudo-3D room heatmap, featuring real-time scanning, simulation, and Wavefront OBJ export for Blender.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages