Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
main.c File Reference

QNX RTOS example application demonstrating RteFramework. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/neutrino.h>
#include <sys/netmgr.h>
#include <sys/siginfo.h>
#include "rte/status.h"
#include "rte/types.h"
#include "rte/log.h"
#include "rte/safestate.h"
Include dependency graph for main.c:

Go to the source code of this file.

Data Structures

struct  app_context_t
struct  train_message_t
struct  cmd_reply_t

Macros

#define SERVER_NAME   "railway-server"
#define CHANNEL_NAME   "/railway/cmd"
#define MESSAGE_BUFFER_SIZE   256

Enumerations

enum  app_state_t {
  STATE_INIT = 0 , STATE_LISTENING = 1 , STATE_PROCESSING = 2 , STATE_ERROR = 3 ,
  STATE_SHUTDOWN = 4
}
enum  msg_type_t { MSG_TYPE_PING = 1 , MSG_TYPE_TRAIN_UPDATE = 2 , MSG_TYPE_SIGNAL_QUERY = 3 , MSG_TYPE_SHUTDOWN = 99 }

Functions

static rte_status_t qnx_init_channel (void)
 Initialize QNX message channel.
static rte_status_t process_train_update (const train_message_t *msg, cmd_reply_t *reply)
 Process train update message.
static rte_status_t handle_message (train_message_t *msg, int rcvid)
 Handle incoming message.
static rte_status_t server_loop (void)
 Main server loop.
static rte_status_t app_shutdown (void)
 Shutdown application.
int main (int argc, char *argv[])

Variables

static app_context_t g_app

Detailed Description

QNX RTOS example application demonstrating RteFramework.

This example shows a railway control server running on QNX RTOS with deterministic real-time guarantees. It demonstrates:

  • QNX message passing (MsgSend, MsgReceive)
  • Real-time task scheduling
  • Deterministic message processing
  • Safe state management
  • Structured logging in RTOS environment
  • Integration with RteFramework OAL

Use case: Train control server

  • Receives train position updates via QNX message passing
  • Processes signals/track state
  • Broadcasts control commands
  • Deterministic timing for safety-critical operations

Compilation: Use cmake with Toolchain-QNX.cmake

Definition in file main.c.

Macro Definition Documentation

◆ SERVER_NAME

#define SERVER_NAME   "railway-server"

Definition at line 41 of file main.c.

◆ CHANNEL_NAME

#define CHANNEL_NAME   "/railway/cmd"

Definition at line 42 of file main.c.

◆ MESSAGE_BUFFER_SIZE

#define MESSAGE_BUFFER_SIZE   256

Definition at line 43 of file main.c.

Enumeration Type Documentation

◆ app_state_t

enum app_state_t

Definition at line 46 of file main.c.

◆ msg_type_t

enum msg_type_t

Definition at line 75 of file main.c.

Function Documentation

◆ qnx_init_channel()

rte_status_t qnx_init_channel ( void )
static

Initialize QNX message channel.

Definition at line 104 of file main.c.

◆ process_train_update()

rte_status_t process_train_update ( const train_message_t * msg,
cmd_reply_t * reply )
static

Process train update message.

Definition at line 125 of file main.c.

◆ handle_message()

rte_status_t handle_message ( train_message_t * msg,
int rcvid )
static

Handle incoming message.

Definition at line 167 of file main.c.

◆ server_loop()

rte_status_t server_loop ( void )
static

Main server loop.

Definition at line 217 of file main.c.

◆ app_shutdown()

rte_status_t app_shutdown ( void )
static

Shutdown application.

Definition at line 267 of file main.c.

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 286 of file main.c.

Variable Documentation

◆ g_app

app_context_t g_app
static
Initial value:
= {
.chid = -1,
.coid = -1,
.state = STATE_INIT,
.messages_received = 0,
.messages_processed = 0,
.errors = 0,
.running = 1
}

Definition at line 64 of file main.c.