2021-04-15 21:07:13 +03:00

142 lines
3.5 KiB
C

#ifndef _DATA_H_
#define _DATA_H_
/*!
Îïèñàíèå ñòðóêòóð è ñïîñîáà äîñòóïà ê äàííûì
ïîêà âñå ïàðàìåòðû - 32 - áèòíûå float èëè signed long
*/
#include "cpu.h"
typedef union{
CPU_INT32U Val32U;
CPU_INT32S Val32S;
CPU_FP32 ValFloat;
}TVariant32;
// ñòðóêòóðû ãðàíèö
typedef struct{
CPU_INT32U Min;
CPU_INT32U Max;
}TRangeValueULONG;
typedef struct{
CPU_INT32S Min;
CPU_INT32S Max;
}TRangeValueSLONG;
typedef struct{
CPU_FP32 Min;
CPU_FP32 Max;
}TRangeValueFLOAT;
// óíèâåðñàëüíûé äåñêðèïòîð äàííûõ
typedef struct{
// òèï äåñêðèïòîðà
CPU_INT08U Desc;
#define DATA_DESC_EDIT 0 // ðåäàêòèðóåìûé
#define DATA_DESC_VIEW 1 // äëÿ ïðîñìîòðà
// òèï ïàðàìåòðà
CPU_INT08U Type;
//#define DATA_TYPE_UCHAR 0
//#define DATA_TYPE_SCHAR 1
#define DATA_TYPE_ULONG 2
#define DATA_TYPE_SLONG 3
#define DATA_TYPE_FLOAT 4
#define DATA_TYPE_TIME 5
#define DATA_TYPE_TIME_COUNT 6
#define DATA_TYPE_HOUR_MIN 7
// ðàñïîëîæåíèå ïàðàìåòðà
CPU_INT08U Location;
#define DATA_LOC_RAM 0
#define DATA_LOC_FRAM 1
// ïðèçíàê ìàññèâà
CPU_INT08U IsArray;
#define DATA_NO_ARRAY 0
#define DATA_IS_ARRAY 1
// ðàçìåð ìàññèâà
CPU_INT32U ArraySize;
// óêàçàòåëü íà äåñðèïòîð èíäåêñà ìàññèâà
const void* ArrayIndex; //TDataDescStruct*
// óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
void* Data;
// óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
void* RangeValue;
// ôóíêöèÿ ïî èçìåíåíèþ
void (*OnchangeFunc)(void);
// ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
CPU_INT32U ArrayOffset;
// óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
const CPU_INT08U* Name;
// ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
CPU_INT08U IsIndex;
#define DATA_NO_INDEX 0
#define DATA_IS_INDEX 1
// óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
const CPU_INT08U** Items;
// ðàçðåøèòü èíèöèàëèçàöèþ çíà÷åíèåì ïî óìîë÷àíèþ ïðè ñòàðòå ñèñòåìû
CPU_INT08U EnableInit;
#define DATA_INIT_DISABLE 0
#define DATA_INIT_ENABLE 1
// çíà÷åíèå ïî óìîë÷àíèþ
TVariant32 DefaultValue;
}TDataDescStruct;
// ñòðóêòóðà äëÿ ìàññèâà âñåõ ïàðàìåòðîâ
typedef struct{
const TDataDescStruct* ptr;
}TDataDescArrayStruct;
// ôëàãè
#define DATA_FLAG_SYSTEM_INDEX 0
#define DATA_FLAG_DIRECT_INDEX 1
// âîçâðàùàåìûå çíà÷åíèÿ
#define DATA_OK 0
#define DATA_ERR -1
// íåîáõîäèìûå ôóíêöèè
// ïîëó÷åíèå äàííûõ
extern int GetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U flags);
// çàïèñü äàííûõ
extern int SetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U flags);
// ïîëó÷åíèå ñòðîêè ñ îòôîðìàòèðîâàííûì çíà÷åíèåì
extern int GetDataStr(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U index, CPU_INT08U flags);
// ïîëó÷åíèå ïîëíîé ñòðîêè ñ íàçâàíèåì è çíà÷åíèåì
extern int GetDataFullStr(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U index, CPU_INT08U flags);
// ïîëó÷åíèå ñòðîêè ñ èìåíåì
extern int GetDataNameStr(const TDataDescStruct* desc, CPU_INT08U* buf);
// èíèöèàëèçàöèÿ ïî óìîë÷àíèþ
extern int InitDataByDefault(const TDataDescStruct* desc, CPU_INT32U index);
// ïðîâåðêà âñåõ äåñòðèïòîðîâ
extern int CheckAllData(void);
// èíèöèàëèçàöèÿ
extern int InitData(const TDataDescStruct* desc);
extern int GetDataItem(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U itemindex);
extern int InitDescByDefault(const TDataDescStruct* desc);
extern int GetDataMin(const TDataDescStruct* desc, void* buf);
extern int GetDataMax(const TDataDescStruct* desc, void* buf);
#endif //#ifndef _DATA_H_