Init
This commit is contained in:
commit
1acec4cb87
|
|
@ -0,0 +1,43 @@
|
|||
//
|
||||
// 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,
|
||||
|
||||
DEVICE_TESTING_CODE_NOT_ACTIVE = 0x36,
|
||||
} eDeviceTestingCode;
|
||||
|
||||
#endif //UVEOS_ON_NATION_DEVICETESTSRESULTS_H
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
//
|
||||
// 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 resultFix;
|
||||
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
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
//
|
||||
// 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;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"dep": [
|
||||
],
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"Inc"
|
||||
],
|
||||
"srcs": [
|
||||
"Src/**.c"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue