From eb93181fd6b9da565248451627cae99641f13c7d Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 14 May 2024 08:49:22 +0300 Subject: [PATCH] push old changes --- BTA_modbusmeteo/bta_meteo_modbus.c | 164 ++++++++++-------- BTA_modbusmeteo/bta_meteo_modbus.creator.user | 81 +++++---- 2 files changed, 141 insertions(+), 104 deletions(-) diff --git a/BTA_modbusmeteo/bta_meteo_modbus.c b/BTA_modbusmeteo/bta_meteo_modbus.c index 309f8f4..902c60e 100644 --- a/BTA_modbusmeteo/bta_meteo_modbus.c +++ b/BTA_modbusmeteo/bta_meteo_modbus.c @@ -82,13 +82,13 @@ static int crc_check(uint8_t *buffer, int length){ uint8_t byte; uint16_t crc = 0xFFFF; int valid_crc; - /* + #ifdef EBUG printf("buffer: "); for(int i = 0; i < length; ++i) printf("%02x ", buffer[i]); printf("\n"); #endif - */ + while (length-- > 2) { byte = *buffer++ ^ crc; crc >>= 8; @@ -181,80 +181,96 @@ params_ans check_meteo_params(){ } DBG("Ctr=%d, size=%d, res=%d", ctr, size, res); // read all or end of packet - if(size > 0 && res == 0 && (size == REQ_LEN || size == ANS_LEN)){ - if(crc_check(buffer, size)){ - if(size == REQ_LEN){ - DBG("request"); - ctr = 30; - lastpar = buffer[2] << 8 | buffer[3]; - }else if(size == ANS_LEN){ - ctr = 30; - DBG("answer"); - int16_t val = buffer[3] << 8 | buffer[4]; - int prval = 1; - float f = (float)val / 10.f; - switch(lastpar){ - case REG_WSPEED: - DBG("wind speed"); - meteoflags |= WSFLAG; - if(gotsegm && !(MeteoMode & INPUT_WND)){ // not entered by hands - if(f >= 0.f && f < 200.f){ - val_Wnd = f; - MeteoMode &= ~NET_WND; - MeteoMode |= SENSOR_WND; - } - } - break; - case REG_WDIR: - DBG("wind direction"); - //meteoflags |= WDFLAG; - break; - case REG_TAIR: - DBG("air temperature"); - meteoflags |= TFLAG; - if(gotsegm && !(MeteoMode & INPUT_T1)){ - if(f > -40.f && f < 40.f){ - val_T1 = f; - MeteoMode &= ~NET_T1; - MeteoMode |= SENSOR_T1; - } - } - break; - case REG_HUM: - DBG("humidity"); - meteoflags |= HFLAG; - if(gotsegm && !(MeteoMode & INPUT_HMD)){ - if(f >= 0.f && f <= 100.f){ - val_Hmd = f; - MeteoMode &= ~NET_HMD; - MeteoMode |= SENSOR_HMD; - } - } - break; - case REG_DEW: - DBG("dewpoint"); - break; - case REG_PRES: - DBG("pressure"); - f *= 760.f/1013.f; // convert hPa->mmHg - meteoflags |= PFLAG; - if(gotsegm && !(MeteoMode & INPUT_B)){ - if(f > 500.f && f < 700.f){ - val_B = f; - MeteoMode &= ~NET_B; - MeteoMode |= SENSOR_B; - } - } - break; - default: - prval = 0; - } + if(size > 0 && res == 0 && (size == REQ_LEN || size == ANS_LEN || size == REQ_LEN + ANS_LEN)){ + int16_t val = 0; + if(size == REQ_LEN){ // request from master + if(!crc_check(buffer, size)){ lastpar = 0; - if(prval){ - DBG("=%.1f\n", f); - return ANS_OK; - } + continue; } + DBG("request"); + lastpar = buffer[2] << 8 | buffer[3]; + continue; + } + if(size == ANS_LEN){ + if(!crc_check(buffer, size)){ + lastpar = 0; + continue; + } + DBG("answer"); + val = buffer[3] << 8 | buffer[4]; + }else if(size == REQ_LEN + ANS_LEN){ + if(!crc_check(buffer, REQ_LEN) || !crc_check(buffer+REQ_LEN, ANS_LEN)){ + lastpar = 0; + continue; + } + DBG("both request and answer"); + lastpar = buffer[2] << 8 | buffer[3]; + val = buffer[3 + REQ_LEN] << 8 | buffer[4 + REQ_LEN]; + } + ctr = 30; + int prval = 1; + float f = (float)val / 10.f; + switch(lastpar){ + case REG_WSPEED: + DBG("wind speed"); + meteoflags |= WSFLAG; + if(gotsegm && !(MeteoMode & INPUT_WND)){ // not entered by hands + if(f >= 0.f && f < 200.f){ + val_Wnd = f; + MeteoMode &= ~NET_WND; + MeteoMode |= SENSOR_WND; + } + } + break; + case REG_WDIR: + DBG("wind direction"); + //meteoflags |= WDFLAG; + break; + case REG_TAIR: + DBG("air temperature"); + meteoflags |= TFLAG; + if(gotsegm && !(MeteoMode & INPUT_T1)){ + if(f > -40.f && f < 40.f){ + val_T1 = f; + MeteoMode &= ~NET_T1; + MeteoMode |= SENSOR_T1; + } + } + break; + case REG_HUM: + DBG("humidity"); + meteoflags |= HFLAG; + if(gotsegm && !(MeteoMode & INPUT_HMD)){ + if(f >= 0.f && f <= 100.f){ + val_Hmd = f; + MeteoMode &= ~NET_HMD; + MeteoMode |= SENSOR_HMD; + } + } + break; + case REG_DEW: + DBG("dewpoint"); + break; + case REG_PRES: + DBG("pressure"); + f *= 760.f/1013.f; // convert hPa->mmHg + meteoflags |= PFLAG; + if(gotsegm && !(MeteoMode & INPUT_B)){ + if(f > 500.f && f < 700.f){ + val_B = f; + MeteoMode &= ~NET_B; + MeteoMode |= SENSOR_B; + } + } + break; + default: + prval = 0; + } + lastpar = 0; + if(prval){ + DBG("=%.1f\n", f); + return ANS_OK; } size = 0; } diff --git a/BTA_modbusmeteo/bta_meteo_modbus.creator.user b/BTA_modbusmeteo/bta_meteo_modbus.creator.user index 248e476..f9219e7 100644 --- a/BTA_modbusmeteo/bta_meteo_modbus.creator.user +++ b/BTA_modbusmeteo/bta_meteo_modbus.creator.user @@ -1,14 +1,14 @@ - + EnvironmentId - {cf63021e-ef53-49b0-b03b-2f2570cdf3b6} + {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} ProjectExplorer.Project.ActiveTarget - 0 + 0 ProjectExplorer.Project.EditorSettings @@ -28,7 +28,7 @@ QmlJSGlobal - 2 + 2 KOI8-R false 4 @@ -37,33 +37,49 @@ true true 1 + 0 false - false + true false - 1 + 0 true true 0 8 true false - 2 + 1 true - true + false true *.md, *.MD, Makefile - true + false true + true ProjectExplorer.Project.PluginSettings + + true + false + true + true + true + true + + + 0 + true + + true true true Builtin.DefaultTidyAndClazy - 4 + 8 + true @@ -77,12 +93,12 @@ Desktop Desktop Desktop - {91347f2c-5221-46a7-80b1-0a054ca02f79} - 0 - 0 - 0 + {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} + 0 + 0 + 0 - /home/eddy/Docs/SAO/BTA/Meteostation_new/BTA_modbusmeteo + /Big/Data/00-BTAmirtemp @@ -91,9 +107,9 @@ true GenericProjectManager.GenericMakeStep - 1 - Сборка - Сборка + 1 + Build + Build ProjectExplorer.BuildSteps.Build @@ -104,9 +120,9 @@ true GenericProjectManager.GenericMakeStep - 1 - Очистка - Очистка + 1 + Clean + Clean ProjectExplorer.BuildSteps.Clean 2 @@ -117,12 +133,12 @@ По умолчанию GenericProjectManager.GenericBuildConfiguration - 1 + 1 - 0 - Развёртывание - Развёртывание + 0 + Deploy + Deploy ProjectExplorer.BuildSteps.Deploy 1 @@ -130,24 +146,29 @@ false ProjectExplorer.DefaultDeployConfiguration - 1 + 1 + true + true + true 2 + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + ProjectExplorer.CustomExecutableRunConfiguration - false + false true - false true - 1 + 1 ProjectExplorer.Project.TargetCount - 1 + 1 ProjectExplorer.Project.Updater.FileVersion