1# Copyright (c) 1999-2000 Jo�o Pedro Gon�alves <joaop@sl.pt>. 2#All rights reserved. This program is free software; 3#you can redistribute it and/or modify it under the same terms as Perl itself. 4 5package GPS::Garmin::Constant; 6 7$VERSION = sprintf("%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/); 8 9require Exporter; 10@ISA = ("Exporter"); 11 12@EXPORT_OK = ( grep /^GRMN_/, keys %{'GPS::Garmin::Constant::'} ); 13%EXPORT_TAGS = ( 14 15 'all' => \@EXPORT_OK, 16 17 'pids' => [qw[ 18 GRMN_ACK_BYTE GRMN_COMMAND_DATA 19 GRMN_ETX_BYTE 20 GRMN_XFER_CMPLT GRMN_DATE_TIME_DATA 21 GRMN_DLE_BYTE GRMN_POSITION_DATA 22 GRMN_PRX_WPT_DATA GRMN_NAK_BYTE 23 GRMN_RECORDS GRMN_RTE_HDR 24 GRMN_RTE_WPT_DATA GRMN_ALMANAC_DATA 25 GRMN_TRK_DATA GRMN_WPT_DATA 26 GRMN_PVT_DATA GRMN_RTE_LINK_DATA 27 GRMN_TRK_HDR GRMN_PROTOCOL_ARRAY 28 GRMN_PRODUCT_RQST GRMN_PRODUCT_DATA]], 29 30 'commands' => [qw[ 31 GRMN_ABORT_TRANSFER GRMN_TRANSFER_ALM 32 GRMN_TRANSFER_POSN GRMN_TRANSFER_PRX 33 GRMN_TRANSFER_RTE GRMN_TRANSFER_TIME 34 GRMN_TRANSFER_TRK GRMN_TRANSFER_WPT 35 GRMN_TURN_OFF_PWR GRMN_START_PVT_DATA 36 GRMN_STOP_PVT_DATA 37 ]], 38 39 'templates' => [qw[ 40 GRMN_HEADER GRMN_FOOTER 41 GRMN_UTC_DIFF 42 ]] 43 44); 45 46## 47## The constants 48## 49 50#PID Types 51sub GRMN_NUL () { 0x00 } 52sub GRMN_ETX () { 0x03 } 53sub GRMN_ETX_BYTE () { 0x03 } 54sub GRMN_ACK () { 0x06 } 55sub GRMN_ACK_BYTE () { 0x06 } 56sub GRMN_COMMAND_DATA () { 0x0A } 57sub GRMN_XFER_CMPLT () { 0x0C } 58sub GRMN_DATE_TIME_DATA () { 0x0E } 59sub GRMN_ESC () { 0x0E } 60sub GRMN_DLE () { 0x10 } 61sub GRMN_DLE_BYTE () { 0x10 } 62sub GRMN_POSITION_DATA () { 0x11 } 63sub GRMN_PRX_WPT_DATA () { 0x13 } 64sub GRMN_NAK () { 0x15 } 65sub GRMN_NAK_BYTE () { 0x15 } 66sub GRMN_RECORDS () { 0x1B } 67sub GRMN_RTE_HDR () { 0x1D } 68sub GRMN_RTE_WPT_DATA () { 0x1E } 69sub GRMN_ALMANAC_DATA () { 0x1F } 70sub GRMN_TRK_DATA () { 0x22 } 71sub GRMN_WPT_DATA () { 0x23 } 72sub GRMN_PVT_DATA () { 0x33 } 73sub GRMN_RTE_LINK_DATA () { 0x62 } 74sub GRMN_TRK_HDR () { 0x63 } 75sub GRMN_PROTOCOL_ARRAY () { 0xFD } 76sub GRMN_PRODUCT_RQST () { 0xFE } 77sub GRMN_PRODUCT_DATA () { 0xFF } 78 79#Command ID's 80sub GRMN_ABORT_TRANSFER () { 0x00 } 81sub GRMN_TRANSFER_ALM () { 0x01 } 82sub GRMN_TRANSFER_POSN () { 0x02 } 83sub GRMN_TRANSFER_PRX () { 0x03 } 84sub GRMN_TRANSFER_RTE () { 0x04 } 85sub GRMN_TRANSFER_TIME () { 0x05 } 86sub GRMN_TRANSFER_TRK () { 0x06 } 87sub GRMN_TRANSFER_WPT () { 0x07 } 88sub GRMN_TURN_OFF_PWR () { 0x08 } 89sub GRMN_START_PVT_DATA () { 0x31 } #Only works in GPS III 90sub GRMN_STOP_PVT_DATA () { 0x50 } # 91 92#Templates 93 94sub GRMN_HEADER () { pack "C1",GRMN_DLE } 95sub GRMN_FOOTER () { pack "C2",GRMN_DLE,GRMN_ETX }; 96sub GRMN_PACKET_FILL () { 0x01 } 97 98#Constant vars 99sub GRMN_UTC_DIFF () { 631065600 }; #UTC to Unix time epoch 100#sub GRMN_UTC_DIFF () { 631152000 }; #UTC to Unix time epoch 101 102# Symbol_Type 103my %sym = 104 ( 105 # Symbols for marine (group 0...0-8191...bits 15-13=000). 106 sym_anchor => 0, # white anchor symbol 107 sym_bell => 1, # white bell symbol 108 sym_diamond_grn => 2, # green diamond symbol 109 sym_diamond_red => 3, # red diamond symbol 110 sym_dive1 => 4, # diver down flag 1 111 sym_dive2 => 5, # diver down flag 2 112 sym_dollar => 6, # white dollar symbol 113 sym_fish => 7, # white fish symbol 114 sym_fuel => 8, # white fuel symbol 115 sym_horn => 9, # white horn symbol 116 sym_house => 10, # white house symbol 117 sym_knife => 11, # white knife & fork symbol 118 sym_light => 12, # white light symbol 119 sym_mug => 13, # white mug symbol 120 sym_skull => 14, # white skull and crossbones symbol 121 sym_square_grn => 15, # green square symbol 122 sym_square_red => 16, # red square symbol 123 sym_wbuoy => 17, # white buoy waypoint symbol 124 sym_wpt_dot => 18, # waypoint dot 125 sym_wreck => 19, # white wreck symbol 126 sym_null => 20, # null symbol (transparent) 127 sym_mob => 21, # man overboard symbol 128 129 #marine navaid symbols 130 sym_buoy_ambr => 22, # amber map buoy symbol 131 sym_buoy_blck => 23, # black map buoy symbol 132 sym_buoy_blue => 24, # blue map buoy symbol 133 sym_buoy_grn => 25, # green map buoy symbol 134 sym_buoy_grn_red => 26, # green/red map buoy symbol 135 sym_buoy_grn_wht => 27, # green/white map buoy symbol 136 sym_buoy_orng => 28, # orange map buoy symbol 137 sym_buoy_red => 29, # red map buoy symbol 138 sym_buoy_red_grn => 30, # red/green map buoy symbol 139 sym_buoy_red_wht => 31, # red/white map buoy symbol 140 sym_buoy_violet => 32, # violet map buoy symbol 141 sym_buoy_wht => 33, # white map buoy symbol 142 sym_buoy_wht_grn => 34, # white/green map buoy symbol 143 sym_buoy_wht_red => 35, # white/red map buoy symbol 144 sym_dot => 36, # white dot symbol 145 sym_rbcn => 37, # radio beacon symbol 146 147 # leave space for more navaids (up to 128 total) 148 sym_boat_ramp => 150, # boat ramp symbol 149 sym_camp => 151, # campground symbol 150 sym_restrooms => 152, # restrooms symbol 151 sym_showers => 153, # shower symbol 152 sym_drinking_wtr => 154, # drinking water symbol 153 sym_phone => 155, # telephone symbol 154 sym_1st_aid => 156, # first aid symbol 155 sym_info => 157, # information symbol 156 sym_parking => 158, # parking symbol 157 sym_park => 159, # park symbol 158 sym_picnic => 160, # picnic symbol 159 sym_scenic => 161, # scenic area symbol 160 sym_skiing => 162, # skiing symbol 161 sym_swimming => 163, # swimming symbol 162 sym_dam => 164, # dam symbol 163 sym_controlled => 165, # controlled area symbol 164 sym_danger => 166, # danger symbol 165 sym_restricted => 167, # restricted area symbol 166 sym_null_2 => 168, # null symbol 167 sym_ball => 169, # ball symbol 168 sym_car => 170, # car symbol 169 sym_deer => 171, # deer symbol 170 sym_shpng_cart => 172, # shopping cart symbol 171 sym_lodging => 173, # lodging symbol 172 sym_mine => 174, # mine symbol 173 sym_trail_head => 175, # trail head symbol 174 sym_truck_stop => 176, # truck stop symbol 175 sym_user_exit => 177, # user exit symbol 176 sym_flag => 178, # flag symbol 177 sym_circle_x => 179, # circle with x in the center 178 179 # Symbols for land (group 1...8192-16383...bits 15-13=001). 180 sym_is_hwy => 8192, # interstate hwy symbol 181 sym_us_hwy => 8193, # us hwy symbol 182 sym_st_hwy => 8194, # state hwy symbol 183 sym_mi_mrkr => 8195, # mile marker symbol 184 sym_trcbck => 8196, # TracBack (feet) symbol 185 sym_golf => 8197, # golf symbol 186 sym_sml_cty => 8198, # small city symbol 187 sym_med_cty => 8199, # medium city symbol 188 sym_lrg_cty => 8200, # large city symbol 189 sym_freeway => 8201, # intl freeway hwy symbol 190 sym_ntl_hwy => 8202, # intl national hwy symbol 191 sym_cap_cty => 8203, # capitol city symbol (star) 192 sym_amuse_pk => 8204, # amusement park symbol 193 sym_bowling => 8205, # bowling symbol 194 sym_car_rental => 8206, # car rental symbol 195 sym_car_repair => 8207, # car repair symbol 196 sym_fastfood => 8208, # fast food symbol 197 sym_fitness => 8209, # fitness symbol 198 sym_movie => 8210, # movie symbol 199 sym_museum => 8211, # museum symbol 200 sym_pharmacy => 8212, # pharmacy symbol 201 sym_pizza => 8213, # pizza symbol 202 sym_post_ofc => 8214, # post office symbol 203 sym_rv_park => 8215, # RV park symbol 204 sym_school => 8216, # school symbol 205 sym_stadium => 8217, # stadium symbol 206 sym_store => 8218, # dept. store symbol 207 sym_zoo => 8219, # zoo symbol 208 sym_gas_plus => 8220, # convenience store symbol 209 sym_faces => 8221, # live theater symbol 210 sym_ramp_int => 8222, # ramp intersection symbol 211 sym_st_int => 8223, # street intersection symbol 212 sym_weigh_sttn => 8226, # inspection/weigh station symbol 213 sym_toll_booth => 8227, # toll booth symbol 214 sym_elev_pt => 8228, # elevation point symbol 215 sym_ex_no_srvc => 8229, # exit without services symbol 216 sym_geo_place_mm => 8230, # Geographic place name, man-made 217 sym_geo_place_wtr => 8231, # Geographic place name, water 218 sym_geo_place_lnd => 8232, # Geographic place name, land 219 sym_bridge => 8233, # bridge symbol 220 sym_building => 8234, # building symbol 221 sym_cemetery => 8235, # cemetery symbol 222 sym_church => 8236, # church symbol 223 sym_civil => 8237, # civil location symbol 224 sym_crossing => 8238, # crossing symbol 225 sym_hist_town => 8239, # historical town symbol 226 sym_levee => 8240, # levee symbol 227 sym_military => 8241, # military location symbol 228 sym_oil_field => 8242, # oil field symbol 229 sym_tunnel => 8243, # tunnel symbol 230 sym_beach => 8244, # beach symbol 231 sym_forest => 8245, # forest symbol 232 sym_summit => 8246, # summit symbol 233 sym_lrg_ramp_int => 8247, # large ramp intersection symbol 234 sym_lrg_ex_no_srvc => 8248, # large exit without services smbl 235 sym_badge => 8249, # police/official badge symbol 236 sym_cards => 8250, # gambling/casino symbol 237 sym_snowski => 8251, # snow skiing symbol 238 sym_iceskate => 8252, # ice skating symbol 239 sym_wrecker => 8253, # tow truck (wrecker) symbol 240 sym_border => 8254, # border crossing (port of entry) 241 242 # Symbols for aviation (group 2...16383-24575...bits 15-13=010). 243 sym_airport => 16384, # airport symbol 244 sym_int => 16385, # intersection symbol 245 sym_ndb => 16386, # non-directional beacon symbol 246 sym_vor => 16387, # VHF omni-range symbol 247 sym_heliport => 16388, # heliport symbol 248 sym_private => 16389, # private field symbol 249 sym_soft_fld => 16390, # soft field symbol 250 sym_tall_tower => 16391, # tall tower symbol 251 sym_short_tower => 16392, # short tower symbol 252 sym_glider => 16393, # glider symbol 253 sym_ultralight => 16394, # ultralight symbol 254 sym_parachute => 16395, # parachute symbol 255 sym_vortac => 16396, # VOR/TACAN symbol 256 sym_vordme => 16397, # VOR-DME symbol 257 sym_faf => 16398, # first approach fix 258 sym_lom => 16399, # localizer outer marker 259 sym_map => 16400, # missed approach point 260 sym_tacan => 16401, # TACAN symbol 261 sym_seaplane => 16402, # Seaplane Base 262); 263 264my %smbl = 265 ( 266 smbl_dot => 0, # dot symbol 267 smbl_house => 1, # house symbol 268 smbl_gas => 2, # gas symbol 269 smbl_car => 3, # car symbol 270 smbl_fish => 4, # fish symbol 271 smbl_boat => 5, # boat symbol 272 smbl_anchor => 6, # anchor symbol 273 smbl_wreck => 7, # wreck symbol 274 smbl_exit => 8, # exit symbol 275 smbl_skull => 9, # skull symbol 276 smbl_flag => 10, # flag symbol 277 smbl_camp => 11, # camp symbol 278 smbl_circle_x => 12, # circle with x symbol 279 smbl_deer => 13, # deer symbol 280 smbl_1st_aid => 14, # first aid symbol 281 smbl_back_track => 15, # back track symbol 282 ); 283 284my %dspl = 285 ( 286 dspl_name => 0, # Display symbol with waypoint name 287 dspl_none => 1, # Display symbol by itself 288 dspl_cmnt => 2, # Display symbol with comment 289 ); 290 291# also for D155, but without dspl_smbl_none 292my %dspl_smbl = 293 ( 294 dspl_smbl_none => 0, # Display symbol by itself 295 dspl_smbl_only => 1, # Display symbol by itself 296 dspl_smbl_name => 3, # Display symbol with waypoint name 297 dspl_smbl_cmnt => 5, # Display symbol with comment 298 ); 299 300my %clr = 301 ( 302 clr_default => 0, # Default waypoint color 303 clr_red => 1, # Red 304 clr_green => 2, # Green 305 clr_blue => 3, # Blue 306 ); 307 308my %wpt_class = 309 ( 310 USER_WPT => 0x00, # User waypoint 311 AVTN_APT_WPT => 0x40, # Aviation Airport waypoint 312 AVTN_INT_WPT => 0x41, # Aviation Intersection waypoint 313 AVTN_NDB_WPT => 0x42, # Aviation NDB waypoint 314 AVTN_VOR_WPT => 0x43, # Aviation VOR waypoint 315 AVTN_ARWY_WPT => 0x44, # Aviation Airport Runway waypoint 316 AVTN_AINT_WPT => 0x45, # Aviation Airport Intersection 317 AVTN_ANDB_WPT => 0x46, # Aviation Airport NDB waypoint 318 MAP_PNT_WPT => 0x80, # Map Point waypoint 319 MAP_AREA_WPT => 0x81, # Map Area waypoint 320 MAP_INT_WPT => 0x82, # Map Intersection waypoint 321 MAP_ADRS_WPT => 0x83, # Map Address waypoint 322 MAP_LABEL_WPT => 0x84, # Map Label Waypoint 323 MAP_LINE_WPT => 0x85, # Map Line Waypoint 324 ); 325 326my %color = 327 (Black => 0, 328 Dark_Red => 1, 329 Dark_Green => 2, 330 Dark_Yellow => 3, 331 Dark_Blue => 4, 332 Dark_Magenta => 5, 333 Dark_Cyan => 6, 334 Light_Gray => 7, 335 Dark_Gray => 8, 336 Red => 9, 337 Green => 10, 338 Yellow => 11, 339 Blue => 12, 340 Magenta => 13, 341 Cyan => 14, 342 White => 15, 343 Default_Color => 0xFF 344 ); 345 346my %wpt_class_150 = 347 ( 348 apt_wpt_class => 0, # airport waypoint class 349 int_wpt_class => 1, # intersection waypoint class 350 ndb_wpt_class => 2, # NDB waypoint class 351 vor_wpt_class => 3, # VOR waypoint class 352 usr_wpt_class => 4, # user defined waypoint class 353 rwy_wpt_class => 5, # airport runway threshold waypoint class 354 aint_wpt_class => 6, # airport intersection waypoint class 355 locked_wpt_class => 7 # locked waypoint class 356 ); 357 358my %wpt_class_151 = 359 ( 360 apt_wpt_class_151 => 0, # airport waypoint class 361 vor_wpt_class_151 => 1, # VOR waypoint class 362 usr_wpt_class_151 => 2, # user defined waypoint class 363 locked_wpt_class_151 => 3 # locked waypoint class 364 ); 365 366my %wpt_class_152 = 367 ( 368 apt_wpt_class_152 => 0, # airport waypoint class 369 int_wpt_class_152 => 1, # intersection waypoint class 370 ndb_wpt_class_152 => 2, # NDB waypoint class 371 vor_wpt_class_152 => 3, # VOR waypoint class 372 usr_wpt_class_152 => 4, # user defined waypoint class 373 locked_wpt_class_152 => 5 # locked waypoint class 374 ); 375 376my %wpt_class_154 = 377 ( 378 apt_wpt_class_154 => 0, # airport waypoint class 379 int_wpt_class_154 => 1, # intersection waypoint class 380 ndb_wpt_class_154 => 2, # NDB waypoint class 381 vor_wpt_class_154 => 3, # VOR waypoint class 382 usr_wpt_class_154 => 4, # user defined waypoint class 383 rwy_wpt_class_154 => 5, # airport runway threshold waypoint class 384 aint_wpt_class_154 => 6, # airport intersection waypoint class 385 andb_wpt_class_154 => 7, # airport NDB waypoint class 386 sym_wpt_class_154 => 8, # user defined symbol-only waypoint class 387 locked_wpt_class_154 => 9 # locked waypoint class 388 ); 389 390my %wpt_class_155 = 391 ( 392 apt_wpt_class_155 => 0, # airport waypoint class 393 int_wpt_class_155 => 1, # intersection waypoint class 394 ndb_wpt_class_155 => 2, # NDB waypoint class 395 vor_wpt_class_155 => 3, # VOR waypoint class 396 usr_wpt_class_155 => 4, # user defined waypoint class 397 locked_wpt_class_155 => 5 # locked waypoint class 398 ); 399 400my %link_class = 401 ( 402 line => 0, 403 link => 1, 404 net => 2, 405 direct => 3, 406 snap => 0xFF, 407 ); 408 409my %position_fix = 410 ( 411 unusable => 0, # failed integrity check 412 invalid => 1, # invalid or unavailable 413 '2D' => 2, # two dimensional 414 '3D' => 3, # three dimensional 415 '2D_diff' => 4, # two dimensional differential 416 '3D_diff' => 5 # three dimensional differential 417 ); 418 419{ 420 foreach my $def (qw(sym smbl dspl dspl_smbl clr wpt_class color 421 wpt_class_150 wpt_class_151 wpt_class_152 422 wpt_class_154 wpt_class_155 link_class 423 position_fix)) { 424 my @constants; 425 my $ref = eval '\%'.$def; 426 my $code = ""; 427 while(my($k,$v) = each %$ref) { 428 my $subname = "GRNM_" . uc($k); 429 $code .= "sub $subname () { $v };\n"; 430 push @constants, $subname; 431 } 432 #warn $code; 433 eval $code; die $@ if $@; 434 435 $EXPORT_TAGS{$def."s"} = [@constants]; 436 push @EXPORT_OK, @constants; 437 } 438} 439 440 4411; 442__END__ 443