DeviceTestsTable/Src/DeviceTestsTable.c

70 lines
2.0 KiB
C

//
// Created by cfif on 14.10.22.
//
#include <string.h>
#include "DeviceTestsTable.h"
#include <SystemDelayInterface.h>
void DeviceTestsTableInit(
tDeviceTestsTable *env,
tTestDescriptor *itemsMem,
uint16_t itemsLimit
) {
env->count = 0;
env->items = itemsMem;
env->itemsLimit = itemsLimit;
}
tTestDescriptor *DeviceTestsTableAdd(
tDeviceTestsTable *env, tTestName name, void *testEnv, TestMethod method, uint16_t modesFlag
) {
if (env->count >= env->itemsLimit) {
return NULL;
}
env->items[env->count].testMethod = method;
env->items[env->count].testEnv = testEnv;
env->items[env->count].name = name;
env->items[env->count].modesFlag = modesFlag;
++env->count;
return env->items + env->count - 1;
}
uint16_t DeviceTestsTable_MakeTest(tTestDescriptor *test) {
return test->result = test->testMethod(test->testEnv);
}
void DeviceTestsTable_TestInMode(tDeviceTestsTable *env, uint16_t modesFlag, uint16_t timeout) {
for (uint16_t testIdx = 0; testIdx < env->count; ++testIdx) {
if (env->items[testIdx].modesFlag & modesFlag) {
env->items[testIdx].result = DEVICE_TESTING_CODE_IN_PROCESS;
SystemDelayMs(timeout);
DeviceTestsTable_MakeTest(env->items + testIdx);
}
}
}
bool DeviceTestsTable_AnyTestHasCode(tDeviceTestsTable *env, eDeviceTestingCode code) {
for (uint16_t testIdx = 0; testIdx < env->count; ++testIdx) {
if (env->items[testIdx].result == code) {
return true;
}
}
return false;
}
tTestDescriptor *DeviceTestsTable_GetModeTest(tDeviceTestsTable *env, uint16_t modes, char *name, uint8_t nameSize) {
for (uint16_t testIdx = 0; testIdx < env->count; ++testIdx) {
tTestDescriptor *test = env->items + testIdx;
if (test->modesFlag & modes) {
if ((nameSize == test->name.length) && (strncmp(name, test->name.str, test->name.length) == 0)) {
return test;
}
}
}
return NULL;
}