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