This commit is contained in:
cfif 2024-12-04 13:10:49 +03:00
commit c735218177
4 changed files with 191 additions and 0 deletions

41
Inc/DeviceTestsResults.h Normal file
View File

@ -0,0 +1,41 @@
//
// Created by xemon on 30.10.22.
//
#ifndef UVEOS_ON_NATION_DEVICETESTSRESULTS_H
#define UVEOS_ON_NATION_DEVICETESTSRESULTS_H
//Данные коды глобальны для всех устройств
//Они должны быть занесены в сервисную программу
//Удаление или замена кода недопустима
//Коды могут могут только доплняться
//Максимальное значение кода 0xFFFF
typedef enum {
DEVICE_TESTING_CODE_NOT_TESTED = 0x00,
DEVICE_TESTING_CODE_IN_PROCESS = 0x01,
DEVICE_TESTING_CODE_ERROR = 0x02,
DEVICE_TESTING_CODE_PASSED = 0x03,
DEVICE_TESTING_CODE_BATTERY_NOT_CHARGE = 0x11,
DEVICE_TESTING_CODE_BATTERY_PRE_CHARGE = 0x12,
DEVICE_TESTING_CODE_BATTERY_FAST_CHARGE = 0x13,
DEVICE_TESTING_CODE_BATTERY_CHARGE_DONE = 0x14,
DEVICE_TESTING_CODE_BUTTON_PRESSED = 0x21,
DEVICE_TESTING_CODE_BUTTON_NOT_PRESSED = 0x22,
DEVICE_TESTING_CODE_LED_OFF = 0x23,
DEVICE_TESTING_CODE_LED_RED = 0x24,
DEVICE_TESTING_CODE_LED_GREEN = 0x25,
DEVICE_TESTING_CODE_LED_BLUE = 0x25,
DEVICE_TESTING_CODE_NOT_CONNECTED = 0x31,
DEVICE_TESTING_CODE_CONNECTED = 0x32,
DEVICE_TESTING_CODE_SHORT_CIRCUIT = 0x33,
DEVICE_TESTING_CODE_NOT_CONNECTED_OK = 0x34,
DEVICE_TESTING_CODE_INPUT_ANTENA_OK = 0x35
} eDeviceTestingCode;
#endif //UVEOS_ON_NATION_DEVICETESTSRESULTS_H

69
Inc/DeviceTestsTable.h Normal file
View File

@ -0,0 +1,69 @@
//
// Created by cfif on 14.10.22.
//
#ifndef UVEOS_ON_NATION_DeviceTestsTable_H
#define UVEOS_ON_NATION_DeviceTestsTable_H
#include "stdint.h"
#include <stdbool.h>
#include "cmsis_os.h"
#include "DeviceTestsResults.h"
typedef eDeviceTestingCode (*TestMethod)(void *env);
typedef struct {
char str[16];
uint8_t length;
} tTestName;
typedef struct {
tTestName name;
void *testEnv;
TestMethod testMethod;
uint16_t result;
uint16_t modesFlag;
} tTestDescriptor;
#define DEVICE_TEST_NAME(STR) (tTestName){.str=(STR), .length=sizeof(STR)-1}
typedef struct {
tTestDescriptor *items;
uint16_t itemsLimit;
uint16_t count;
osMutexId_t rmcAccess;
uint16_t currentProcessMode;
uint16_t currentProcessIterationsLeft;
uint32_t testProcessBegin;
uint32_t testProcessEnd;
} tDeviceTestsTable;
void DeviceTestsTableInit(tDeviceTestsTable *env, tTestDescriptor *itemsMem, uint16_t itemsLimit);
#define DeviceTestsTableInitStatic(ENV, MEM) DeviceTestsTableInit(ENV,MEM,sizeof(MEM)/ sizeof(tTestDescriptor))
tTestDescriptor* DeviceTestsTableAdd(tDeviceTestsTable *env, tTestName name, void *testEnv, TestMethod method, uint16_t modesFlag);
void DeviceTestsTable_TestInMode(tDeviceTestsTable *env, uint16_t modesFlag, uint16_t timeout);
bool DeviceTestsTable_AnyTestHasCode(tDeviceTestsTable *env, eDeviceTestingCode code);
tTestDescriptor *DeviceTestsTable_GetModeTest(tDeviceTestsTable *env, uint16_t modesFlag, char *name, uint8_t nameSize);
#define DeviceTestsTable_GetModeTestStatic(ENV, MODE, NAME) DeviceTestsTable_GetModeTest(ENV,MODE, NAME,sizeof(NAME)-1)
uint16_t DeviceTestsTable_MakeTest(tTestDescriptor *test);
//uint16_t getTestRepeats(tDeviceTestsTable *env, uint16_t id);
//
//uint16_t getTestResult(tDeviceTestsTable *env, uint16_t id);
//
//void setTestRepeats(tDeviceTestsTable *env, uint16_t id, uint16_t value);
//
//void setTestResult(tDeviceTestsTable *env, uint16_t id, uint16_t value);
#endif //UVEOS_ON_NATION_DeviceTestsTable_H

69
Src/DeviceTestsTable.c Normal file
View File

@ -0,0 +1,69 @@
//
// 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;
}

12
modular.json Normal file
View File

@ -0,0 +1,12 @@
{
"dep": [
],
"cmake": {
"inc_dirs": [
"Inc"
],
"srcs": [
"Src/**.c"
]
}
}