Files
ASER/App/nav/track_map.c

97 lines
3.7 KiB
C
Raw Normal View History

2026-04-03 08:56:26 +08:00
/**
* @file track_map.c
* @brief S
*
2026-04-03 13:46:45 +08:00
* ( Doc/map.md):
* - 沿 X 220cm
* - 40cm
* -
* - C1 ()C6 ()
*
* S ("北=Y递减=地图上方"):
* C1()()
* 70cmC2(西)()
* 70cmC3()...
* C6(西)()
*
* entry_turn_dir: ()
* exit_turn_dir:
2026-04-03 08:56:26 +08:00
*/
#include "track_map.h"
/* =========================================================
* S
2026-04-03 13:46:45 +08:00
*
* (=沿):
* C1: ;
* C2: 西;
* C3: ;
* C4: 西;
* C5: ;
* C6: 西; ()
2026-04-03 08:56:26 +08:00
* ========================================================= */
static const TrackMap_t s_map = {
.corridors = {
2026-04-03 13:46:45 +08:00
/* id travel_dir exit_turn entry_turn is_last
* -- ---------- --------- ---------- ------- */
{ 0, TRAVEL_DIR_EAST, TURN_DIR_LEFT, TURN_DIR_RIGHT, false }, /* C1: →东, 从左端右转入, 到右端左转出 */
{ 1, TRAVEL_DIR_WEST, TURN_DIR_RIGHT, TURN_DIR_LEFT, false }, /* C2: ←西, 从右端左转入, 到左端右转出 */
{ 2, TRAVEL_DIR_EAST, TURN_DIR_LEFT, TURN_DIR_RIGHT, false }, /* C3: →东 */
{ 3, TRAVEL_DIR_WEST, TURN_DIR_RIGHT, TURN_DIR_LEFT, false }, /* C4: ←西 */
{ 4, TRAVEL_DIR_EAST, TURN_DIR_LEFT, TURN_DIR_RIGHT, false }, /* C5: →东 */
{ 5, TRAVEL_DIR_WEST, TURN_DIR_LEFT, TURN_DIR_LEFT, true }, /* C6: ←西, 从右端左转入, 到左端左转出(朝南出场) */
2026-04-03 08:56:26 +08:00
},
.entry_corridor_id = 0,
.link_distance_m = TRACK_MAP_LINK_DISTANCE_M,
.corridor_length_m = TRACK_MAP_CORRIDOR_LENGTH_M,
};
/* =========================================================
* API
* ========================================================= */
void TrackMap_Init(void)
{
/* 静态表,无需运行时初始化 */
}
const TrackMap_t* TrackMap_Get(void)
{
return &s_map;
}
const CorridorDescriptor_t* TrackMap_GetCorridor(uint8_t id)
{
if (id >= TRACK_MAP_CORRIDOR_COUNT) {
return &s_map.corridors[0];
}
return &s_map.corridors[id];
}
uint8_t TrackMap_GetNextCorridorId(uint8_t current_id)
{
if (current_id + 1 >= TRACK_MAP_CORRIDOR_COUNT) {
return current_id; /* 已是最后一条 */
}
return current_id + 1;
}
bool TrackMap_IsLastCorridor(uint8_t id)
{
if (id >= TRACK_MAP_CORRIDOR_COUNT) return true;
return s_map.corridors[id].is_last;
}
TurnDirection_t TrackMap_GetExitTurnDir(uint8_t id)
{
if (id >= TRACK_MAP_CORRIDOR_COUNT) return TURN_DIR_LEFT;
return s_map.corridors[id].exit_turn_dir;
}
TurnDirection_t TrackMap_GetEntryTurnDir(uint8_t id)
{
if (id >= TRACK_MAP_CORRIDOR_COUNT) return TURN_DIR_LEFT;
return s_map.corridors[id].entry_turn_dir;
}