Memory issues resolved
This commit is contained in:
147
CLAUDE.md
Normal file
147
CLAUDE.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
SoundShot is an ESP32-based embedded system that appears to be an IMU-based angle measurement device with Bluetooth connectivity and GUI interface. The project uses ESP-IDF (Espressif IoT Development Framework) and can be developed using either Docker containers or native tooling.
|
||||
|
||||
## Build System & Development Environment
|
||||
|
||||
### Docker Development (Recommended)
|
||||
- **Setup**: Run `setup-env.bat` to create Python virtual environment and install dependencies
|
||||
- **Container**: Uses ESP-IDF Docker containers with VS Code Dev Containers extension
|
||||
- **Build**: `idf.py build` (inside container)
|
||||
|
||||
### Native Development
|
||||
- **Build**: `idf.py build` (requires ESP-IDF setup)
|
||||
- **Configuration**: Uses `settings.json` for project parameters
|
||||
- **CMake**: Project uses ESP-IDF CMake build system with custom configuration generator
|
||||
|
||||
### Essential Commands
|
||||
|
||||
```bash
|
||||
# Environment setup (Windows only)
|
||||
setup-env.bat
|
||||
|
||||
# Build firmware
|
||||
idf.py build
|
||||
|
||||
# Flash device (using custom Python tool)
|
||||
flash.bat
|
||||
python flash_tool/flash.py
|
||||
|
||||
# Monitor serial output
|
||||
monitor.bat
|
||||
python flash_tool/monitor.py
|
||||
|
||||
# Combined flash and monitor
|
||||
flashmon.bat
|
||||
|
||||
# Clean build
|
||||
idf.py fullclean
|
||||
```
|
||||
|
||||
## Project Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
**Main Application (`main/`)**
|
||||
- `main.c` - Entry point, IMU processing, task coordination
|
||||
- `system.c/h` - System state management, event handling, calibration
|
||||
- `gui.c/h` - LVGL-based user interface (3 modes: main, menu, bubble)
|
||||
- `bt_app.c/h` - Bluetooth connectivity and communication
|
||||
- `lsm6dsv.c/h` - LSM6DSV IMU sensor driver
|
||||
- `keypad.c/h` - Physical button input handling
|
||||
- `bubble.c/h` - Bubble level visualization
|
||||
|
||||
**Key Features**
|
||||
- Real-time angle measurement with configurable filtering
|
||||
- Bluetooth connectivity for data transmission
|
||||
- LVGL-based GUI with multiple display modes
|
||||
- Zero-angle calibration system
|
||||
- Low-pass filtering with adaptive alpha coefficients
|
||||
|
||||
### Hardware Configuration
|
||||
|
||||
**GPIO Pins** (`gpio.h`)
|
||||
- LEDs, LCD backlight, power control
|
||||
- I2C for IMU communication (SCL=22, SDA=21)
|
||||
- Serial communication and button inputs
|
||||
|
||||
**IMU Processing**
|
||||
- LSM6DSV 6-axis IMU sensor
|
||||
- Angle computation from accelerometer data (XZ, YZ, XY planes)
|
||||
- Configurable filtering with `FILTER_COEFF` and `MAX_INDICATION_ANGLE`
|
||||
- Primary axis selection via `PRIMARY_AXIS` define
|
||||
|
||||
## Configuration Management
|
||||
|
||||
### settings.json Structure
|
||||
```json
|
||||
{
|
||||
"project_name": "soundshot",
|
||||
"chip": "esp32",
|
||||
"port": "COM3",
|
||||
"monitor_baud": 115200,
|
||||
"flash_baud": 460800,
|
||||
"flash_mode": "dio",
|
||||
"flash_freq": "40m",
|
||||
"flash_size": "2MB"
|
||||
}
|
||||
```
|
||||
|
||||
**Configuration Flow**
|
||||
1. `settings.json` → `prepare_config.py` → `project_settings.cmake`
|
||||
2. CMake includes generated settings during build
|
||||
3. Flash tools read `settings.json` for esptool parameters
|
||||
|
||||
### Build Dependencies
|
||||
|
||||
**ESP-IDF Components**
|
||||
- `driver` - GPIO, I2C, peripherals
|
||||
- `esp_lcd` - Display drivers
|
||||
- `lvgl` + `esp_lvgl_port` - GUI framework
|
||||
- `esp_timer` - High resolution timers
|
||||
- `nvs_flash` - Non-volatile storage
|
||||
- `bt` - Bluetooth stack
|
||||
|
||||
**Managed Components**
|
||||
- LVGL 9.x with ESP32 port integration
|
||||
- Located in `managed_components/`
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Code Organization
|
||||
- Hardware abstraction in dedicated modules (`lsm6dsv.c`, `keypad.c`)
|
||||
- System state centralized in `system.c` with event-based communication
|
||||
- GUI logic separated from business logic
|
||||
- Bluetooth handled as separate subsystem
|
||||
|
||||
### Key Constants & Tuning Parameters
|
||||
- `MAX_INDICATION_ANGLE` (5.0°) - Angle measurement limit
|
||||
- `FILTER_COEFF` (0.4) - Low-pass filter strength
|
||||
- `PRIMARY_AXIS` - Main measurement axis selection
|
||||
- Filter alpha computed dynamically based on input magnitude
|
||||
|
||||
### Testing & Debugging
|
||||
- Serial monitoring at 115200 baud via `monitor.bat`
|
||||
- Debug prints use ESP-IDF logging (`ESP_LOGI`, `ESP_LOGW`, etc.)
|
||||
- IMU data output can be enabled via conditional compilation blocks
|
||||
|
||||
### Flash Memory Layout
|
||||
- Bootloader: 0x1000
|
||||
- Partition table: 0x8000
|
||||
- OTA data: 0x11000
|
||||
- Application: 0x20000
|
||||
|
||||
## Common Development Patterns
|
||||
|
||||
When modifying this codebase:
|
||||
1. IMU changes: Update filtering parameters in `main.c` and constants in `system.h`
|
||||
2. GUI changes: Modify LVGL code in `gui.c`, add new modes to `GuiMode_t` enum
|
||||
3. Bluetooth changes: Update message handlers in `bt_app.c`
|
||||
4. Hardware changes: Update pin definitions in `gpio.h` and initialization in `main.c`
|
||||
5. Build changes: Modify component dependencies in `main/CMakeLists.txt`
|
||||
|
||||
Always test flashing and monitoring tools after hardware configuration changes.
|
||||
Reference in New Issue
Block a user