README.md 12.3 KB
Newer Older
Maxime Perrotin's avatar
Maxime Perrotin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
OpenGEODE
=========

OpenGEODE is a tiny open-source SDL editor that is developed for
the purpose of providing an easy to use and free state machine editor and
Ada code generator to the TASTE toolchain from the European Space Agency,
running in combination with ESA's ASN.1 "Space Certifiable" ASN.1 compiler.

SDL is the Specification and Description Language (Z100 standard from ITU-T).

This is NOT related to the graphical Simple DirectMedia Layer libraries!

Visit http://sdl-forum.org for more information about SDL.
14
15
16
17
18
19
20
21
22
23
Visit http://www.pragmadev.com to get a full-featured commercial SDL tool and support


![alt tag](icons/opengeode-screenshot.png)


Features
--------

- Graphical editor of SDL processes and procedures.
Maxime Perrotin's avatar
Maxime Perrotin committed
24
25
26
- SDL2010 features: state composition and state aggregation
- Works on pure PR+CIF files (textual SDL notation)
- Supports ASN.1 data types - using ESA Space Certified compiler (www.github.com/ttsiodras/asn1scc)
Maxime Perrotin's avatar
Maxime Perrotin committed
27
- Generates Ada code
dbarbera's avatar
dbarbera committed
28
- Automatic conversion to Statechart diagrams
29
- Save the complete or parts of the model to PNG/SVG/PDF files
dbarbera's avatar
dbarbera committed
30
31
32
33
- Hyperlinks (link a symbol content to any external document or web page)
- Context-dependent text auto-completion
- Syntax highlighting
- Undo/Redo, Copy-Paste
34
- (Limited) VIM mode - You can use :wq or :%s,search,replace,g, and /search pattern
dbarbera's avatar
dbarbera committed
35
- SDL to LLVM code generation
Maxime Perrotin's avatar
Maxime Perrotin committed
36
- Python API to parse and render SDL from other Python modules
Maxime Perrotin's avatar
Maxime Perrotin committed
37
38
39
40

Installation
============

41
42
43
44
45
46
On Windows, download the binary from [here](http://download.tuxfamily.org/taste/opengeode_windows.zip)

Uzip it and run opengeode.exe. It contains everything without any other external dependencies.

Linux Pre-requisites
--------------------
Maxime Perrotin's avatar
Maxime Perrotin committed
47

Maxime Perrotin's avatar
Maxime Perrotin committed
48
To install OpenGEODE on Linux you need to install some system-level dependencies:
Maxime Perrotin's avatar
Maxime Perrotin committed
49

Maxime Perrotin's avatar
Maxime Perrotin committed
50
51
52
- Python 2.7 with pip (installed by default on nearly all Linux distributions)
- Pyside
- Graphviz
53
- [ASN1SCC](https://github.com/ttsiodras/asn1scc)
Maxime Perrotin's avatar
Maxime Perrotin committed
54
55
56
- GNAT

And optionally llvm and llvmpy
Maxime Perrotin's avatar
Maxime Perrotin committed
57

Maxime Perrotin's avatar
Maxime Perrotin committed
58
On Debian, Ubuntu, and probably other distributions:
Maxime Perrotin's avatar
Maxime Perrotin committed
59

60
```bash
Maxime Perrotin's avatar
Maxime Perrotin committed
61
$ sudo apt-get install pkg-config python-pyside pyside-tools graphviz \
Maxime Perrotin's avatar
Maxime Perrotin committed
62
                       graphviz-dev libgraphviz-dev  python-pip gnat-4.8 \
Maxime Perrotin's avatar
Maxime Perrotin committed
63
64
65
66
67
                       libmono-system-runtime4.0-cil libmono-corlib4.0-cil \
                       libmono-system-runtime-serialization-formatters-soap4.0-cil \
                       libmono-system-web4.0-cil libmono-system-xml4.0-cil \
                       libmono-system4.0-cil mono-runtime libmono-system-numerics4.0-cil \
                       libmono-system-data-linq4.0-cil libmono-corlib2.0-cil libmono-system2.0-cil
68
```
Maxime Perrotin's avatar
Maxime Perrotin committed
69

Maxime Perrotin's avatar
Maxime Perrotin committed
70
To install the ASN.1 compiler:
Maxime Perrotin's avatar
Maxime Perrotin committed
71

72
```bash
Maxime Perrotin's avatar
Maxime Perrotin committed
73
$ cd /opt
Maxime Perrotin's avatar
Maxime Perrotin committed
74
75
76
$ wget http://download.tuxfamily.org/taste/ASN1SCC/ASN1SCC-latest.tgz
$ tar zxvf ASN1SCC-latest.tgz
$ echo 'export PATH=$PATH:/opt/asn1scc' >> ~/.bashrc
77
```
Maxime Perrotin's avatar
Maxime Perrotin committed
78

Maxime Perrotin's avatar
Maxime Perrotin committed
79
Open a new terminal and check that it works:
Maxime Perrotin's avatar
Maxime Perrotin committed
80

Maxime Perrotin's avatar
Maxime Perrotin committed
81
```bash
Maxime Perrotin's avatar
Maxime Perrotin committed
82
$ mono /opt/asn1scc/asn1.exe
Maxime Perrotin's avatar
Maxime Perrotin committed
83
```
Maxime Perrotin's avatar
Maxime Perrotin committed
84

85
Optionally, to install llvmpy and LLVM follow the instructions [here](http://www.llvmpy.org/llvmpy-doc/0.12.7/doc/getting_started.html#installation)
dbarbera's avatar
dbarbera committed
86

87

Maxime Perrotin's avatar
Maxime Perrotin committed
88
89
OpenGEODE installation
----------------------
Maxime Perrotin's avatar
Maxime Perrotin committed
90

91
92
Make sure all dependencies are installed.

93
If you see a certificate error, you may need to run the following commands:
94
95
96
97
98
99

```bash
$ echo -n | openssl s_client -connect gitrepos.estec.esa.int:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > gitrepos.cert
$ sudo cp gitrepos.cert /usr/local/share/ca-certificates/gitrepos.crt
$ sudo update-ca-certificate
```
100

101
Then you can get the software with git:
Maxime Perrotin's avatar
Maxime Perrotin committed
102

103
```bash
Maxime Perrotin's avatar
Maxime Perrotin committed
104
$ git clone --recursive https://github.com/maxime-esa/opengeode.git
dbarbera's avatar
dbarbera committed
105
```
Maxime Perrotin's avatar
Maxime Perrotin committed
106

107
And install it:
Maxime Perrotin's avatar
Maxime Perrotin committed
108

109
```bash
110
$ cd opengeode
Maxime Perrotin's avatar
Maxime Perrotin committed
111
$ make install
112
```
Maxime Perrotin's avatar
Maxime Perrotin committed
113

Maxime Perrotin's avatar
Maxime Perrotin committed
114

Maxime Perrotin's avatar
Maxime Perrotin committed
115
116
117
Information and contact
=======================

Maxime Perrotin's avatar
Maxime Perrotin committed
118
OpenGEODE is part of the [TASTE project](http://taste.tuxfamily.org)
Maxime Perrotin's avatar
Maxime Perrotin committed
119

Maxime Perrotin's avatar
Maxime Perrotin committed
120
For additional information please contact:
Maxime Perrotin's avatar
Maxime Perrotin committed
121
122
maxime (dot) perrotin (at) esa (dot) int

Maxime Perrotin's avatar
Maxime Perrotin committed
123

124
125
126
The LLVM backend was designed and implemented by Diego Barbera during the ESA
Summer of Code 2014.
Some parts implemented by Laurent Meyer (native SDL type support in the parser)
Maxime Perrotin's avatar
Maxime Perrotin committed
127

Maxime Perrotin's avatar
Maxime Perrotin committed
128
129
130

The ASN.1 compiler (ASN1Scc) that OpenGEODE is based on was
developed by George Mamais and Thanassis Tsiodras for the European
131
Space Agency. Information at https://github.com/ttsiodras/asn1scc
Maxime Perrotin's avatar
Maxime Perrotin committed
132
133
134
135
136

Licence
=======

License is LGPL (see file LICENSE)
Maxime Perrotin's avatar
Maxime Perrotin committed
137
138
There is no runtime, and the generated code is not subject to any license.

Maxime Perrotin's avatar
Maxime Perrotin committed
139
The fonts are the fonts from Ubuntu, check licence in file FONT-LICENSE.TXT
Maxime Perrotin's avatar
Maxime Perrotin committed
140
The background pattern was downloaded from www.subtlepatterns.com
Maxime Perrotin's avatar
Maxime Perrotin committed
141
142
143
144

Changelog
=========

Maxime Perrotin's avatar
Maxime Perrotin committed
145
146
147
1.5.26 (02/2017)
    - Statecharts can be configured to filter out signals

148
149
150
1.5.25 (01/2017)
    - Ada backend generates aliased context (used for model checking)

151
152
153
1.5.24 (01/2017)
    - PR file use better indentation for text areas (no line return)

Maxime Perrotin's avatar
Maxime Perrotin committed
154
1.5.23 (12/2016)
155
    - In simulation mode, bugfix in the declaration of the startup function
Maxime Perrotin's avatar
Maxime Perrotin committed
156
    - Code generator prepared for model checking
157

158
159
160
1.5.22 (12/2016)
    - Simulation function save/restore context fix

Maxime Perrotin's avatar
Maxime Perrotin committed
161
162
163
164
1.5.21 (11/2016)
    - Fix regression with test-math (import of external functions)
    - Use monospace font in the HTML rendering of ASN.1 files

165
166
1.5.20 (11/2016)
    - Fix wrongly formatted error reporting in FOR loops
167
168
    - Support SDL2010 dot field separator (variable.field,
      while sdl92 only supported variable!field)
169
170
    - Sequence of literals now support field selectors
      (i.e. { variable.field } is now a valid statement)
171
    - Support inner procedure call with return statement
172

173
174
175
1.5.19 (11/2016)
    - Fix integer cast in Ada

176
177
178
179
1.5.18 (11/2016)
    - Fix parsing of ASN.1 constants that use an annonymous inner type

1.5.17 (11/2016)
Maxime Perrotin's avatar
Maxime Perrotin committed
180
181
    - Fixed issue with initialization of generated code in state aggregations

Maxime Perrotin's avatar
Maxime Perrotin committed
182
183
1.5.16 (11/2016)
    - Fix minor indentation issue when saving
Maxime Perrotin's avatar
Maxime Perrotin committed
184

185
186
187
1.5.15 (10/2016)
    - Report incomplete startup transitions as errors in nested states

Maxime Perrotin's avatar
Maxime Perrotin committed
188
189
190
1.5.14 (10/2016)
    - Support named integers (requires asn1scc 3.3.04 or more recent)

191
192
193
1.5.13 (10/2016)
    - Better support of warnings
    - Fixed detection of CHOICE assignment erros
194
    - Raise error if process miss the start transition
Maxime Perrotin's avatar
Maxime Perrotin committed
195
    - Raise error in case of SEQUENCE OF type mismatch
196

Maxime Perrotin's avatar
Maxime Perrotin committed
197
198
199
1.5.12 (09/2016)
    - Detect duplicate declaration of procedures

200
201
202
1.5.11 (09/2016)
    - Allow semicolon in the declaration of procedures after RETURNS keyword

203
204
205
1.5.10 (09/2016)
    - readonly mode with more restrictions

206
207
208
1.5.9 (09/2016)
    - Added --readonly command line to restrict process modifications

209
210
211
212
1.5.8 (09/2016)
    - Bugfix - Ada backend failed when there were continuous signals in
               nested states but none at root level (missing end if)
    - Load fix when there is no dataview
213
214
    - Additional type checks

Maxime Perrotin's avatar
Maxime Perrotin committed
215
216
217
218
1.5.7 (09/2016)
    - Bugfix - Update completion list of process symbol
    - Sort ASN.1 types in data dictionary

Maxime Perrotin's avatar
Maxime Perrotin committed
219
1.5.6 (08/2016)
Maxime Perrotin's avatar
Maxime Perrotin committed
220
221
222
    - vi interface supports history
    - vi interface for substitution can apply to the whole model (with g)
    - refactoring function via vi interface (eg. %state,fromName,toName,)
Maxime Perrotin's avatar
Maxime Perrotin committed
223
    - Fixed issue with rendering (coordinates of symbols could be wrong)
Maxime Perrotin's avatar
Maxime Perrotin committed
224
    - Introduce data dictionary
Maxime Perrotin's avatar
Maxime Perrotin committed
225

Maxime Perrotin's avatar
Maxime Perrotin committed
226
227
228
1.5.4 (08/2016)
    - Various GUI improvements

229
1.5.3 (07/2016):
Maxime Perrotin's avatar
Maxime Perrotin committed
230
231
    - Ada backend fix: Continous signals now handled in states
      where input is not consumed
232

Maxime Perrotin's avatar
Maxime Perrotin committed
233
1.5.2 (07/2016):
234
    - Asn1scc API added to interface with DMT/asn2dataModel
Maxime Perrotin's avatar
Maxime Perrotin committed
235
    - Better statechart rendering (less distance between nodes)
236

Maxime Perrotin's avatar
Maxime Perrotin committed
237
1.4.5 (07/2016):
238
239
    - Context variable was not prefixed properly
    - Callback function for timers use 64bits integer
Maxime Perrotin's avatar
Maxime Perrotin committed
240
241
    - RIs use prefix with unicode separation to avoid name clashes

242

243
244
245
1.4.4 (06/2016)
    - Minor bugfix in Ada backend to support typeless systems

246
247
248
1.4.3 (06/2016)
    - Add support for priority of continuous signals in Ada code generator

249
250
251
1.4.2 (06/2016)
    - Reload / render properly priority of continuous signals

252
1.4.1 (06/2016)
253
254
    - Continuous states can check the presence of messages in the input queue
      to respect the SDL semantics
255
    - Bugfix in Ada code generator on continuous states
256

Maxime Perrotin's avatar
Maxime Perrotin committed
257
258
259
1.3.28 (06/2016)
    - Excluded states (with *(statelist) ) were case sensitive

Maxime Perrotin's avatar
Maxime Perrotin committed
260
261
262
263
1.3.27 (05/2016)
    - Fix bug in Ada backend when using continous signals
    - Better handling of simulation script

264
265
266
1.3.26 (05/2016)
    - Fix parser issues with negative expressions

Maxime Perrotin's avatar
Maxime Perrotin committed
267
1.3.25 (05/2016)
268
269
    - Fix reporting of syntax errors in state aggregations

Maxime Perrotin's avatar
Maxime Perrotin committed
270
1.3.22 (05/2016)
271
    - Bug fix in range checks for division and subtraction
272
    - Optimise loading when there are no CIF comments
Maxime Perrotin's avatar
Maxime Perrotin committed
273

Maxime Perrotin's avatar
Maxime Perrotin committed
274
275
276
277
1.3.21 (05/2016)
    - Complete support of optional fields
      (check tests/regression/test-optionalfields)

Maxime Perrotin's avatar
Maxime Perrotin committed
278
279
280
1.3.20 (05/2016)
    - Improve simulator interface

Maxime Perrotin's avatar
Maxime Perrotin committed
281
282
283
284
1.3.19 (04/2016)
    - Various bugfixes with ternary operator
    - Added demo "test-save" showing how to emulate the behaviour of the SAVE
      symbol
Maxime Perrotin's avatar
Maxime Perrotin committed
285
    - ASN.1 types are shown with SDL-syntax (no hyphens)
Maxime Perrotin's avatar
Maxime Perrotin committed
286

287
288
1.3.18 (04/2016)
    - Add support for value notation of NULL type
289
    - Remove warning when accessing CHOICE fields
290

291
292
293
1.3.17 (04/2016)
    - Add support for value notation of empty SEQUENCEs ("{}")

Maxime Perrotin's avatar
Maxime Perrotin committed
294
295
296
1.3.16 (03/2016)
    - Bugfix in testing aggregation states in the GUI

Maxime Perrotin's avatar
Maxime Perrotin committed
297
298
299
300
1.3.15 (03/2016)
    - Bugfix in Ada backend when a state aggregation contained only empty
      states (directly returning states).

301
302
303
1.3.14
    - Minor bugfix with command line handling

304
305
306
1.3.13
    - Bugfix in rendering of Continuous signals

Maxime Perrotin's avatar
Maxime Perrotin committed
307
308
309
1.3.12
    - Render properly parameterless procedures that are declared in the .pr
      file but without a textbox
310
    - When going to parent scene, fixed rendering issue
Maxime Perrotin's avatar
Maxime Perrotin committed
311

Maxime Perrotin's avatar
Maxime Perrotin committed
312
313
314
1.3.11
    - Parser is more tolerant to incomplete systems

Maxime Perrotin's avatar
Maxime Perrotin committed
315
1.3.9/10 (01/2016)
Maxime Perrotin's avatar
Maxime Perrotin committed
316
317
    - Checker verifies that decision coverage is complete on Real and Boolean
      types
Maxime Perrotin's avatar
Maxime Perrotin committed
318
    - F3 generates Ada code
Maxime Perrotin's avatar
Maxime Perrotin committed
319

320
321
322
1.3.8 (01/2016)
    - Fix logging when LLVM is not installed

Maxime Perrotin's avatar
Maxime Perrotin committed
323
324
325
1.3.7 (12/2015)
    - Added icon to use Continuous Signals from the GUI

326
327
328
329
330
1.3.6 (11/2015)
     - Support external procedures having a return statement
       this allows to import math functions from the libmath without having
       to provide manual code. see test-math

331
332
333
1.3.5 (11/2015)
     - Better support for continous signals

Maxime Perrotin's avatar
Maxime Perrotin committed
334
335
336
337
1.3.4 (11/2015)
     - Early support for continous signals
     - Regression issue fixed (test-nocif2)

Maxime Perrotin's avatar
Maxime Perrotin committed
338
1.3.3 (11/2015)
Maxime Perrotin's avatar
Maxime Perrotin committed
339
     - Better support of platform-dependent screen resolution and dpi
Maxime Perrotin's avatar
Maxime Perrotin committed
340
     - Minor fixes in statechart scenes (no negative coordinates)
Maxime Perrotin's avatar
Maxime Perrotin committed
341

Maxime Perrotin's avatar
Maxime Perrotin committed
342
1.3.1 (11/2015)
343
     - Support for State Aggregations (parallel states)
Maxime Perrotin's avatar
Maxime Perrotin committed
344
     - Improved statechart rendering
345

346
1.2.10 (10/2015)
Maxime Perrotin's avatar
Maxime Perrotin committed
347
348
349
     - Better support of renamePolicy
     - Better handling of models without CIF coordinates
     - Minor bug fixes
350
     - Forloop syntax error handled correctly when using range
351
     - support Hex and bit string literals when working with OCTET STRING
352
     - support OUT keyword for procedure FPAR
Maxime Perrotin's avatar
Maxime Perrotin committed
353

Maxime Perrotin's avatar
Maxime Perrotin committed
354
1.2.4 (07/2015)
355
356
357
358
     - Use version 3.2.x of the ASN1SCC compiler with new -renamePolicy flag
     - Improve robustness

1.1.1 (07/2015)
Maxime Perrotin's avatar
Maxime Perrotin committed
359
360
361
     - Strongly report syntax errors with symbol location and warning if user
       tries to save a model with syntax errors

362
363
364
1.1.0 (07/2015)
     - Write/Writeln procedure support enumerated types

Maxime Perrotin's avatar
Maxime Perrotin committed
365
366
367
368
1.0.1 (06/2015)
     - Bugfix: use mono when calling asn1.exe by default (needed redhat-based
                                                          distros)

Maxime Perrotin's avatar
Maxime Perrotin committed
369
370
371
372
1.0.0 (06/2015)
     - Bugfixes and minor improvements
     - Python API / Simulator function (coupled with other TASTE components)

373
1.0RC (10/2014)
374
375
376
377
378
379
     - Release candidate Version 1
     - Allow standalone systems (made of one process)
     - Major refactoring of parser and Ada backend
     - Many bugfixes and improvements
     - First version of LLVM backend

380
381
382
0.994 (07/2014)
     - Maintenance release, minor fixes

Maxime Perrotin's avatar
Maxime Perrotin committed
383
384
385
386
387
388
389
390
391
0.993 (07/2014)
     - Parser bugfixes
     - Better support for nested states
     - Ada generator improvements
     - Support for unicode
     - Indentation of PR code
     - Copy-paste of procedures and nested states
     - Improved regression testing

392
0.99 (04/2014)
Maxime Perrotin's avatar
Maxime Perrotin committed
393
     - Refactoring of the backend engine, now using singledispatch
394
     - Support of hierachical states
Maxime Perrotin's avatar
Maxime Perrotin committed
395
396
     - Minor bugfixes

397
398

0.98
Maxime Perrotin's avatar
Maxime Perrotin committed
399
400
401
402
403
     - Added support for FOR loops
       In a task, use "for x in range([start], stop, [range]): ... endfor"
       or "for x in sequenceOfvariable: ... endfor"
     - Default symbol size is smaller
     - Various minor bugfixes
404
405
406


0.97
Maxime Perrotin's avatar
Maxime Perrotin committed
407
408
409
410
     - added support for default value when declaring a variable
       e.g. DCL myVar myType ::= { x 5, y 2 };
       default value must be a ground expression