Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 15 Next »

WORK IN PROGRESS - MIGHT BE SUBJECT TO CHANGE

Both the controller and the client GUI send their data as JSON Objects.
In JSON every Object is an unordered set of key/value pairs. The values of these pairs can be a JSON Object, a JSON Array or a primitive value (integer, string, boolean or null).
For more information or a complete grammar see http://www.json.org/.

Messages sent by Controller

  • Every message must provide the keys msgType and data.
  • Valid values for msgType are log, error or status.

Log messages

For log messages the data segment consists of a JSON Array, containing zero or more strings.

Error messages

For error messages the data segment consists of one single string, describing the error.

Status messages

In status messages the data segment is a JSON Object which must contain the following key/value pairs.

  • debug - true if the controller is set to verbose debug output, false otherwise
  • cleanup - true after cleanup mode has been engaged, false before that point
  • pause - true while the controller is paused, false otherwise
  • write - true if receiving client has write access, false otherwise
  • trainCount - an integer with the number of active trains on the railway
  • trains - a JSON Array with the data of all trains, each entry is a JSON Object with these values
    • trainNum - the individual controller number of the train
    • waiting - boolean value, true if the train is waiting in a station, false otherwise REMOVED
    • waitTime - (integer) remaining milliseconds until departure (0 if not waiting) CHANGED
    • spdSlow - the integer PWM value of this train while driving slow
    • spdCaution - the integer PWM value of this train while driving caution
    • spdNormal - the integer PWM value of this train while driving normally
    • currentIndex -an integer describing the current position in the schedule
    • schedule - a JSON Array of integer values, representing the station tracks, encoded in the following fashion

      NumberTrackNumberTrackNumberTrackNumberTrack
      0KH_ST_18KH_ST_1 (reverse)16IC_ST_124OC_ST_1
      1KH_ST_29KH_ST_2 (reverse)17IC_ST_225OC_ST_2
      2KH_ST_310KH_ST_3 (reverse)18IC_ST_326OC_ST_3
      3KH_ST_411KH_ST_4 (reverse)    
      4KH_ST_512KH_ST_5 (reverse)    
  • locks - a JSON Array containing the current value of the track permissions, ordered by the default encoding (Hoermann API)
  • tickTime - Time consumption of tick function. 3 element array [min,avg,max].
  • overallTime -  Time consumption of overall controller loop. 3 element array [min,avg,max].

 

Sample status
<<OUTDATED>>

{"msgType":"status",
	"data":{
		"debug":false,
		"cleanup":false,
		"pause":false,
		"trainCount":8,
		"trains":[
			{"trainNum":0, "waiting":false, "waitTime":0, "spdSlow":40, "spdCaution":60, "spdNormal":100, "currentIndex":2, "schedule":[8, 10, 25, 29, 41, 43]},
			{"trainNum":1, "waiting":true, "waitTime":1234545667, "spdSlow":50, "spdCaution":70, "spdNormal":100, "currentIndex":0, "schedule":[8]},
			... ],
		"locks":[-1, -1, -1, 5, -1, -1, 2, 10, -1, -1, ..., -1]}}

[One line to test via netcat]
{"msgType":"status", "data":{"debug":false, "cleanup":false, "pause":false, "trainCount":8, "trains":[ {"trainNum":0, "waiting":false, "waitTime":0, "spdSlow":40, "spdCaution":60, "spdNormal":100, "currentIndex":2, "schedule":[1, 1, 11, 14, 6]}, {"trainNum":1, "waiting":true, "waitTime":9999999999, "spdSlow":51, "spdCaution":71, "spdNormal":101, "currentIndex":0, "schedule":[2, 1, 11, 14, 6]}, {"trainNum":2, "waiting":false, "waitTime":0, "spdSlow":52, "spdCaution":72, "spdNormal":102, "currentIndex":1, "schedule":[3, 1, 11, 14, 6]}, {"trainNum":3, "waiting":false, "waitTime":0, "spdSlow":53, "spdCaution":73, "spdNormal":103, "currentIndex":1, "schedule":[4, 1, 11, 14, 6]}, {"trainNum":4, "waiting":false, "waitTime":0, "spdSlow":54, "spdCaution":74, "spdNormal":104, "currentIndex":2, "schedule":[5, 1, 11, 14, 6]}, {"trainNum":5, "waiting":false, "waitTime":0, "spdSlow":55, "spdCaution":75, "spdNormal":105, "currentIndex":3, "schedule":[6, 1, 11, 14, 6]}, {"trainNum":6, "waiting":false, "waitTime":0, "spdSlow":56, "spdCaution":76, "spdNormal":106, "currentIndex":1, "schedule":[7, 1, 11, 14, 6]}, {"trainNum":7, "waiting":false, "waitTime":0, "spdSlow":57, "spdCaution":77, "spdNormal":107, "currentIndex":0, "schedule":[8, 1, 11, 14, 6]}], "locks":[-1, -1, -1, 5, -1, -1, 2, 3, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1]}}

Messages received by controller

  • Every message must contain the key command.
  • Depending on the command, additional keys might be required.

Valid commands

  • STATUS - Poll for the current status, should trigger a status reply message
  • SHUTDOWN - Causing the controller to end the program and close all sockets
  • LOGOUT - Closing the connection, leaving the controller running
  • PAUSE - suspend or resume the controller, must supply additional payload
    • state - boolean value, true if controller should be suspended
  • WRITE - Acquire write access mutex to the controller
  • CLEANUP (write) - Start the cleanup procedure, sending the trains back to their home tacks
  • DEBUG (write) - enable or disable verbose output, must supply additional payload
    • state - boolean value, true if verbose output should be activated
  • LIGHT (write) - activate or deactivate the lights on the railway, must supply additional payload
    • state - boolean value, true if lights should be lit
  • WAIT (write) - Force a train to wait in the next station, must supply additional payload
    • train - integer train identification
  • START (write) - Force a waiting train to immediately abort the waiting timer, must supply additional payload
    • train - integer train identification
  • SCHEDULE (write) - Set the new schedule for a train, needs additional payload
    • train - integer train identification
    • currentIndex - current integer position in the schedule array
    • tracks - a JSON Array of integer values, representing the station tracks in encoding above
  • SPEED (write) - Change the speed settings of a train, needs additional payload
    • train - integer train identification
    • speeds - JSON Array with three integer values spdSlow, spdCaution, spdNormal
  • TIME (write) - Change the waiting times for a train
    • train - integer train identification
    • times - DEFINE A FORMAT FOR THIS
  • No labels