mirror of
https://github.com/dimoniche/Moyka.git
synced 2026-01-30 09:53:31 +03:00
517 lines
15 KiB
C
517 lines
15 KiB
C
#include <includes.h>
|
|
#include <stddef.h>
|
|
#include "journal.h"
|
|
#include "fram.h"
|
|
#include "fram_map.h"
|
|
#include "time.h"
|
|
#include "fr.h"
|
|
#include "crc16.h"
|
|
#include "mode.h"
|
|
|
|
static CPU_INT32U GlobalErrorsFlags[JOURNAL_EVENTS_COUNT / 32 + 1] = {0};
|
|
static CPU_INT32U PrevFlags[JOURNAL_EVENTS_COUNT / 32 + 1] = {0};
|
|
|
|
void SetErrorFlag(CPU_INT08U error)
|
|
{
|
|
#if OS_CRITICAL_METHOD == 3
|
|
OS_CPU_SR cpu_sr = 0;
|
|
#endif
|
|
OS_ENTER_CRITICAL();
|
|
GlobalErrorsFlags[error/32] |= (1L << (error%32));
|
|
OS_EXIT_CRITICAL();
|
|
}
|
|
|
|
void ClrErrorFlag(CPU_INT08U error)
|
|
{
|
|
#if OS_CRITICAL_METHOD == 3
|
|
OS_CPU_SR cpu_sr = 0;
|
|
#endif
|
|
OS_ENTER_CRITICAL();
|
|
GlobalErrorsFlags[error/32] &= ~(1L << (error%32));
|
|
OS_EXIT_CRITICAL();
|
|
}
|
|
|
|
int TstErrorFlag(CPU_INT08U error)
|
|
{
|
|
CPU_INT32U temp = 0;
|
|
#if OS_CRITICAL_METHOD == 3
|
|
OS_CPU_SR cpu_sr = 0;
|
|
#endif
|
|
OS_ENTER_CRITICAL();
|
|
temp = GlobalErrorsFlags[error/32] & (1L << (error%32));
|
|
OS_EXIT_CRITICAL();
|
|
return temp;
|
|
}
|
|
|
|
int TstCriticalErrors(void)
|
|
{
|
|
CPU_INT32U errors = 0;
|
|
#if OS_CRITICAL_METHOD == 3
|
|
OS_CPU_SR cpu_sr = 0;
|
|
#endif
|
|
CPU_INT32U ignore_fiscal = 0;
|
|
|
|
GetData(&DisableFiscalErrorsDesc, &ignore_fiscal, 0, DATA_FLAG_SYSTEM_INDEX);
|
|
|
|
OS_ENTER_CRITICAL();
|
|
|
|
if (!ignore_fiscal)
|
|
{
|
|
errors |= TstCriticalFiscalError();
|
|
errors |= TstErrorFlag(ERROR_FR_CONN);
|
|
/*
|
|
if (!FReportTest())
|
|
{ // ÔÐ íåäîñòóïåí äëÿ ëþáîé ïå÷àòè
|
|
errors |= 0x1;
|
|
}
|
|
*/
|
|
}
|
|
|
|
OS_EXIT_CRITICAL();
|
|
if (errors) return 1;
|
|
return 0;
|
|
}
|
|
|
|
|
|
int TstCriticalValidatorErrors(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void ClrValidatorErrors(void)
|
|
{
|
|
}
|
|
|
|
// ïîëó÷èòü çàïèñü èç æóðíàëà ñîáûòèé
|
|
int GetEventRecord(TEventRecord* record, CPU_INT32U index)
|
|
{
|
|
if (index >= EVENT_RECORDS_COUNT) return -1;
|
|
ReadArrayFram(offsetof(TFramMap, EventRecords[0])+index*sizeof(TEventRecord), sizeof(TEventRecord), (unsigned char*)record);
|
|
return 0;
|
|
}
|
|
|
|
// çàïèñü â æóðíàë çàïèñè î ñîáûòèè
|
|
void SaveEventRecord(CPU_INT08U channel, CPU_INT08U event, CPU_INT16U data)
|
|
{
|
|
TEventRecord record;
|
|
|
|
// íàéòè ñàìóþ ñòàðóþ ïî âðåìåíè çàïèñü è äîáàâèòü íîâóþ ïîñëå íå¸
|
|
CPU_INT32U i, ind=0, indm = 0, maxtime = 0;
|
|
for (i = 0; i < EVENT_RECORDS_COUNT; i++)
|
|
{
|
|
ReadArrayFram(offsetof(TFramMap, EventRecords[0])+i*sizeof(TEventRecord), sizeof(TEventRecord), (unsigned char*)&record);
|
|
if ((record.time == 0) || (record.time == 0xffffffff)) {ind = i; break;}
|
|
if (record.time >= maxtime) {maxtime = record.time; indm = i;}
|
|
}
|
|
|
|
if (i >= EVENT_RECORDS_COUNT)
|
|
{
|
|
// âñå çàïèñè çàïîëåíû - çàïèñûâàåì íà ìåñòî ñàìîé ñòàðîé
|
|
ind = (indm + 1) % EVENT_RECORDS_COUNT;
|
|
}
|
|
|
|
record.time = GetTimeSec();
|
|
record.channel = channel;
|
|
record.event = event;
|
|
record.data = data;
|
|
WriteArrayFram(offsetof(TFramMap, EventRecords[0])+ind*sizeof(TEventRecord), sizeof(TEventRecord), (unsigned char*)&record);
|
|
}
|
|
|
|
|
|
void ClearEventJournal(void)
|
|
{
|
|
SetArrayFram(offsetof(TFramMap, EventRecords), sizeof(TEventRecord)*EVENT_RECORDS_COUNT, 0x00);
|
|
}
|
|
|
|
void GetEventStr(char* str, char event)
|
|
{
|
|
switch (event){
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST1:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST2:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 2");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST3:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 3");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST4:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 4");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST5:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 5");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST6:
|
|
sprintf(str, "Âí.êóïþðà ïîñò 6");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_MONEY_BANK_POST1:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_BANK_POST2:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 2");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_BANK_POST3:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 3");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_BANK_POST4:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 4");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_BANK_POST5:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 5");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_BANK_POST6:
|
|
sprintf(str, "Ýë.ïëàòåæ ïîñò 6");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_MONEY_COIN_POST1:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST2:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 2");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST3:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 3");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST4:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 4");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST5:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 5");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST6:
|
|
sprintf(str, "Âí.ìîíåòû ïîñò 6");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_VACUUM1:
|
|
sprintf(str, "Âí.ìîíåòû ïûë.1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_VACUUM2:
|
|
sprintf(str, "Âí.ìîíåòû ïûë.2");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_START_SESSION:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ");
|
|
break;
|
|
case JOURNAL_EVENT_END_SESSION:
|
|
sprintf(str, "Êîí.ñåàíñà ");
|
|
break;
|
|
case JOURNAL_EVENT_DEVICE_ON:
|
|
sprintf(str, "Âêëþ÷åíèå");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_PRINT_BILL_POST1:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 1");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST2:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 2");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST3:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 3");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST4:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 4");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST5:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 5");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST6:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïîñò 6");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_VACUUM1:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïûë.1");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_VACUUM2:
|
|
sprintf(str, "Ïå÷àòü ÷åêà ïûë.2");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST1:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 1");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST2:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 2");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST3:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 3");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST4:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 4");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST5:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 5");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_ONLINE_POST6:
|
|
sprintf(str, "Ïå÷.ýë.÷åêà ïîñò 6");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_PRINT_Z:
|
|
sprintf(str, "Ïå÷àòü îò÷åòà î çàêð.ñì.");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_X:
|
|
sprintf(str, "Ïå÷àòü X-îò÷åòà");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BUF:
|
|
sprintf(str, "Ïå÷àòü îò÷.èç áóô.");
|
|
break;
|
|
case JOURNAL_EVENT_CHANGE_MODE:
|
|
sprintf(str, "Ñìåíà ðåæèìà");
|
|
break;
|
|
case JOURNAL_EVENT_WASHING:
|
|
sprintf(str, "Ìîéêà");
|
|
break;
|
|
case JOURNAL_EVENT_PASS_FAIL:
|
|
sprintf(str, "Íåâåðíûé ïàðîëü");
|
|
break;
|
|
default:
|
|
sprintf(str, "íåò");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void GetEventStrEng(char* str, char event)
|
|
{
|
|
switch (event){
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST1:
|
|
sprintf(str, " | Vnesena kupura post 1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST2:
|
|
sprintf(str, " | Vnesena kupura post 2");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST3:
|
|
sprintf(str, " | Vnesena kupura post 3");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST4:
|
|
sprintf(str, " | Vnesena kupura post 4");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST5:
|
|
sprintf(str, " | Vnesena kupura post 5");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_NOTE_POST6:
|
|
sprintf(str, " | Vnesena kupura post 6");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_MONEY_COIN_POST1:
|
|
sprintf(str, " | Vneseny monety post 1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST2:
|
|
sprintf(str, " | Vneseny monety post 2");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST3:
|
|
sprintf(str, " | Vneseny monety post 3");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST4:
|
|
sprintf(str, " | Vneseny monety post 4");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST5:
|
|
sprintf(str, " | Vneseny monety post 5");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_POST6:
|
|
sprintf(str, " | Vneseny monety post 6");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_VACUUM1:
|
|
sprintf(str, " | Vneseny monety vacuu1");
|
|
break;
|
|
case JOURNAL_EVENT_MONEY_COIN_VACUUM2:
|
|
sprintf(str, " | Vneseny monety vacuu2");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_START_SESSION:
|
|
sprintf(str, " | Print bill ");
|
|
break;
|
|
case JOURNAL_EVENT_END_SESSION:
|
|
sprintf(str, " | Koneñ seansa ");
|
|
break;
|
|
case JOURNAL_EVENT_DEVICE_ON:
|
|
sprintf(str, " | Vkluchenie ");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_PRINT_BILL_POST1:
|
|
sprintf(str, " | Pechat' checka post 1");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST2:
|
|
sprintf(str, " | Pechat' checka post 2");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST3:
|
|
sprintf(str, " | Pechat' checka post 3");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST4:
|
|
sprintf(str, " | Pechat' checka post 4");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST5:
|
|
sprintf(str, " | Pechat' checka post 5");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_POST6:
|
|
sprintf(str, " | Pechat' checka post 6");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_VACUUM1:
|
|
sprintf(str, " | Pechat' checka vacuu1");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BILL_VACUUM2:
|
|
sprintf(str, " | Pechat' checka vacuu2");
|
|
break;
|
|
|
|
case JOURNAL_EVENT_PRINT_Z:
|
|
sprintf(str, " | Pechat' Z-otcheta ");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_X:
|
|
sprintf(str, " | Pechat' X-otcheta ");
|
|
break;
|
|
case JOURNAL_EVENT_PRINT_BUF:
|
|
sprintf(str, " | Pechat' otcheta iz bufera ");
|
|
break;
|
|
case JOURNAL_EVENT_CHANGE_MODE:
|
|
sprintf(str, " | Smena rejima ");
|
|
break;
|
|
case JOURNAL_EVENT_WASHING:
|
|
sprintf(str, " | Moyka ");
|
|
break;
|
|
case JOURNAL_EVENT_PASS_FAIL:
|
|
sprintf(str, " | Neverniy parol' ");
|
|
break;
|
|
default:
|
|
sprintf(str, " | Net sobytiya ");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void PrintEventJournalRecordEng(char* str, TEventRecord *record)
|
|
{
|
|
if (record->event)
|
|
{
|
|
TRTC_Data rtc_data;
|
|
|
|
// íàïå÷àòàåì âðåìÿ
|
|
Sec2Date(&rtc_data, record->time);
|
|
sprintf(str, "| ");
|
|
PrintRTCDateTimeString(&str[strlen(str)], &rtc_data);
|
|
// íàïå÷àòàåì ñîáûòèå
|
|
GetEventStrEng(&str[strlen(str)], record->event);
|
|
|
|
// íàïå÷àòàåì äîïîëíèòåëüíûå ïîëÿ
|
|
if ((record->event >= JOURNAL_EVENT_MONEY_NOTE_POST1) && (record->event <= JOURNAL_EVENT_MONEY_COIN_VACUUM2))
|
|
{
|
|
sprintf(&str[strlen(str)], "%d rub.", record->data);
|
|
}
|
|
else if ((record->event >= JOURNAL_EVENT_MONEY_BANK_POST1) && (record->event <= JOURNAL_EVENT_MONEY_BANK_POST6))
|
|
{
|
|
sprintf(&str[strlen(str)], "%d rub.", record->data);
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_START_SESSION)
|
|
{
|
|
sprintf(&str[strlen(str)], "");
|
|
PrintSecToHourMinSec(&str[strlen(str)], record->data);
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_END_SESSION)
|
|
{
|
|
sprintf(&str[strlen(str)], "kanal %d ", record->channel+1);
|
|
sprintf(&str[strlen(str)], "");
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_DEVICE_ON)
|
|
{
|
|
sprintf(&str[strlen(str)], "");
|
|
}
|
|
else if ((record->event >= JOURNAL_EVENT_PRINT_BILL_POST1) && (record->event <= JOURNAL_EVENT_PRINT_BILL_VACUUM2))
|
|
{
|
|
sprintf(&str[strlen(str)], "%d rub.", record->data);
|
|
}
|
|
else if ((record->event >= JOURNAL_EVENT_PRINT_BILL_ONLINE_POST1) && (record->event <= JOURNAL_EVENT_PRINT_BILL_ONLINE_POST1))
|
|
{
|
|
sprintf(&str[strlen(str)], "%d rub.", record->data);
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_PRINT_Z)
|
|
{
|
|
sprintf(&str[strlen(str)], "");
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_PRINT_X)
|
|
{
|
|
sprintf(&str[strlen(str)], "");
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_PRINT_BUF)
|
|
{
|
|
sprintf(&str[strlen(str)], "");
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_CHANGE_MODE)
|
|
{
|
|
if (record->data == MODE_WORK) sprintf(&str[strlen(str)], "rabota");
|
|
else sprintf(&str[strlen(str)], "nastroika");
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_WASHING)
|
|
{
|
|
sprintf(&str[strlen(str)], "%u post.", record->data + 1);
|
|
}
|
|
else if (record->event == JOURNAL_EVENT_PASS_FAIL)
|
|
{
|
|
sprintf(&str[strlen(str)], "%u", record->data);
|
|
}
|
|
|
|
sprintf(&str[strlen(str)], "\r\n");
|
|
}
|
|
else
|
|
{ // ïóñòàÿ çàïèñü
|
|
sprintf(str, "net zapisi\r\n");
|
|
}
|
|
}
|
|
|
|
void IncCounter(CPU_INT08U ch, CPU_INT32U time, CPU_INT32U money)
|
|
{
|
|
CPU_INT32U r, t, m;
|
|
TCountersLong long_ctrs;
|
|
|
|
// óâåëè÷èì îáùèå ñ÷åò÷èêè
|
|
ReadArrayFram(offsetof(TFramMap, Counters.CounterRun), sizeof(CPU_INT32U), (unsigned char*)&r);
|
|
ReadArrayFram(offsetof(TFramMap, Counters.CounterTime), sizeof(CPU_INT32U), (unsigned char*)&t);
|
|
ReadArrayFram(offsetof(TFramMap, Counters.CounterMoney), sizeof(CPU_INT32U), (unsigned char*)&m);
|
|
r++;
|
|
t+=time;
|
|
m+=money;
|
|
WriteArrayFram(offsetof(TFramMap, Counters.CounterRun), sizeof(CPU_INT32U), (unsigned char*)&r);
|
|
WriteArrayFram(offsetof(TFramMap, Counters.CounterTime), sizeof(CPU_INT32U), (unsigned char*)&t);
|
|
WriteArrayFram(offsetof(TFramMap, Counters.CounterMoney), sizeof(CPU_INT32U), (unsigned char*)&m);
|
|
|
|
// óâåëè÷èì äëèííûå ñ÷åò÷èêè
|
|
ReadArrayFram(offsetof(TFramMap, CountersLong), sizeof(TCountersLong), (unsigned char*)&long_ctrs);
|
|
|
|
long_ctrs.CounterRunLong++;
|
|
long_ctrs.CounterTimeLong += time;
|
|
long_ctrs.CounterMoneyLong += money;
|
|
long_ctrs.crc = CRC16((unsigned char*)&long_ctrs, offsetof(TCountersLong, crc));
|
|
WriteArrayFram(offsetof(TFramMap, CountersLong), sizeof(TCountersLong), (unsigned char*)&long_ctrs);
|
|
}
|
|
|
|
CPU_INT32U GetShortMoney()
|
|
{
|
|
CPU_INT32U money;
|
|
ReadArrayFram(offsetof(TFramMap, Counters.CounterMoney), sizeof(CPU_INT32U), (unsigned char*)&money);
|
|
return money;
|
|
}
|
|
|
|
void CheckLongCounters(void)
|
|
{
|
|
TCountersLong long_ctrs;
|
|
CPU_INT16U crc;
|
|
ReadArrayFram(offsetof(TFramMap, CountersLong), sizeof(TCountersLong), (unsigned char*)&long_ctrs);
|
|
crc = CRC16((unsigned char*)&long_ctrs, offsetof(TCountersLong, crc));
|
|
if (crc != long_ctrs.crc)
|
|
{
|
|
memset(&long_ctrs, 0, sizeof(TCountersLong));
|
|
long_ctrs.crc = CRC16((unsigned char*)&long_ctrs, offsetof(TCountersLong, crc));
|
|
WriteArrayFram(offsetof(TFramMap, CountersLong), sizeof(TCountersLong), (unsigned char*)&long_ctrs);
|
|
}
|
|
}
|
|
|
|
// ñåðâåð îøèáîê (çàíåñåíèå îøèáîê â æóðíàë)
|
|
void ErrorServer(void)
|
|
{
|
|
for (int i = ERROR_FR_CONN; i < JOURNAL_EVENTS_COUNT; i++)
|
|
{
|
|
if (!(PrevFlags[i/32] & (1L<<(i%32)))
|
|
&& (TstErrorFlag(i)))
|
|
{
|
|
// çàïèøåì â æóðíàë
|
|
SaveEventRecord(0, i, 0);
|
|
}
|
|
}
|
|
|
|
memcpy(PrevFlags, GlobalErrorsFlags, sizeof(CPU_INT32U) * (JOURNAL_EVENTS_COUNT / 32 + 1));
|
|
}
|
|
|