rsmp_schemer 0.2.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +5 -5
  4. data/lib/rsmp_schemer/schemer.rb +24 -15
  5. data/lib/rsmp_schemer/version.rb +1 -1
  6. data/schemas/tlc_1.0.10/schema/tlc/alarms/A0301.json +1 -1
  7. data/schemas/tlc_1.0.10/schema/tlc/alarms/A0302.json +1 -1
  8. data/schemas/tlc_1.0.10/schema/tlc/commands/M0002.json +1 -1
  9. data/schemas/tlc_1.0.10/schema/tlc/commands/M0003.json +1 -1
  10. data/schemas/tlc_1.0.10/schema/tlc/commands/M0004.json +1 -1
  11. data/schemas/tlc_1.0.10/schema/tlc/commands/M0005.json +1 -1
  12. data/schemas/tlc_1.0.10/schema/tlc/commands/M0006.json +1 -1
  13. data/schemas/tlc_1.0.10/schema/tlc/commands/M0007.json +1 -1
  14. data/schemas/tlc_1.0.10/schema/tlc/commands/M0008.json +2 -2
  15. data/schemas/tlc_1.0.10/schema/tlc/commands/M0010.json +1 -1
  16. data/schemas/tlc_1.0.10/schema/tlc/commands/M0011.json +1 -1
  17. data/schemas/tlc_1.0.10/schema/tlc/commands/M0019.json +100 -0
  18. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0001.json +1 -1
  19. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0005.json +1 -1
  20. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0006.json +1 -1
  21. data/schemas/tlc_1.0.10/schema/tlc/statuses/statuses.json +1 -257
  22. data/schemas/tlc_1.0.13/schema/tlc/alarms/A0301.json +1 -1
  23. data/schemas/tlc_1.0.13/schema/tlc/alarms/A0302.json +1 -1
  24. data/schemas/tlc_1.0.13/schema/tlc/commands/M0002.json +1 -1
  25. data/schemas/tlc_1.0.13/schema/tlc/commands/M0003.json +1 -1
  26. data/schemas/tlc_1.0.13/schema/tlc/commands/M0004.json +1 -1
  27. data/schemas/tlc_1.0.13/schema/tlc/commands/M0005.json +1 -1
  28. data/schemas/tlc_1.0.13/schema/tlc/commands/M0006.json +1 -1
  29. data/schemas/tlc_1.0.13/schema/tlc/commands/M0007.json +1 -1
  30. data/schemas/tlc_1.0.13/schema/tlc/commands/M0008.json +2 -2
  31. data/schemas/tlc_1.0.13/schema/tlc/commands/M0010.json +1 -1
  32. data/schemas/tlc_1.0.13/schema/tlc/commands/M0011.json +1 -1
  33. data/schemas/tlc_1.0.13/schema/tlc/commands/M0019.json +2 -2
  34. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0001.json +1 -1
  35. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0005.json +1 -1
  36. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0006.json +1 -1
  37. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0023.json +1 -1
  38. data/schemas/tlc_1.0.13/schema/tlc/statuses/statuses.json +1 -99
  39. data/schemas/tlc_1.0.13/spec/tlc/S0023_spec.rb +96 -0
  40. data/schemas/tlc_1.0.14/schema/tlc/alarms/A0301.json +1 -1
  41. data/schemas/tlc_1.0.14/schema/tlc/alarms/A0302.json +1 -1
  42. data/schemas/tlc_1.0.14/schema/tlc/commands/M0002.json +1 -1
  43. data/schemas/tlc_1.0.14/schema/tlc/commands/M0003.json +1 -1
  44. data/schemas/tlc_1.0.14/schema/tlc/commands/M0004.json +1 -1
  45. data/schemas/tlc_1.0.14/schema/tlc/commands/M0005.json +1 -1
  46. data/schemas/tlc_1.0.14/schema/tlc/commands/M0006.json +1 -1
  47. data/schemas/tlc_1.0.14/schema/tlc/commands/M0007.json +1 -1
  48. data/schemas/tlc_1.0.14/schema/tlc/commands/M0008.json +2 -2
  49. data/schemas/tlc_1.0.14/schema/tlc/commands/M0010.json +1 -1
  50. data/schemas/tlc_1.0.14/schema/tlc/commands/M0011.json +1 -1
  51. data/schemas/tlc_1.0.14/schema/tlc/commands/M0019.json +2 -2
  52. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0001.json +1 -1
  53. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0005.json +1 -1
  54. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0006.json +1 -1
  55. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0023.json +1 -1
  56. data/schemas/tlc_1.0.14/schema/tlc/statuses/statuses.json +0 -34
  57. data/schemas/tlc_1.0.14/spec/tlc/S0023_spec.rb +96 -0
  58. data/schemas/tlc_1.0.15/schema/tlc/statuses/S0001.json +1 -1
  59. data/schemas/tlc_1.0.15/schema/tlc/statuses/S0023.json +1 -1
  60. data/schemas/tlc_1.0.15/spec/tlc/S0023_spec.rb +96 -0
  61. data/schemas/tlc_1.0.7/schema/tlc/alarms/A0301.json +1 -1
  62. data/schemas/tlc_1.0.7/schema/tlc/alarms/A0302.json +1 -1
  63. data/schemas/tlc_1.0.7/schema/tlc/commands/M0002.json +1 -1
  64. data/schemas/tlc_1.0.7/schema/tlc/commands/M0003.json +1 -1
  65. data/schemas/tlc_1.0.7/schema/tlc/commands/M0004.json +1 -1
  66. data/schemas/tlc_1.0.7/schema/tlc/commands/M0005.json +1 -1
  67. data/schemas/tlc_1.0.7/schema/tlc/commands/M0006.json +1 -1
  68. data/schemas/tlc_1.0.7/schema/tlc/commands/M0007.json +1 -1
  69. data/schemas/tlc_1.0.7/schema/tlc/commands/M0008.json +2 -2
  70. data/schemas/tlc_1.0.7/schema/tlc/commands/M0010.json +1 -1
  71. data/schemas/tlc_1.0.7/schema/tlc/commands/M0011.json +1 -1
  72. data/schemas/tlc_1.0.7/schema/tlc/commands/M0019.json +100 -0
  73. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0001.json +1 -1
  74. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0005.json +1 -1
  75. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0006.json +1 -1
  76. data/schemas/tlc_1.0.7/schema/tlc/statuses/statuses.json +1 -77
  77. data/schemas/tlc_1.0.8/schema/tlc/alarms/A0301.json +1 -1
  78. data/schemas/tlc_1.0.8/schema/tlc/alarms/A0302.json +1 -1
  79. data/schemas/tlc_1.0.8/schema/tlc/commands/M0002.json +1 -1
  80. data/schemas/tlc_1.0.8/schema/tlc/commands/M0003.json +1 -1
  81. data/schemas/tlc_1.0.8/schema/tlc/commands/M0004.json +1 -1
  82. data/schemas/tlc_1.0.8/schema/tlc/commands/M0005.json +1 -1
  83. data/schemas/tlc_1.0.8/schema/tlc/commands/M0006.json +1 -1
  84. data/schemas/tlc_1.0.8/schema/tlc/commands/M0007.json +1 -1
  85. data/schemas/tlc_1.0.8/schema/tlc/commands/M0008.json +2 -2
  86. data/schemas/tlc_1.0.8/schema/tlc/commands/M0010.json +1 -1
  87. data/schemas/tlc_1.0.8/schema/tlc/commands/M0011.json +1 -1
  88. data/schemas/tlc_1.0.8/schema/tlc/commands/M0019.json +100 -0
  89. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0001.json +1 -1
  90. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0005.json +1 -1
  91. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0006.json +1 -1
  92. data/schemas/tlc_1.0.8/schema/tlc/statuses/statuses.json +1 -77
  93. data/schemas/tlc_1.0.9/schema/tlc/alarms/A0301.json +1 -1
  94. data/schemas/tlc_1.0.9/schema/tlc/alarms/A0302.json +1 -1
  95. data/schemas/tlc_1.0.9/schema/tlc/commands/M0002.json +1 -1
  96. data/schemas/tlc_1.0.9/schema/tlc/commands/M0003.json +1 -1
  97. data/schemas/tlc_1.0.9/schema/tlc/commands/M0004.json +1 -1
  98. data/schemas/tlc_1.0.9/schema/tlc/commands/M0005.json +1 -1
  99. data/schemas/tlc_1.0.9/schema/tlc/commands/M0006.json +1 -1
  100. data/schemas/tlc_1.0.9/schema/tlc/commands/M0007.json +1 -1
  101. data/schemas/tlc_1.0.9/schema/tlc/commands/M0008.json +2 -2
  102. data/schemas/tlc_1.0.9/schema/tlc/commands/M0010.json +1 -1
  103. data/schemas/tlc_1.0.9/schema/tlc/commands/M0011.json +1 -1
  104. data/schemas/tlc_1.0.9/schema/tlc/commands/M0019.json +100 -0
  105. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0001.json +1 -1
  106. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0005.json +1 -1
  107. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0006.json +1 -1
  108. data/schemas/tlc_1.0.9/schema/tlc/statuses/statuses.json +1 -77
  109. metadata +10 -3
@@ -0,0 +1,96 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ let(:message) {{
3
+ "mType" => "rSMsg",
4
+ "mId" => "4173c2c8-a933-43cb-9425-66d4613731ed",
5
+ "type" => "StatusResponse",
6
+ "cId" => "O+14439=481WA001",
7
+ "sTs" => "2015-06-08T09:15:18.266Z",
8
+ "sS" => [
9
+ { "sCI" => "S0023", "n" => "status", "s" => "", "q" => "recent" }
10
+ ]
11
+ }}
12
+
13
+ it 'accepts empty list' do
14
+ message["sS"][0]['s'] = ''
15
+ expect( validate(message) ).to be_nil
16
+ end
17
+ it 'accepts one digit' do
18
+ message["sS"][0]['s'] = '1-1-0'
19
+ expect( validate(message) ).to be_nil
20
+ end
21
+
22
+ it 'accepts two digits' do
23
+ message["sS"][0]['s'] = '01-01-20'
24
+ expect( validate(message) ).to be_nil
25
+ end
26
+
27
+ it 'rejects three digits or more' do
28
+ message["sS"][0]['s'] = '01-01-100'
29
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
30
+
31
+ message["sS"][0]['s'] = '100-01-01'
32
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
33
+ end
34
+
35
+ it 'accepts comma-separated items' do
36
+ message["sS"][0]['s'] = '1-1-0,1-2-0'
37
+ expect( validate(message) ).to be_nil
38
+
39
+ message["sS"][0]['s'] = '1-1-0,1-2-0,2-4-5'
40
+ expect( validate(message) ).to be_nil
41
+ end
42
+
43
+ it 'rejects comma-separated lists with spaces' do
44
+ message["sS"][0]['s'] = '1-1-0, 1-2-0'
45
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
46
+
47
+ message["sS"][0]['s'] = '1-1-0 ,1-2-0'
48
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
49
+ end
50
+
51
+ it 'rejects comma-separated lists with trailing comma' do
52
+ message["sS"][0]['s'] = '1-1-0,'
53
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
54
+ end
55
+
56
+ it 'rejects comma-separated lists with leading comma' do
57
+ message["sS"][0]['s'] = ',1-1-0'
58
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
59
+ end
60
+
61
+ it 'rejects comma-separated lists with empty items' do
62
+ message["sS"][0]['s'] = '1-1-0,,1-2-0'
63
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
64
+ end
65
+
66
+ it 'rejects negatives' do
67
+ message["sS"][0]['s'] = '-1-2-3'
68
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
69
+
70
+ message["sS"][0]['s'] = '1--2-3'
71
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
72
+
73
+ message["sS"][0]['s'] = '1-2--3'
74
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
75
+ end
76
+
77
+ it 'rejects floats' do
78
+ message["sS"][0]['s'] = '.1-2-3'
79
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
80
+
81
+ message["sS"][0]['s'] = '1-.2-3'
82
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
83
+
84
+ message["sS"][0]['s'] = '1-2-.3'
85
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
86
+
87
+ message["sS"][0]['s'] = '1.-2-3'
88
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
89
+
90
+ message["sS"][0]['s'] = '1-2.-3'
91
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
92
+
93
+ message["sS"][0]['s'] = '1-2-3.'
94
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
95
+ end
96
+ end
@@ -29,7 +29,7 @@
29
29
  "s" : {
30
30
  "description" : "Signal group status as text field",
31
31
  "type" : "string",
32
- "pattern" : "^[a-hA-G0-9N-P]+$"
32
+ "pattern" : "^[a-hA-G0-9N-P]*$"
33
33
  }
34
34
  }
35
35
  }
@@ -26,7 +26,7 @@
26
26
  "s" : {
27
27
  "description" : "Dynamic bands.\nEach dynamic band are written as pp-dd-ee where:\npp=Time plan\ndd=Dynamic band number (from 1-10)\nee=Extension in seconds in this band\n\nEach dynamic band is separated with a comma.\n\nE.g.\npp-dd-ee,pp-dd-ee",
28
28
  "type" : "string",
29
- "pattern" : "^(\\d{1,2}\\-\\d{1,2}-\\d{1,2})(?:,(\\d{1,2}\\-\\d{1,2}-\\d{1,2}))*$"
29
+ "pattern" : "(^$)|(^(?<item>(\\d{1,2})\\-\\d{1,2}-\\d{1,2})(,\\g<item>)*$)"
30
30
  }
31
31
  }
32
32
  }
@@ -0,0 +1,96 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ let(:message) {{
3
+ "mType" => "rSMsg",
4
+ "mId" => "4173c2c8-a933-43cb-9425-66d4613731ed",
5
+ "type" => "StatusResponse",
6
+ "cId" => "O+14439=481WA001",
7
+ "sTs" => "2015-06-08T09:15:18.266Z",
8
+ "sS" => [
9
+ { "sCI" => "S0023", "n" => "status", "s" => "", "q" => "recent" }
10
+ ]
11
+ }}
12
+
13
+ it 'accepts empty list' do
14
+ message["sS"][0]['s'] = ''
15
+ expect( validate(message) ).to be_nil
16
+ end
17
+ it 'accepts one digit' do
18
+ message["sS"][0]['s'] = '1-1-0'
19
+ expect( validate(message) ).to be_nil
20
+ end
21
+
22
+ it 'accepts two digits' do
23
+ message["sS"][0]['s'] = '01-01-20'
24
+ expect( validate(message) ).to be_nil
25
+ end
26
+
27
+ it 'rejects three digits or more' do
28
+ message["sS"][0]['s'] = '01-01-100'
29
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
30
+
31
+ message["sS"][0]['s'] = '100-01-01'
32
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
33
+ end
34
+
35
+ it 'accepts comma-separated items' do
36
+ message["sS"][0]['s'] = '1-1-0,1-2-0'
37
+ expect( validate(message) ).to be_nil
38
+
39
+ message["sS"][0]['s'] = '1-1-0,1-2-0,2-4-5'
40
+ expect( validate(message) ).to be_nil
41
+ end
42
+
43
+ it 'rejects comma-separated lists with spaces' do
44
+ message["sS"][0]['s'] = '1-1-0, 1-2-0'
45
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
46
+
47
+ message["sS"][0]['s'] = '1-1-0 ,1-2-0'
48
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
49
+ end
50
+
51
+ it 'rejects comma-separated lists with trailing comma' do
52
+ message["sS"][0]['s'] = '1-1-0,'
53
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
54
+ end
55
+
56
+ it 'rejects comma-separated lists with leading comma' do
57
+ message["sS"][0]['s'] = ',1-1-0'
58
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
59
+ end
60
+
61
+ it 'rejects comma-separated lists with empty items' do
62
+ message["sS"][0]['s'] = '1-1-0,,1-2-0'
63
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
64
+ end
65
+
66
+ it 'rejects negatives' do
67
+ message["sS"][0]['s'] = '-1-2-3'
68
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
69
+
70
+ message["sS"][0]['s'] = '1--2-3'
71
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
72
+
73
+ message["sS"][0]['s'] = '1-2--3'
74
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
75
+ end
76
+
77
+ it 'rejects floats' do
78
+ message["sS"][0]['s'] = '.1-2-3'
79
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
80
+
81
+ message["sS"][0]['s'] = '1-.2-3'
82
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
83
+
84
+ message["sS"][0]['s'] = '1-2-.3'
85
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
86
+
87
+ message["sS"][0]['s'] = '1.-2-3'
88
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
89
+
90
+ message["sS"][0]['s'] = '1-2.-3'
91
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
92
+
93
+ message["sS"][0]['s'] = '1-2-3.'
94
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
95
+ end
96
+ end
@@ -96,7 +96,7 @@
96
96
  "properties" : {
97
97
  "v" : {
98
98
  "description" : "Manually controlled detector logic (True/False)",
99
- "type" : "boolean"
99
+ "$ref" : "../../core/definitions.json#/boolean"
100
100
  }
101
101
  }
102
102
  }
@@ -97,7 +97,7 @@
97
97
  "properties" : {
98
98
  "v" : {
99
99
  "description" : "Manually controlled detector logic (True/False)",
100
- "type" : "boolean"
100
+ "$ref" : "../../core/definitions.json#/boolean"
101
101
  }
102
102
  }
103
103
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses time plan according to programming\nTrue: Controller uses time plan according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses traffic situation according to own programming\nTrue: Controller uses traffic situation according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "True: Restart controller",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Activate emergency route\nTrue: Deactivate emergency route",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate input\nTrue: Activate input",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: Deactivate fixed time control\nTrue: Activate fixed time control",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate manual control of detector logic\nTrue: Activate manual control of detector logic",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -70,7 +70,7 @@
70
70
  "properties" : {
71
71
  "v" : {
72
72
  "description" : "False: Deactivate detector logic\nTrue: Activate detector logic",
73
- "type" : "boolean"
73
+ "$ref" : "../../core/definitions.json#/boolean"
74
74
  }
75
75
  }
76
76
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to green",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to red",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -0,0 +1,100 @@
1
+ {
2
+ "allOf" : [
3
+ {
4
+ "description" : "Force input\n\nForce a given input (1-255) of the controllers general purpose I/O to either True or False. Can be used for all types of input where the traffic light controller must react to external control.\n\nCan be used for bus priority, coordination between traffic controllers, external control systems, and much more.\n\nRequires security code 2.",
5
+ "properties" : {
6
+ "n" : {
7
+ "enum" : [
8
+ "input",
9
+ "inputValue",
10
+ "securityCode",
11
+ "status"
12
+ ]
13
+ },
14
+ "cO" : {
15
+ "const" : "setInput"
16
+ }
17
+ }
18
+ },
19
+ {
20
+ "if" : {
21
+ "required" : [
22
+ "n"
23
+ ],
24
+ "properties" : {
25
+ "n" : {
26
+ "const" : "status"
27
+ }
28
+ }
29
+ },
30
+ "then" : {
31
+ "properties" : {
32
+ "v" : {
33
+ "description" : "False: Force input\nTrue: Release input",
34
+ "$ref" : "../../core/definitions.json#/boolean"
35
+ }
36
+ }
37
+ }
38
+ },
39
+ {
40
+ "if" : {
41
+ "required" : [
42
+ "n"
43
+ ],
44
+ "properties" : {
45
+ "n" : {
46
+ "const" : "securityCode"
47
+ }
48
+ }
49
+ },
50
+ "then" : {
51
+ "properties" : {
52
+ "v" : {
53
+ "description" : "Security code 2",
54
+ "type" : "string"
55
+ }
56
+ }
57
+ }
58
+ },
59
+ {
60
+ "if" : {
61
+ "required" : [
62
+ "n"
63
+ ],
64
+ "properties" : {
65
+ "n" : {
66
+ "const" : "input"
67
+ }
68
+ }
69
+ },
70
+ "then" : {
71
+ "properties" : {
72
+ "v" : {
73
+ "description" : "Number of Input",
74
+ "$ref" : "../../core/definitions.json#/integer"
75
+ }
76
+ }
77
+ }
78
+ },
79
+ {
80
+ "if" : {
81
+ "required" : [
82
+ "n"
83
+ ],
84
+ "properties" : {
85
+ "n" : {
86
+ "const" : "inputValue"
87
+ }
88
+ }
89
+ },
90
+ "then" : {
91
+ "properties" : {
92
+ "v" : {
93
+ "description" : "False: input forced to False\nTrue: input forced to True",
94
+ "$ref" : "../../core/definitions.json#/boolean"
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ]
100
+ }
@@ -29,7 +29,7 @@
29
29
  "s" : {
30
30
  "description" : "Signal group status as text field",
31
31
  "type" : "string",
32
- "pattern" : "^[a-hA-G0-9N-P]+$"
32
+ "pattern" : "^[a-hA-G0-9N-P]*$"
33
33
  }
34
34
  }
35
35
  }
@@ -25,7 +25,7 @@
25
25
  "properties" : {
26
26
  "s" : {
27
27
  "description" : "False: Controller is not in start up mode\nTrue: Controller is currently in start up mode",
28
- "type" : "boolean"
28
+ "$ref" : "../../core/definitions.json#/boolean"
29
29
  }
30
30
  }
31
31
  }
@@ -26,7 +26,7 @@
26
26
  "properties" : {
27
27
  "s" : {
28
28
  "description" : "False: Emergency stage inactive\nTrue: Emergency stage active",
29
- "type" : "boolean"
29
+ "$ref" : "../../core/definitions.json#/boolean"
30
30
  }
31
31
  }
32
32
  }
@@ -28,30 +28,14 @@
28
28
  "S0019",
29
29
  "S0020",
30
30
  "S0021",
31
- "S0022",
32
- "S0023",
33
- "S0024",
34
- "S0025",
35
- "S0026",
36
- "S0027",
37
- "S0028",
38
- "S0029",
39
- "S0030",
40
- "S0031",
41
31
  "S0091",
42
32
  "S0092",
43
33
  "S0095",
44
34
  "S0096",
45
- "S0097",
46
- "S0098",
47
35
  "S0201",
48
36
  "S0202",
49
37
  "S0203",
50
- "S0204",
51
- "S0205",
52
- "S0206",
53
- "S0207",
54
- "S0208"
38
+ "S0204"
55
39
  ]
56
40
  }
57
41
  }
@@ -670,66 +654,6 @@
670
654
  "then" : {
671
655
  "$ref" : "S0204.json"
672
656
  }
673
- },
674
- {
675
- "if" : {
676
- "required" : [
677
- "sCI"
678
- ],
679
- "properties" : {
680
- "sCI" : {
681
- "const" : "S0205"
682
- }
683
- }
684
- },
685
- "then" : {
686
- "$ref" : "S0205.json"
687
- }
688
- },
689
- {
690
- "if" : {
691
- "required" : [
692
- "sCI"
693
- ],
694
- "properties" : {
695
- "sCI" : {
696
- "const" : "S0206"
697
- }
698
- }
699
- },
700
- "then" : {
701
- "$ref" : "S0206.json"
702
- }
703
- },
704
- {
705
- "if" : {
706
- "required" : [
707
- "sCI"
708
- ],
709
- "properties" : {
710
- "sCI" : {
711
- "const" : "S0207"
712
- }
713
- }
714
- },
715
- "then" : {
716
- "$ref" : "S0207.json"
717
- }
718
- },
719
- {
720
- "if" : {
721
- "required" : [
722
- "sCI"
723
- ],
724
- "properties" : {
725
- "sCI" : {
726
- "const" : "S0208"
727
- }
728
- }
729
- },
730
- "then" : {
731
- "$ref" : "S0208.json"
732
- }
733
657
  }
734
658
  ]
735
659
  }
@@ -96,7 +96,7 @@
96
96
  "properties" : {
97
97
  "v" : {
98
98
  "description" : "Manually controlled detector logic (True/False)",
99
- "type" : "boolean"
99
+ "$ref" : "../../core/definitions.json#/boolean"
100
100
  }
101
101
  }
102
102
  }
@@ -97,7 +97,7 @@
97
97
  "properties" : {
98
98
  "v" : {
99
99
  "description" : "Manually controlled detector logic (True/False)",
100
- "type" : "boolean"
100
+ "$ref" : "../../core/definitions.json#/boolean"
101
101
  }
102
102
  }
103
103
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses time plan according to programming\nTrue: Controller uses time plan according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses traffic situation according to own programming\nTrue: Controller uses traffic situation according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "True: Restart controller",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Activate emergency route\nTrue: Deactivate emergency route",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate input\nTrue: Activate input",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: Deactivate fixed time control\nTrue: Activate fixed time control",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate manual control of detector logic\nTrue: Activate manual control of detector logic",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -70,7 +70,7 @@
70
70
  "properties" : {
71
71
  "v" : {
72
72
  "description" : "False: Deactivate detector logic\nTrue: Activate detector logic",
73
- "type" : "boolean"
73
+ "$ref" : "../../core/definitions.json#/boolean"
74
74
  }
75
75
  }
76
76
  }