86 lines
2.6 KiB
C
86 lines
2.6 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) {
|
|
static uint16_t testAccelCalibIdx = 0xFFFF;
|
|
|
|
for (uint16_t testIdx = 0; testIdx < env->count; ++testIdx) {
|
|
|
|
if (testAccelCalibIdx == 0xFFFF) {
|
|
if (memcmp(env->items[testIdx].name.str, "ACCEL_CALIB", sizeof("ACCEL_CALIB") - 1) == 0) {
|
|
testAccelCalibIdx = testIdx;
|
|
}
|
|
}
|
|
|
|
if (env->items[testIdx].modesFlag & modesFlag) {
|
|
env->items[testIdx].result = DEVICE_TESTING_CODE_IN_PROCESS;
|
|
SystemDelayMs(timeout);
|
|
DeviceTestsTable_MakeTest(env->items + testIdx);
|
|
env->items[testIdx].resultFix = env->items[testIdx].result;
|
|
|
|
if (testAccelCalibIdx != 0xFFFF) {
|
|
DeviceTestsTable_MakeTest(env->items + testAccelCalibIdx);
|
|
env->items[testAccelCalibIdx].resultFix = env->items[testAccelCalibIdx].result;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|