add missing header limits.h
[bertos.git] / doc / STATUS
1 /*!
2 <!--
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
17
18
19
20
21
22  
23 \page dev_status BeRTOS Development Status
24
25 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.
26
27 BeRTOS is stable and it's used in production environments but it is also a very large project, so all of its parts may not be at the same level.
28
29 Table of contents:
30
31  \li \ref kernel
32  \li \ref core_drivers
33  \li \ref internal_peripherals
34  \li \ref independant_drivers
35  \li \ref storage
36  \li \ref graphics
37  \li \ref algorithms
38  \li \ref networking
39  \li \ref data_structures
40  \li \ref mware
41
42 \section kernel Kernel
43 BeRTOS features a cooperative kernel with synchronization primitives.
44
45 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 :-)
46
47 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.
48 Currently the kernel code is very stable.
49
50 <b> Kernel features </b>:
51   \li \link preempt.c Cooperative and preemptive \endlink round-robin scheduling.
52   \li \link monitor.h Stack process monitor \endlink, useful to prevent stack overflows.
53   \li \link msg.h Inter-process messaging system \endlink (with very low overhead).
54   \li \link sem.h Binary semaphores \endlink.
55   \li \link signal.c Signals \endlink.
56
57 The kernel has a port layer (a single assembly function) that needs to be reimplemented each time a new CPU is added.
58 Here is a list of currently available CPU family ports:
59
60 <table>
61   <tr> <td> <b> CPU Family </b> </td> <td> <b> Port status </b> </td></tr>
62   <tr> <td>  ARM7TDMI </td> <td> Atmel AT91SAM7, NXP LPC2XXX </td> </tr>
63   <tr> <td>  Cortex-M3</td> <td> Luminary Stellaris LM3S, ST Microelectronics STM32 </td> </tr> 
64   <tr> <td>  Atmel AVR</td>  <td> Most cpu supported (including Arduino) </td> </tr>  
65   <tr> <td>  PowerPC </td>  <td> emulator </td> </tr>
66   <tr> <td>  Intel/AMD x86    </td>  <td>emulator </td> </tr>
67   <tr> <td>  Intel/AMD x86-64 </td>  <td> emulator </td> </tr>
68 </table>
69
70 \section core_drivers Core Drivers
71 BeRTOS is not only a kernel, it aims to supply full operating system services.
72 To achieve this we need at least some core drivers for every CPU port.
73
74 These drivers are: <b> system timer </b>, <b> debug system </b> and <b> serial comm driver </b>.
75
76 Adding CPU support for an already present CPU family is quite simple since hardware manufacturers share peripherals design between the same CPU cores.
77
78 Core drivers are completely supported on all platforms.
79
80 \section internal_peripherals MCU Internal peripheral drivers 
81 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.
82 <table>
83         <tr>
84             <td>Driver / <br>MCU family</td>
85             <td>ADC</td>
86             <td>UART</td>
87             <td>FLASH</td>
88             <td>I2C</td>
89             <td>PWM</td>
90             <td>SPI</td>
91         </tr>
92         <tr><td><strong>Atmel AVR</strong></td>
93             <td>Yes</td>
94             <td>Yes</td>
95             <td>Yes</td>
96             <td>Yes</td>
97             <td>Yes</td>
98             <td>Yes</td>
99         </tr>
100         <tr><td><strong>Atmel AT91SAM7 ARM</strong></td>
101             <td>Yes</td>
102             <td>Yes</td>
103             <td>Yes</td>
104             <td>Yes</td>
105             <td>Yes</td>
106             <td>Yes</td>
107         </tr>
108         <tr><td><strong>Atmel AT91SAM3N ARM</strong></td>
109             <td>-</td>
110             <td>Yes</td>
111             <td>-</td>
112             <td>-</td>
113             <td>-</td>
114             <td>-
115         </tr>
116         <tr><td><strong>STmicro STM32F103xx ARM</strong></td>
117             <td>Yes</td>
118             <td>Yes</td>
119             <td>Yes</td>
120             <td>Yes</td>
121             <td>-</td>
122             <td>-</td>
123         </tr>
124         <tr><td><strong>Philips LPC23XX ARM</strong></td>
125             <td>-</td>
126             <td>Yes</td>
127             <td>Yes</td>
128             <td>Yes</td>
129             <td>-</td>
130             <td>-</td>
131         </tr>
132         <tr><td><strong>Stellaris LM3S ARM</strong></td>
133             <td>Yes</td>
134             <td>Yes</td>
135             <td>Yes</td>
136             <td>Yes</td>
137             <td>-</td>
138             <td>Yes</td>
139         </tr>
140 </table>
141
142 \section independant_drivers Generic CPU independent drivers 
143 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.
144 Current driver list:
145 <table>
146 <tr> <td> <b> Driver </b> </td> <td> <b> Status </b> </td> </tr>
147 <tr> <td> \link adc.h ADC API \endlink</td>                                <td>stable</td> </tr>
148 <tr> <td> \link buzzer.h Buzzer \endlink</td>                              <td>stable</td> </tr>
149 <tr> <td> \link dataflash.h Atmel Dataflash \endlink</td>                  <td>stable</td> </tr>
150 <tr> <td> \link eeprom.h I2C EEPROM \endlink</td>                          <td>stable</td> </tr>
151 <tr> <td> \link flash25.h AT25Fxxx Atmel flash memories \endlink</td>      <td>beta</td> </tr>
152 <tr> <td> \link ft245rl.h FT245RL USB to parallel converter \endlink</td>  <td>beta</td> </tr>
153 <tr> <td> \link kbd.h Keyboard \endlink</td>                               <td>stable</td> </tr>
154 <tr> <td> \link i2c.h I2C \endlink with bitbang support</td>               <td>stable</td> </tr>
155 <tr> <td> Displaytech 32122A Graphic LCD</td>                              <td>stable</td> </tr>
156 <tr> <td> \link dc_motor.h DC Motor with PID \endlink</td>                 <td>stable</td> </tr>
157 <tr> <td> \link lcd_text.h Alphanumeric LCD \endlink</td>                  <td>stable</td> </tr>
158 <tr> <td> \link lm75.h LM75 temperature sensor \endlink</td>               <td>stable</td> </tr>
159 <tr> <td> \link mcp41.h MPC41 digital potentiometer \endlink</td>          <td>stable</td> </tr>
160 <tr> <td> \link mpxx6115a.h MPxx6115A pressure sensor \endlink</td>          <td>stable</td> </tr>
161 <tr> <td> \link ntc.h NTC \endlink</td>                                    <td>stable</td> </tr>
162 <tr> <td> \link phase.h TRIAC phase partialization \endlink</td>           <td>stable</td> </tr>
163 <tr> <td> \link pwm.h PWM API \endlink</td>                                <td>beta</td> </tr>
164 <tr> <td> \link pcf8574.h PCF85974 I2C port expander \endlink</td>         <td>beta</td> </tr>
165 <tr> <td> \link sd.h Secure Digital card API \endlink</td>                 <td>stable</td> </tr>
166 <tr> <td> \link ser.h Serial API \endlink</td>                             <td>stable</td> </tr>
167 <tr> <td> \link spi_bitbang.h Bitbanged SPI \endlink</td>                  <td>stable</td> </tr>
168 <tr> <td> \link tas5706a.h TAS5706A \endlink digital audio DSP</td>        <td>stable</td> </tr>
169 <tr> <td> \link tc520.h TC520 ADC \endlink</td>                            <td>obsolete</td> </tr>
170 <tr> <td> \link thermo.h Thermostat \endlink</td>                          <td>stable</td> </tr>
171 <tr> <td> \link timer.h System timer API \endlink</td>                     <td>stable</td> </tr>
172 <tr> <td> \link tmp123.h TMP123 temperature sensor \endlink</td>           <td>stable</td> </tr>
173 <tr> <td> \link stepper.h Stepper motor with ramps \endlink</td>           <td>stable</td> </tr>
174 <tr> <td> Watchdog</td>                                                    <td>beta</td> </tr>
175 </table>
176
177 To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/drv">drivers source code</A>.
178
179 \section storage File system 
180 BeRTOS supports two file systems. The first one is the mainstream \link fat.h FAT \endlink filesystem, 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.
181
182 The second is \link battfs.h BattFs\endlink, a file system specifically planned for embedded platforms. 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.
183 The code is in beta stage. 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).
184
185 File system development takes place in the <A href="http://dev.bertos.org/browser/trunk/bertos/fs">fs directory</A>.
186
187 \subsection fat File System: FAT
188  
189  <p>The <strong>FAT</strong> file system is the de-facto standard for removable devices such as SD cards or Memory cards. BeRTOS supports read and write operations on all existing FAT file systems, ranging from FAT12 to FAT32, with support to long file names. This file system is light and fast and allows to easily exchange data through external memory devices.</p>
190  
191  <p>FAT module is highly configurable, for example it can be compiled in read-only mode for some space saving.</p>
192  
193 \subsection battfs File System: BattFS
194  
195  <p><strong>BattFS</strong> (Batt File System), has been developed to solve problems specific to embedded systems; BattFS is a file system that can <strong>be used on any physical media</strong> and it's optimized to reduce RAM and ROM usage to meet the strict design guidelines we have used with all the others BeRTOS components.</p>
196  
197  <p>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.</p>
198  
199  <p>The code is in beta stage. 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).</p>
200
201
202 \section graphics Graphic subsystem 
203 BeRTOS also features a complete graphic subsystem, suitable for generating compact yet powerful GUI.
204 This system is composed of several modules ranging from simple graphic primitives to complex menu management functions.
205
206 <table>
207 <tr> <td> <b> Module </b> </td> <td> <b> Status </b> </td> </tr>
208 <tr> <td> \link bitmap.c Bitmaps manipulation \endlink</td>  <td>stable</td> </tr>
209 <tr> <td> \link line.c Lines drawing \endlink</td>  <td>stable</td> </tr>
210 <tr> <td> \link line.c Rectangles drawing \endlink</td>  <td>stable</td> </tr>
211 <tr> <td> \link win.h Simple windowing system \endlink</td>  <td>stable</td> </tr>
212 <tr> <td> Proportional and fixed size fonts</td>  <td>stable</td> </tr>
213 <tr> <td> \link text.h Text rendering \endlink</td>  <td>stable</td> </tr>
214 <tr> <td> \link charts.h Simple Charts \endlink</td>  <td>stable</td> </tr>
215 <tr> <td> \link menu.h Menus \endlink</td>  <td>stable</td> </tr>
216 </table>
217
218 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.
219
220
221 \section algorithms Algorithms 
222 In embedded programming sometimes you have to cope with protocols, security systems and things like that.
223 BeRTOS comes in help with a set of optimized portable algorithms:
224 <table>
225 <tr> <td> <b> Algorithm </b> </td> <td> <b> Status </b> </td> </tr>
226 <tr> <td> \link crc.h CRC16 \endlink</td>  <td>stable</td> </tr>
227 <tr> <td> \link md2.c MD2 \endlink</td>  <td>beta</td> </tr>
228 <tr> <td> \link randpool.c Cryptographically secure Random Pool \endlink</td>  <td>beta</td> </tr>
229 <tr> <td> \link rotating_hash.h Rotating hash checksum \endlink</td>  <td>stable</td> </tr>
230 <tr> <td> \link tea.h TEA (Tiny Encryption Algorithm) \endlink</td>  <td>stable</td> </tr>
231 <tr> <td> \link ramp.h Stepper motor ramp generator \endlink</td>  <td>stable</td> </tr>
232 <tr> <td> \link pid_control.h PID Controller \endlink</td>  <td>stable</td> </tr>
233 <tr> <td> \link rle.c RLE (Run lenght en/decondig) \endlink</td>  <td>stable</td> </tr>
234 </table>
235
236 To get up to date informations look at the <A href="http://dev.bertos.org/browser/trunk/bertos/algo">algorithms source code</A>.
237
238 \section networking Network protocols 
239 Since BeRTOS can also be used in very tiny systems, some simple communication protocols has been developed.
240
241 This is the current status:
242 <table>
243 <tr> <td> <b> Protocol </b> </td> <td> <b> Status </b> </td> </tr>
244 <tr> <td> \link pocketbus.c PocketBus \endlink</td>  <td>stable</td> </tr>
245 <tr> <td> \link keytag.c Keytag (for 125KHz transponders) \endlink</td>  <td>stable</td> </tr>
246 <tr> <td> \link xmodem.c XModem protocol \endlink</td>  <td>stable</td> </tr>
247 <tr> <td> \link nmea.c NMEA GPS protocol parser \endlink</td>  <td>stable</td> </tr>
248 <tr> <td> \link afsk.c AFSK1200 modem \endlink</td>  <td>stable</td> </tr>
249 <tr> <td> \link ax25.h AX25 data link layer protocol \endlink</td>  <td>beta</td> </tr>
250 </table>
251
252 For more information take a look at <A href="http://dev.bertos.org/browser/trunk/bertos/net/">network directory</A>.
253
254 \section data_structures Data Structures 
255 BeRTOS supplies common data structures, implemented and optimized for low memory footprint and speed.
256
257 <table>
258 <tr> <td> <b> Module </b></td> <td> <b> Status </b></td></tr>
259 <tr> <td> \link fifobuf.h FIFO \endlink</td>  <td>stable</td> </tr>
260 <tr> <td> \link hashtable.h Hash table \endlink</td>  <td>stable</td> </tr>
261 <tr> <td> \link heap.h Embedded-optimized dynamic memory allocator \endlink</td>  <td>stable</td> </tr>
262 <tr> <td> \link list.h Lists \endlink</td>  <td>stable</td> </tr>
263 </table>
264
265 \section mware Middleware 
266 This section covers all BeRTOS modules that provide general purpose utility functions. Most of them should be moved to \ref algorithms directory.
267
268 In the meanwhile, here is the list:
269 <table>
270 <tr> <td> <b> Module </b> </td> <td> <b> Status </b> </td></tr>
271 <tr> <td> \link cpu/byteorder.h Integers to/from host byte-order conversion \endlink</td>  <td>stable</td> </tr>
272 <tr> <td> \link event.h Events \endlink</td>  <td>stable</td> </tr>
273 <tr> <td> \link except.h C++ like exception handling in C \endlink</td>  <td>stable</td> </tr>
274 <tr> <td> \link formatwr.c Embedded-optimized printf \endlink</td>  <td>stable</td> </tr>
275 <tr> <td> \link readline.h Command shell with history \endlink</td>  <td>stable</td> </tr>
276 <tr> <td> \link ini_reader.h Ini file reader \endlink</td>  <td>stable</td> </tr>
277 </table>
278
279 As usual, check <A href="http://dev.bertos.org/browser/trunk/bertos/mware">source code</A> for detailed reference.
280 */