/** * @file tests/device_state.cpp * @brief brief * @date Mar 14, 2016 * @author jjacobs * @copyright 2016 Dual Inventive Technology Centre B.V. * * descr */ #include #include #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(); }