update for bf ftp

This commit is contained in:
zhouhuang 2024-12-13 16:16:19 +08:00
parent 61ade5da83
commit fdba64c004
4 changed files with 225 additions and 182 deletions

View File

@ -453,7 +453,7 @@ BOOLEAN CRYDevice::GetUnitYCIsForceArchive(int uid, int order) const
if (uid < 0 || uid >= UNIT_NUM) return FALSE; if (uid < 0 || uid >= UNIT_NUM) return FALSE;
pUnit = &config.units[uid]; pUnit = &config.units[uid];
if ((pUnit->state & 0x01) != TRUE) return FALSE; if ((pUnit->state & 0x01) != TRUE) return FALSE;
if ((pUnit->state & 0x20) == 0x20) return TRUE; if ((pUnit->state & 0x20) == 0x00) return TRUE; //没有启动ftp
if (order < 0 || order >= pUnit->yccount) return FALSE; if (order < 0 || order >= pUnit->yccount) return FALSE;
pYC = &pUnit->ycs[order]; pYC = &pUnit->ycs[order];
udb = pYC->order; udb = pYC->order;
@ -472,7 +472,7 @@ BOOLEAN CRYDevice::GetUnitYXIsForceArchive(int uid, int order) const
if (uid < 0 || uid >= UNIT_NUM) return FALSE; if (uid < 0 || uid >= UNIT_NUM) return FALSE;
pUnit = &config.units[uid]; pUnit = &config.units[uid];
if ((pUnit->state & 0x01) != TRUE) return FALSE; if ((pUnit->state & 0x01) != TRUE) return FALSE;
if ((pUnit->state & 0x20) == 0x20) return TRUE; if ((pUnit->state & 0x20) == 0x00) return TRUE; //没有启动ftp
if (order < 0 || order >= pUnit->yxcount) return FALSE; if (order < 0 || order >= pUnit->yxcount) return FALSE;
pYX = &pUnit->yxs[order]; pYX = &pUnit->yxs[order];
udb = pYX->order; udb = pYX->order;

View File

@ -19,175 +19,209 @@
static datalen2mbaddrmap m_datalen2mbaddr_map; static datalen2mbaddrmap m_datalen2mbaddr_map;
static struDataLengthMBAddr m_datalen_mbaddr[] = { static struDataLengthADSAddr m_datalen_adsaddr[] = {
{ 1, 400 }, { 2,421,0.1 },
{ 1, 402 }, { 2,409,0.1 },
{ 1, 404 }, { 2,445,0.01 },
{ 4, 421 }, { 2,659,0.001 },
{ 4, 409 }, { 2,663,0.001 },
{ 4, 445 }, { 2,400,1 },
{ 4, 659 }, { 2,402,1 },
{ 4, 663 }, { 2,404,1 },
{ 4, 425 }, { 2,449,0.01 },
{ 4, 413 }, { 2,425,0.1 },
{ 4, 449 }, { 2,413,0.1 },
{ 4, 429 }, { 2,-600,0.1 },
{ 4, 417 }, { 2,655,0.1 },
{ 4, 453 }, { 2,715,0.1 },
{ 4, 683 }, { 2,461,0.1 },
{ 4, 643 }, { 2,493,0.1 },
{ 4, 647 }, { 2,-600,0.1 },
{ 4, 651 }, { 2,497,0.1 },
{ 4, 711 }, { 2,501,0.01 },
{ 4, 655 }, { 2,433,0.01 },
{ 4, 715 }, { 2,437,0.01 },
{ 4, 703 }, { 2,441,0.01 },
{ 4, 707 }, { 2,687,0.01 },
{ 4, 457 }, { 2,691,0.01 },
{ 4, 461 }, { 2,695,0.01 },
{ 4, 493 }, { 2,517,0.1 },
{ 4, 497 }, { 2,-600,0.1 },
{ 4, 501 }, { 2,-600,1 },
{ 4, 433 }, { 2,-600,1 },
{ 4, 437 }, { 2,-600,1 },
{ 4, 441 }, { 2,-600,1 },
{ 4, 687 }, { 2,-600,1 },
{ 4, 691 }, { 2,-600,1 },
{ 4, 695 }, { 2,-600,1 },
{ 4, 517 }, { 2,-600,1 },
{ 4, 465 }, { 4,-600,1 },
{ 4, 469 }, { 4,-600,1 },
{ 4, 473 }, { 4,-600,1 },
{ 4, 477 }, { 4,-600,1 },
{ 4, 481 }, { 4,-600,1 },
{ 4, 485 }, { 4,-600,1 },
{ 4, 489 }, { 4,-600,1 },
{ 4, 675 }, { 4,-600,1 },
{ 4, 679 }, { 2,465,0.01 },
{ 4, 505 }, { 2,469,0.1 },
{ 4, 509 }, { 2,473,0.1 },
{ 4, 513 }, { 2,477,0.1 },
{ 4, 667 }, { 2,481,0.1 },
{ 4, 671 }, { 2,485,0.1 },
{ 4, 2 }, { 2,489,0.1 },
{ 4, 6 }, { 2,-600,0.1 },
{ 4, 10 }, { 2,-600,0.1 },
{ 4, 14 }, { 2,-600,0.1 },
{ 4, 18 }, { 2,-600,0.01 },
{ 4, 22 }, { 2,-600,0.01 },
{ 4, 26 }, { 2,-600,0.01 },
{ 4, 30 }, { 2,457,0.001 },
{ 4, 34 }, { 2,-600,0.1 },
{ 4, 38 }, { 2,-600,0.1 },
{ 4, 42 }, { 2,675,0.1 },
{ 4, 46 }, { 2,505,0.1 },
{ 4, 50 }, { 2,509,0.1 },
{ 4, 54 }, { 2,513,0.1 },
{ 4, 58 }, { 2,2,0.1 },
{ 4, 62 }, { 2,14,0.1 },
{ 4, 66 }, { 2,26,0.1 },
{ 4, 70 }, { 2,38,0.1 },
{ 4, 74 }, { 2,50,0.1 },
{ 4, 78 }, { 2,62,0.1 },
{ 4, 82 }, { 2,74,0.1 },
{ 4, 86 }, { 2,-600,0.1 },
{ 4, 90 }, { 2,98,0.1 },
{ 4, 94 }, { 2,110,0.1 },
{ 4, 98 }, { 2,122,0.1 },
{ 4, 102 }, { 2,-600,0.1 },
{ 4, 106 }, { 2,-600,0.1 },
{ 4, 110 }, { 2,-600,0.1 },
{ 4, 114 }, { 2,-600,0.1 },
{ 4, 118 }, { 2,-600,0.1 },
{ 4, 122 }, { 2,-600,0.1 },
{ 4, 126 }, { 2,-600,0.1 },
{ 4, 130 }, { 2,-600,0.1 },
{ 4, 134 }, { 2,-600,0.1 },
{ 4, 138 }, { 2,-600,0.1 },
{ 4, 142 }, { 2,-600,0.1 },
{ 4, 146 }, { 2,-600,0.1 },
{ 4, 150 }, { 2,-600,0.1 },
{ 4, 154 }, { 2,134,0.1 },
{ 4, 158 }, { 2,146,0.1 },
{ 4, 162 }, { 2,158,0.1 },
{ 4, 166 }, { 2,170,0.1 },
{ 4, 170 }, { 2,182,0.1 },
{ 4, 174 }, { 2,206,0.1 },
{ 4, 178 }, { 2,218,0.1 },
{ 4, 182 }, { 2,230,0.1 },
{ 4, 186 }, { 2,242,0.1 },
{ 4, 190 }, { 2,254,0.1 },
{ 4, 194 }, { 2,266,0.1 },
{ 4, 198 }, { 2,521,0.001 },
{ 4, 202 }, { 2,525,0.001 },
{ 4, 206 }, { 4,537,1 },
{ 4, 210 }, { 4,533,1 },
{ 4, 214 }, { 4,545,1 },
{ 4, 218 }, { 4,541,1 },
{ 4, 222 }, { 4,-600,1 },
{ 4, 226 }, { 4,-600,1 },
{ 4, 230 }, { 2,549,1 },
{ 4, 234 }, { 2,551,1 },
{ 4, 238 }, { 2,553,1 },
{ 4, 242 }, { 2,555,1 },
{ 4, 246 }, { 2,557,1 },
{ 4, 250 }, { 2,559,1 },
{ 4, 254 }, { 2,561,1 },
{ 4, 258 }, { 2,563,1 },
{ 4, 262 }, { 2,565,1 },
{ 4, 266 }, { 2,567,1 },
{ 4, 270 }, { 2,569,1 },
{ 4, 274 }, { 2,571,1 },
{ 4, 521 }, { 2,573,1 },
{ 4, 525 }, { 2,575,1 },
{ 4, 537 }, { 2,577,1 },
{ 4, 533 }, { 2,579,1 },
{ 4, 545 }, { 2,581,1 },
{ 4, 541 }, { 2,583,1 },
{ 4, 699 }, { 2,585,1 },
{ 4, 639 }, { 2,587,1 },
{ 4, 631 }, { 2,589,1 },
{ 4, 635 }, { 2,591,1 },
{ 1, 407 }, { 2,593,1 },
{ 1, 406 }, { 2,595,1 },
{ 1, 408 }, { 2,597,1 },
{ 2, 549 }, { 2,599,1 },
{ 2, 551 }, { 2,601,1 },
{ 2, 553 }, { 2,603,1 },
{ 2, 555 }, { 2,605,1 },
{ 2, 557 }, { 2,607,1 },
{ 2, 559 }, { 2,609,1 },
{ 2, 561 }, { 2,611,1 },
{ 2, 563 }, { 2,613,1 },
{ 2, 565 }, { 2,615,1 },
{ 2, 567 }, { 2,617,1 },
{ 2, 569 }, { 2,619,1 },
{ 2, 571 }, { 2,621,1 },
{ 2, 573 }, { 2,623,1 },
{ 2, 575 }, { 2,625,1 },
{ 2, 577 }, { 2,627,1 },
{ 2, 579 }, { 2,629,1 },
{ 2, 581 }, { 2,-600,1 },
{ 2, 583 }, { 2,-600,1 },
{ 2, 585 }, { 2,-600,1 },
{ 2, 587 }, { 2,-600,1 },
{ 2, 589 }, { 2,-600,1 },
{ 2, 591 }, { 2,-600,1 },
{ 2, 593 }, { 2,-600,1 },
{ 2, 595 }, { 2,-600,1 },
{ 2, 597 }, { 2,-600,1 },
{ 2, 599 }, { 2,-600,0.1 },
{ 2, 601 }, { 2,429,0.1 },
{ 2, 611 }, { 2,-600,0.1 },
{ 2, 603 }, { 2,417,0.1 },
{ 2, 609 }, { 2,-600,0.01 },
{ 2, 613 }, { 2,453,0.01 },
{ 2, 615 }, { 2,683,0.01 },
{ 2, 617 }, { 2,-600,0.1 },
{ 2, 619 }, { 4,639,1 },
{ 2, 623 } { 4,631,1 },
{ 4,635,1 },
{ 2,643,0.01 },
{ 2,647,0.01 },
{ 2,651,0.01 },
{ 2,679,0.1 },
{ 2,703,0.001 },
{ 2,707,0.001 },
{ 2,667,0.001 },
{ 2,671,0.001 },
{ 2,194,0.1 },
{ 2,699,1 },
{ 2,10,0.1 }
}; };
float adsGetUnitYCRealFromValue(int uid, int order, LONG value)
{
if (uid < 0 || uid >= UNIT_NUM) return 0;
if (order < 1 || order > (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE;
float coef = m_datalen_adsaddr[order - 1].coef;
return (float)(value * coef);
}
BOOLEAN adsGetUnitYCIsFloat(int uid, int order)
{
float coef = 1.0f;
if (uid < 0 || uid >= UNIT_NUM) return FALSE;
if (order < 1 || order > (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE;
coef = m_datalen_adsaddr[order - 1].coef;
if (fabsf(coef) <= 1E-8) coef = 1.0f;
if (fabsf(coef - 1.0f) <= 1E-8) return FALSE;
return TRUE;
}
static bool publish_sensor_data(const char* command, const Json::Value payload) static bool publish_sensor_data(const char* command, const Json::Value payload)
{ {
@ -261,7 +295,7 @@ static BOOLEAN GetYCValue(const int order, const FIELDDES* fields, const char* p
{ {
if (pData == NULL) return FALSE; if (pData == NULL) return FALSE;
if (fields == NULL) return FALSE; if (fields == NULL) return FALSE;
if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; if (order < 0 || order >= (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE;
int start = fields[order].start; int start = fields[order].start;
if (fields[order].length == sizeof(DWORD)) if (fields[order].length == sizeof(DWORD))
{ //4字节 { //4字节
@ -283,7 +317,7 @@ static BOOLEAN GetYXValue(const int order, const FIELDDES* fields, const char* p
if (pData == NULL) return FALSE; if (pData == NULL) return FALSE;
if (fields == NULL) return FALSE; if (fields == NULL) return FALSE;
if (pos < 0 || pos >= 16) return FALSE; if (pos < 0 || pos >= 16) return FALSE;
if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; if (order < 0 || order >= (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE;
int start = fields[order].start; int start = fields[order].start;
if (fields[order].length == sizeof(WORD)) if (fields[order].length == sizeof(WORD))
{ {
@ -404,8 +438,8 @@ static void* ryftp_process(void* param)
snprintf(ipaddress, sizeof(ipaddress), "%s", mbt->getRemoteIp()); snprintf(ipaddress, sizeof(ipaddress), "%s", mbt->getRemoteIp());
for (int i = 0; i < (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0])); i++) { for (int i = 0; i < (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0])); i++) {
m_datalen2mbaddr_map.insert(datalen2mbaddrmap::value_type(m_datalen_mbaddr[i].address, i + 1)); m_datalen2mbaddr_map.insert(datalen2mbaddrmap::value_type(m_datalen_adsaddr[i].address, i + 1));
} }
//struRYDeviceData t_data; //struRYDeviceData t_data;
@ -428,12 +462,12 @@ static void* ryftp_process(void* param)
if (GetUnitYCType(uid, i)) { if (GetUnitYCType(uid, i)) {
if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) { if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) {
highspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号order-数据文件序号 highspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号order-数据文件序号
//vLog(LOG_DEBUG, "register_addr is: %d, point is: %d, and order is: %d\n", register_addr, i, m_datalen2mbaddr_map[register_addr]); //fprintf(stderr, "%s register_addr is: %d, point is: %d, and order is: %d\n", config.units[uid].ycs[i].name, register_addr, i, m_datalen2mbaddr_map[register_addr]);
} }
} else { } else {
if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) { if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) {
lowspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号order-数据文件序号 lowspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号order-数据文件序号
//vLog(LOG_DEBUG, "register_addr is: %d, point is: %d, and order is: %d\n", register_addr, i, m_datalen2mbaddr_map[register_addr]); //fprintf(stderr, "%s register_addr is: %d, point is: %d, and order is: %d\n", config.units[uid].ycs[i].name, register_addr, i, m_datalen2mbaddr_map[register_addr]);
} }
} }
} }
@ -510,6 +544,7 @@ static void* ryftp_process(void* param)
st.year + 2000, st.month, st.dayofmonth, \ st.year + 2000, st.month, st.dayofmonth, \
st.hour, st.minute, st.millisecond/1000, st.millisecond%1000); st.hour, st.minute, st.millisecond/1000, st.millisecond%1000);
#endif #endif
//vLog(LOG_DEBUG, "data.iPitchAngle1 is: %d, data.iPitchAngle2 is: %d, and data.iPitchAngle3 is: %d\n", data->iPitchAngle1, data->iPitchAngle2, data->iPitchAngle3);
//如何将结构化数据传入,且快速获取 //如何将结构化数据传入,且快速获取
Json::Value highspeedvalues; Json::Value highspeedvalues;
for (datatypemap::iterator it = highspeedmap.begin(); it != highspeedmap.end(); it++) { for (datatypemap::iterator it = highspeedmap.begin(); it != highspeedmap.end(); it++) {
@ -518,8 +553,9 @@ static void* ryftp_process(void* param)
int order = it->first; int order = it->first;
int point = it->second; int point = it->second;
if (GetYCValue(point, fields, (const char *)data, dvalue)) { if (GetYCValue(point, fields, (const char *)data, dvalue)) {
if (GetUnitYCIsFloat(uid, order)) { if (adsGetUnitYCIsFloat(uid, point)) {
highspeedvalues[(const char *)config.units[uid].ycs[order].name] = GetUnitYCRealFromValue(uid, order, dvalue); //fprintf(stderr, "%s, ", config.units[uid].ycs[order].name);
highspeedvalues[(const char *)config.units[uid].ycs[order].name] = adsGetUnitYCRealFromValue(uid, point, dvalue);
} else { } else {
highspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue; highspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue;
} }
@ -542,8 +578,9 @@ static void* ryftp_process(void* param)
int point = it->second; int point = it->second;
if (GetYCValue(point, fields, (const char *)data, dvalue)) { if (GetYCValue(point, fields, (const char *)data, dvalue)) {
//fprintf(stderr, "get<%d> value is: %d.\n", point, dvalue); //fprintf(stderr, "get<%d> value is: %d.\n", point, dvalue);
if (GetUnitYCIsFloat(uid, order)) { if (adsGetUnitYCIsFloat(uid, point)) {
lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = GetUnitYCRealFromValue(uid, order, dvalue); //fprintf(stderr, "%s, ", config.units[uid].ycs[order].name);
lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = adsGetUnitYCRealFromValue(uid, point, dvalue);
} else { } else {
lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue; lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue;
} }

View File

@ -291,7 +291,7 @@ static BOOLEAN GetYCValue(const int order, const FIELDDES* fields, const char* p
{ {
if (pData == NULL) return FALSE; if (pData == NULL) return FALSE;
if (fields == NULL) return FALSE; if (fields == NULL) return FALSE;
if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; if (order < 1 || order > (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE;
int start = fields[order].start; int start = fields[order].start;
if (fields[order].length == sizeof(DWORD)) if (fields[order].length == sizeof(DWORD))
{ //4字节 { //4字节
@ -313,7 +313,7 @@ static BOOLEAN GetYXValue(const int order, const FIELDDES* fields, const char* p
if (pData == NULL) return FALSE; if (pData == NULL) return FALSE;
if (fields == NULL) return FALSE; if (fields == NULL) return FALSE;
if (pos < 0 || pos >= 16) return FALSE; if (pos < 0 || pos >= 16) return FALSE;
if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; if (order < 1 || order > (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE;
int start = fields[order].start; int start = fields[order].start;
if (fields[order].length == sizeof(WORD)) if (fields[order].length == sizeof(WORD))
{ {

View File

@ -26,6 +26,12 @@ typedef struct {
int address; int address;
} struDataLengthMBAddr; } struDataLengthMBAddr;
typedef struct {
int length;
int address;
float coef;
} struDataLengthADSAddr;
struct memory { struct memory {
char *response; char *response;
size_t size; size_t size;