232 lines
6.1 KiB
C++
232 lines
6.1 KiB
C++
#include "ycbw.h"
|
|
|
|
CYCBW::CYCBW()
|
|
{
|
|
m_save = 0;
|
|
m_load = 0;
|
|
m_ycbws = NULL;
|
|
|
|
m_ycbws = new struYCBWBuffer[DATABASE_YCBW_NUM];
|
|
if (m_ycbws)
|
|
{
|
|
memset(m_ycbws, 0, sizeof(struYCBWBuffer) * (DATABASE_YCBW_NUM));
|
|
}
|
|
}
|
|
|
|
CYCBW::~CYCBW()
|
|
{
|
|
}
|
|
|
|
void CYCBW::PushYCBW(unionCP56Time& st, int order, LONG value, BYTE qds, int uid, int point, int type)
|
|
{
|
|
if (m_ycbws == NULL) return;
|
|
|
|
m_ycbws[m_save].st.year = st.year;
|
|
m_ycbws[m_save].st.month = st.month;
|
|
m_ycbws[m_save].st.dayofmonth = st.dayofmonth;
|
|
m_ycbws[m_save].st.dayofweek = st.dayofweek;
|
|
m_ycbws[m_save].st.hour = st.hour;
|
|
m_ycbws[m_save].st.minute = st.minute;
|
|
m_ycbws[m_save].st.millisecond = st.millisecond;
|
|
|
|
if (order < 0 || order > DATABASE_YC_NUM)
|
|
{
|
|
m_ycbws[m_save].order = -1;
|
|
}
|
|
else
|
|
{
|
|
m_ycbws[m_save].order = order;
|
|
}
|
|
|
|
m_ycbws[m_save].value = value;
|
|
m_ycbws[m_save].uid = uid;
|
|
m_ycbws[m_save].point = point;
|
|
m_ycbws[m_save].type = type;
|
|
m_ycbws[m_save].qds = qds;
|
|
#if 0
|
|
m_ycbws[m_save].ov = ((qds & 0x01) == 0x01);
|
|
m_ycbws[m_save].bl = ((qds & 0x10) == 0x10);
|
|
m_ycbws[m_save].sb = ((qds & 0x20) == 0x20);
|
|
m_ycbws[m_save].nt = ((qds & 0x40) == 0x40);
|
|
m_ycbws[m_save].iv = ((qds & 0x80) == 0x80);
|
|
#endif
|
|
m_save++;
|
|
m_save = m_save % DATABASE_YCBW_NUM;
|
|
}
|
|
|
|
void CYCBW::DumpYCBW(void)
|
|
{
|
|
FILE* pf;
|
|
char text[64];
|
|
BOOLEAN bNewFile;
|
|
|
|
if (m_load == m_save) return;
|
|
snprintf(text, sizeof(text), FILE_YCBW_LOG, (int)system32.now.month, (int)system32.now.dayofmonth);
|
|
pf = fopen(text, "rb+");
|
|
if (pf == NULL)
|
|
{
|
|
pf = fopen(text, "wb+");
|
|
bNewFile = TRUE;
|
|
}
|
|
if (pf == NULL) return;
|
|
if (bNewFile)
|
|
{
|
|
fseek(pf, 0, SEEK_SET);
|
|
fprintf(pf, "类型(DEV/AUTO);点号;值;单元号;单元类型;单元描述;单元点号;描述\n");
|
|
}
|
|
fseek(pf, 0, SEEK_END);
|
|
|
|
char pathName[512];
|
|
FILE* static_unit;
|
|
struUnitStatic unit;
|
|
snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_UNIT_STATIC);
|
|
static_unit = fopen(pathName, "rb");
|
|
|
|
FILE* static_yc;
|
|
struYCStatic yc;
|
|
snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YC_STATIC);
|
|
static_yc = fopen(pathName, "rb");
|
|
|
|
while (m_load != m_save)
|
|
{
|
|
memset(&unit, 0, sizeof(unit));
|
|
if (static_unit != NULL && fseek(static_unit, sizeof(struUnitStatic)*m_ycbws[m_load].uid, SEEK_SET) == 0)
|
|
{
|
|
fread(&unit, sizeof(struUnitStatic), 1, static_unit);
|
|
unit.name[31] = '\0';
|
|
unit.model[15] = '\0';
|
|
}
|
|
memset(&yc, 0, sizeof(yc));
|
|
if (static_yc != NULL && fseek(static_yc, sizeof(struYCStatic)*m_ycbws[m_load].order, SEEK_SET) == 0)
|
|
{
|
|
fread(&yc, sizeof(struYCStatic), 1, static_yc);
|
|
yc.name[63] = '\0';
|
|
}
|
|
fprintf(pf, "%s;%d;%d;%d;%s;%s;%d;%s\n",
|
|
m_ycbws[m_load].type == YXBWT_DEV ? "DEV" : "AUTO",
|
|
m_ycbws[m_load].order,
|
|
m_ycbws[m_load].value,
|
|
m_ycbws[m_load].uid, unit.model, unit.name,
|
|
m_ycbws[m_load].point, yc.name);
|
|
m_load++;
|
|
m_load = m_load % DATABASE_YCBW_NUM;
|
|
}
|
|
fclose(pf);
|
|
if (static_unit) fclose(static_unit);
|
|
if (static_yc) fclose(static_yc);
|
|
}
|
|
|
|
BOOLEAN CYCBW::GetYCBW(LONG& pos, int& order, LONG& value, BYTE& qds)
|
|
{
|
|
if (m_ycbws == NULL) return FALSE;
|
|
|
|
struYCBWBuffer* pYCBW;
|
|
if (pos < 0 || pos >= DATABASE_YCBW_NUM)
|
|
{
|
|
pos = 0;
|
|
}
|
|
while (pos != m_save)
|
|
{
|
|
pYCBW = &m_ycbws[pos];
|
|
if (pYCBW->order >= 0 && pYCBW->order < DATABASE_YC_NUM)
|
|
{
|
|
break;
|
|
}
|
|
pos++;
|
|
pos = pos % DATABASE_YCBW_NUM;
|
|
}
|
|
if (pos == m_save)
|
|
{
|
|
return FALSE;
|
|
}
|
|
order = pYCBW->order;
|
|
value = pYCBW->value;
|
|
qds = pYCBW->qds;//((pYCBW->bl << 4) | (pYCBW->sb << 5) | (pYCBW->nt << 6) | (pYCBW->iv << 7) | pYCBW->ov);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOLEAN CYCBW::GetYCBW(LONG& pos, unionCP56Time& st, int& order, LONG& value, BYTE& qds, int& uid, int& point, int& type)
|
|
{
|
|
if (m_ycbws == NULL) return FALSE;
|
|
|
|
struYCBWBuffer* pYCBW;
|
|
if (pos < 0 || pos >= DATABASE_YCBW_NUM)
|
|
{
|
|
pos = 0;
|
|
}
|
|
while (pos != m_save)
|
|
{
|
|
pYCBW = &m_ycbws[pos];
|
|
if (pYCBW->order >= 0 && pYCBW->order < DATABASE_YC_NUM)
|
|
{
|
|
break;
|
|
}
|
|
pos++;
|
|
pos = pos % DATABASE_YCBW_NUM;
|
|
}
|
|
if (pos == m_save)
|
|
{
|
|
return FALSE;
|
|
}
|
|
st.year = pYCBW->st.year;
|
|
st.month = pYCBW->st.month;
|
|
st.dayofmonth = pYCBW->st.dayofmonth;
|
|
st.dayofweek = pYCBW->st.dayofweek;
|
|
st.hour = pYCBW->st.hour;
|
|
st.minute = pYCBW->st.minute;
|
|
st.millisecond = pYCBW->st.millisecond;
|
|
st.IV = pYCBW->st.IV;
|
|
st.SU = pYCBW->st.SU;
|
|
order = pYCBW->order;
|
|
uid = pYCBW->uid;
|
|
point = pYCBW->point;
|
|
type = pYCBW->type;
|
|
value = pYCBW->value;
|
|
qds = pYCBW->qds;//((pYCBW->bl << 4) | (pYCBW->sb << 5) | (pYCBW->nt << 6) | (pYCBW->iv << 7) | pYCBW->ov);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOLEAN CYCBW::GetYCBW(LONG& pos, unionCP56Time& st, int& order, LONG& value, BYTE& qds, int& type)
|
|
{
|
|
if (m_ycbws == NULL) return FALSE;
|
|
struYCBWBuffer* pYCBW;
|
|
if (pos < 0 || pos >= DATABASE_YCBW_NUM)
|
|
{
|
|
pos = 0;
|
|
}
|
|
while (pos != m_save)
|
|
{
|
|
pYCBW = &m_ycbws[pos];
|
|
if (pYCBW->order >= 0 && pYCBW->order < DATABASE_YC_NUM)
|
|
{
|
|
break;
|
|
}
|
|
pos++;
|
|
pos = pos % DATABASE_YCBW_NUM;
|
|
}
|
|
if (pos == m_save)
|
|
{
|
|
return FALSE;
|
|
}
|
|
st.year = pYCBW->st.year;
|
|
st.month = pYCBW->st.month;
|
|
st.dayofmonth = pYCBW->st.dayofmonth;
|
|
st.dayofweek = pYCBW->st.dayofweek;
|
|
st.hour = pYCBW->st.hour;
|
|
st.minute = pYCBW->st.minute;
|
|
st.millisecond = pYCBW->st.millisecond;
|
|
st.IV = pYCBW->st.IV;
|
|
st.SU = pYCBW->st.SU;
|
|
order = pYCBW->order;
|
|
type = pYCBW->type;
|
|
value = pYCBW->value;
|
|
qds = pYCBW->qds;//((pYCBW->bl << 4) | (pYCBW->sb << 5) | (pYCBW->nt << 6) | (pYCBW->iv << 7) | pYCBW->ov);
|
|
return TRUE;
|
|
}
|
|
|
|
int CYCBW::GetSavePos(void) const
|
|
{
|
|
return m_save;
|
|
}
|
|
|