#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; }