Files
bacnet_stack/ports/lwip
Kari Argillander f806c5829b Run clang-format and enable CI check for it (#755)
* pre-commit: Update and enable clang-format check

There is newer version from clang-format so use that. We do not yet want
18 as that is little bit too new.

* Format some thing by hand which clang-format "breaks"

Clang-format will format some things little bit off in some cases.
Format some things by hand so we get cleaner end result.

* Run clang-format with

```
pre-commit run --all-files clang-format
```

We have already in previously checked places where clang-format does not
make good format and ignored those (hopefully most of the things).

---------

Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
2024-08-30 11:20:58 -05:00
..

Port of BACnet/IP to LwIP 2.x

This LwIP BACnet/IP port uses a Makefile designed to be used from the continuous integration pipeline. The container is configured with Ubuntu Linux and uses APT to install liblwip-dev library and header files. This build method ensures that the code is valid for the particular LwIP library that is released with Ubuntu.

Integration Hints

Developer must set the IP address, netmask, and UDP port into the BACnet/IP module.

Integration used a main loop bare metal design, shown here as an example.

int main(void)
{
    static bool valid_ip_address = false;
    static bool bacnet_ip_initialized = false;

    bacnet_init();
    LwIP_Init();
    /* Infinite loop */
    for (;;) {
        /* Periodic tasks */
        LwIP_Periodic_Handler();
        /* Run when there is a valid IP address */
        if (netif.ip_addr.addr != 0) {
            if (!valid_ip_address) {
                valid_ip_address = true;
                bip_set_addr(netif.ip_addr.addr);
                bip_set_broadcast_addr(
                    (netif.ip_addr.addr & netif.netmask.addr) |
                    (~netif.netmask.addr));
            } else {
                if (bacnet_ip_initialized) {
                    bacnet_task();
                } else {
                    bip_init(NULL);
                    bacnet_ip_initialized = true;
                }
            }
        } else {
            valid_ip_address = false;
        }
    }
}