From 2d366351d9a8e3ead182f2e17207fd56ffbd5ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jonczyk?= <65196928+p-jonczyk@users.noreply.github.com> Date: Tue, 6 Dec 2022 07:49:36 +0000 Subject: [PATCH] add handling for VRB wind with MPS unit --- src/decode_metar.c | 56 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/decode_metar.c b/src/decode_metar.c index de133a6..c8f91c9 100644 --- a/src/decode_metar.c +++ b/src/decode_metar.c @@ -2172,7 +2172,7 @@ static MDSP_BOOL isWindData( char *wind, Decoded_METAR *Mptr, int *NDEX ) memset(dummy,'\0', sizeof(dummy)); - /* CHECK FOR VARIABLE ("VRB") WIND SPEED */ + /* CHECK FOR VARIABLE ("VRB") WIND SPEED WITH "KT" UNIT*/ if( charcmp(wind,"'V''R''B'dd'K''T'")) { Mptr->winData.windVRB = TRUE; @@ -2230,6 +2230,60 @@ printf("isWindData: Passed VRBdddKT test - wind = %s\n",wind); (*NDEX)++; return TRUE; } + /* CHECK FOR VARIABLE ("VRB") WIND SPEED WITH "MPS" UNIT*/ + + if( charcmp(wind,"'V''R''B'dd'M''P''S'")) { + Mptr->winData.windVRB = TRUE; + Mptr->winData.windSpeed = antoi(wind+3,2); + memset(Mptr->winData.windUnits, '\0', sizeof(Mptr->winData.windUnits)); + strcpy(Mptr->winData.windUnits,"MPS"); + (*NDEX)++; + + return TRUE; + } + + if( charcmp(wind,"'V''R''B'ddd'M''P''S'")) { + Mptr->winData.windVRB = TRUE; + Mptr->winData.windSpeed = antoi(wind+3,3); + memset(Mptr->winData.windUnits, '\0', sizeof(Mptr->winData.windUnits)); + strcpy(Mptr->winData.windUnits,"MPS"); + (*NDEX)++; + + return TRUE; + } + + if( charcmp(wind,"'V''R''B'ddd'G'ddd'M''P''S'")) { + Mptr->winData.windVRB = TRUE; + Mptr->winData.windSpeed = antoi(wind+3,3); + Mptr->winData.windGust = antoi(wind+7,3); + + memset(Mptr->winData.windUnits, '\0', sizeof(Mptr->winData.windUnits)); + strcpy(Mptr->winData.windUnits,"MPS"); + (*NDEX)++; + return TRUE; + } + + if( charcmp(wind,"'V''R''B'dd'G'dd'M''P''S'")) { + Mptr->winData.windVRB = TRUE; + Mptr->winData.windSpeed = antoi(wind+3,2); + Mptr->winData.windGust = antoi(wind+6,2); + + memset(Mptr->winData.windUnits, '\0', sizeof(Mptr->winData.windUnits)); + strcpy(Mptr->winData.windUnits,"MPS"); + (*NDEX)++; + return TRUE; + } + + if( charcmp(wind,"'V''R''B'dd'G'ddd'M''P''S'")) { + Mptr->winData.windVRB = TRUE; + Mptr->winData.windSpeed = antoi(wind+3,2); + Mptr->winData.windGust = antoi(wind+6,3); + + memset(Mptr->winData.windUnits, '\0', sizeof(Mptr->winData.windUnits)); + strcpy(Mptr->winData.windUnits,"MPS"); + (*NDEX)++; + return TRUE; + } /* CHECK FOR WIND SPEED UNITS */