Skip to content

Commit

Permalink
Anjay 4.0.0-alpha.1
Browse files Browse the repository at this point in the history
Initial release of Anjay 4 Alpha.
  • Loading branch information
anuar2k committed Jan 31, 2024
0 parents commit 83000a9
Show file tree
Hide file tree
Showing 124 changed files with 35,451 additions and 0 deletions.
22 changes: 22 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
BasedOnStyle: llvm
AccessModifierOffset: -4
AlignEscapedNewlinesLeft: true
AlignOperands: true
AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: true
AvoidMisleadingControlStatementContinuationIndent: true
BinPackParameters: false
BinPackArguments: true
BreakBeforeBinaryOperators: NonAssignment
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
IndentWidth: 4
PenaltyBreakBeforeFirstCallParameter: 40
SpaceAfterCStyleCast: true
TypenameMacros: ['AVS_LIST', 'AVS_RBTREE', 'AVS_RBTREE_ELEM', 'AVS_VECTOR', 'AVS_SORTED_SET', 'AVS_SORTED_SET_ELEM']
BreakDesignatedInitializers: true
IndentPPDirectives: AfterHash
CommentPragmas: "AVSYSTEM_ANJAY_COMMERCIAL.*"
ExperimentalAutoDetectBinPacking: true
25 changes: 25 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
docs/diagrams/out

# NetBeans Project
nbproject

# VSCode
.vscode/

build/
site/

# make
CMakeFiles/
anjay_basic_example
cmake_install.cmake
CMakeCache.txt
libfluf.a
libavs_commons.a
Makefile

/anjay_basic_with_dm_example
/dm_tests
/sdm_tests
/example_coap_udp
/fluf_tests
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "deps/avs_commons"]
path = deps/avs_commons
url = https://github.com/AVSystem/avs_commons.git
170 changes: 170 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
cmake_minimum_required(VERSION 3.4.0)

add_compile_options(-std=c99 -pedantic -Wall -Wextra -Winit-self
-Wmissing-declarations -Wc++-compat -Wsign-conversion
-Wconversion -Wcast-qual -Wvla -Wno-variadic-macros
-Wno-long-long -Wshadow -O0 -g3)
#target_compile_options(fluf PUBLIC -O0 -g3 -Wall)

#avs_commons
project(avs_commons C)
file(GLOB_RECURSE commons_src
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/src/**/*.c"
)

add_library(avs_commons ${commons_src})

target_include_directories(avs_commons PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/linux_config"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/src"
)
target_link_libraries(avs_commons m pthread anl)


#fluf
project(fluf C)

file(GLOB_RECURSE fluf_src
"${CMAKE_CURRENT_SOURCE_DIR}/src/fluf/*.c"
)
add_library(fluf ${fluf_src})

target_compile_definitions(fluf PUBLIC
-DFLUF_WITH_LWM2M11
-DFLUF_WITH_LWM2M12
-DFLUF_WITH_SENML_CBOR
-DFLUF_WITH_LWM2M_CBOR
-DFLUF_WITH_CBOR
-DFLUF_WITH_CBOR_INDEFINITE_BYTES
-DFLUF_WITH_CBOR_DECIMAL_FRACTIONS
-DFLUF_WITH_CBOR_HALF_FLOAT
-DFLUF_WITH_CBOR_STRING_TIME)

target_include_directories(fluf PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/include_public"
)
target_link_libraries(fluf PUBLIC avs_commons)

# anjay_basic example
project(anjay_basic_example C)

file(GLOB_RECURSE anjay_lite_src
"${CMAKE_CURRENT_SOURCE_DIR}/src/anjay_lite/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/sdm/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/compat/posix/anj_time.c")

add_executable(anjay_basic_example
examples/anjay_basic/anjay_net_impl.c
examples/anjay_basic/main.c
${anjay_lite_src})

target_include_directories(anjay_basic_example PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
)

target_link_libraries(anjay_basic_example PUBLIC fluf)

# anjay_basic_with_send example
project(anjay_send_example C)

add_executable(anjay_send_example
examples/anjay_basic_with_send/anjay_net_impl.c
examples/anjay_basic_with_send/main.c
${anjay_lite_src})

target_include_directories(anjay_send_example PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
)

target_link_libraries(anjay_send_example PUBLIC fluf)

# anjay_basic_with_firmware_update example
project(anjay_firmware_update_example C)

add_executable(anjay_firmware_update_example
examples/anjay_basic_with_firmware_update/anjay_net_impl.c
examples/anjay_basic_with_firmware_update/firmware_update.c
examples/anjay_basic_with_firmware_update/main.c
${anjay_lite_src})

target_include_directories(anjay_firmware_update_example PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/examples/anjay_basic_with_firmware_update"
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
)

target_link_libraries(anjay_firmware_update_example PUBLIC fluf)


#fluf_tests
project(fluf_tests C)

file(GLOB fluf_tests_sources
"${CMAKE_CURRENT_SOURCE_DIR}/tests/fluf/*.c")

add_executable(fluf_tests
${fluf_tests_sources})

target_include_directories(fluf_tests PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/include_public"
)
target_link_libraries(fluf_tests PUBLIC fluf)

target_compile_options(fluf_tests PUBLIC -Wno-pedantic -Wno-c++-compat)

#dm_tests
project(dm_tests C)

file(GLOB dm_test_sources
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/dm/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/tests/anj/dm/*.c")

add_executable(dm_tests
${dm_test_sources})

target_compile_definitions(dm_tests PUBLIC
-DUNIT_TESTING)

target_include_directories(dm_tests PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/tests/anj/dm")

target_link_libraries(dm_tests PUBLIC avs_commons)

target_compile_options(dm_tests PUBLIC -Wno-pedantic -Wno-c++-compat)

#sdm_tests
project(sdm_tests C)

file(GLOB sdm_test_sources
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/sdm/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/tests/anj/sdm/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/anj/compat/posix/anj_time.c")

add_executable(sdm_tests
${sdm_test_sources})

target_compile_definitions(sdm_tests PUBLIC -DUNIT_TESTING)

target_include_directories(sdm_tests PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include_public"
"${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/include_public")

target_link_libraries(sdm_tests PUBLIC fluf)

target_compile_options(sdm_tests PUBLIC -Wno-pedantic -Wno-c++-compat)

#valgrind targets
find_program(VALGRIND_EXECUTABLE valgrind)
if(VALGRIND_EXECUTABLE)
add_custom_target(fluf_tests_with_valgrind
COMMAND ${VALGRIND_EXECUTABLE} --leak-check=full --track-origins=yes -q --error-exitcode=63 $<TARGET_FILE:fluf_tests>)
add_custom_target(dm_tests_with_valgrind
COMMAND ${VALGRIND_EXECUTABLE} --leak-check=full --track-origins=yes -q --error-exitcode=63 $<TARGET_FILE:dm_tests>)
add_custom_target(sdm_tests_with_valgrind
COMMAND ${VALGRIND_EXECUTABLE} --leak-check=full --track-origins=yes -q --error-exitcode=63 $<TARGET_FILE:sdm_tests>)
endif()
47 changes: 47 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
AVSystem-5-clause License

Copyright by AVSystem sp. z o.o. (AVSystem) 17th March 2022.
All rights reserved.
This software is licensed under the following conditions specified below.



All materials referring to features or use of this software must display the
following acknowledgement:

"This product includes software developed by AVSystem"

Redistribution and use of the software in source and binary code forms, with or
without modification, are permitted only provided that the following conditions
are met:

1. Redistribution of source code must retain copyright notice and include the
list of usage conditions and AVSystem's disclaimer.

2. Redistribution in binary form, except as embedded in a physical device, must
contain the above copyright notice, this list of conditions of use and the
following disclaimer in the documentation and/or other materials provided
with the software.

3. Neither the name of the AVSystem nor its collaborators (if any) may be used
to offer or promote products derived from this software without prior
written consent of the owner.

4. Commercial use of this software, with or without modifications, requires
prior notification to AVSystem at [email protected] of such use. In case
the software is used together with AVSystem's CoioteDM Platform, such
notification is not required.

5. Commercial use of the software is limited to 100.000 (one hundred thousand)
devices, unless a separate agreement with AVSystem is made.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT OWNER "AS IS" AND ANY DIRECT OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND REGARDLESS OF THE SOURCE OF
LIABILITY, WHETHER CONTRACT, DIRECT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
80 changes: 80 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Anjay LwM2M library [<img align="right" height="50px" src="https://avsystem.github.io/Anjay-doc/_images/avsystem_logo.png">](http://www.avsystem.com/)

## ALPHA RELEASE NOTICE

This is an alpha, work-in-progress release of Anjay 4. All APIs are a subject to
change without any notice.

### Currently supported features

- no dynamic memory allocation
- UDP binding
- LwM2M 1.1 & 1.2
- TLV Content-Format for input operations
- CBOR and SenML CBOR Content-Format for output operations
- Static data model supporting all operations, except Composite operations
- LwM2M Send support
- Minimal implementations of Security (/0), Server (/1) and Device (/3) objects
- Full implementation for Firmware Update (/5) object
- Partial support for LwM2M Notify (only on resource level, with `pmin` and
`pmax` attributes)

## What is Anjay?

Anjay is a C library that aims to be the reference implementation of the OMA
Lightweight Machine-to-Machine (LwM2M) device management protocol. It eases
development of fully-featured LwM2M client applications by taking care of
protocol details, allowing the user to focus on device-specific aspects.

The project has been created and is actively maintained by
[AVSystem](https://www.avsystem.com).

## Getting started

> **__NOTE:__** Currently, the only supported OS that can run examples and tests
> is Linux.
### Building

```sh
mkdir build
cd build
cmake ..

make -j all
```

### Running examples

There are 3 examples available:
- `anjay_basic_example`, which is a minimal application that instantiates a
simulated temperature sensor
- `anjay_send_example`, which additionally periodicaly reports temperature
readings using LwM2M Send method
- `anjay_firmware_update_example`, which uses LwM2M Firmware Update object to
download and run the downloaded binary

```sh
cd build
./anjay_basic_example endpoint_name
./anjay_send_example endpoint_name
./anjay_firmware_update_example endpoint_name
```

### Running tests

```sh
cd build
./dm_tests
./fluf_tests
./sdm_tests
```

Additionally, these tests can be run with Valgrind:

```sh
cd build
make fluf_tests_with_valgrind
make dm_tests_with_valgrind
make sdm_tests_with_valgrind
```
1 change: 1 addition & 0 deletions deps/avs_commons
Submodule avs_commons added at ebcc5a
Loading

0 comments on commit 83000a9

Please sign in to comment.