CommandQueue & EventQueue - ファイルマッピングドキュメント
Date: 2025-12-09
ファイル一覧
既存ファイル(CommandQueue関連)
| ファイル |
内容 |
状態 |
include/command_queue.h |
CommandQueue クラス定義、command_t、command_response_t、command_entry_t 型 |
✅ 既存 |
include/device_response.h |
device_response_t、device_response_type_t、device_response_status_t、device_response_code_t 型、builder 関数 |
✅ 既存 |
include/command.h |
Command シングルトン(設定管理) |
✅ 既存 |
include/event_response.h |
イベント出力関数(event_t対応) |
✅ 既存 |
include/stream_data.h |
event_t(legacy) |
✅ 既存 |
Implementation Files
| ファイル |
内容 |
状態 |
src/command_queue.cpp |
CommandQueue 実装(receive, execute, parse, dispatch) |
✅ 既存 |
src/device_response.cpp |
device_response_ok(), device_response_error(), device_get_timestamp() |
✅ 既存 |
src/command.cpp |
Command シングルトン実装 |
✅ 既存 |
src/event_response.cpp |
send_event_as_device_response()(legacy event_t対応) |
✅ 既存 |
Command Handlers(src/command/ ディレクトリ)
| ファイル |
ハンドラー |
内容 |
version.cpp |
GET_VERSION |
Firmware version |
status.cpp |
GET_STATUS |
System status |
uptime.cpp |
GET_UPTIME |
Board uptime |
help.cpp |
GET_HELP |
Help text |
mac_address.cpp |
GET_MAC_ADDRESS |
MAC address |
poll_count.cpp |
GET_POLL_COUNT, SET_POLL_COUNT |
Detection poll count |
threshold.cpp |
GET_THRESHOLD, SET_THRESHOLD |
DAC threshold |
deadtime.cpp |
SET_DEADTIME |
Detector deadtime |
stream.cpp |
SET_STREAM, GET_STREAM |
Stream enable flag |
test_led.cpp |
TEST_LED |
LED test |
rtc.cpp |
SET_RTC_TIME, GET_RTC_TIME |
RTC time control |
gnss.cpp |
GNSS関連 |
GNSS commands |
wifi.cpp |
WiFi関連 |
WiFi commands |
bme280.cpp |
BME280関連 |
Sensor commands |
reset.cpp |
RESET |
Device reset |
新規ファイル(EventQueue関連、v1.14.0計画)
| ファイル |
内容 |
役割 |
include/event_queue.h |
新規 event_t 型定義 + EventQueue クラス定義 |
イベントデータ構造体、キューイング API、FreeRTOS静的キュー管理 |
Implementation Files
| ファイル |
内容 |
役割 |
src/event_queue.cpp |
新規 EventQueue 実装 |
enqueue(), flush(), has_pending(), clear(), get_queued_count() |
src/event_response.cpp |
更新 |
event_to_device_response() 追加 |
CommandQueue の詳細メッピング
Header: include/command_queue.h
// ============================================================================
// CONFIGURATION MACROS
// ============================================================================
#define COMMAND_QUEUE_SIZE 10 // L50
#define COMMAND_RECEPTION_TIMEOUT_MS 500 // L58
#define MAX_COMMAND_LENGTH 64 // L66
#define MAX_COMMAND_ARGS 2 // L74
#define MAX_ARG_LENGTH 16 // L82
// ============================================================================
// TYPE DEFINITIONS
// ============================================================================
typedef struct { // L106-132: command_t
char name[32];
uint8_t arg_count;
char args[MAX_COMMAND_ARGS][MAX_ARG_LENGTH];
} command_t;
typedef struct { // L140-161: command_response_t
bool is_ok;
char message[512];
} command_response_t;
typedef command_response_t (*command_handler_t) // L177
(const command_t& cmd);
typedef struct { // L191-235: command_entry_t
const char* name;
const char* aliases[4];
command_handler_t handler;
const char* category;
const char* description;
} command_entry_t;
// ============================================================================
// PUBLIC API - Static Class
// ============================================================================
class CommandQueue { // L265-433
static void init(void); // L282
static bool receive(void); // L313
static bool has_pending(void); // L328
static bool execute(void); // L356
// Private helpers
static bool receive_line(char*, size_t); // L378
static command_t parse(const char*); // L400
static void discard_input(void); // L412
static command_response_t dispatch(
const command_t&); // L432
};
Implementation: src/command_queue.cpp
// FreeRTOS Queue Management
static StaticQueue_t g_queue_static; // Static queue structure
static uint8_t g_queue_buffer[...]; // Queue buffer array
static QueueHandle_t g_queue_handle; // Queue handle
// Implementation Details
void CommandQueue::init() // Initialize FreeRTOS queue
void CommandQueue::receive() // Read from serial, parse, queue
void CommandQueue::execute() // Dequeue, dispatch, send response
bool CommandQueue::receive_line(...) // Serial reading with timeout
command_t CommandQueue::parse(...) // Parse text line to command_t
void CommandQueue::discard_input() // Clear serial buffer
command_response_t CommandQueue::dispatch(...) // Lookup handler, execute
EventQueue の詳細メッピング(新規、v1.14.0)
#if ENABLE_DEVICE_RESPONSE
// ============================================================================
// EVENT DATA STRUCTURE - EventQueue Optimized
// ============================================================================
/**
* @brief Detection event data optimized for EventQueue buffering
*
* Core fields (always present, 8 bytes):
* - hit1, hit2, hit3: Detection counts (0-100) per channel
* - adc: ADC reading (12-bit, 0-4095)
*
* Optional fields (ENABLE_* flags):
* - hit_type: Detection pattern bitmask (ENABLE_HITTYPE)
* - adc_mv: ADC millivolt conversion (ENABLE_ADCMV)
* - temperature, pressure, humidity: Environmental (ENABLE_BME280)
* - uptime_ms, timedelta_us: Timing (ENABLE_TIMESTAMP)
* - unix_timestamp: Absolute time (ENABLE_RTC)
* - gnss_*: GNSS positioning (ENABLE_GNSS)
*/
typedef struct { // Optimized for FreeRTOS queue
// Core fields (always present)
uint16_t hit1; // Detection channel 1 (0-100)
uint16_t hit2; // Detection channel 2 (0-100)
uint16_t hit3; // Detection channel 3 (0-100)
int16_t adc; // ADC reading (0-4095)
// Optional fields (ENABLE_* flags)
#if ENABLE_HITTYPE
uint8_t hit_type; // Detection pattern bitmask
#endif
#if ENABLE_ADCMV
uint16_t adc_mv; // Millivolt conversion
#endif
#if ENABLE_BME280
float temperature; // Temperature (°C)
float pressure; // Pressure (Pa)
float humidity; // Humidity (%)
#endif
#if ENABLE_TIMESTAMP
uint32_t uptime_ms; // Board uptime (ms)
uint64_t timedelta_us; // Event interval (us)
#endif
#if ENABLE_RTC
uint32_t unix_timestamp; // Absolute time (unix seconds)
#endif
#if ENABLE_GNSS
double gnss_latitude; // Latitude (decimal degrees)
double gnss_longitude; // Longitude (decimal degrees)
float gnss_altitude; // Altitude (meters)
uint8_t gnss_satellites; // Satellite count
uint8_t gnss_fix_quality; // NMEA fix quality
float gnss_hdop; // Horizontal DOP
bool gnss_fix_valid; // Fix validity flag
#endif
} event_t;
// ============================================================================
// CONFIGURATION
// ============================================================================
#define EVENT_QUEUE_SIZE 200 // High-frequency buffering
// ============================================================================
// PUBLIC API - Static Class
// ============================================================================
class EventQueue {
// Initialization
static void init(void); // Initialize FreeRTOS queue
// Main operations
static bool enqueue(const event_t*); // Buffer event for deferred output
static bool has_pending(void); // Check if events pending
static bool flush(void); // Send all pending events
// Statistics & control
static size_t get_queued_count(void); // Current queue depth
static size_t get_capacity(void); // Maximum queue size
static bool is_full(void); // Queue at capacity?
static size_t clear(void); // Emergency clear (returns count)
// Private helpers
static void send_response(const device_response_t*); // Serialize & output one event
};
#endif // ENABLE_DEVICE_RESPONSE
Implementation: src/event_queue.cpp (新規作成予定)
#if ENABLE_DEVICE_RESPONSE
// FreeRTOS Queue Management
static StaticQueue_t g_event_queue_static; // Static queue structure
static uint8_t g_event_queue_buffer[...]; // Queue buffer array
static QueueHandle_t g_event_queue_handle; // Queue handle
// Statistics
static size_t g_enqueue_total = 0; // Total enqueued events
static size_t g_dequeue_total = 0; // Total dequeued events
static size_t g_overflow_count = 0; // Overflow drop count
// Implementation Details
void EventQueue::init() // Initialize FreeRTOS queue
bool EventQueue::enqueue(const event_t*) // Enqueue event
bool EventQueue::has_pending() // Check queue status
bool EventQueue::flush() // Drain queue & send
size_t EventQueue::get_queued_count() // Current depth
bool EventQueue::is_full() // Capacity check
size_t EventQueue::clear() // Emergency reset
void EventQueue::send_response(...) // Serialize & output event
#endif // ENABLE_DEVICE_RESPONSE
Updated: src/event_response.cpp
#if ENABLE_DEVICE_RESPONSE
// New conversion function
device_response_t event_to_device_response(
const event_t *data); // Convert to device_response_t
// Serialization helper (used by EventQueue::flush)
void send_device_response(
const device_response_t *response); // Serialize to JSON & send
#endif // ENABLE_DEVICE_RESPONSE
ファイル間の依存関係図
CommandQueue パス
command_queue.h
├── Defines: command_t, command_response_t, command_entry_t, CommandQueue
└── Depends on: config.h
command_queue.cpp
├── Implements: CommandQueue (receive, parse, dispatch, execute)
├── Calls: CommandQueue::dispatch() (table-driven lookup)
├── Depends on: command_queue.h, command_manager.h, device_response.h
└── External: Serial I/O, FreeRTOS queue API
command/version.cpp, status.cpp, ... (handler implementations)
├── Implements: Specific command handlers
├── Signature: command_response_t handler(const command_t& cmd)
├── Depends on: command.h, device_response.h
└── Called by: CommandQueue::dispatch() via command_entry_t table
device_response.h
├── Defines: device_response_t, device_response_type_t, builder functions
└── Depends on: config.h
device_response.cpp
├── Implements: device_response_ok(), device_response_error(), device_get_timestamp()
└── Depends on: device_response.h, command.h, config.h
command.h
├── Defines: Command class (singleton, configuration management)
└── Depends on: device_response.h, config.h
command.cpp
├── Implements: Command::get_stream(), set_stream(), get_threshold(), set_threshold(), etc.
├── Inline getters (zero-cost)
└── Depends on: command.h, device_response.h, dac_manager.h
EventQueue パス(新規、v1.14.0)
event.h (NEW)
├── Defines: event_t structure
├── Depends on: config.h, stdint.h
└── Used by: main.cpp (detection loop), event_queue.h
event_queue.h (NEW)
├── Defines: EventQueue class
├── Depends on: config.h, device_response.h, event.h
└── Used by: main.cpp
event_queue.cpp (NEW)
├── Implements: EventQueue (enqueue, flush, has_pending, clear, etc.)
├── FreeRTOS queue management (xQueueCreateStatic, xQueueSend, xQueueReceive)
├── Calls: send_device_response()
├── Depends on: event_queue.h, event_response.h, command.h, config.h
└── External: FreeRTOS queue API, Serial I/O
event_response.h (UPDATED)
├── Adds: event_to_device_response() inline function
├── Existing: stream_data.h event_t functions (legacy)
└── Depends on: device_response.h, event.h, stream_data.h
event_response.cpp (UPDATED)
├── Adds: send_device_response() (unified serializer)
├── Existing: send_event_as_device_response() (legacy event_t)
├── Depends on: event_response.h, ArduinoJson, config.h
└── External: Serial I/O, ArduinoJson JSON serialization
main.cpp (UPDATED)
├── Calls: EventQueue::init() in setup()
├── Calls: EventQueue::enqueue() in detection loop
├── Calls: EventQueue::flush() in loop()
├── Depends on: event_queue.h, event.h, cosmic_detector.h, sensors
└── No longer calls: send_event() directly (replaced by EventQueue)
メソッド・変数配置表(完全な対称性)
Layer 1: データ構造定義
| 要素 |
CommandQueue |
EventQueue |
| データ型 |
command_t |
event_t |
| 定義ファイル |
command_queue.h (L106-132) |
event_queue.h (L50-200予定) |
| キュー容量 |
10項目 |
200項目 |
| メモリ/item |
~32 bytes |
~100-150 bytes |
Layer 2: キューイング管理クラス
| 要素 |
CommandQueue |
EventQueue |
| クラス名 |
CommandQueue |
EventQueue |
| 定義ファイル |
command_queue.h |
event_queue.h |
| 実装ファイル |
command_queue.cpp |
event_queue.cpp |
| マクロ |
COMMAND_QUEUE_SIZE=10 |
EVENT_QUEUE_SIZE=200 |
| FreeRTOS Handle |
g_queue_handle |
g_event_queue_handle |
| キュー構造体 |
StaticQueue_t g_queue_static |
StaticQueue_t g_event_queue_static |
Layer 2: Public API メソッド(共通インターフェイス)
| メソッド |
CommandQueue |
EventQueue |
| 初期化 |
init() |
init() |
| 入力受け取り |
receive() |
enqueue(event_t*) |
| キュー確認 |
has_pending() |
has_pending() |
| 処理実行 |
execute() |
flush() |
| キュー深さ |
(なし) |
get_queued_count() |
| キュー容量 |
(なし) |
get_capacity() |
| 容量確認 |
(なし) |
is_full() |
| 緊急リセット |
(なし) |
clear() |
Layer 2: Private Helper メソッド
| メソッド |
CommandQueue |
EventQueue |
| 受け取り補助 |
receive_line() |
(enqueue内) |
| パース |
parse() |
(なし) |
| ディスパッチ |
dispatch() |
(なし) |
| 出力補助 |
(execute内) |
send_response() |
| 入力破棄 |
discard_input() |
(なし) |
Layer 3: プロトコル変換と出力
| 要素 |
CommandQueue |
EventQueue |
| 入力型 |
command_t |
event_t |
| 変換関数 |
(execute内でJSON生成) |
event_to_device_response() |
| 出力関数 |
(execute内でSerial) |
send_device_response() |
| 出力型 |
device_response_t (暗黙) |
device_response_t |
| ファイル |
command_queue.cpp |
event_response.cpp |
| フォーマット |
JSON (可変) |
JSONL (固定形式) |
Layer 4: 統合ポイント(main.cpp内)
| 操作 |
CommandQueue |
EventQueue |
| setup()での初期化 |
CommandQueue::init() |
EventQueue::init() |
| loop()での入力 |
CommandQueue::receive() |
EventQueue::enqueue() (検出器トリガー) |
| loop()での処理 |
CommandQueue::execute() |
EventQueue::flush() |
| 制御フラグ |
SET_STREAM コマンド |
Command::getInstance().get_stream() |
Layer 4: 統計・監視(オプション、v1.14.0+で検討)
| メトリクス |
CommandQueue |
EventQueue |
| 受け取り総数 |
(なし) |
g_enqueue_total |
| 処理総数 |
(なし) |
g_dequeue_total |
| オーバーフロー数 |
(なし) |
g_overflow_count |
| 最大深さ |
(なし) |
(動的取得可) |
ファイル依存関係(グラフ表示)
┌─ ENABLE_DEVICE_RESPONSE フラグ
│
├─ CommandQueue Path (既存)
│ ├─ command_queue.h
│ │ ├─ command_t
│ │ ├─ CommandQueue class
│ │ └─ depends: config.h
│ │
│ ├─ command_queue.cpp
│ │ ├─ FreeRTOS queue buffer
│ │ ├─ receive(), parse(), dispatch(), execute()
│ │ └─ depends: command_queue.h, command_manager.h, device_response.h
│ │
│ ├─ device_response.h/cpp
│ │ ├─ device_response_t
│ │ ├─ device_response_ok/error()
│ │ └─ device_get_timestamp()
│ │
│ ├─ command.h/cpp
│ │ ├─ Command singleton
│ │ ├─ get_stream(), set_threshold(), etc.
│ │ └─ depends: device_response.h, config.h
│ │
│ └─ command/[*.cpp]
│ ├─ Handler implementations
│ ├─ Signature: command_response_t handler(const command_t&)
│ └─ depends: command.h, device_response.h
│
└─ EventQueue Path (新規, v1.14.0)
├─ event.h (NEW)
│ ├─ event_t structure
│ └─ depends: config.h
│
├─ event_queue.h (NEW)
│ ├─ EventQueue class
│ ├─ enqueue(), flush(), has_pending(), clear()
│ └─ depends: device_response.h, event.h
│
├─ event_queue.cpp (NEW)
│ ├─ EventQueue implementation
│ ├─ FreeRTOS queue buffer
│ ├─ send_response() helper
│ └─ depends: event_queue.h, event_response.h, command.h
│
├─ event_response.h (UPDATED)
│ ├─ Adds: event_to_device_response()
│ ├─ Existing: legacy event_t functions
│ └─ depends: device_response.h, event.h
│
└─ event_response.cpp (UPDATED)
├─ Adds: send_device_response()
├─ Existing: send_event_as_device_response()
└─ depends: event_response.h, ArduinoJson
処理フロー(ファイル横断)
CommandQueue フロー
main.cpp::loop()
└─> CommandQueue::receive() [command_queue.cpp]
└─> Serial.available() & readBytesUntil()
└─> CommandQueue::parse() [command_queue.cpp]
└─> Parse line → command_t
└─> xQueueSend() to FreeRTOS queue [command_queue.cpp]
└─> CommandQueue::execute() [command_queue.cpp]
└─> xQueueReceive() from FreeRTOS queue [command_queue.cpp]
└─> CommandQueue::dispatch() [command_queue.cpp]
└─> command_table[] lookup
└─> handler(cmd) [command/*.cpp]
└─> Calls Command::getInstance() [command.h/cpp]
└─> Generate JSON response
└─> return command_response_t
└─> Serial.println(response) [command_queue.cpp]
EventQueue フロー(新規、v1.14.0)
main.cpp::loop()
└─> cosmic_read().detected
└─> Collect sensors
└─> Create event_t [main.cpp local]
└─> EventQueue::enqueue(event) [event_queue.cpp]
└─> xQueueSend() to FreeRTOS queue [event_queue.cpp]
└─> EventQueue::flush() [event_queue.cpp]
└─> Check stream_enabled() [command.h or config]
└─> xQueueReceive() loop [event_queue.cpp]
└─> get event_t
└─> send_device_response() [event_response.cpp]
└─> ArduinoJson serialization [ArduinoJson library]
└─> Serial.println(JSON) [event_response.cpp]
実装チェックリスト(参照用)
Phase 4, v1.14.0 Implementation
[ ] event.h (NEW)
[ ] struct event_t definition
[ ] ENABLE_* flag support
[ ] JSDoc documentation
[ ] event_queue.h (NEW)
[ ] class EventQueue definition
[ ] static methods: init, enqueue, flush, has_pending, clear, get_queued_count, is_full
[ ] Configuration: EVENT_QUEUE_SIZE = 200
[ ] JSDoc for public API
[ ] event_queue.cpp (NEW)
[ ] FreeRTOS static queue initialization
[ ] xQueueCreateStatic() setup
[ ] EventQueue::init() implementation
[ ] EventQueue::enqueue() implementation
[ ] EventQueue::flush() implementation
[ ] EventQueue::has_pending() implementation
[ ] EventQueue::get_queued_count() implementation
[ ] EventQueue::is_full() implementation
[ ] EventQueue::clear() implementation
[ ] EventQueue::send_response() helper
[ ] Stream flag check (Command::getInstance().get_stream())
[ ] event_response.h (UPDATED)
[ ] Add: inline event_to_device_response()
[ ] Keep existing: legacy event_t functions
[ ] event_response.cpp (UPDATED)
[ ] Add: send_device_response(const device_response_t*)
[ ] JSON serialization using ArduinoJson
[ ] Keep existing: legacy event_t handling
[ ] main.cpp (UPDATED)
[ ] Add: #include "event_queue.h"
[ ] Add: EventQueue::init() in setup()
[ ] Update detection loop:
[ ] Create event_t
[ ] Call EventQueue::enqueue()
[ ] Update loop: Replace send_event() with EventQueue::flush()
[ ] Remove: Direct send_event() calls
[ ] Build & Testing
[ ] Compile with ENABLE_DEVICE_RESPONSE=1
[ ] No linker errors
[ ] No circular dependencies
[ ] Test enqueue/flush cycle
[ ] Verify JSON output format