1 /* 2 * This is code generated by jsongen.py. Do not hand-hack it! 3 */ 4 #define NITEMS(x) (int)(sizeof(x)/sizeof(x[0])) 5 6 7 const struct json_attr_t json_ais1[] = { 8 AIS_HEADER 9 {"status", t_uinteger, .addr.uinteger = &ais->type1.status, 10 .dflt.uinteger = 0}, 11 {"status_text", t_ignore}, 12 {"turn", t_integer, .addr.integer = &ais->type1.turn, 13 .dflt.integer = AIS_TURN_NOT_AVAILABLE}, 14 {"speed", t_uinteger, .addr.uinteger = &ais->type1.speed, 15 .dflt.uinteger = AIS_SPEED_NOT_AVAILABLE}, 16 {"accuracy", t_boolean, .addr.boolean = &ais->type1.accuracy, 17 .dflt.boolean = false}, 18 {"lon", t_integer, .addr.integer = &ais->type1.lon, 19 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 20 {"lat", t_integer, .addr.integer = &ais->type1.lat, 21 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 22 {"course", t_uinteger, .addr.uinteger = &ais->type1.course, 23 .dflt.uinteger = AIS_COURSE_NOT_AVAILABLE}, 24 {"heading", t_uinteger, .addr.uinteger = &ais->type1.heading, 25 .dflt.uinteger = AIS_HEADING_NOT_AVAILABLE}, 26 {"second", t_uinteger, .addr.uinteger = &ais->type1.second, 27 .dflt.uinteger = AIS_SEC_NOT_AVAILABLE}, 28 {"maneuver", t_uinteger, .addr.uinteger = &ais->type1.maneuver, 29 .dflt.uinteger = AIS_SEC_INOPERATIVE}, 30 {"raim", t_boolean, .addr.boolean = &ais->type1.raim, 31 .dflt.boolean = false}, 32 {"radio", t_uinteger, .addr.uinteger = &ais->type1.radio, 33 .dflt.uinteger = 0}, 34 {NULL} 35 }; 36 37 char timestamp[JSON_VAL_MAX+1]; 38 const struct json_attr_t json_ais4[] = { 39 AIS_HEADER 40 {"timestamp", t_string, .addr.string = timestamp, 41 .len = sizeof(timestamp)}, 42 {"accuracy", t_boolean, .addr.boolean = &ais->type4.accuracy, 43 .dflt.boolean = true}, 44 {"lon", t_integer, .addr.integer = &ais->type4.lon, 45 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 46 {"lat", t_integer, .addr.integer = &ais->type4.lat, 47 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 48 {"epfd", t_uinteger, .addr.uinteger = &ais->type4.epfd, 49 .dflt.uinteger = 0}, 50 {"epfd_text", t_ignore}, 51 {"raim", t_boolean, .addr.boolean = &ais->type4.raim, 52 .dflt.boolean = false}, 53 {"radio", t_uinteger, .addr.uinteger = &ais->type4.radio, 54 .dflt.uinteger = 0}, 55 {NULL} 56 }; 57 58 char eta[JSON_VAL_MAX+1]; 59 const struct json_attr_t json_ais5[] = { 60 AIS_HEADER 61 {"imo", t_uinteger, .addr.uinteger = &ais->type5.imo, 62 .dflt.uinteger = 0}, 63 {"ais_version", t_uinteger, .addr.uinteger = &ais->type5.ais_version, 64 .dflt.uinteger = 0}, 65 {"callsign", t_string, .addr.string = ais->type5.callsign, 66 .len = sizeof(ais->type5.callsign)}, 67 {"shipname", t_string, .addr.string = ais->type5.shipname, 68 .len = sizeof(ais->type5.shipname)}, 69 {"shiptype", t_uinteger, .addr.uinteger = &ais->type5.shiptype, 70 .dflt.uinteger = 0}, 71 {"shiptype_text", t_ignore}, 72 {"to_bow", t_uinteger, .addr.uinteger = &ais->type5.to_bow, 73 .dflt.uinteger = 0}, 74 {"to_stern", t_uinteger, .addr.uinteger = &ais->type5.to_stern, 75 .dflt.uinteger = 0}, 76 {"to_port", t_uinteger, .addr.uinteger = &ais->type5.to_port, 77 .dflt.uinteger = 0}, 78 {"to_starboard", t_uinteger, .addr.uinteger = &ais->type5.to_starboard, 79 .dflt.uinteger = 0}, 80 {"epfd", t_uinteger, .addr.uinteger = &ais->type5.epfd, 81 .dflt.uinteger = 0}, 82 {"epfd_text", t_ignore}, 83 {"eta", t_string, .addr.string = eta, 84 .len = sizeof(eta)}, 85 {"draught", t_uinteger, .addr.uinteger = &ais->type5.draught, 86 .dflt.uinteger = 0}, 87 {"destination", t_string, .addr.string = ais->type5.destination, 88 .len = sizeof(ais->type5.destination)}, 89 {"dte", t_uinteger, .addr.uinteger = &ais->type5.dte, 90 .dflt.uinteger = 1}, 91 {NULL} 92 }; 93 94 char data[JSON_VAL_MAX+1]; 95 const struct json_attr_t json_ais6[] = { 96 AIS_HEADER 97 AIS_TYPE6 98 {"data", t_string, .addr.string = data, 99 .len = sizeof(data)}, 100 {NULL} 101 }; 102 103 const struct json_attr_t json_ais6_fid10[] = { 104 AIS_HEADER 105 AIS_TYPE6 106 {"ana_int", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.ana_int, 107 .dflt.uinteger = 0}, 108 {"ana_ext1", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.ana_ext1, 109 .dflt.uinteger = 0}, 110 {"ana_ext2", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.ana_ext2, 111 .dflt.uinteger = 0}, 112 {"racon", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.racon, 113 .dflt.uinteger = 0}, 114 {"racon_text", t_ignore}, 115 {"light", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.light, 116 .dflt.uinteger = 0}, 117 {"light_text", t_ignore}, 118 {"alarm", t_boolean, .addr.boolean = &ais->type6.dac235fid10.alarm, 119 .dflt.boolean = false}, 120 {"stat_ext", t_uinteger, .addr.uinteger = &ais->type6.dac235fid10.stat_ext, 121 .dflt.uinteger = 0}, 122 {"off_pos", t_boolean, .addr.boolean = &ais->type6.dac235fid10.off_pos, 123 .dflt.boolean = false}, 124 {NULL} 125 }; 126 127 char departure[JSON_VAL_MAX+1]; 128 const struct json_attr_t json_ais6_fid12[] = { 129 AIS_HEADER 130 AIS_TYPE6 131 {"lastport", t_string, .addr.string = ais->type6.dac1fid12.lastport, 132 .len = sizeof(ais->type6.dac1fid12.lastport)}, 133 {"departure", t_string, .addr.string = departure, 134 .len = sizeof(departure)}, 135 {"nextport", t_string, .addr.string = ais->type6.dac1fid12.nextport, 136 .len = sizeof(ais->type6.dac1fid12.nextport)}, 137 {"eta", t_string, .addr.string = eta, 138 .len = sizeof(eta)}, 139 {"dangerous", t_string, .addr.string = ais->type6.dac1fid12.dangerous, 140 .len = sizeof(ais->type6.dac1fid12.dangerous)}, 141 {"imdcat", t_string, .addr.string = ais->type6.dac1fid12.imdcat, 142 .len = sizeof(ais->type6.dac1fid12.imdcat)}, 143 {"unid", t_uinteger, .addr.uinteger = &ais->type6.dac1fid12.unid, 144 .dflt.uinteger = 0}, 145 {"amount", t_uinteger, .addr.uinteger = &ais->type6.dac1fid12.amount, 146 .dflt.uinteger = 0}, 147 {"unit", t_uinteger, .addr.uinteger = &ais->type6.dac1fid12.unit, 148 .dflt.uinteger = 0}, 149 {NULL} 150 }; 151 152 const struct json_attr_t json_ais6_fid15[] = { 153 AIS_HEADER 154 AIS_TYPE6 155 {"airdraught", t_uinteger, .addr.uinteger = &ais->type6.dac1fid15.airdraught, 156 .dflt.uinteger = 0}, 157 {NULL} 158 }; 159 160 const struct json_attr_t json_ais6_fid16[] = { 161 AIS_HEADER 162 AIS_TYPE6 163 {"persons", t_uinteger, .addr.uinteger = &ais->type6.dac1fid16.persons, 164 .dflt.uinteger = 0}, 165 {NULL} 166 }; 167 168 char arrival[JSON_VAL_MAX+1]; 169 const struct json_attr_t json_ais6_fid18[] = { 170 AIS_HEADER 171 AIS_TYPE6 172 {"linkage", t_uinteger, .addr.uinteger = &ais->type6.dac1fid18.linkage, 173 .dflt.uinteger = 0}, 174 {"arrival", t_string, .addr.string = arrival, 175 .len = sizeof(arrival)}, 176 {"portname", t_string, .addr.string = ais->type6.dac1fid18.portname, 177 .len = sizeof(ais->type6.dac1fid18.portname)}, 178 {"destination", t_string, .addr.string = ais->type6.dac1fid18.destination, 179 .len = sizeof(ais->type6.dac1fid18.destination)}, 180 {"lon", t_integer, .addr.integer = &ais->type6.dac1fid18.lon, 181 .dflt.integer = AIS_LON3_NOT_AVAILABLE}, 182 {"lat", t_integer, .addr.integer = &ais->type6.dac1fid18.lat, 183 .dflt.integer = AIS_LAT3_NOT_AVAILABLE}, 184 {NULL} 185 }; 186 187 char berth_name[JSON_VAL_MAX+1]; 188 const struct json_attr_t json_ais6_fid20[] = { 189 AIS_HEADER 190 AIS_TYPE6 191 {"linkage", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.linkage, 192 .dflt.uinteger = 0}, 193 {"berth_length", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.berth_length, 194 .dflt.uinteger = 0}, 195 {"berth_depth", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.berth_depth, 196 .dflt.uinteger = 0}, 197 {"position", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.position, 198 .dflt.uinteger = 0}, 199 {"position_text", t_ignore}, 200 {"arrival", t_string, .addr.string = arrival, 201 .len = sizeof(arrival)}, 202 {"availability", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.availability, 203 .dflt.uinteger = 0}, 204 {"agent", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.agent, 205 .dflt.uinteger = 0}, 206 {"fuel", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.fuel, 207 .dflt.uinteger = 0}, 208 {"chandler", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.chandler, 209 .dflt.uinteger = 0}, 210 {"stevedore", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.stevedore, 211 .dflt.uinteger = 0}, 212 {"electrical", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.electrical, 213 .dflt.uinteger = 0}, 214 {"water", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.water, 215 .dflt.uinteger = 0}, 216 {"customs", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.customs, 217 .dflt.uinteger = 0}, 218 {"cartage", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.cartage, 219 .dflt.uinteger = 0}, 220 {"crane", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.crane, 221 .dflt.uinteger = 0}, 222 {"lift", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.lift, 223 .dflt.uinteger = 0}, 224 {"medical", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.medical, 225 .dflt.uinteger = 0}, 226 {"navrepair", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.navrepair, 227 .dflt.uinteger = 0}, 228 {"provisions", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.provisions, 229 .dflt.uinteger = 0}, 230 {"shiprepair", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.shiprepair, 231 .dflt.uinteger = 0}, 232 {"surveyor", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.surveyor, 233 .dflt.uinteger = 0}, 234 {"steam", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.steam, 235 .dflt.uinteger = 0}, 236 {"tugs", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.tugs, 237 .dflt.uinteger = 0}, 238 {"solidwaste", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.solidwaste, 239 .dflt.uinteger = 0}, 240 {"liquidwaste", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.liquidwaste, 241 .dflt.uinteger = 0}, 242 {"hazardouswaste",t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.hazardouswaste, 243 .dflt.uinteger = 0}, 244 {"ballast", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.ballast, 245 .dflt.uinteger = 0}, 246 {"additional", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.additional, 247 .dflt.uinteger = 0}, 248 {"regional1", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.regional1, 249 .dflt.uinteger = 0}, 250 {"regional2", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.regional2, 251 .dflt.uinteger = 0}, 252 {"future1", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.future1, 253 .dflt.uinteger = 0}, 254 {"future2", t_uinteger, .addr.uinteger = &ais->type6.dac1fid20.future2, 255 .dflt.uinteger = 0}, 256 {"berth_name", t_string, .addr.string = berth_name, 257 .len = sizeof(berth_name)}, 258 {"berth_lon", t_integer, .addr.integer = &ais->type6.dac1fid20.berth_lon, 259 .dflt.integer = AIS_LON3_NOT_AVAILABLE}, 260 {"berth_lat", t_integer, .addr.integer = &ais->type6.dac1fid20.berth_lat, 261 .dflt.integer = AIS_LAT3_NOT_AVAILABLE}, 262 {NULL} 263 }; 264 265 const struct json_attr_t json_ais6_fid21[] = { 266 AIS_HEADER 267 AIS_TYPE6 268 {"country", t_string, .addr.string = ais->type6.dac200fid21.country, 269 .len = sizeof(ais->type6.dac200fid21.country)}, 270 {"locode", t_string, .addr.string = ais->type6.dac200fid21.locode, 271 .len = sizeof(ais->type6.dac200fid21.locode)}, 272 {"section", t_string, .addr.string = ais->type6.dac200fid21.section, 273 .len = sizeof(ais->type6.dac200fid21.section)}, 274 {"terminal", t_string, .addr.string = ais->type6.dac200fid21.terminal, 275 .len = sizeof(ais->type6.dac200fid21.terminal)}, 276 {"hectometre", t_string, .addr.string = ais->type6.dac200fid21.hectometre, 277 .len = sizeof(ais->type6.dac200fid21.hectometre)}, 278 {"eta", t_string, .addr.string = eta, 279 .len = sizeof(eta)}, 280 {"tugs", t_uinteger, .addr.uinteger = &ais->type6.dac200fid21.tugs, 281 .dflt.uinteger = 0}, 282 {"airdraught", t_uinteger, .addr.uinteger = &ais->type6.dac200fid21.airdraught, 283 .dflt.uinteger = 0}, 284 {NULL} 285 }; 286 287 char rta[JSON_VAL_MAX+1]; 288 const struct json_attr_t json_ais6_fid22[] = { 289 AIS_HEADER 290 AIS_TYPE6 291 {"country", t_string, .addr.string = ais->type6.dac200fid22.country, 292 .len = sizeof(ais->type6.dac200fid22.country)}, 293 {"locode", t_string, .addr.string = ais->type6.dac200fid22.locode, 294 .len = sizeof(ais->type6.dac200fid22.locode)}, 295 {"section", t_string, .addr.string = ais->type6.dac200fid22.section, 296 .len = sizeof(ais->type6.dac200fid22.section)}, 297 {"terminal", t_string, .addr.string = ais->type6.dac200fid22.terminal, 298 .len = sizeof(ais->type6.dac200fid22.terminal)}, 299 {"hectometre", t_string, .addr.string = ais->type6.dac200fid22.hectometre, 300 .len = sizeof(ais->type6.dac200fid22.hectometre)}, 301 {"rta", t_string, .addr.string = rta, 302 .len = sizeof(rta)}, 303 {"status", t_uinteger, .addr.uinteger = &ais->type6.dac200fid22.status, 304 .dflt.uinteger = DAC200FID22_STATUS_NOT_AVAILABLE}, 305 {NULL} 306 }; 307 308 const struct json_attr_t json_ais6_fid25_cargos_subtype[] = { 309 {"code", t_uinteger,STRUCTOBJECT(struct cargo_t, code), 310 .dflt.uinteger = 0}, 311 {"subtype", t_uinteger,STRUCTOBJECT(struct cargo_t, subtype), 312 .dflt.uinteger = 0}, 313 {NULL} 314 }; 315 const struct json_attr_t json_ais6_fid25[] = { 316 AIS_HEADER 317 AIS_TYPE6 318 {"unit", t_uinteger, .addr.uinteger = &ais->type6.dac1fid25.unit, 319 .dflt.uinteger = 0}, 320 {"amount", t_uinteger, .addr.uinteger = &ais->type6.dac1fid25.amount, 321 .dflt.uinteger = 0}, 322 {"cargos", t_array, STRUCTARRAY(ais->type6.dac1fid25.cargos, json_ais6_fid25_cargos_subtype, &ais->type6.dac1fid25.ncargos)}, 323 {NULL} 324 }; 325 326 char start[JSON_VAL_MAX+1]; 327 const struct json_attr_t json_ais6_fid28_waypoints_subtype[] = { 328 {"lon", t_integer, STRUCTOBJECT(struct waypoint_t, lon), 329 .dflt.integer = AIS_LON4_NOT_AVAILABLE}, 330 {"lat", t_integer, STRUCTOBJECT(struct waypoint_t, lat), 331 .dflt.integer = AIS_LAT4_NOT_AVAILABLE}, 332 {NULL} 333 }; 334 const struct json_attr_t json_ais6_fid28[] = { 335 AIS_HEADER 336 AIS_TYPE6 337 {"linkage", t_uinteger, .addr.uinteger = &ais->type6.dac1fid28.linkage, 338 .dflt.uinteger = 0}, 339 {"sender", t_uinteger, .addr.uinteger = &ais->type6.dac1fid28.sender, 340 .dflt.uinteger = 0}, 341 {"rtype", t_uinteger, .addr.uinteger = &ais->type6.dac1fid28.rtype, 342 .dflt.uinteger = 0}, 343 {"rtype_text", t_ignore}, 344 {"start", t_string, .addr.string = start, 345 .len = sizeof(start)}, 346 {"duration", t_uinteger, .addr.uinteger = &ais->type6.dac1fid28.duration, 347 .dflt.uinteger = 0}, 348 {"waypoints", t_array, STRUCTARRAY(ais->type6.dac1fid28.waypoints, json_ais6_fid28_waypoints_subtype, &ais->type6.dac1fid28.waycount)}, 349 {NULL} 350 }; 351 352 const struct json_attr_t json_ais6_fid30[] = { 353 AIS_HEADER 354 AIS_TYPE6 355 {"linkage", t_uinteger, .addr.uinteger = &ais->type6.dac1fid30.linkage, 356 .dflt.uinteger = 0}, 357 {"text", t_string, .addr.string = ais->type6.dac1fid30.text, 358 .len = sizeof(ais->type6.dac1fid30.text)}, 359 {NULL} 360 }; 361 362 const struct json_attr_t json_ais6_fid32_tidals_subtype[] = { 363 {"lon", t_integer, STRUCTOBJECT(struct tidal_t, lon), 364 .dflt.integer = AIS_LON3_NOT_AVAILABLE}, 365 {"lat", t_integer, STRUCTOBJECT(struct tidal_t, lat), 366 .dflt.integer = AIS_LAT3_NOT_AVAILABLE}, 367 {"from_hour", t_uinteger,STRUCTOBJECT(struct tidal_t, from_hour), 368 .dflt.uinteger = AIS_MONTH_NOT_AVAILABLE}, 369 {"from_min", t_uinteger,STRUCTOBJECT(struct tidal_t, from_min), 370 .dflt.uinteger = AIS_MINUTE_NOT_AVAILABLE}, 371 {"to_hour", t_uinteger,STRUCTOBJECT(struct tidal_t, to_hour), 372 .dflt.uinteger = AIS_HOUR_NOT_AVAILABLE}, 373 {"to_min", t_uinteger,STRUCTOBJECT(struct tidal_t, to_min), 374 .dflt.uinteger = AIS_MINUTE_NOT_AVAILABLE}, 375 {"cdir", t_uinteger,STRUCTOBJECT(struct tidal_t, cdir), 376 .dflt.uinteger = DAC1FID32_CDIR_NOT_AVAILABLE}, 377 {"cspeed", t_uinteger,STRUCTOBJECT(struct tidal_t, cspeed), 378 .dflt.uinteger = DAC1FID32_CSPEED_NOT_AVAILABLE}, 379 {NULL} 380 }; 381 const struct json_attr_t json_ais6_fid32[] = { 382 AIS_HEADER 383 AIS_TYPE6 384 {"month", t_uinteger, .addr.uinteger = &ais->type6.dac1fid32.month, 385 .dflt.uinteger = AIS_MONTH_NOT_AVAILABLE}, 386 {"day", t_uinteger, .addr.uinteger = &ais->type6.dac1fid32.day, 387 .dflt.uinteger = AIS_DAY_NOT_AVAILABLE}, 388 {"tidals", t_array, STRUCTARRAY(ais->type6.dac1fid32.tidals, json_ais6_fid32_tidals_subtype, &ais->type6.dac1fid32.ntidals)}, 389 {NULL} 390 }; 391 392 const struct json_attr_t json_ais6_fid55[] = { 393 AIS_HEADER 394 AIS_TYPE6 395 {"crew", t_uinteger, .addr.uinteger = &ais->type6.dac200fid55.crew, 396 .dflt.uinteger = DAC200FID55_COUNT_NOT_AVAILABLE}, 397 {"passengers", t_uinteger, .addr.uinteger = &ais->type6.dac200fid55.passengers, 398 .dflt.uinteger = DAC200FID55_COUNT_NOT_AVAILABLE}, 399 {"personnel", t_uinteger, .addr.uinteger = &ais->type6.dac200fid55.personnel, 400 .dflt.uinteger = DAC200FID55_COUNT_NOT_AVAILABLE}, 401 {NULL} 402 }; 403 404 const struct json_attr_t json_ais7[] = { 405 AIS_HEADER 406 {"mmsi1", t_uinteger, .addr.uinteger = &ais->type7.mmsi1, 407 .dflt.uinteger = 0}, 408 {"mmsi2", t_uinteger, .addr.uinteger = &ais->type7.mmsi2, 409 .dflt.uinteger = 0}, 410 {"mmsi3", t_uinteger, .addr.uinteger = &ais->type7.mmsi3, 411 .dflt.uinteger = 0}, 412 {"mmsi4", t_uinteger, .addr.uinteger = &ais->type7.mmsi4, 413 .dflt.uinteger = 0}, 414 {"seqno1", t_uinteger, .addr.uinteger = &ais->type7.seqno1, 415 .dflt.uinteger = 0}, 416 {"seqno2", t_uinteger, .addr.uinteger = &ais->type7.seqno2, 417 .dflt.uinteger = 0}, 418 {"seqno3", t_uinteger, .addr.uinteger = &ais->type7.seqno3, 419 .dflt.uinteger = 0}, 420 {"seqno4", t_uinteger, .addr.uinteger = &ais->type7.seqno4, 421 .dflt.uinteger = 0}, 422 {NULL} 423 }; 424 425 const struct json_attr_t json_ais8[] = { 426 AIS_HEADER 427 AIS_TYPE8 428 {"data", t_string, .addr.string = data, 429 .len = sizeof(data)}, 430 {NULL} 431 }; 432 433 const struct json_attr_t json_ais8_fid10[] = { 434 AIS_HEADER 435 AIS_TYPE8 436 {"vin", t_string, .addr.string = ais->type8.dac200fid10.vin, 437 .len = sizeof(ais->type8.dac200fid10.vin)}, 438 {"length", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.length, 439 .dflt.uinteger = 0}, 440 {"beam", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.beam, 441 .dflt.uinteger = 0}, 442 {"shiptype", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.shiptype, 443 .dflt.uinteger = 0}, 444 {"shiptype_text", t_ignore}, 445 {"hazard", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.hazard, 446 .dflt.uinteger = 0}, 447 {"hazard_text", t_ignore}, 448 {"draught", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.draught, 449 .dflt.uinteger = 0}, 450 {"loaded", t_uinteger, .addr.uinteger = &ais->type8.dac200fid10.loaded, 451 .dflt.uinteger = 0}, 452 {"loaded_text", t_ignore}, 453 {"speed_q", t_boolean, .addr.boolean = &ais->type8.dac200fid10.speed_q, 454 .dflt.boolean = false}, 455 {"course_q", t_boolean, .addr.boolean = &ais->type8.dac200fid10.course_q, 456 .dflt.boolean = false}, 457 {"heading_q", t_boolean, .addr.boolean = &ais->type8.dac200fid10.heading_q, 458 .dflt.boolean = false}, 459 {NULL} 460 }; 461 462 const struct json_attr_t json_ais8_fid11[] = { 463 AIS_HEADER 464 AIS_TYPE8 465 {"lat", t_integer, .addr.integer = &ais->type8.dac1fid11.lat, 466 .dflt.integer = DAC1FID11_LAT_NOT_AVAILABLE}, 467 {"lon", t_integer, .addr.integer = &ais->type8.dac1fid11.lon, 468 .dflt.integer = DAC1FID11_LON_NOT_AVAILABLE}, 469 {"timestamp", t_string, .addr.string = timestamp, 470 .len = sizeof(timestamp)}, 471 {"wspeed", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.wspeed, 472 .dflt.uinteger = DAC1FID11_WSPEED_NOT_AVAILABLE}, 473 {"wgust", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.wgust, 474 .dflt.uinteger = DAC1FID11_WSPEED_NOT_AVAILABLE}, 475 {"wdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.wdir, 476 .dflt.uinteger = DAC1FID11_WDIR_NOT_AVAILABLE}, 477 {"wgustdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.wgustdir, 478 .dflt.uinteger = DAC1FID11_WDIR_NOT_AVAILABLE}, 479 {"airtemp", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.airtemp, 480 .dflt.uinteger = DAC1FID11_AIRTEMP_NOT_AVAILABLE}, 481 {"humidity", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.humidity, 482 .dflt.uinteger = DAC1FID11_HUMIDITY_NOT_AVAILABLE}, 483 {"dewpoint", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.dewpoint, 484 .dflt.uinteger = DAC1FID11_DEWPOINT_NOT_AVAILABLE}, 485 {"pressure", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.pressure, 486 .dflt.uinteger = DAC1FID11_PRESSURE_NOT_AVAILABLE}, 487 {"pressuretend", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.pressuretend, 488 .dflt.uinteger = DAC1FID11_PRESSURETREND_NOT_AVAILABLE}, 489 {"visibility", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.visibility, 490 .dflt.uinteger = DAC1FID11_VISIBILITY_NOT_AVAILABLE}, 491 {"waterlevel", t_integer, .addr.integer = &ais->type8.dac1fid11.waterlevel, 492 .dflt.integer = DAC1FID11_WATERLEVEL_NOT_AVAILABLE}, 493 {"leveltrend", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.leveltrend, 494 .dflt.uinteger = DAC1FID11_WATERLEVELTREND_NOT_AVAILABLE}, 495 {"cspeed", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cspeed, 496 .dflt.uinteger = DAC1FID11_CSPEED_NOT_AVAILABLE}, 497 {"cdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cdir, 498 .dflt.uinteger = DAC1FID11_CDIR_NOT_AVAILABLE}, 499 {"cspeed2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cspeed2, 500 .dflt.uinteger = DAC1FID11_CSPEED_NOT_AVAILABLE}, 501 {"cdir2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cdir2, 502 .dflt.uinteger = DAC1FID11_CDIR_NOT_AVAILABLE}, 503 {"cdepth2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cdepth2, 504 .dflt.uinteger = DAC1FID11_CDEPTH_NOT_AVAILABLE}, 505 {"cspeed3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cspeed3, 506 .dflt.uinteger = DAC1FID11_CSPEED_NOT_AVAILABLE}, 507 {"cdir3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cdir3, 508 .dflt.uinteger = DAC1FID11_CDIR_NOT_AVAILABLE}, 509 {"cdepth3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.cdepth3, 510 .dflt.uinteger = DAC1FID11_CDEPTH_NOT_AVAILABLE}, 511 {"waveheight", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.waveheight, 512 .dflt.uinteger = DAC1FID11_WAVEHEIGHT_NOT_AVAILABLE}, 513 {"waveperiod", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.waveperiod, 514 .dflt.uinteger = DAC1FID11_WAVEPERIOD_NOT_AVAILABLE}, 515 {"wavedir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.wavedir, 516 .dflt.uinteger = DAC1FID11_WAVEDIR_NOT_AVAILABLE}, 517 {"swellheight", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.swellheight, 518 .dflt.uinteger = DAC1FID11_WAVEHEIGHT_NOT_AVAILABLE}, 519 {"swellperiod", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.swellperiod, 520 .dflt.uinteger = DAC1FID11_WAVEPERIOD_NOT_AVAILABLE}, 521 {"swelldir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.swelldir, 522 .dflt.uinteger = DAC1FID11_WAVEDIR_NOT_AVAILABLE}, 523 {"seastate", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.seastate, 524 .dflt.uinteger = DAC1FID11_SEASTATE_NOT_AVAILABLE}, 525 {"watertemp", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.watertemp, 526 .dflt.uinteger = DAC1FID11_WATERTEMP_NOT_AVAILABLE}, 527 {"preciptype", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.preciptype, 528 .dflt.uinteger = DAC1FID11_PRECIPTYPE_NOT_AVAILABLE}, 529 {"preciptype_text", t_ignore}, 530 {"salinity", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.salinity, 531 .dflt.uinteger = DAC1FID11_SALINITY_NOT_AVAILABLE}, 532 {"ice", t_uinteger, .addr.uinteger = &ais->type8.dac1fid11.ice, 533 .dflt.uinteger = DAC1FID11_ICE_NOT_AVAILABLE}, 534 {"ice_text", t_ignore}, 535 {NULL} 536 }; 537 538 char closefrom[JSON_VAL_MAX+1]; 539 char closeto[JSON_VAL_MAX+1]; 540 const struct json_attr_t json_ais8_fid13[] = { 541 AIS_HEADER 542 AIS_TYPE8 543 {"reason", t_string, .addr.string = ais->type8.dac1fid13.reason, 544 .len = sizeof(ais->type8.dac1fid13.reason)}, 545 {"closefrom", t_string, .addr.string = closefrom, 546 .len = sizeof(closefrom)}, 547 {"closeto", t_string, .addr.string = closeto, 548 .len = sizeof(closeto)}, 549 {"radius", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.radius, 550 .dflt.uinteger = AIS_DAC1FID13_RADIUS_NOT_AVAILABLE}, 551 {"extunit", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.extunit, 552 .dflt.uinteger = AIS_DAC1FID13_EXTUNIT_NOT_AVAILABLE}, 553 {"fday", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.fday, 554 .dflt.uinteger = AIS_DAY_NOT_AVAILABLE}, 555 {"fmonth", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.fmonth, 556 .dflt.uinteger = AIS_MONTH_NOT_AVAILABLE}, 557 {"fhour", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.fhour, 558 .dflt.uinteger = AIS_HOUR_NOT_AVAILABLE}, 559 {"fminute", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.fminute, 560 .dflt.uinteger = AIS_MINUTE_NOT_AVAILABLE}, 561 {"tday", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.tday, 562 .dflt.uinteger = AIS_DAY_NOT_AVAILABLE}, 563 {"tmonth", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.tmonth, 564 .dflt.uinteger = AIS_MONTH_NOT_AVAILABLE}, 565 {"thour", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.thour, 566 .dflt.uinteger = AIS_HOUR_NOT_AVAILABLE}, 567 {"tminute", t_uinteger, .addr.uinteger = &ais->type8.dac1fid13.tminute, 568 .dflt.uinteger = AIS_MINUTE_NOT_AVAILABLE}, 569 {NULL} 570 }; 571 572 const struct json_attr_t json_ais8_fid15[] = { 573 AIS_HEADER 574 AIS_TYPE8 575 {"airdraught", t_uinteger, .addr.uinteger = &ais->type8.dac1fid15.airdraught, 576 .dflt.uinteger = 0}, 577 {NULL} 578 }; 579 580 const struct json_attr_t json_ais8_fid16[] = { 581 AIS_HEADER 582 AIS_TYPE8 583 {"persons", t_uinteger, .addr.uinteger = &ais->type8.dac1fid16.persons, 584 .dflt.uinteger = 0}, 585 {NULL} 586 }; 587 588 const struct json_attr_t json_ais8_fid17_targets_subtype[] = { 589 {"idtype", t_uinteger,STRUCTOBJECT(struct target_t, idtype), 590 .dflt.uinteger = DAC1FID17_IDTYPE_OTHER}, 591 {"id.mmsi", t_uinteger,STRUCTOBJECT(struct target_t, id.mmsi), 592 .dflt.uinteger = 0}, 593 {"id.imo", t_uinteger,STRUCTOBJECT(struct target_t, id.imo), 594 .dflt.uinteger = 0}, 595 {"id.callsign", t_string, STRUCTOBJECT(struct target_t, id.callsign), 596 .len = DAC1FID17_ID_LENGTH}, 597 {"id.other", t_string, STRUCTOBJECT(struct target_t, id.other), 598 .len = DAC1FID17_ID_LENGTH}, 599 {"lat", t_integer, STRUCTOBJECT(struct target_t, lat), 600 .dflt.integer = AIS_LAT3_NOT_AVAILABLE}, 601 {"lon", t_integer, STRUCTOBJECT(struct target_t, lon), 602 .dflt.integer = AIS_LON3_NOT_AVAILABLE}, 603 {"course", t_uinteger,STRUCTOBJECT(struct target_t, course), 604 .dflt.uinteger = DAC1FID17_COURSE_NOT_AVAILABLE}, 605 {"second", t_uinteger,STRUCTOBJECT(struct target_t, second), 606 .dflt.uinteger = AIS_SECOND_NOT_AVAILABLE}, 607 {"speed", t_uinteger,STRUCTOBJECT(struct target_t, speed), 608 .dflt.uinteger = DAC1FID17_SPEED_NOT_AVAILABLE}, 609 {NULL} 610 }; 611 const struct json_attr_t json_ais8_fid17[] = { 612 AIS_HEADER 613 AIS_TYPE8 614 {"targets", t_array, STRUCTARRAY(ais->type8.dac1fid17.targets, json_ais8_fid17_targets_subtype, &ais->type8.dac1fid17.ntargets)}, 615 {NULL} 616 }; 617 618 const struct json_attr_t json_ais8_fid19[] = { 619 AIS_HEADER 620 AIS_TYPE8 621 {"linkage", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.linkage, 622 .dflt.uinteger = 0}, 623 {"station", t_string, .addr.string = ais->type8.dac1fid19.station, 624 .len = sizeof(ais->type8.dac1fid19.station)}, 625 {"lon", t_integer, .addr.integer = &ais->type8.dac1fid19.lon, 626 .dflt.integer = AIS_LON3_NOT_AVAILABLE}, 627 {"lat", t_integer, .addr.integer = &ais->type8.dac1fid19.lat, 628 .dflt.integer = AIS_LAT3_NOT_AVAILABLE}, 629 {"status", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.status, 630 .dflt.uinteger = 0}, 631 {"signal", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.signal, 632 .dflt.uinteger = 0}, 633 {"signal_text", t_ignore}, 634 {"hour", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.hour, 635 .dflt.uinteger = AIS_HOUR_NOT_AVAILABLE}, 636 {"minute", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.minute, 637 .dflt.uinteger = AIS_MINUTE_NOT_AVAILABLE}, 638 {"nextsignal", t_uinteger, .addr.uinteger = &ais->type8.dac1fid19.nextsignal, 639 .dflt.uinteger = 0}, 640 {"nextsignal_type", t_ignore}, 641 {NULL} 642 }; 643 644 char end[JSON_VAL_MAX+1]; 645 const struct json_attr_t json_ais8_fid23[] = { 646 AIS_HEADER 647 AIS_TYPE8 648 {"start", t_string, .addr.string = start, 649 .len = sizeof(start)}, 650 {"end", t_string, .addr.string = end, 651 .len = sizeof(end)}, 652 {"start_lon", t_integer, .addr.integer = &ais->type8.dac200fid23.start_lon, 653 .dflt.integer = AIS_LON4_NOT_AVAILABLE}, 654 {"start_lat", t_integer, .addr.integer = &ais->type8.dac200fid23.start_lat, 655 .dflt.integer = AIS_LAT4_NOT_AVAILABLE}, 656 {"end_lon", t_integer, .addr.integer = &ais->type8.dac200fid23.end_lon, 657 .dflt.integer = AIS_LON4_NOT_AVAILABLE}, 658 {"end_lat", t_integer, .addr.integer = &ais->type8.dac200fid23.end_lat, 659 .dflt.integer = AIS_LAT4_NOT_AVAILABLE}, 660 {"type", t_uinteger, .addr.uinteger = &ais->type8.dac200fid23.type, 661 .dflt.uinteger = DAC200FID23_TYPE_UNKNOWN}, 662 {"type_text", t_ignore}, 663 {"min", t_integer, .addr.integer = &ais->type8.dac200fid23.min, 664 .dflt.integer = DAC200FID23_MIN_UNKNOWN}, 665 {"max", t_integer, .addr.integer = &ais->type8.dac200fid23.max, 666 .dflt.integer = DAC200FID23_MAX_UNKNOWN}, 667 {"intensity", t_uinteger, .addr.uinteger = &ais->type8.dac200fid23.intensity, 668 .dflt.uinteger = DAC200FID23_CLASS_UNKNOWN}, 669 {"intensity_text", t_ignore}, 670 {"wind", t_uinteger, .addr.uinteger = &ais->type8.dac200fid23.wind, 671 .dflt.uinteger = DAC200FID23_WIND_UNKNOWN}, 672 {"wind_text", t_ignore}, 673 {NULL} 674 }; 675 676 const struct json_attr_t json_ais8_fid24_gauges_subtype[] = { 677 {"id", t_uinteger,STRUCTOBJECT(struct gauge_t, id), 678 .dflt.uinteger = DAC200FID24_GAUGE_ID_UNKNOWN}, 679 {"level", t_integer, STRUCTOBJECT(struct gauge_t, level), 680 .dflt.integer = DAC200FID24_GAUGE_LEVEL_UNKNOWN}, 681 {NULL} 682 }; 683 const struct json_attr_t json_ais8_fid24[] = { 684 AIS_HEADER 685 AIS_TYPE8 686 {"country", t_string, .addr.string = ais->type8.dac200fid24.country, 687 .len = sizeof(ais->type8.dac200fid24.country)}, 688 {"gauges", t_array, STRUCTARRAY(ais->type8.dac200fid24.gauges, json_ais8_fid24_gauges_subtype, &ais->type8.dac200fid24.ngauges)}, 689 {NULL} 690 }; 691 692 const struct json_attr_t json_ais8_fid27_waypoints_subtype[] = { 693 {"lon", t_integer, STRUCTOBJECT(struct waypoint_t, lon), 694 .dflt.integer = AIS_LON4_NOT_AVAILABLE}, 695 {"lat", t_integer, STRUCTOBJECT(struct waypoint_t, lat), 696 .dflt.integer = AIS_LAT4_NOT_AVAILABLE}, 697 {NULL} 698 }; 699 const struct json_attr_t json_ais8_fid27[] = { 700 AIS_HEADER 701 AIS_TYPE8 702 {"linkage", t_uinteger, .addr.uinteger = &ais->type8.dac1fid27.linkage, 703 .dflt.uinteger = 0}, 704 {"sender", t_uinteger, .addr.uinteger = &ais->type8.dac1fid27.sender, 705 .dflt.uinteger = 0}, 706 {"rtype", t_uinteger, .addr.uinteger = &ais->type8.dac1fid27.rtype, 707 .dflt.uinteger = 0}, 708 {"rtype_text", t_ignore}, 709 {"start", t_string, .addr.string = start, 710 .len = sizeof(start)}, 711 {"duration", t_uinteger, .addr.uinteger = &ais->type8.dac1fid27.duration, 712 .dflt.uinteger = 0}, 713 {"waypoints", t_array, STRUCTARRAY(ais->type8.dac1fid27.waypoints, json_ais8_fid27_waypoints_subtype, &ais->type8.dac1fid27.waycount)}, 714 {NULL} 715 }; 716 717 const struct json_attr_t json_ais8_fid29[] = { 718 AIS_HEADER 719 AIS_TYPE8 720 {"linkage", t_uinteger, .addr.uinteger = &ais->type8.dac1fid29.linkage, 721 .dflt.uinteger = 0}, 722 {"text", t_string, .addr.string = ais->type8.dac1fid29.text, 723 .len = sizeof(ais->type8.dac1fid29.text)}, 724 {NULL} 725 }; 726 727 const struct json_attr_t json_ais8_fid31[] = { 728 AIS_HEADER 729 AIS_TYPE8 730 {"lon", t_integer, .addr.integer = &ais->type8.dac1fid31.lon, 731 .dflt.integer = DAC1FID31_LON_NOT_AVAILABLE}, 732 {"lat", t_integer, .addr.integer = &ais->type8.dac1fid31.lat, 733 .dflt.integer = DAC1FID31_LAT_NOT_AVAILABLE}, 734 {"accuracy", t_boolean, .addr.boolean = &ais->type8.dac1fid31.accuracy, 735 .dflt.boolean = false}, 736 {"timestamp", t_string, .addr.string = timestamp, 737 .len = sizeof(timestamp)}, 738 {"wspeed", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.wspeed, 739 .dflt.uinteger = DAC1FID31_WIND_NOT_AVAILABLE}, 740 {"wgust", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.wgust, 741 .dflt.uinteger = DAC1FID31_WIND_NOT_AVAILABLE}, 742 {"wdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.wdir, 743 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 744 {"wgustdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.wgustdir, 745 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 746 {"airtemp", t_integer, .addr.integer = &ais->type8.dac1fid31.airtemp, 747 .dflt.integer = DAC1FID31_AIRTEMP_NOT_AVAILABLE}, 748 {"humidity", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.humidity, 749 .dflt.uinteger = DAC1FID31_HUMIDITY_NOT_AVAILABLE}, 750 {"dewpoint", t_integer, .addr.integer = &ais->type8.dac1fid31.dewpoint, 751 .dflt.integer = DAC1FID31_DEWPOINT_NOT_AVAILABLE}, 752 {"pressure", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.pressure, 753 .dflt.uinteger = DAC1FID31_PRESSURE_NOT_AVAILABLE}, 754 {"pressuretend", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.pressuretend, 755 .dflt.uinteger = DAC1FID31_PRESSURETEND_NOT_AVAILABLE}, 756 {"visgreater", t_boolean, .addr.boolean = &ais->type8.dac1fid31.visgreater, 757 .dflt.boolean = false}, 758 {"visibility", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.visibility, 759 .dflt.uinteger = DAC1FID31_VISIBILITY_NOT_AVAILABLE}, 760 {"waterlevel", t_integer, .addr.integer = &ais->type8.dac1fid31.waterlevel, 761 .dflt.integer = DAC1FID31_WATERLEVEL_NOT_AVAILABLE}, 762 {"leveltrend", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.leveltrend, 763 .dflt.uinteger = DAC1FID31_WATERLEVELTREND_NOT_AVAILABLE}, 764 {"cspeed", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cspeed, 765 .dflt.uinteger = DAC1FID31_CSPEED_NOT_AVAILABLE}, 766 {"cdir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cdir, 767 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 768 {"cspeed2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cspeed2, 769 .dflt.uinteger = DAC1FID31_CSPEED_NOT_AVAILABLE}, 770 {"cdir2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cdir2, 771 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 772 {"cdepth2", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cdepth2, 773 .dflt.uinteger = DAC1FID31_CDEPTH_NOT_AVAILABLE}, 774 {"cspeed3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cspeed3, 775 .dflt.uinteger = DAC1FID31_CSPEED_NOT_AVAILABLE}, 776 {"cdir3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cdir3, 777 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 778 {"cdepth3", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.cdepth3, 779 .dflt.uinteger = DAC1FID31_CDEPTH_NOT_AVAILABLE}, 780 {"waveheight", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.waveheight, 781 .dflt.uinteger = DAC1FID31_HEIGHT_NOT_AVAILABLE}, 782 {"waveperiod", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.waveperiod, 783 .dflt.uinteger = DAC1FID31_PERIOD_NOT_AVAILABLE}, 784 {"wavedir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.wavedir, 785 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 786 {"swellheight", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.swellheight, 787 .dflt.uinteger = DAC1FID31_HEIGHT_NOT_AVAILABLE}, 788 {"swellperiod", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.swellperiod, 789 .dflt.uinteger = DAC1FID31_PERIOD_NOT_AVAILABLE}, 790 {"swelldir", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.swelldir, 791 .dflt.uinteger = DAC1FID31_DIR_NOT_AVAILABLE}, 792 {"seastate", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.seastate, 793 .dflt.uinteger = DAC1FID31_SEASTATE_NOT_AVAILABLE}, 794 {"watertemp", t_integer, .addr.integer = &ais->type8.dac1fid31.watertemp, 795 .dflt.integer = DAC1FID31_WATERTEMP_NOT_AVAILABLE}, 796 {"preciptype", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.preciptype, 797 .dflt.uinteger = DAC1FID31_PRECIPTYPE_NOT_AVAILABLE}, 798 {"preciptype_text", t_ignore}, 799 {"salinity", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.salinity, 800 .dflt.uinteger = DAC1FID31_SALINITY_NOT_AVAILABLE}, 801 {"ice", t_uinteger, .addr.uinteger = &ais->type8.dac1fid31.ice, 802 .dflt.uinteger = DAC1FID31_ICE_NOT_AVAILABLE}, 803 {NULL} 804 }; 805 806 const struct json_attr_t json_ais8_fid40[] = { 807 AIS_HEADER 808 AIS_TYPE8 809 {"form", t_uinteger, .addr.uinteger = &ais->type8.dac200fid40.form, 810 .dflt.uinteger = DAC200FID40_FORM_UNKNOWN}, 811 {"facing", t_uinteger, .addr.uinteger = &ais->type8.dac200fid40.facing, 812 .dflt.uinteger = DAC200FID40_FACING_UNKNOWN}, 813 {"direction", t_uinteger, .addr.uinteger = &ais->type8.dac200fid40.direction, 814 .dflt.uinteger = DAC200FID40_DIRECTION_UNKNOWN}, 815 {"direction_text", t_ignore}, 816 {"status", t_uinteger, .addr.uinteger = &ais->type8.dac200fid40.status, 817 .dflt.uinteger = DAC200FID40_STATUS_UNKNOWN}, 818 {"status_text", t_ignore}, 819 {NULL} 820 }; 821 822 const struct json_attr_t json_ais9[] = { 823 AIS_HEADER 824 {"alt", t_uinteger, .addr.uinteger = &ais->type9.alt, 825 .dflt.uinteger = AIS_ALT_NOT_AVAILABLE}, 826 {"speed", t_uinteger, .addr.uinteger = &ais->type9.speed, 827 .dflt.uinteger = AIS_SPEED_NOT_AVAILABLE}, 828 {"accuracy", t_boolean, .addr.boolean = &ais->type9.accuracy, 829 .dflt.boolean = false}, 830 {"lon", t_integer, .addr.integer = &ais->type9.lon, 831 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 832 {"lat", t_integer, .addr.integer = &ais->type9.lat, 833 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 834 {"course", t_uinteger, .addr.uinteger = &ais->type9.course, 835 .dflt.uinteger = AIS_COURSE_NOT_AVAILABLE}, 836 {"second", t_uinteger, .addr.uinteger = &ais->type9.second, 837 .dflt.uinteger = AIS_SEC_NOT_AVAILABLE}, 838 {"regional", t_uinteger, .addr.uinteger = &ais->type9.regional, 839 .dflt.uinteger = 0}, 840 {"dte", t_uinteger, .addr.uinteger = &ais->type9.dte, 841 .dflt.uinteger = 1}, 842 {"raim", t_boolean, .addr.boolean = &ais->type9.raim, 843 .dflt.boolean = false}, 844 {"radio", t_uinteger, .addr.uinteger = &ais->type9.radio, 845 .dflt.uinteger = 0}, 846 {NULL} 847 }; 848 849 const struct json_attr_t json_ais10[] = { 850 AIS_HEADER 851 {"dest_mmsi", t_uinteger, .addr.uinteger = &ais->type10.dest_mmsi, 852 .dflt.uinteger = 0}, 853 {NULL} 854 }; 855 856 const struct json_attr_t json_ais12[] = { 857 AIS_HEADER 858 {"seqno", t_uinteger, .addr.uinteger = &ais->type12.seqno, 859 .dflt.uinteger = 0}, 860 {"dest_mmsi", t_uinteger, .addr.uinteger = &ais->type12.dest_mmsi, 861 .dflt.uinteger = 0}, 862 {"retransmit", t_boolean, .addr.boolean = &ais->type12.retransmit, 863 .dflt.boolean = 0}, 864 {"text", t_string, .addr.string = ais->type12.text, 865 .len = sizeof(ais->type12.text)}, 866 {NULL} 867 }; 868 869 const struct json_attr_t json_ais14[] = { 870 AIS_HEADER 871 {"text", t_string, .addr.string = ais->type14.text, 872 .len = sizeof(ais->type14.text)}, 873 {NULL} 874 }; 875 876 const struct json_attr_t json_ais15[] = { 877 AIS_HEADER 878 {"mmsi1", t_uinteger, .addr.uinteger = &ais->type15.mmsi1, 879 .dflt.uinteger = 0}, 880 {"type1_1", t_uinteger, .addr.uinteger = &ais->type15.type1_1, 881 .dflt.uinteger = 0}, 882 {"offset1_1", t_uinteger, .addr.uinteger = &ais->type15.offset1_1, 883 .dflt.uinteger = 0}, 884 {"type1_2", t_uinteger, .addr.uinteger = &ais->type15.type1_2, 885 .dflt.uinteger = 0}, 886 {"offset1_2", t_uinteger, .addr.uinteger = &ais->type15.offset1_2, 887 .dflt.uinteger = 0}, 888 {"mmsi2", t_uinteger, .addr.uinteger = &ais->type15.mmsi2, 889 .dflt.uinteger = 0}, 890 {"type2_1", t_uinteger, .addr.uinteger = &ais->type15.type2_1, 891 .dflt.uinteger = 0}, 892 {"offset2_1", t_uinteger, .addr.uinteger = &ais->type15.offset2_1, 893 .dflt.uinteger = 0}, 894 {NULL} 895 }; 896 897 const struct json_attr_t json_ais16[] = { 898 AIS_HEADER 899 {"mmsi1", t_uinteger, .addr.uinteger = &ais->type16.mmsi1, 900 .dflt.uinteger = 0}, 901 {"offset1", t_uinteger, .addr.uinteger = &ais->type16.offset1, 902 .dflt.uinteger = 0}, 903 {"increment1", t_uinteger, .addr.uinteger = &ais->type16.increment1, 904 .dflt.uinteger = 0}, 905 {"mmsi2", t_uinteger, .addr.uinteger = &ais->type16.mmsi2, 906 .dflt.uinteger = 0}, 907 {"offset2", t_uinteger, .addr.uinteger = &ais->type16.offset2, 908 .dflt.uinteger = 0}, 909 {"increment2", t_uinteger, .addr.uinteger = &ais->type16.increment2, 910 .dflt.uinteger = 0}, 911 {NULL} 912 }; 913 914 const struct json_attr_t json_ais17[] = { 915 AIS_HEADER 916 {"lon", t_integer, .addr.integer = &ais->type17.lon, 917 .dflt.integer = AIS_GNS_LON_NOT_AVAILABLE}, 918 {"lat", t_integer, .addr.integer = &ais->type17.lat, 919 .dflt.integer = AIS_GNS_LAT_NOT_AVAILABLE}, 920 {"data", t_string, .addr.string = data, 921 .len = sizeof(data)}, 922 {NULL} 923 }; 924 925 const struct json_attr_t json_ais18[] = { 926 AIS_HEADER 927 {"reserved", t_uinteger, .addr.uinteger = &ais->type18.reserved, 928 .dflt.uinteger = 0}, 929 {"speed", t_uinteger, .addr.uinteger = &ais->type18.speed, 930 .dflt.uinteger = AIS_SPEED_NOT_AVAILABLE}, 931 {"accuracy", t_boolean, .addr.boolean = &ais->type18.accuracy, 932 .dflt.boolean = false}, 933 {"lon", t_integer, .addr.integer = &ais->type18.lon, 934 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 935 {"lat", t_integer, .addr.integer = &ais->type18.lat, 936 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 937 {"course", t_uinteger, .addr.uinteger = &ais->type18.course, 938 .dflt.uinteger = AIS_COURSE_NOT_AVAILABLE}, 939 {"heading", t_uinteger, .addr.uinteger = &ais->type18.heading, 940 .dflt.uinteger = AIS_HEADING_NOT_AVAILABLE}, 941 {"second", t_uinteger, .addr.uinteger = &ais->type18.second, 942 .dflt.uinteger = AIS_SEC_NOT_AVAILABLE}, 943 {"regional", t_uinteger, .addr.uinteger = &ais->type18.regional, 944 .dflt.uinteger = 0}, 945 {"cs", t_boolean, .addr.boolean = &ais->type18.cs, 946 .dflt.boolean = false}, 947 {"display", t_boolean, .addr.boolean = &ais->type18.display, 948 .dflt.boolean = false}, 949 {"dsc", t_boolean, .addr.boolean = &ais->type18.dsc, 950 .dflt.boolean = false}, 951 {"band", t_boolean, .addr.boolean = &ais->type18.band, 952 .dflt.boolean = false}, 953 {"msg22", t_boolean, .addr.boolean = &ais->type18.msg22, 954 .dflt.boolean = false}, 955 {"raim", t_boolean, .addr.boolean = &ais->type18.raim, 956 .dflt.boolean = false}, 957 {"radio", t_uinteger, .addr.uinteger = &ais->type18.radio, 958 .dflt.uinteger = 0}, 959 {NULL} 960 }; 961 962 const struct json_attr_t json_ais19[] = { 963 AIS_HEADER 964 {"reserved", t_uinteger, .addr.uinteger = &ais->type19.reserved, 965 .dflt.uinteger = 0}, 966 {"speed", t_uinteger, .addr.uinteger = &ais->type19.speed, 967 .dflt.uinteger = AIS_SPEED_NOT_AVAILABLE}, 968 {"accuracy", t_boolean, .addr.boolean = &ais->type19.accuracy, 969 .dflt.boolean = false}, 970 {"lon", t_integer, .addr.integer = &ais->type19.lon, 971 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 972 {"lat", t_integer, .addr.integer = &ais->type19.lat, 973 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 974 {"course", t_uinteger, .addr.uinteger = &ais->type19.course, 975 .dflt.uinteger = AIS_COURSE_NOT_AVAILABLE}, 976 {"heading", t_uinteger, .addr.uinteger = &ais->type19.heading, 977 .dflt.uinteger = AIS_HEADING_NOT_AVAILABLE}, 978 {"second", t_uinteger, .addr.uinteger = &ais->type19.second, 979 .dflt.uinteger = AIS_SEC_NOT_AVAILABLE}, 980 {"regional", t_uinteger, .addr.uinteger = &ais->type19.regional, 981 .dflt.uinteger = 0}, 982 {"shipname", t_string, .addr.string = ais->type19.shipname, 983 .len = sizeof(ais->type19.shipname)}, 984 {"shiptype", t_uinteger, .addr.uinteger = &ais->type19.shiptype, 985 .dflt.uinteger = 0}, 986 {"shiptype_text", t_ignore}, 987 {"to_bow", t_uinteger, .addr.uinteger = &ais->type19.to_bow, 988 .dflt.uinteger = 0}, 989 {"to_stern", t_uinteger, .addr.uinteger = &ais->type19.to_stern, 990 .dflt.uinteger = 0}, 991 {"to_port", t_uinteger, .addr.uinteger = &ais->type19.to_port, 992 .dflt.uinteger = 0}, 993 {"to_starboard", t_uinteger, .addr.uinteger = &ais->type19.to_starboard, 994 .dflt.uinteger = 0}, 995 {"epfd", t_uinteger, .addr.uinteger = &ais->type19.epfd, 996 .dflt.uinteger = 0}, 997 {"epfd_text", t_ignore}, 998 {"raim", t_boolean, .addr.boolean = &ais->type19.raim, 999 .dflt.boolean = false}, 1000 {"dte", t_uinteger, .addr.uinteger = &ais->type19.dte, 1001 .dflt.uinteger = 1}, 1002 {"assigned", t_boolean, .addr.boolean = &ais->type19.assigned, 1003 .dflt.boolean = false}, 1004 {NULL} 1005 }; 1006 1007 const struct json_attr_t json_ais20[] = { 1008 AIS_HEADER 1009 {"offset1", t_uinteger, .addr.uinteger = &ais->type20.offset1, 1010 .dflt.uinteger = 0}, 1011 {"number1", t_uinteger, .addr.uinteger = &ais->type20.number1, 1012 .dflt.uinteger = 0}, 1013 {"timeout1", t_uinteger, .addr.uinteger = &ais->type20.timeout1, 1014 .dflt.uinteger = 0}, 1015 {"increment1", t_uinteger, .addr.uinteger = &ais->type20.increment1, 1016 .dflt.uinteger = 0}, 1017 {"offset2", t_uinteger, .addr.uinteger = &ais->type20.offset2, 1018 .dflt.uinteger = 0}, 1019 {"number2", t_uinteger, .addr.uinteger = &ais->type20.number2, 1020 .dflt.uinteger = 0}, 1021 {"timeout2", t_uinteger, .addr.uinteger = &ais->type20.timeout2, 1022 .dflt.uinteger = 0}, 1023 {"increment2", t_uinteger, .addr.uinteger = &ais->type20.increment2, 1024 .dflt.uinteger = 0}, 1025 {"offset3", t_uinteger, .addr.uinteger = &ais->type20.offset3, 1026 .dflt.uinteger = 0}, 1027 {"number3", t_uinteger, .addr.uinteger = &ais->type20.number3, 1028 .dflt.uinteger = 0}, 1029 {"timeout3", t_uinteger, .addr.uinteger = &ais->type20.timeout3, 1030 .dflt.uinteger = 0}, 1031 {"increment3", t_uinteger, .addr.uinteger = &ais->type20.increment3, 1032 .dflt.uinteger = 0}, 1033 {"offset4", t_uinteger, .addr.uinteger = &ais->type20.offset4, 1034 .dflt.uinteger = 0}, 1035 {"number4", t_uinteger, .addr.uinteger = &ais->type20.number4, 1036 .dflt.uinteger = 0}, 1037 {"timeout4", t_uinteger, .addr.uinteger = &ais->type20.timeout4, 1038 .dflt.uinteger = 0}, 1039 {"increment4", t_uinteger, .addr.uinteger = &ais->type20.increment4, 1040 .dflt.uinteger = 0}, 1041 {NULL} 1042 }; 1043 1044 const struct json_attr_t json_ais21[] = { 1045 AIS_HEADER 1046 {"aid_type", t_uinteger, .addr.uinteger = &ais->type21.aid_type, 1047 .dflt.uinteger = 0}, 1048 {"aid_type_text", t_ignore}, 1049 {"name", t_string, .addr.string = ais->type21.name, 1050 .len = sizeof(ais->type21.name)}, 1051 {"accuracy", t_boolean, .addr.boolean = &ais->type21.accuracy, 1052 .dflt.boolean = false}, 1053 {"lon", t_integer, .addr.integer = &ais->type21.lon, 1054 .dflt.integer = AIS_LON_NOT_AVAILABLE}, 1055 {"lat", t_integer, .addr.integer = &ais->type21.lat, 1056 .dflt.integer = AIS_LAT_NOT_AVAILABLE}, 1057 {"to_bow", t_uinteger, .addr.uinteger = &ais->type21.to_bow, 1058 .dflt.uinteger = 0}, 1059 {"to_stern", t_uinteger, .addr.uinteger = &ais->type21.to_stern, 1060 .dflt.uinteger = 0}, 1061 {"to_port", t_uinteger, .addr.uinteger = &ais->type21.to_port, 1062 .dflt.uinteger = 0}, 1063 {"to_starboard", t_uinteger, .addr.uinteger = &ais->type21.to_starboard, 1064 .dflt.uinteger = 0}, 1065 {"epfd", t_uinteger, .addr.uinteger = &ais->type21.epfd, 1066 .dflt.uinteger = 0}, 1067 {"epfd_text", t_ignore}, 1068 {"second", t_uinteger, .addr.uinteger = &ais->type21.second, 1069 .dflt.uinteger = 0}, 1070 {"regional", t_uinteger, .addr.uinteger = &ais->type21.regional, 1071 .dflt.uinteger = 0}, 1072 {"off_position", t_boolean, .addr.boolean = &ais->type21.off_position, 1073 .dflt.boolean = false}, 1074 {"raim", t_boolean, .addr.boolean = &ais->type21.raim, 1075 .dflt.boolean = false}, 1076 {"virtual_aid", t_boolean, .addr.boolean = &ais->type21.virtual_aid, 1077 .dflt.boolean = false}, 1078 {NULL} 1079 }; 1080 1081 const struct json_attr_t json_ais22[] = { 1082 AIS_HEADER 1083 {"channel_a", t_uinteger, .addr.uinteger = &ais->type22.channel_a, 1084 .dflt.uinteger = 0}, 1085 {"channel_b", t_uinteger, .addr.uinteger = &ais->type22.channel_b, 1086 .dflt.uinteger = 0}, 1087 {"txrx", t_uinteger, .addr.uinteger = &ais->type22.txrx, 1088 .dflt.uinteger = 0}, 1089 {"power", t_boolean, .addr.boolean = &ais->type22.power, 1090 .dflt.boolean = false}, 1091 {"ne_lon", t_integer, .addr.integer = &ais->type22.area.ne_lon, 1092 .dflt.integer = AIS_GNS_LON_NOT_AVAILABLE}, 1093 {"ne_lat", t_integer, .addr.integer = &ais->type22.area.ne_lat, 1094 .dflt.integer = AIS_GNS_LAT_NOT_AVAILABLE}, 1095 {"sw_lon", t_integer, .addr.integer = &ais->type22.area.sw_lon, 1096 .dflt.integer = AIS_GNS_LON_NOT_AVAILABLE}, 1097 {"sw_lat", t_integer, .addr.integer = &ais->type22.area.sw_lat, 1098 .dflt.integer = AIS_GNS_LAT_NOT_AVAILABLE}, 1099 {"dest1", t_uinteger, .addr.uinteger = &ais->type22.mmsi.dest1, 1100 .dflt.uinteger = 0}, 1101 {"dest2", t_uinteger, .addr.uinteger = &ais->type22.mmsi.dest2, 1102 .dflt.uinteger = 0}, 1103 {"addressed", t_boolean, .addr.boolean = &ais->type22.addressed, 1104 .dflt.boolean = false}, 1105 {"band_a", t_boolean, .addr.boolean = &ais->type22.band_a, 1106 .dflt.boolean = false}, 1107 {"band_b", t_boolean, .addr.boolean = &ais->type22.band_b, 1108 .dflt.boolean = false}, 1109 {"zonesize", t_uinteger, .addr.uinteger = &ais->type22.zonesize, 1110 .dflt.uinteger = 0}, 1111 {NULL} 1112 }; 1113 1114 const struct json_attr_t json_ais23[] = { 1115 AIS_HEADER 1116 {"ne_lon", t_integer, .addr.integer = &ais->type23.ne_lon, 1117 .dflt.integer = AIS_GNS_LON_NOT_AVAILABLE}, 1118 {"ne_lat", t_integer, .addr.integer = &ais->type23.ne_lat, 1119 .dflt.integer = AIS_GNS_LAT_NOT_AVAILABLE}, 1120 {"sw_lon", t_integer, .addr.integer = &ais->type23.sw_lon, 1121 .dflt.integer = AIS_GNS_LON_NOT_AVAILABLE}, 1122 {"sw_lat", t_integer, .addr.integer = &ais->type23.sw_lat, 1123 .dflt.integer = AIS_GNS_LAT_NOT_AVAILABLE}, 1124 {"stationtype", t_uinteger, .addr.uinteger = &ais->type23.stationtype, 1125 .dflt.uinteger = 0}, 1126 {"stationtype_text", t_ignore}, 1127 {"shiptype", t_uinteger, .addr.uinteger = &ais->type23.shiptype, 1128 .dflt.uinteger = 0}, 1129 {"shiptype_text", t_ignore}, 1130 {"txrx", t_uinteger, .addr.uinteger = &ais->type23.txrx, 1131 .dflt.uinteger = 0}, 1132 {"interval", t_uinteger, .addr.uinteger = &ais->type23.interval, 1133 .dflt.uinteger = 0}, 1134 {"quiet", t_uinteger, .addr.uinteger = &ais->type23.quiet, 1135 .dflt.uinteger = 0}, 1136 {NULL} 1137 }; 1138 1139 const struct json_attr_t json_ais24[] = { 1140 AIS_HEADER 1141 {"shipname", t_string, .addr.string = ais->type24.shipname, 1142 .len = sizeof(ais->type24.shipname)}, 1143 {"shiptype", t_uinteger, .addr.uinteger = &ais->type24.shiptype, 1144 .dflt.uinteger = 0}, 1145 {"shiptype_text", t_ignore}, 1146 {"vendorid", t_string, .addr.string = ais->type24.vendorid, 1147 .len = sizeof(ais->type24.vendorid)}, 1148 {"model", t_uinteger, .addr.uinteger = &ais->type24.model, 1149 .dflt.uinteger = 0}, 1150 {"serial", t_uinteger, .addr.uinteger = &ais->type24.serial, 1151 .dflt.uinteger = 0}, 1152 {"callsign", t_string, .addr.string = ais->type24.callsign, 1153 .len = sizeof(ais->type24.callsign)}, 1154 {"mothership_mmsi",t_uinteger, .addr.uinteger = &ais->type24.mothership_mmsi, 1155 .dflt.uinteger = 0}, 1156 {"to_bow", t_uinteger, .addr.uinteger = &ais->type24.dim.to_bow, 1157 .dflt.uinteger = 0}, 1158 {"to_stern", t_uinteger, .addr.uinteger = &ais->type24.dim.to_stern, 1159 .dflt.uinteger = 0}, 1160 {"to_port", t_uinteger, .addr.uinteger = &ais->type24.dim.to_port, 1161 .dflt.uinteger = 0}, 1162 {"to_starboard", t_uinteger, .addr.uinteger = &ais->type24.dim.to_starboard, 1163 .dflt.uinteger = 0}, 1164 {NULL} 1165 }; 1166 1167 const struct json_attr_t json_ais25[] = { 1168 AIS_HEADER 1169 {"addressed", t_boolean, .addr.boolean = &ais->type25.addressed, 1170 .dflt.boolean = false}, 1171 {"structured", t_boolean, .addr.boolean = &ais->type25.structured, 1172 .dflt.boolean = false}, 1173 {"dest_mmsi", t_uinteger, .addr.uinteger = &ais->type25.dest_mmsi, 1174 .dflt.uinteger = 0}, 1175 {"app_id", t_uinteger, .addr.uinteger = &ais->type25.app_id, 1176 .dflt.uinteger = 0}, 1177 {"data", t_string, .addr.string = data, 1178 .len = sizeof(data)}, 1179 {NULL} 1180 }; 1181 1182 const struct json_attr_t json_ais26[] = { 1183 AIS_HEADER 1184 {"addressed", t_boolean, .addr.boolean = &ais->type26.addressed, 1185 .dflt.boolean = false}, 1186 {"structured", t_boolean, .addr.boolean = &ais->type26.structured, 1187 .dflt.boolean = false}, 1188 {"dest_mmsi", t_uinteger, .addr.uinteger = &ais->type26.dest_mmsi, 1189 .dflt.uinteger = 0}, 1190 {"app_id", t_uinteger, .addr.uinteger = &ais->type26.app_id, 1191 .dflt.uinteger = 0}, 1192 {"data", t_string, .addr.string = data, 1193 .len = sizeof(data)}, 1194 {"radio", t_uinteger, .addr.uinteger = &ais->type26.radio, 1195 .dflt.uinteger = 0}, 1196 {NULL} 1197 }; 1198 1199 const struct json_attr_t json_ais27[] = { 1200 AIS_HEADER 1201 {"status", t_uinteger, .addr.uinteger = &ais->type27.status, 1202 .dflt.uinteger = 0}, 1203 {"speed", t_uinteger, .addr.uinteger = &ais->type27.speed, 1204 .dflt.uinteger = AIS_LONGRANGE_SPEED_NOT_AVAILABLE}, 1205 {"accuracy", t_boolean, .addr.boolean = &ais->type27.accuracy, 1206 .dflt.boolean = false}, 1207 {"lon", t_integer, .addr.integer = &ais->type27.lon, 1208 .dflt.integer = AIS_LONGRANGE_LON_NOT_AVAILABLE}, 1209 {"lat", t_integer, .addr.integer = &ais->type27.lat, 1210 .dflt.integer = AIS_LONGRANGE_LAT_NOT_AVAILABLE}, 1211 {"course", t_uinteger, .addr.uinteger = &ais->type27.course, 1212 .dflt.uinteger = AIS_LONGRANGE_COURSE_NOT_AVAILABLE}, 1213 {"raim", t_boolean, .addr.boolean = &ais->type27.raim, 1214 .dflt.boolean = false}, 1215 {"gnss", t_boolean, .addr.boolean = &ais->type27.gnss, 1216 .dflt.boolean = true}, 1217 {NULL} 1218 }; 1219 1220 1221 1222 /* Generated code ends. */ 1223 1224