Feature/color objects color command (#302)

* added BACnetColorCommand and BACnetxyColor encoding and unit testing

* Added Color object and unit testing.

* Added Color Temperature object and Unit test

* Fix BVLC unit test warning.

* add port Makefile for extra types

* added RGB to and from CIE xy utility in sys folder, and add unit tests.

* added cmake-win32 target

* Change RP and RPM to use known property decoder.

Add color object RP and RPM decoding and printing
Fix RPM print for new reserved range above 4194303
Change default protocol-revision to 24 for Color object

* Integrate Color and Color Temperature objects into demo apps

Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
Steve Karg
2022-07-13 09:54:36 -05:00
committed by GitHub
parent 085de3c385
commit 38d213b47c
80 changed files with 5369 additions and 347 deletions
@@ -0,0 +1,44 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
add_executable(${PROJECT_NAME}
# File(s) under test
${SRC_DIR}/bacnet/basic/sys/color_rgb.c
# Support files and stubs (pathname alphabetical)
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME} PRIVATE
m)
+104
View File
@@ -0,0 +1,104 @@
/* @file
* @brief test BACnet integer encode/decode APIs
* @date June 2022
* @brief tests sRGB to and from from CIE xy and brightness API
*
* @section LICENSE
* Copyright (c) 2022 Steve Karg <skarg@users.sourceforge.net>
*
* SPDX-License-Identifier: MIT
*/
#include <ztest.h>
#include <bacnet/basic/sys/color_rgb.h>
/**
* @addtogroup bacnet_tests
* @{
*/
/**
* Unit Test for sRGB to CIE xy
*/
static void test_color_rgb_xy_unit(
uint8_t red, uint8_t green, uint8_t blue,
float x_coordinate, float y_coordinate,
uint8_t brightness)
{
float test_x_coordinate = 0.0, test_y_coordinate = 0.0;
uint8_t test_brightness = 0;
uint8_t test_red = 0, test_green = 0, test_blue = 0;
printf("test value:(%u,%u,%u)=(%.3f,%.3f,%u)\n",
(unsigned)red, (unsigned)green, (unsigned)blue,
x_coordinate, y_coordinate, (unsigned)brightness);
color_rgb_to_xy(red, green, blue, &test_x_coordinate, &test_y_coordinate,
&test_brightness);
color_rgb_from_xy(&test_red, &test_green, &test_blue,
x_coordinate, y_coordinate, brightness);
printf("calculated:(%u,%u,%u)=(%.3f,%.3f,%u)\n",
(unsigned)test_red, (unsigned)test_green, (unsigned)test_blue,
test_x_coordinate, test_y_coordinate, (unsigned)test_brightness);
//zassert_equal(x_coordinate, test_x_coordinate, NULL);
//zassert_equal(y_coordinate, test_y_coordinate, NULL);
//zassert_equal(brightness, test_brightness, NULL);
//zassert_equal(red, test_red, NULL);
//zassert_equal(green, test_green, NULL);
//zassert_equal(blue, test_blue, NULL);
}
/**
* Unit Test for sRGB to CIE xy
*/
static void test_color_rgb_xy(void)
{
test_color_rgb_xy_unit(0, 0, 0, 0.0, 0.0, 0);
test_color_rgb_xy_unit(255, 255, 255, 0.323, 0.329, 255);
test_color_rgb_xy_unit(0, 0, 255, 0.136, 0.04, 12);
test_color_rgb_xy_unit(0, 255, 0, 0.172, 0.747, 170);
test_color_rgb_xy_unit(255, 0, 0, 0.701, 0.299, 72);
test_color_rgb_xy_unit(128, 0, 0, 0.701, 0.299, 16);
}
/**
* Unit Test for sRGB to CIE xy
*/
static void test_color_rgb_ascii(void)
{
unsigned count = color_rgb_count();
zassert_true(count > 0, NULL);
const char *name, *test_name;
uint8_t red, green, blue;
uint8_t test_red, test_green, test_blue;
unsigned test_index;
float x_coordinate;
float y_coordinate;
float brightness;
for (unsigned i = 0; i < count; i++) {
name = color_rgb_from_index(i, &red, &green, &blue);
zassert_not_null(name, NULL);
test_index = color_rgb_from_ascii(&test_red, &test_green, &test_blue,
name);
zassert_equal(i, test_index, NULL);
zassert_equal(red, test_red, NULL);
zassert_equal(green, test_green, NULL);
zassert_equal(blue, test_blue, NULL);
test_name = color_rgb_to_ascii(red, green, blue);
zassert_not_null(test_name, NULL);
}
}
/**
* @}
*/
void test_main(void)
{
ztest_test_suite(color_rgb_tests,
ztest_unit_test(test_color_rgb_ascii),
ztest_unit_test(test_color_rgb_xy)
);
ztest_run_test_suite(color_rgb_tests);
}