Cycling Languages
=================

.. image:: images/bmgen_languages.svg

The currently supported languages include:

- Battery Manager
- Neware
- Basytec
- JSON-LD (https://json-ld.org/)
- BCL (https://github.com/phdechent/BCL)

The following table gives an overview over the features available in each language:

=================================================  ==========================  ======  =======
Description                                        Battery Manager             Neware  BasyTec 
=================================================  ==========================  ======  ======= 
charge/discharge/pause                              ✔️                          ✔️     ✔️      
limits (global and for individual steps)            ✔️                          ✔️     ✔️      
registrations (global)                              ✔️                          ✔️     ✔️      
registrations (for individual steps)                ✔️                          ✔️     ✔️      
variables in the generated program                  ✔️                          ➖     ❌      
battery parameters                                  ✔️                          ➖     ✔️      
if / else statements                                ✔️                          ✔️     ❌      
if / else statements (compile time)                 ❌                          ✔️     ✔️      
loops with fixed cycle count                        ✔️                          ✔️     ❌      
loops with arbitrary conditions                     ✔️                          ➖     ❌      
loops (compile time)                                ❌                          ✔️     ✔️      
references to duration/Ah count of previous steps   ✔️                          ✔️     ✔️      
calculations in the generated program               ✔️                          ➖     ❌      
array constants                                     ✔️                          ➖     ➖      
array constants (compile time)                      ❌                          ✔️     ✔️      
mutable arrays                                      ✔️                          ➖     ➖      
=================================================  ==========================  ======  ======= 

✔️ implemented
❌ planned
➖ not supported by the target