140 lines
2.9 KiB
C++
140 lines
2.9 KiB
C++
/**
|
|
* @file tests/device_state.cpp
|
|
* @brief brief
|
|
* @date Mar 14, 2016
|
|
* @author jjacobs
|
|
* @copyright 2016 Dual Inventive Technology Centre B.V.
|
|
*
|
|
* descr
|
|
*/
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <di/device.h>
|
|
|
|
#define CB_PRINT_STATE printf("[%s] Executing [pstate: %u, nstate %u]\n", __func__, pstate, di_device_state_get())
|
|
|
|
static unsigned int idle_cnt = 0;
|
|
static unsigned int armed_cnt = 0;
|
|
static unsigned int active_cnt = 0;
|
|
|
|
static void test_reset_counters(void)
|
|
{
|
|
idle_cnt = 0;
|
|
armed_cnt = 0;
|
|
active_cnt = 0;
|
|
}
|
|
|
|
static void di_device_state_idle_cb(enum di_device_state pstate, void *private_data)
|
|
{
|
|
(void)pstate;
|
|
(void)private_data;
|
|
|
|
CB_PRINT_STATE;
|
|
|
|
idle_cnt++;
|
|
}
|
|
|
|
static void di_device_state_armed_cb(enum di_device_state pstate, void *private_data)
|
|
{
|
|
(void)pstate;
|
|
(void)private_data;
|
|
|
|
CB_PRINT_STATE;
|
|
|
|
armed_cnt++;
|
|
}
|
|
|
|
static void di_device_state_active_cb(enum di_device_state pstate, void *private_data)
|
|
{
|
|
(void)pstate;
|
|
(void)private_data;
|
|
|
|
CB_PRINT_STATE;
|
|
|
|
active_cnt++;
|
|
}
|
|
|
|
/**
|
|
* Set all state callbacks
|
|
*/
|
|
TEST(device_state_callback, set) {
|
|
di_device_state_set_callback(DI_DEVICE_STATE_IDLE, &di_device_state_idle_cb);
|
|
di_device_state_set_callback(DI_DEVICE_STATE_ARMED, &di_device_state_armed_cb);
|
|
di_device_state_set_callback(DI_DEVICE_STATE_ACTIVE, &di_device_state_active_cb);
|
|
}
|
|
|
|
TEST(device_state_callback, execute_idle_armed) {
|
|
/* IDLE -> ARMED */
|
|
EXPECT_EQ(DI_DEVICE_STATE_IDLE, di_device_state_get());
|
|
EXPECT_EQ(DNOK, di_device_token_set(1234));
|
|
|
|
EXPECT_EQ(0U, idle_cnt);
|
|
EXPECT_EQ(1U, armed_cnt);
|
|
EXPECT_EQ(0U, active_cnt);
|
|
|
|
/* ARMED -> IDLE */
|
|
EXPECT_EQ(DNOK, di_device_token_reset());
|
|
|
|
EXPECT_EQ(1U, idle_cnt);
|
|
EXPECT_EQ(1U, armed_cnt);
|
|
EXPECT_EQ(0U, active_cnt);
|
|
|
|
/* Again IDLE -> ARMED */
|
|
EXPECT_EQ(DNOK, di_device_token_set(5678));
|
|
|
|
EXPECT_EQ(1U, idle_cnt);
|
|
EXPECT_EQ(2U, armed_cnt);
|
|
EXPECT_EQ(0U, active_cnt);
|
|
|
|
/* Again ARMED -> IDLE */
|
|
EXPECT_EQ(DNOK, di_device_token_reset());
|
|
|
|
EXPECT_EQ(2U, idle_cnt);
|
|
EXPECT_EQ(2U, armed_cnt);
|
|
EXPECT_EQ(0U, active_cnt);
|
|
|
|
/* Reset */
|
|
test_reset_counters();
|
|
}
|
|
|
|
TEST(device_state_callback, execute_armed_active) {
|
|
/* IDLE -> ARMED -> ACTIVE */
|
|
EXPECT_EQ(DI_DEVICE_STATE_IDLE, di_device_state_get());
|
|
EXPECT_EQ(DNOK, di_device_token_set(1234));
|
|
EXPECT_EQ(DNOK, di_device_activate());
|
|
|
|
EXPECT_EQ(0U, idle_cnt);
|
|
EXPECT_EQ(1U, armed_cnt);
|
|
EXPECT_EQ(1U, active_cnt);
|
|
|
|
/* ACTIVE -> ARMED */
|
|
EXPECT_EQ(DNOK, di_device_deactivate());
|
|
|
|
EXPECT_EQ(0U, idle_cnt);
|
|
EXPECT_EQ(2U, armed_cnt);
|
|
EXPECT_EQ(1U, active_cnt);
|
|
|
|
/* Again ARMED -> ACTIVE */
|
|
EXPECT_EQ(DNOK, di_device_activate());
|
|
|
|
EXPECT_EQ(0U, idle_cnt);
|
|
EXPECT_EQ(2U, armed_cnt);
|
|
EXPECT_EQ(2U, active_cnt);
|
|
|
|
/* Again ACTIVE -> ARMED */
|
|
EXPECT_EQ(DNOK, di_device_deactivate());
|
|
|
|
EXPECT_EQ(0U, idle_cnt);
|
|
EXPECT_EQ(3U, armed_cnt);
|
|
EXPECT_EQ(2U, active_cnt);
|
|
|
|
/* ARMED -> IDLE */
|
|
EXPECT_EQ(DNOK, di_device_token_reset());
|
|
|
|
EXPECT_EQ(1U, idle_cnt);
|
|
EXPECT_EQ(3U, armed_cnt);
|
|
EXPECT_EQ(2U, active_cnt);
|
|
|
|
test_reset_counters();
|
|
}
|