doc: Various documentation updates.
[bertos.git] / STATUS
1 /*!
2 \if DEVELOPER_NOTE_ON
3
4 This document is automatically processed by Doxygen (http://www.doxygen.org/).
5 Don't remove special formatting tags.
6 This section won't be processed unless enabled.
7
8 Doxygen supports a LaTeX-like syntax to write documentation; use that syntax to make changes to this file.
9 You can find a reference here: http://www.stack.nl/~dimitri/doxygen/manual.html, inside the section 'Special commands'.
10
11 For tables, use ONLY the html formatting tags that you can find in the previous page in the section 'HTML commands'. This way
12 we'll always be able to generate valid documentation for every language supported by Doxygen.
13
14 Remember to use Doxygen tags sparingly inside source code.
15
16 \endif
17
18
19
20
21
22
23  
24 \page dev_status BeRTOS Development Status
25
26 If you are looking for the list of BeRTOS ports or a detailed overview of all modules completeness and stability this is the right place.
27
28 BeRTOS is quite stable (it is used in production environments) but it is also a very large project, so all of its parts may not be at the same level.
29
30 Table of contents:
31
32  \li \ref kernel
33  \li \ref compilers
34  \li \ref core_drivers
35  \li \ref internal_peripherals
36  \li \ref independant_drivers
37  \li \ref emulator
38  \li \ref algorithms
39  \li \ref graphics
40  \li \ref networking
41  \li \ref fs
42  \li \ref data_structures
43  \li \ref mware
44
45 \section kernel Kernel
46 BeRTOS features a cooperative kernel with synchronization primitives.
47
48 Embedded systems are mostly I/O bound systems. In these systems the microprocessor/microcontroller spends the most part of its computing power doing... absolutely nothing :-)
49
50 Since the system simply waits for external events to happen we decided to implement a strong and robust cooperative kernel with very low memory footprint and high modularity. This allows the kernel to be used on a variety of different CPUs, even the smaller ones.
51 Currently the kernel code is very stable.
52
53 <b> Kernel features </b>:
54   \li \link coop.c Cooperative \endlink round-robin scheduling.
55   \li \link monitor.h Stack process monitor \endlink, useful to prevent stack overflows.
56   \li \link msg.h Inter-process messaging system \endlink (with very low overhead).
57   \li \link sem.h Binary semaphores \endlink.
58   \li \link signal.c Signals \endlink.
59
60 We have plans to add, as soon as possible, a <b> preemptive scheduler </b>, browse <A href="http://dev.bertos.org/browser/trunk/bertos/kern">kernel source code</A> to see the latest additions.
61
62 The kernel has a port layer (a single assembly function) that needs to be reimplemented each time a new CPU is added.
63 Here is a list of currently available CPU family ports:
64
65 <table>
66 <tr> <td> <b> CPU Family </b> </td> <td> <b> Port status </b> </td></tr>
67 <tr> <td>  ARM </td> <td> stable </td></tr>
68 <tr> <td>  <A href="http://www.atmel.com/avr">Atmel AVR</A> </td>  <td> stable </td> </tr>
69 <tr> <td>  <A href="http://www.freescale.com/webapp/sps/site/taxonomy.jsp?nodeId=01624686366292">Freescale DSP56800</A> </td>  <td> unmantained </td> </tr>
70 <tr> <td>  Intel i196 </td>  <td> unmantained </td> </tr>
71 <tr> <td>  PowerPC          </td>  <td> \ref emulator only </td> </tr>
72 <tr> <td>  Intel/AMD x86    </td>  <td> \ref emulator only </td> </tr>
73 <tr> <td>  Intel/AMD x86-64 </td>  <td> \ref emulator only </td> </tr>
74 </table>
75
76 \section compilers Compilers
77 BeRTOS was born as a collection of reusable code snippets.
78 In this perspective it was of primary importance that the code was reusable and well portable.
79
80 So, although BeRTOS is primarily intended to be used with open source tools such as <A href="http://gcc.gnu.org">GCC</A>, it supports other compilers too. It is possible to develop with BeRTOS on Linux, Windows and Mac.
81
82 For every port we have indicated the current compiler used and were to find a suitable development suite:
83 <table>
84 <tr> <td> <b> CPU Family </b> </td> <td> <b> Compiler </b> </td> <td> <b> Linux/Mac Toolchain </b> </td> <td> <b> Windows Toolchain </b> </td> </tr>
85 <tr> <td> ARM</td>  <td>GCC</td>  <td><A href="http://www.codesourcery.com/sgpp/lite/arm/portal/release642">Sourcery G++ toolchain</A> (open source)</td>  <td> <A href="http://dev.bertos.org/wiki/DownloadPage">BeRTOS ARM IDE (open source)</A> </td> </tr>
86 <tr> <td> ARM</td>  <td>IAR (unmantained)</td>  <td>none</td>  <td>http://www.iar.com (proprietary)</td> </tr>
87 <tr> <td> AVR</td>  <td>GCC</td>  <td><A href="http://www.develer.com/oss/AvrToolchain">AVR Toolchain installer</A> (open source)</td> <td> <A href="http://dev.bertos.org/wiki/DownloadPage">BeRTOS AVR IDE (open source)</A> </td> </tr>
88 <tr> <td> DSP56800</td>  <td>CodeWarrior (unmantained)</td>  <td>none</td>  <td><A href="http://www.freescale.com/webapp/sps/site/homepage.jsp?nodeId=012726">CodeWarrior</A> (proprietary)</td> </tr>
89 <tr> <td> i196</td>  <td>fillme</td>  <td>fillme</td>  <td>fillme</td> </tr>
90 <tr> <td> PowerPC </td>  <td> GCC  </td>  <td> use your system GCC </td>  <td> none </td> </tr>
91 <tr> <td> x86</td>  <td>GCC</td>  <td>use your system GCC</td>  <td>http://www.mingw.org/ (open source)</td> </tr>
92 <tr> <td> x86</td>  <td>MSVC (unmantained)</td>  <td>none</td>  <td><A href="http://www.microsoft.com/express/">Visual Studio</A> (proprietary)</td> </tr>
93 <tr> <td> x86-64  </td>  <td> GCC  </td>  <td> use your system GCC </td>  <td> none </td> </tr>
94 </table>
95
96
97 \section core_drivers Core Drivers
98 BeRTOS is not only a kernel, it aims to supply full operating system services.
99 To achieve this we need at least some core drivers for every CPU port.
100
101 These drivers are: <b> system timer </b>, <b> debug system </b> and <b> serial comm driver </b>.
102
103 Here is the list of CPU whose internal core drivers are supported:
104 <table>
105 <tr> <td> <b> Family </b> </td> <td> <b> CPU </b> </td> <td> <b> Core driver status </b> </td> </tr>
106 <tr> <td> ARM</td>  <td>AT91SAM7S256</td>  <td>stable</td> </tr>
107 <tr> <td> ARM</td>  <td>AT91SAM7X128</td>  <td>stable</td> </tr>
108 <tr> <td> ARM</td>  <td>AT91SAM7X256</td>  <td>stable</td> </tr>
109 <tr> <td> AVR</td>  <td>ATMega8</td>  <td>stable</td> </tr>
110 <tr> <td> AVR</td>  <td>ATMega32</td>  <td>stable</td> </tr>
111 <tr> <td> AVR</td>  <td>ATMega64</td>  <td>stable</td> </tr>
112 <tr> <td> AVR</td>  <td>ATMega103</td>  <td>stable</td> </tr>
113 <tr> <td> AVR</td>  <td>ATMega128</td>  <td>stable</td> </tr>
114 <tr> <td> AVR</td>  <td>ATMega168</td>  <td>stable</td> </tr>
115 <tr> <td> AVR</td>  <td>ATMega1281</td>  <td>stable</td> </tr>
116 <tr> <td> DSP56800</td>  <td>all</td>  <td>unmantained</td> </tr>
117 <tr> <td> i196</td>  <td>all</td>  <td>unmantained</td> </tr>
118 <tr> <td> PowerPC </td>  <td> all </td>  <td> see \ref emulator </td> </tr>
119 <tr> <td> x86     </td>  <td> all </td>  <td> see \ref emulator </td> </tr>
120 <tr> <td> x86-64  </td>  <td> all </td>  <td> see \ref emulator </td> </tr>
121 </table>
122
123 Adding CPU support for an already present CPU family is quite simple since hardware manufacturers share peripherals design between the same CPU cores.
124
125 \section internal_peripherals MCU Internal peripheral drivers 
126 Since BeRTOS aims to supply full operating system services, for every CPU port we try to implement as much drivers as possible. This section covers the current development status for MCU Internal peripheral drivers.
127
128  \li <b> MCU family: Atmel AVR </b>
129
130 <table>
131    <tr> <td> <b> Driver </b> </td> <td> <b> Status </b> </td> </tr>
132    <tr> <td> \link adc_avr.c ADC \endlink</td>  <td>stable</td> </tr>
133    <tr> <td> \link flash_avr.c Internal Flash \endlink</td>  <td>stable</td> </tr>
134    <tr> <td> UART</td>  <td>stable</td> </tr>
135    <tr> <td> SPI</td>  <td>stable</td> </tr>
136    <tr> <td> Timer</td>  <td>stable</td> </tr>
137    <tr> <td> \link i2c_avr.c TWI \endlink</td>  <td>stable</td> </tr>
138 </table>
139
140    To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/cpu/avr/drv">AVR drivers source code</A>.
141
142  \li <b> MCU family: Atmel AT91 ARM </b>
143
144 <table>
145    <tr> <td> <b> Driver </b> </td> <td> <b> Status </b> </td> </tr>
146    <tr> <td> UART</td>  <td>stable</td> </tr>
147    <tr> <td> SPI</td>  <td>stable</td> </tr>
148    <tr> <td> Timers</td>  <td>stable</td> </tr>
149    <tr> <td> TWI</td>  <td>beta</td> </tr>
150    <tr> <td> ADC</td>  <td>beta</td> </tr>
151    <tr> <td> PWM</td>  <td>beta</td> </tr>
152 </table>
153
154    To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/cpu/arm/drv">ARM drivers source code</A>.
155
156  \li <b> MCU family: Freescale DSP56800 </b>
157
158    Only core drivers are supported.
159
160  \li <b> MCU family: Intel i196 </b>
161
162    Only core drivers are supported.
163
164  \li <b> MCU family: PowerPC </b>
165
166    See \ref emulator.
167
168  \li <b> MCU family: x86 </b>
169
170    See \ref emulator.
171
172  \li <b> MCU family: x86-64 </b>
173
174    See \ref emulator.
175
176 \section independant_drivers Generic CPU independent drivers 
177 BeRTOS supplies a full set of CPU independent generic hardware drivers. To achieve this all drivers are structured to have an hardware abstraction layer (HAL) that isolate CPU specific code and makes porting to new CPU easy.
178 Current driver list:
179 <table>
180 <tr> <td> <b> Driver </b> </td> <td> <b> Status </b> </td> </tr>
181 <tr> <td> \link adc.h ADC API \endlink</td>  <td>stable</td> </tr>
182 <tr> <td> \link buzzer.h Buzzer \endlink</td>  <td>stable</td> </tr>
183 <tr> <td> \link dataflash.h Atmel Dataflash \endlink</td>  <td>stable</td> </tr>
184 <tr> <td> \link eeprom.h I2C EEPROM \endlink</td>  <td>stable</td> </tr>
185 <tr> <td> \link flash25.h AT25Fxxx Atmel flash memories \endlink</td>  <td>beta</td> </tr>
186 <tr> <td> \link ft245rl.h FT245RL USB to parallel converter \endlink</td>  <td>beta</td> </tr>
187 <tr> <td> \link kbd.h Keyboard \endlink</td>  <td>stable</td> </tr>
188 <tr> <td> \link i2c.h I2C \endlink with bitbang support</td>  <td>stable</td> </tr>
189 <tr> <td> Displaytech 32122A Graphic LCD</td>  <td>stable</td> </tr>
190 <tr> <td> \link dc_motor.h DC Motor with PID \endlink</td>  <td>stable</td> </tr>
191 <tr> <td> \link lcd_text.h Alphanumeric LCD \endlink</td>  <td>stable</td> </tr>
192 <tr> <td> \link mcp41.h MPC41 digital potentiometer \endlink</td>  <td>stable</td> </tr>
193 <tr> <td> \link ntc.h NTC \endlink</td>  <td>stable</td> </tr>
194 <tr> <td> \link phase.h TRIAC phase partialization \endlink</td>  <td>stable</td> </tr>
195 <tr> <td> \link pwm.h PWM API \endlink</td>  <td>beta</td> </tr>
196 <tr> <td> \link pcf8574.h PCF85974 I2C port expander \endlink</td>  <td>beta</td> </tr>
197 <tr> <td> \link ser.h Serial API \endlink</td>  <td>stable</td> </tr>
198 <tr> <td> \link spi_bitbang.h Bitbanged SPI \endlink</td>  <td>stable</td> </tr>
199 <tr> <td> \link tc520.h TC520 ADC \endlink</td>  <td>obsolete</td> </tr>
200 <tr> <td> \link thermo.h Thermostat \endlink</td>  <td>stable</td> </tr>
201 <tr> <td> \link timer.h System timer API \endlink</td>  <td>stable</td> </tr>
202 <tr> <td> \link stepper.h Stepper motor with ramps \endlink</td>  <td>stable</td> </tr>
203 <tr> <td> Watchdog</td>  <td>beta</td> </tr>
204 </table>
205
206 To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/drv">drivers source code</A>.
207
208 \section emulator Emulator 
209 BeRTOS features can be emulated under a Unix system, check DemoApp.
210
211 The emulator uses Qt to display emulated I/O devices in a window.  It supports task
212 scheduling and a number of other embedded peripherals.
213
214 <table>
215 <tr> <td> <b> Emulator </b>      </td>  <td> <b> Status </b> </td> </tr>
216 <tr> <td>  timer                 </td>  <td> stable       </td> </tr>
217 <tr> <td>  scheduler             </td>  <td> stable       </td> </tr>
218 <tr> <td>  keyboard              </td>  <td> stable       </td> </tr>
219 <tr> <td>  graphical LCD display </td>  <td> stable       </td> </tr>
220
221 <tr> <td>  text LCD display      </td>  <td> unmaintained </td> </tr>
222 <tr> <td>  buzzer                </td>  <td> unmaintained </td> </tr>
223 <tr> <td>  serial port           </td>  <td> unmaintained </td> </tr>
224 <tr> <td>  flash                 </td>  <td> unmaintained </td> </tr>
225 <tr> <td>  debug console         </td>  <td> stable       </td> </tr>
226 <tr> <td>  file read/write       </td>  <td> stable       </td> </tr>
227 </table>
228
229 \section algorithms Algorithms 
230 In embedded programming sometimes you have to cope with protocols, security systems and things like that.
231 BeRTOS comes in help with a set of optimized portable algorithms:
232 <table>
233 <tr> <td> <b> Algorithm </b> </td> <td> <b> Status </b> </td> </tr>
234 <tr> <td> \link crc.h CRC16 \endlink</td>  <td>stable</td> </tr>
235 <tr> <td> \link md2.c MD2 \endlink</td>  <td>beta</td> </tr>
236 <tr> <td> \link randpool.c Cryptographically secure Random Pool \endlink</td>  <td>beta</td> </tr>
237 <tr> <td> \link rotating_hash.h Rotating hash checksum \endlink</td>  <td>stable</td> </tr>
238 <tr> <td> \link tea.h TEA (Tiny Encryption Algorithm) \endlink</td>  <td>stable</td> </tr>
239 <tr> <td> \link ramp.h Stepper motor ramp generator \endlink</td>  <td>beta</td> </tr>
240 <tr> <td> \link pid_control.h PID Controller \endlink</td>  <td>stable</td> </tr>
241 <tr> <td> \link rle.c RLE (Run lenght en/decondig) \endlink</td>  <td>stable</td> </tr>
242 </table>
243
244 To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/algo">algorithms source code</A>.
245
246 \section graphics Graphic subsystem 
247 BeRTOS also features a complete graphic subsystem, suitable for generating compact yet powerful GUI.
248 This system is composed of several modules ranging from simple graphic primitives to complex menu management functions.
249
250 <table>
251 <tr> <td> <b> Module </b> </td> <td> <b> Status </b> </td> </tr>
252 <tr> <td> \link bitmap.c Bitmaps manipulation \endlink</td>  <td>stable</td> </tr>
253 <tr> <td> \link line.c Lines drawing \endlink</td>  <td>stable</td> </tr>
254 <tr> <td> \link line.c Rectangles drawing \endlink</td>  <td>stable</td> </tr>
255 <tr> <td> \link win.h Simple windowing system \endlink</td>  <td>stable</td> </tr>
256 <tr> <td> Proportional and fixed size fonts</td>  <td>stable</td> </tr>
257 <tr> <td> \link text.h Text rendering \endlink</td>  <td>stable</td> </tr>
258 <tr> <td> \link charts.h Simple Charts \endlink</td>  <td>stable</td> </tr>
259 <tr> <td> \link menu.h Menus \endlink</td>  <td>stable</td> </tr>
260 </table>
261
262 To get up to date informations look at <A href="http://dev.bertos.org/browser/trunk/bertos/">the source code</A> in the directories \b gfx, \b gui or \b fonts.
263
264 \section networking Network protocols 
265 Since BeRTOS can also be used in very tiny systems, some simple communication protocols has been developed.
266
267 This is the current status:
268 <table>
269 <tr> <td> <b> Protocol </b> </td> <td> <b> Status </b> </td> </tr>
270 <tr> <td> \link pocketbus.c PocketBus \endlink</td>  <td>stable</td> </tr>
271 <tr> <td> \link keytag.c Keytag (for 125KHz transponders) \endlink</td>  <td>stable</td> </tr>
272 <tr> <td> \link xmodem.c XModem protocol \endlink</td>  <td>stable</td> </tr>
273 </table>
274
275 For more information take a look at <A href="http://dev.bertos.org/browser/trunk/bertos/net/">network directory</A>.
276
277
278 \section fs File system 
279 The latest SVN version of BeRTOS supports \link fat.h FAT \endlink filesystems using the <A href="http://elm-chan.org/fsw/ff/00index_e.html">FatFs</A>  library. The module is highly configurable, for example it can be compiled in read-only mode for some space saving.
280
281 \link battfs.h BattFs\endlink, a file system specifically planned for embedded platforms, is in the beta stage. The goal is to have a filesystem suitable for little flash and eeprom memories (like dataflash), reliable, robust and capable of wear-levelling the memory pages to increase its life.
282 Currently you can create files, append data to them but file deletion is still not supported. Wear-levelling is achieved by rotating a page every time it is written. Plans are to add even transactions (a whole write can be performed atomically).
283
284 File system development takes place in the <A href="http://dev.bertos.org/browser/trunk/bertos/fs">fs directory</A>.
285
286 \section data_structures Data Structures 
287 BeRTOS supplies common data structures, implemented and optimized for low memory footprint and speed.
288
289 <table>
290 <tr> <td> <b> Module </b></td> <td> <b> Status </b></td></tr>
291 <tr> <td> \link fifobuf.h FIFO \endlink</td>  <td>stable</td> </tr>
292 <tr> <td> \link hashtable.h Hash table \endlink</td>  <td>stable</td> </tr>
293 <tr> <td> \link heap.h Embedded-optimized dynamic memory allocator \endlink</td>  <td>stable</td> </tr>
294 <tr> <td> \link list.h Lists \endlink</td>  <td>stable</td> </tr>
295 </table>
296
297 \section mware Middleware 
298 This section covers all BeRTOS modules that provide general purpose utility functions. Most of them should be moved to \ref algorithms directory.
299
300 In the meanwhile, here is the list:
301 <table>
302 <tr> <td> <b> Module </b> </td> <td> <b> Status </b> </td></tr>
303 <tr> <td> \link cpu/byteorder.h Integers to/from host byte-order conversion \endlink</td>  <td>stable</td> </tr>
304 <tr> <td> \link event.h Events \endlink</td>  <td>stable</td> </tr>
305 <tr> <td> \link except.h C++ like exception handling in C \endlink</td>  <td>stable</td> </tr>
306 <tr> <td> \link formatwr.c Embedded-optimized printf \endlink</td>  <td>stable</td> </tr>
307 <tr> <td> \link readline.h Command shell with history \endlink</td>  <td>stable</td> </tr>
308 <tr> <td> \link ini_reader.h Ini file reader \endlink</td>  <td>stable</td> </tr>
309 </table>
310
311 As usual, check <A href="http://dev.bertos.org/browser/trunk/bertos/mware">source code</A> for detailed reference.
312 */