Skip to content

ams::mitm::ldn::LdnStateMachine

LDN State Machine.

Manages the LDN communication state with thread-safe transitions and automatic event signaling on state changes.State Diagram+------+||+------+|Initializenormalv+-------------+||+-------------+/\OpenAccessPointOpenStationnormal/\vv+-------------++---------+||||+-------------++---------+||CreateNetworkConnectnormalvv+--------------------++------------------+||||+--------------------++------------------+Any state can transition to Error on fatal errors. Finalize from any state returns to None.

Type: os::SdkMutex

Mutex for thread safety.

Type: CommState

Current state.

Type: os::SystemEvent

State change event.

Type: StateCallback

Optional state change callback.

Type: void *

User data for callback.

void LdnStateMachine()

Constructor.

@gdb{tag=“LDN:STATE”, msg=“LdnStateMachine: constructor”}

void ~LdnStateMachine()

Destructor.

@gdb{tag=“LDN:STATE”, msg=“LdnStateMachine: destructor”}

void LdnStateMachine(const&)

Parameters:

  • param (const&)
& operator=(const&)

Parameters:

  • param (const&)

Returns: &

CommState GetState()

Get current state.

Current CommState @gdb{tag=“LDN:STATE”, msg=“GetState”}return

Returns: CommState

bool IsInState(CommState state)

Check if in a specific state.

stateState to checkparamtrue if in the specified state @gdb{tag=“LDN:STATE”, msg=“IsInState”}return

Parameters:

  • state (CommState)

Returns: bool

bool IsInitialized()

Check if initialized (not None or Error)

true if service is initialized @gdb{tag=“LDN:STATE”, msg=“IsInitialized”}return

Returns: bool

bool IsNetworkActive()

Check if in a connected state (AccessPointCreated or StationConnected)

true if connected to a network @gdb{tag=“LDN:STATE”, msg=“IsNetworkActive”}return

Returns: bool

StateTransitionResult Initialize()

Initialize the service (None -> Initialized)

Transition result @gdb{tag=“LDN:STATE”, msg=“Initialize → Initialized”}return

Returns: StateTransitionResult

StateTransitionResult Finalize()

Finalize the service (Any -> None)

Transition result @gdb{tag=“LDN:STATE”, msg=“Finalize → None”}return

Returns: StateTransitionResult

StateTransitionResult OpenAccessPoint()

Open access point mode (Initialized -> AccessPoint)

Transition result @gdb{tag=“LDN:STATE”, msg=“OpenAccessPoint → AccessPoint”}return

Returns: StateTransitionResult

StateTransitionResult CloseAccessPoint()

Close access point mode (AccessPoint/AccessPointCreated -> Initialized)

Transition result @gdb{tag=“LDN:STATE”, msg=“CloseAccessPoint → Initialized”}return

Returns: StateTransitionResult

StateTransitionResult CreateNetwork()

Create network (AccessPoint -> AccessPointCreated)

Transition result @gdb{tag=“LDN:STATE”, msg=“CreateNetwork → AccessPointCreated”}return

Returns: StateTransitionResult

StateTransitionResult DestroyNetwork()

Destroy network (AccessPointCreated -> AccessPoint)

Transition result @gdb{tag=“LDN:STATE”, msg=“DestroyNetwork → AccessPoint”}return

Returns: StateTransitionResult

StateTransitionResult OpenStation()

Open station mode (Initialized -> Station)

Transition result @gdb{tag=“LDN:STATE”, msg=“OpenStation → Station”}return

Returns: StateTransitionResult

StateTransitionResult CloseStation()

Close station mode (Station/StationConnected -> Initialized)

Transition result @gdb{tag=“LDN:STATE”, msg=“CloseStation → Initialized”}return

Returns: StateTransitionResult

StateTransitionResult Connect()

Connect to network (Station -> StationConnected)

Transition result @gdb{tag=“LDN:STATE”, msg=“Connect → StationConnected”}return

Returns: StateTransitionResult

StateTransitionResult Disconnect()

Disconnect from network (StationConnected -> Station)

Transition result @gdb{tag=“LDN:STATE”, msg=“Disconnect → Station”}return

Returns: StateTransitionResult

StateTransitionResult SetError()

Set error state (Any -> Error)

Transition result @gdb{tag=“LDN:STATE”, msg=“SetError → error state”}return

Returns: StateTransitionResult

os::NativeHandle GetStateChangeEventHandle()

Get the state change event handle.

Event handle for state changes @gdb{tag=“LDN:STATE”, msg=“GetStateChangeEventHandle”}return

Returns: os::NativeHandle

void SetStateCallback(StateCallback callback, void * user_data)

Set callback for state changes.

callbackCallback function (can be nullptr)user_dataUser data passed to callback @gdb{tag=“LDN:STATE”, msg=“SetStateCallback: callback=%p”, args=“$x0”}param

Parameters:

  • callback (StateCallback)
  • user_data (void *)
void SignalStateChange()

Manually signal state change event.

Call this when external events (like server packets) indicate a state-relevant change that games should be notified about. @gdb{tag=“LDN:STATE”, msg=“SignalStateChange: signaling event”}

const char * StateToString(CommState state)

Convert state to string for logging.

stateState to convertparamHuman-readable state name @gdb{tag=“LDN:STATE”, msg=“StateToString”}return

Parameters:

  • state (CommState)

Returns: const char *

const char * ResultToString(StateTransitionResult result)

Convert transition result to string.

resultResult to convertparamHuman-readable result name @gdb{tag=“LDN:STATE”, msg=“ResultToString”}return

Parameters:

  • result (StateTransitionResult)

Returns: const char *

StateTransitionResult TransitionTo(CommState new_state)

Perform state transition if valid.

new_stateTarget stateparamTransition result @gdb{tag=“LDN:STATE”, msg=“TransitionTo: new_state=%d”, args=“$x1”}return

Parameters:

  • new_state (CommState)

Returns: StateTransitionResult

bool IsValidTransition(CommState from, CommState to)

Check if transition is valid.

fromSource statetoTarget stateparamtrue if transition is allowedreturn

Parameters:

  • from (CommState)
  • to (CommState)

Returns: bool