@@ -352,7 +352,7 @@ void decode_bds30(/*unsigned char * ptr_raw, int j, */struct datablock_plot * db
352352 if (dbp -> modea_status & STATUS_MODEA_SMOOTHED ) strcpy (modea_l_s , "1" ); else strcpy (modea_l_s , "0" );
353353 }
354354 if (dbp -> available & IS_MODEC ) {
355- snprintf (modec_s , 6 , "%d" , dbp -> modec * 100 );
355+ snprintf (modec_s , 6 , "%d" , dbp -> modec );
356356 if (dbp -> modec_status & STATUS_MODEC_NOTVALIDATED ) strcpy (modec_v_s , "1" ); else strcpy (modec_v_s , "0" );
357357 if (dbp -> modec_status & STATUS_MODEC_GARBLED ) strcpy (modec_g_s , "1" ); else strcpy (modec_g_s , "0" );
358358 }
@@ -488,7 +488,16 @@ int index = 0;
488488 //log_printf(LOG_NORMAL, "modec %02X %02X\n", ptr_raw[j], ptr_raw[j+1]);
489489 dbp .modec_status |= (ptr_raw [j ] & 128 ) ? STATUS_MODEC_NOTVALIDATED : 0 ;
490490 dbp .modec_status |= (ptr_raw [j ] & 64 ) ? STATUS_MODEC_GARBLED : 0 ;
491- dbp .modec = ( (ptr_raw [j ] & 63 )* 256 + ptr_raw [j + 1 ]) * 1.0 /4.0 ;// * 100;
491+ // corregir porque no se hacía el complemento a 2.
492+ // dbp.modec = ( (ptr_raw[j] & 63)*256 + ptr_raw[j+1]) * 1.0/4.0;// * 100;
493+ dbp .modec = ( (ptr_raw [j ] & 63 )* 256 + ptr_raw [j + 1 ]);// * 1.0/4.0;// * 100;
494+ if ( dbp .modec > 8192 ) { // es negativo, hacer el complemento a 2
495+ // log_printf(LOG_NORMAL, "[%d][%d][%d] es mayor que 8192 v1\n", dbp.sac, dbp.sic, dbp.modec);
496+ dbp .modec += -16384 ;
497+ // log_printf(LOG_NORMAL, "[%d][%d][%d] es mayor que 8192 v2\n", dbp.sac, dbp.sic, dbp.modec);
498+ }
499+ dbp .modec *= (100.0 * 1.0 /4.0 ); // el resultado va en FL, así que nunca habrá decimales
500+ // log_printf(LOG_NORMAL, "[%d][%d]I048/090[%02X][%02X] (%d)\n", dbp.sac, dbp.sic, ptr_raw[j], ptr_raw[j+1], dbp.modec);
492501 size_current += 2 ; j += 2 ;
493502 dbp .available |= IS_MODEC ;
494503 }
@@ -1129,7 +1138,7 @@ int index = 0;
11291138 dbp .tod_stamp = current_time_today ; dbp .id = id ; dbp .index = index ;
11301139 dbp .radar_responses = 0 ;
11311140
1132- //ast_output_datablock(ptr_raw, size_datablock, dbp.id, dbp.index);
1141+ // ast_output_datablock(ptr_raw, size_datablock, dbp.id, dbp.index);
11331142 if (sizeFSPEC == 0 ) {
11341143 log_printf (LOG_WARNING , "ERROR_FSPEC_SIZE[%d] %s\n" , sizeFSPEC , ptr_raw );
11351144 return T_ERROR ;
@@ -1222,7 +1231,7 @@ unsigned char *datablock_start = NULL;
12221231// return T_ERROR;
12231232// }
12241233
1225- //ast_output_datablock(ptr_raw, size_datablock - size_current - 3, id, index);
1234+ // ast_output_datablock(ptr_raw, size_datablock - size_current - 3, id, index);
12261235
12271236 datablock_start = ptr_raw ;
12281237 j = sizeFSPEC ;
@@ -1270,7 +1279,14 @@ unsigned char *datablock_start = NULL;
12701279 if ( ptr_raw [0 ] & 4 ) { /* I048/090 */
12711280 dbp .modec_status |= (ptr_raw [j ] & 128 ) ? STATUS_MODEC_NOTVALIDATED : 0 ;
12721281 dbp .modec_status |= (ptr_raw [j ] & 64 ) ? STATUS_MODEC_GARBLED : 0 ;
1273- dbp .modec = ( (ptr_raw [j ] & 63 )* 256 + ptr_raw [j + 1 ]) * 1.0 /4.0 ;// * 100;
1282+ dbp .modec = ( (ptr_raw [j ] & 63 )* 256 + ptr_raw [j + 1 ]);// * 1.0/4.0;// * 100;
1283+ if ( dbp .modec > 8192 ) { // es negativo, hacer el complemento a 2
1284+ // log_printf(LOG_NORMAL, "[%d][%d][%d] es mayor que 8192 v1\n", dbp.sac, dbp.sic, dbp.modec);
1285+ dbp .modec += -16384 ;
1286+ // log_printf(LOG_NORMAL, "[%d][%d][%d] es mayor que 8192 v2\n", dbp.sac, dbp.sic, dbp.modec);
1287+ }
1288+ dbp .modec *= (100.0 * 1.0 /4.0 ); // el resultado va en FL, así que nunca habrá decimales
1289+ // log_printf(LOG_NORMAL, "[%d][%d]I048/090[%02X][%02X] (%d)\n", dbp.sac, dbp.sic, ptr_raw[j], ptr_raw[j+1], dbp.modec);
12741290 size_current += 2 ; j += 2 ;
12751291 dbp .available |= IS_MODEC ;
12761292 }
@@ -1294,7 +1310,7 @@ unsigned char *datablock_start = NULL;
12941310 //char * ptr_tmp;
12951311 int i ;
12961312 //ptr_tmp = (char *) mem_alloc(6*3 + 1);
1297- //Bmemset (ptr_tmp, 0x0, 6*3 + 1);
1313+ //memset (ptr_tmp, 0x0, 6*3 + 1);
12981314 //for( i = 0; i < 6; i++ ) sprintf((char *)(ptr_tmp + i*3), "%02X ", (unsigned char) (ptr_raw[j+i]));
12991315 //log_printf(LOG_NORMAL, "I048/240[%s]\n", ptr_tmp);
13001316 //mem_free(ptr_tmp);
@@ -1342,6 +1358,7 @@ unsigned char *datablock_start = NULL;
13421358 case 0x17 : ptr = dbp .bds_17 ; dbp .bds_available |= BDS_17 ; break ;
13431359 case 0x30 : ptr = dbp .bds_30 ; dbp .bds_available |= BDS_30 ; break ;
13441360 case 0x40 : ptr = dbp .bds_40 ; dbp .bds_available |= BDS_40 ; break ;
1361+ case 0x44 : ptr = dbp .bds_44 ; dbp .bds_available |= BDS_44 ; break ;
13451362 case 0x50 : ptr = dbp .bds_50 ; dbp .bds_available |= BDS_50 ; break ;
13461363 case 0x60 : ptr = dbp .bds_60 ; dbp .bds_available |= BDS_60 ; break ;
13471364 default :
@@ -1372,9 +1389,11 @@ unsigned char *datablock_start = NULL;
13721389 if ( ptr_raw [2 ] & 16 ) { /* I048/100 */ j += 4 ; size_current += 4 ; }
13731390 if ( ptr_raw [2 ] & 8 ) { /* I048/110 */ j += 2 ; size_current += 2 ; }
13741391 if ( ptr_raw [2 ] & 4 ) { /* I048/120 */
1392+ // log_printf(LOG_NORMAL, "[%02X%02X%02X]\n", ptr_raw[j],ptr_raw[j+1],ptr_raw[j+2] );
13751393 int k = j ;
13761394 if ( ptr_raw [k ] & 128 ) { j += 2 ; size_current += 2 ; }
13771395 if ( ptr_raw [k ] & 64 ) { int l = j ; j += ptr_raw [l ]* 6 + 1 ; size_current += ptr_raw [l ]* 6 + 1 ; }
1396+ j ++ ; size_current ++ ;
13781397 }
13791398 if ( ptr_raw [2 ] & 2 ) { /* I048/230 */
13801399 // log_printf(LOG_ERROR, "en I048/230\n");
0 commit comments