- Add Bluetooth device list management with discovery and pairing support - Implement volume control with AVRC integration - Add system event handling for GUI-to-Bluetooth communication - Enhance menu system with device selection and volume control pages - Improve memory management by making menu creation lazy - Add proper event subscription between GUI and Bluetooth modules - Update filter coefficient for improved audio clicking behavior 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
92 lines
1.9 KiB
C
92 lines
1.9 KiB
C
#ifndef SYSTEM_H
|
|
#define SYSTEM_H
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "freertos/semphr.h"
|
|
|
|
#define DISABLE_GUI
|
|
|
|
enum
|
|
{
|
|
ANGLE_XY = 0,
|
|
ANGLE_XZ,
|
|
ANGLE_YZ,
|
|
};
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
float raw[3];
|
|
float filtered[3];
|
|
float angle;
|
|
} ImuData_t;
|
|
|
|
typedef struct SystemState_s
|
|
{
|
|
ImuData_t imu;
|
|
|
|
EventGroupHandle_t event;
|
|
|
|
float zeroAngle;
|
|
int primaryAxis;
|
|
|
|
// BT event data
|
|
int btDeviceIndex;
|
|
|
|
} SystemState_t;
|
|
|
|
|
|
#define MAX_INDICATION_ANGLE 7.5f
|
|
#define FILTER_COEFF 0.4f // 0 to 1 Smaller number is heavier filter
|
|
#define PRIMARY_AXIS ANGLE_YZ
|
|
#define RIFLE_AXIS Y
|
|
|
|
#define EM_MAX_SUBSCRIBERS 8 // tweak as needed
|
|
#define EM_EVENT_NEW_DATA (1UL<<0)
|
|
#define EM_EVENT_ERROR (1UL<<1)
|
|
#define EM_EVENT_BT_REFRESH (1UL<<2)
|
|
#define EM_EVENT_BT_CONNECT (1UL<<3)
|
|
#define EM_EVENT_VOLUME_UP (1UL<<4)
|
|
#define EM_EVENT_VOLUME_DOWN (1UL<<5)
|
|
// …add more event bit-masks here…
|
|
|
|
typedef struct {
|
|
TaskHandle_t subscribers[EM_MAX_SUBSCRIBERS];
|
|
size_t count;
|
|
SemaphoreHandle_t mutex;
|
|
} EventManager_t;
|
|
|
|
void system_init(void);
|
|
void system_setImuData(ImuData_t imu);
|
|
|
|
ImuData_t system_getImuData(void);
|
|
|
|
int system_getPrimaryAxis(void);
|
|
float system_getAngle(void);
|
|
|
|
void system_setZeroAngle(void);
|
|
void system_clearZeroAngle(void);
|
|
float system_getZeroAngle(void);
|
|
|
|
// Subscribe (register) current task to receive events
|
|
BaseType_t system_subscribe(TaskHandle_t task);
|
|
|
|
// Unsubscribe if you ever need
|
|
BaseType_t system_unsubscribe(TaskHandle_t task);
|
|
|
|
// Notify all subscribers of one or more event bits
|
|
void system_notifyAll(uint32_t eventBits);
|
|
|
|
// BT-specific event functions
|
|
void system_requestBtRefresh(void);
|
|
void system_requestBtConnect(int device_index);
|
|
int system_getBtDeviceIndex(void);
|
|
|
|
// Volume control functions
|
|
void system_requestVolumeUp(void);
|
|
void system_requestVolumeDown(void);
|
|
|
|
|
|
#endif |