icom-20120228/0000755000175000017500000000000012417507764011712 5ustar colincolinicom-20120228/7560000644000175000017500000000012610423507011012131 0ustar colincolin# 756 setup radio 756 utc set restore * 756_rpt restore * 756_arinc restore * 756_bc icom-20120228/call.txt0000644000175000017500000012714410376731213013365 0ustar colincolin0A: 3258 3830 4175 4745 6955 3DP3 Fiji: 8690 4XO Haifa: 4238 8694 13051.5 17146.4 22491 26103.5 4XZ Haifa: 2680 4241 4283 8518 8706 12984 22581 5BA Nocosia: 4347 8465 13085 5YC Nairobi: 13900 6VA Dakar: 4295 6383 8690 13075 16947.5 26070 6WW Dakar: 4232 4305 4312 8610 8630 8666 8722 12864 12894 12925.5 17155 17196 17206 17215 17230 22593 6XS Diego Saurez: 6362 8550 12691 12725 17064.8 17180 22563 8PO Barbados: 6379.5 8718 12709 16947.5 22441 9LL Freetown: 6411 9RS77 Kisangani: 7661 9VG Singapore: 4313 6509 8688 8718 12707 9YL Trinidad and Tobago: 8710 ACA Panama (A1): 15540 ACA Panama (LSB): 9160 AEA Rhein Main (LSB): 14905 15500 AEZ Asmara (LSB): 7987 10714 14360 14367 14524 14530 14806 15526 20147 AEZ7 Asmara: 5745 9111.5 10945 15917 AFA Camp Springs (Aerospace Comm Co) (SSB): 6896 10690 10696 AJU (USA): 4275 4277 8551 AMVER: 4428.7 6506.4 8765.4 13113.2 17307.3 AQP2/3/4 Karachi: 6386.5 8490 13011 22426 AQR2/3/5 Chittagong: 16956 ATA New Delhi: 10000 Abadan MID-2: 3467 5658 10018 11300 13288 17961 Abidjan AFI-1: 3452 6535 8861 13357 17955 Accra AFI-4: 2878 5493 8903 13294 17961 Addis Ababa AFI-3: 3467 5658 10018 11300 13288 17961 Aeronautical Mobile (OR): 3025-3155 4700-4750 5680-5730 6685-6765 8965- 9040 11175-11275 13200-13260 15010-15100 17970-18030 23200-23350 Aeronautical Mobile (R): 2850-3025 3400-3500 4650-4700 5450-5680 6525- 6685 8815-8965 10005-10100 11275-11400 13260-13360 17900-17970 21870-22000 Aeronautical Mobile (sea outside USA): 457 Aeronautical Radionavigation: 190-275 275-285 325-405 415-435 510-535 1605-1715 Agana: 2506 Air Force MARS: 3045 3205 3299 3315 4596.5 7316 7329 Air Force One: 5700 9018 13215 15015 Alaska: 2866 4403 4428.6 5631 Alaska (ACS): 149.6 4383.8 Alaska (calling): 2052.5 Alaska Aleutian: 2911 2956 5496 6580 8855 10066 11363 Alaska C/SE: 2875 2911 3470 5484 6580 6604 8876 11357 Alaska Common: 3449 4383.8 5472 5490 Algiers AFI-2: 3419 5652 8894 13273 17961 Algiers VOLMET-AFI: 6575 8896 11279 Allouis (BC): 164 Alma Ata MID-2: 3467 5658 10018 11300 13288 17961 Alma Ata MID-3: 2944 4669 6631 8951 11375 17961 Alpha Sierra (NC): 11770 Alternate Calling/Working: 512 Amateur: 1800-2000 3500-4000 7000-7100 7100-7300 14000-14350 21000-21450 28000-29700 Amsterdam (KLM): 3010 4687 5532 8924 13336 17940 21973 Anchorage NP-3/4: 2932 5628 10048 13294 17904 Andrews AFB: 3078 3144 5700 5910 6715 6756 7955 8967 9018 9024 10153 11118 11226 13215 13247 15015 15048 17993 20640 Ankara MID-1: 2992 5667 8918 13312 Antanarivo VOLMET-AFI: 2860 5499 10057 13261 Antofagasta SW-SAM: 2944 4669 6649 10024 11360 17907 Argentina: 8967 8976 Astoria: 2442 Astoria-Portland: 2598 Asuncion SE-SAM: 3479 5526 8855 10096 13297 17907 Asuncion SW-SAM: 2944 4669 6649 10024 11360 17907 Athens (Olympic): 3010 6637 10078 13327 17916 21979 Auckland SP-6: 3467 5643 8867 13273 17904 Auckland VOLMET-PAC: 2863 6679 8828 13282 BC relay (BBC): 5872 7991 9717 12076 15852 15907 24020 BC relay (DSB): 26110 BC relay (DW): 6975 8068 9210 10620 17445 BC relay (LSB): 26445 BC relay (RFE): 4565 5390 5790 5845 6890 6995 9090 10190 11075 15775 16065 17445 20215 20710 BC relay (Tirana): 8125 BC relay (VOA): 4400.5 5745 5905 6874 7651 7766.5 7773 10455 10870 14527 15752 18275 19262.5 19723.5 25202 25801 26000 BCY Taipei: 4264 BFM: 4238 BPV Shanghai: 5000 5430 9351 10000 15000 Baghdad MID-1: 2992 5667 8918 13312 Baghdad VOLMET-MID: 2956 5589 8945 Bahrain (Gulf Air): 5538 11354 13339 17931 21943 Bahrain MID-1: 2992 5667 8918 13312 Bahrain MID-2: 3467 5658 10018 11300 13288 17961 Bahrain VOLMET-MID: 2956 5589 8945 Baltimore (simplex): 2400 Bangkok (Thai Airways): 3007 4687 8927 Bangkok SEA-1: 3470 6556 10066 11396 13318 17907 Bangkok SEA-2: 3485 5649 5655 8942 11396 13309 17907 Bangkok VOLMET-SEA: 2965 6676 11387 Barnaul NCA-2: 2851 4678 6592 10096 17958 Basrah VOLMET-MID: 2956 5589 8945 Beergarden: 8972 Beijing EA-1: 3016 6571 8897 10042 13297 Beijing NP-3: 2932 5628 10048 13294 17904 Beirut (MEA): 5538 10075 21943 Beirut VOLMET-MID: 2956 5589 8945 Belem NE/C-SAM: 3479 5526 8855 10096 13297 17907 Belmont: 6720 9002 10479 11255 11263 Berlin (Interflug): 8984 Bernadine: 4495 11243 Berne (Swissair): 4654 6643 8936 10069 13205 13324 17931 18023 21988 23285 Biak CWP-1/2: 2998 4666 6532 6562 8903 11384 13300 17904 Bingle Court: 9025 Bodo NAT-D: 2971 4675 8891 11279 13291 17946 Bogota (Avianca): 3010 11345 13336 17928 Bogota C-SAM: 3479 5526 8855 10096 13297 17907 Bogota NW-SAM: 2944 4669 6649 10024 11360 17907 Bombay AFI-3: 3467 5658 10018 11300 13288 17961 Bombay INO-1: 3476 5634 8879 13306 17961 Bombay MID-2: 3467 5658 10018 11300 13288 17961 Bombay VOLMET-SEA: 2965 6676 11387 Boston: 2450 2506 2566 Brasilia C-SAM: 3479 5526 8855 10096 13297 17907 Brasilia SAT-1: 3452 6535 8861 13357 17955 Brasilia SAT-2: 2854 5565 11291 13315 17955 Brasilia VOLMET-SAM: 2881 5601 10087 13279 Brazzaville VOLMET-AFI: 2860 5499 10057 13261 Bread: 6761 Broadcasting: 535-1605 5950-6200 9500-9775 11700-11975 15100-15450 17700-17900 21450-21750 25600-26100 Broadcasting (Region 1 only): 160-190 190-275 275-285 7100-7300 Broadcasting (tropical): 2300-2495 3200-3400 4750-4995 5005-5060 Brussels (Sabena): 3010 5529 8924 10078 13351 17940 Buenos Aires (Aerolineas Argentinas): 3010 6643 10030 13327 17919 17928 21955 Buenos Aires SE-SAM: 3479 5526 8855 10096 13297 17907 Buenos Aires SW-SAM: 2944 4669 6649 10024 11360 17907 Buenos Aires VOLMET-SAM: 2881 5601 10087 13279 CBY Pascua: 6839 6851 14420 CCM Maga: 4249 4255 4256 8610 CCS Santiago: 2808 4265 4341 6396 6419 6481 8061.5 11991.5 12765 12838 18036.5 22611 CCV Valpariso: 4271 8558 12960 CFH Halifax: 45.8 50 447 4271 4283 6386.5 8566 CFH Halifax (A4): 133.2 CFH Halifax (F1): 73.6 CFH-L Halifax: 115.3 123.3 438 4356.5 6395 6449.5 8570 8662 12914 12984 16944.8 17218.4 22587 CFH-NAWS Halifax: 22.5 5097 6477.5 6498.5 10945 15920 CFH-NAWS Halifax (calling): 3287 CHU Ottowa: 3330 7335 14670 CKN Vancouver: 3287 4307 6385 6445 8463 8614 8704 12702 12921 17228 22449 CLA Havana: 476 500 2626.5 4355 6500.5 6505.5 8573 8702 13062.5 13092 17146.4 17165.6 22395 CLM Santiago: 500 CLQ Havana: 433 6435 6478 8477 8480 8690 12748 12878.5 16960.4 17189.6 17605 25726 CLS La Fe Prince: 6477.5 8516 12919 16920.8 CMB Havana: 418 CMR/CBY Havana/Pascual: 4420 6854 CNO96/97/98 Casablanca: 11009 CNP Casablanca: 441 500 500 8686 COL Havana: 15025 CONSOLAN Bushmills: 266 CONSOLAN LUGO Oteroad Rey: 303 CONSOLAN SFI San Fransisco: 192 CONSOLAN Seville: 311 CONSOLAN Stavanger: 319 CONSOLAN TUK Nantucket: 194 CPD Potosi: 8726 CQF57 Bissau: 16317 CQW2 Luanda: 8565 CRX21/23/28/26 Laurenco Marques: 6502 13042.5 17088 CTD/7 Ponta Delgado: 3620 CTH/33/38 Horta: 500 7351 CTN7 Apulia: 17190 CTO22/23 Ponta Delgada: 3837.5 5430 CTP Palhais: 4278 4340 6390 8552 8652 12823 12829 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon: 418 2573 4234 4317 4516 5015 6351.5 7353 8526 8626 8642 11015 13002 17055.2 22551 22566 CTV: 500 CUA43/47/48/69/90 Alfragide: 9055 9258 9419 15704 21796 CUB Funchal: 444 500 4392 6393.5 8461 8462 CUC8/9 Alfragide: 19796 19810 CUG Ponta Delgada: 6393.5 8469 12943.5 CUL Lisbon: 500 4292 6393.5 8469 8490 12943.5 16960 22479 CWA Cerrito: 4346 12750 17208.8 CWE94/CWO4/9CWD40 Cerrito: 6818 13370 13372 Cairo AFI-3: 3467 5658 10018 11300 13288 17961 Cairo MID-1: 2992 5667 8918 13312 Cairo VOLMET-MID: 2956 5589 8945 Calcutta SEA-1: 3470 6556 10066 11396 13318 17907 Calcutta VOLMET-SEA: 2965 6676 11387 Calling: 143 Calling (Region 2): 2091 Calvary: 8984 Cambridge NAT-D: 2971 4675 8891 11279 13291 17946 Canadian Military: 3046 4746 6705 6753 11209 11249 11265 15035 17995 Canton EA-1: 3016 6571 8897 10042 13297 Canton SEA-1: 3470 6556 10066 11396 13318 17907 Cape radio ckt 2 (Apollo 14): 9006 Caracas CAR-A: 2887 5550 6577 8918 11396 13297 17907 Caracas NE-SAM: 3479 5526 8855 10096 13297 17907 Carribou Isl: 1792 Cartwheel: 3060 Casablanca AFI-1: 3452 6535 8861 13357 17955 Caveman: 6720 6742 8972 Cemetary: 3060 3996 4497.5 4545 4560 4613 4615 6505 10479 Central America Common: 5568 10017 Central Atlantic: 428 2063 4346 6484.5 8502 12885 Central Pacific: 126.2 147.9 426 436 460 476 2037.5 2045 2061.5 4228 4247 4274 6348 6365.5 6477.5 6488 8445 8558 8618 8642 12808.5 12844.5 12965.5 13002 16847.3 17016.8 17026 17088.8 22425 22479 22515 22557 Charleston: 6727 9014 Charleston-Jacksonville: 2566 Cheese Bobcat (JPN combine): 6692 6734 6866 8967 8980 8990 11185 11204 Chulmani NCA-3: 3004 5664 10039 13303 17958 Churchill NAT-D: 2971 4675 8891 11279 13291 17946 Civil Air Patrol: 2371 2374 4464.5 4467.5 4504.5 4507.5 4582 4585 4596.5 4599.5 4602.5 4627 4630 26620 Civilian: 11243 Coast Guard: 2670 2686 Coast Guard (WX): 8764 Cocos Island INO-1: 3476 5634 8879 13306 17961 Cocos Island SEA-1: 3470 6556 10066 11396 13318 17907 Cold Bay NP-3/4: 2932 5628 10048 13294 17904 Colombo SEA-1: 3470 6556 10066 11396 13318 17907 Coos Bay: 2566 Coral Hills (Keflavik?): 6742 8993 8997 Corpus Christi: 2538 4425.4 Crest: 6686 Cyprus Combine: 3085 4730 4742 6708 8985 11195 11234 11237 15046 DAF Norddeich: 8673 13027 17048 DAL Norddeich: 4242 6456.5 8512 13027 17177.5 22591 DAM Norddeich: 474 2614 2775 4265 6475.5 8638.5 12763.5 16980 22476 DAN Norddeich: 444 474 500 2614 4308 6435.5 8483 12763.5 12898.5 17143.5 22476 22515 DAO Kiel: 500 2775 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern: 4880 9062 11000 13950 14410 14460 19240 DCF39 Mainflingen (A4): 139 DCF46 Mainflingen: 46.3 DCF77 Mainflingen: 77.5 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg: 147.3 5876 7646 9297.6 11039 11052 13568 13921.1 14458 DER Bonn: 2559 DES/DEU Koenigswustern: 16358 DGE/DFG Elmshorn/Bonames: 7494 DGS70/DAM Elmshorn/Norddeich: 18700 DHJ49 Bonn: 3400 DHJ58 Flensberg: 1680 2718 DHJ59 Wilhelmshaven: 1830 4279 5390 6913 8492 8648 DHS Ruegen: 432 500 500 1720 2666 4233 4242.5 4266.5 4313 8660 8712 12702 12861 13005 13062.5 13101 16965 17100 17230 22480 22481 22550 DIZ Nauen: 4525 DRU5: 7570 DZG Manila: 6441 8588 12882 17176 DZK Manila: 12886 DZR Manila: 8568 12852 17136 Dakar AFI-1: 3452 6535 8861 13357 17955 Dakar SAT-1: 3452 6535 8861 13357 17955 Dakar SAT-2: 2854 5565 11291 13315 17955 Dakar VOLMET-AFI: 6575 8896 11279 Darby Scortch: 9025 Darwin SEA-3: 3470 6556 10066 11396 13318 17907 Delcambre: 2506 4412.6 Delhi MID-2: 3467 5658 10018 11300 13288 17961 Democrat: 4525 6761 9027 15041 Derail: 6720 11263 Disaster (A1): 1750.5 1751.5 1752.5 1753.5 1754.5 1755.5 1756.5 1757.5 Disaster (A3): 1768.5 1775.5 1782.5 1789.5 1796.5 Disaster scene: 1761.5 Distress and Calling: 490-510 500 2170-2194 2182 Djakarta SEA-3: 3470 6556 10066 11396 13318 17907 Dockyard: 9025 Drainage: 8992 Dushanbe MID-2: 3467 5658 10018 11300 13288 17961 Dushanbe MID-3: 2944 4669 6631 8951 11375 17961 Dusseldorf (LTU): 8921 13324 EAC/2 Cadiz: 500 6505.5 17173.2 EAD/2/EDZ4 Aranjuez: 4349 6383 6400.5 6401.5 8618 8622 8642 8682 12841.5 12888 12934.5 13066 17064.8 17184.4 22446 EAF/2/3 Vigo: 500 6498.5 8466 8469 EAO Palma Mallorca: 445 500 EAP C de Palos: 476 500 EAR La Coruna: 472 500 EAS C Mayor: 500 EAT2 Tenerife: 6498.5 8474 13093 16945.5 EAV988 Aranjuez: 19881 EAX4 Parets Valles: 17185.5 EAY22/49 Basile: 7497.5 8152 20202 EBA Madrid: 2770 4311 6377.5 8716 12717 13052.5 22471 EBB Ferrol Caudill: 4245 EBC Cadiz: 4297 EBD Cartegena: 2795 4317 6396 6399 EBK Las Palmas: 6478.5 EJM Malin Head: 500 Eagle Farm: 3060 4497.5 4560 6505 10479 Easter Island SP-7: 3467 5643 8867 13273 17904 Easter Island SW-SAM: 2944 4669 6649 10024 11360 17907 Elmendorf AFB: 4746 6738 8989 11236 13201 FAP: 500 FDC Dijon: 3093.5 3185 4270 4955 FDY: 3833 4050 4721 4750 5025 5705 7094.5 7519 7662 7726 7828 7997 8000 8987 13561 13945 FFB Boulogne: 450 500 FFC Cayenne: 500 FFH Paris: 2500 FFL St Lys: 4328 6421.5 8510 8522 12843 12912 17027 17040.8 22509 22569 FFM Marseille: 500 FFP2/3/7 Ft de France: 4263 8526 8675 12831 FFS6/8 St Lys: 8510 8522 8550 13096.5 17020 17040.8 22509 22569 FFU Le Conquet: 486 500 FIT75 Paris: 7655 FJP8 Noumea: 8698 12708.5 FRS (F1): 1696 FTH42/FTA91 Paris/Lyon: 91.2 7428 FTK56A Paris: 10563 FTK77 Paris: 10775 FTN87 Pontoise: 13873 FUB Paris: 16.8 4325 4338 4455 6361 6365.5 8000 22523 FUC Chebourg: 138 FUE Brest: 444 2789 6348 FUF Ft de France: 4232 4295 6348 8554 16957.5 16978.4 17108 22448 FUG La Regine: 4232 8722 17180 FUJ/4/6/8/9 Noumea: 4590 12701 FUM Papeete: 4232 6348 FUO Toulon: 420 FUO/HWU Toulon: 15.1 FYA31 Lyon (A4): 131.8 136.5 Fairbanks: 11770 Fanfare: 6720 9002 11255 11263 Fastcharger: 6720 9002 11263 Fire: 1630 Fireside: 6753 13204 Fixed: 14-19.9 20.1-59 61-70 70-90 110-130 130-160 160-190 1605-1715 1715-1800 2107-2170 2194-2300 2300-2495 2505-2850 3155-3200 3200- 3400 4000-4063 4438-4650 4750-4995 5005-5060 5060-5450 5730-5950 6765-7000 7300-8195 9040-9500 9775-9995 10100-11175 11400-11700 11975-12330 13360-14000 14350-14990 15450-16460 17360-17700 18030- 19990 20010-21000 21750-21850 22720-23200 23350-24990 26950-26960 29800-29890 29910-30000 Flight Test: 2851 3004 3281 3443 5451 5469 5571 6550 8822 10045 11288 11306 13312 17964 21931 Forest Conservation: 2212 2226 2236 2244 Frankfurt (Lufthansa): 3010 6637 10078 13327 17931 21979 Frobisher NAT-D: 2971 4675 8891 11279 13291 17946 GBR Rugby: 16 GBY20/MHU2/3/4/5/6 Rugby/Portishead: 64.5 4280 6345.5 6407.5 6435.5 8501 8503.5 12843.5 12907.5 16918.8 22383 GBZ Rugby: 19.6 GCC Cullercoats: 441 500 GFC: 13059 GFT26/27/29 Bracknell: 5792 GIL Infracombe: 500 519 GKA Portishead: 4286 6369 8546 12822 17098.4 22467 GKB Portishead: 4274 6379.5 8558 12835.5 17112.8 22449 GKC Portishead: 8516 13020 16954.4 22407 22418 GKE: 4351 GKG Portishead: 4267.9 12790.5 12853.5 17072 22458 22503 GKH Portishead: 4274 13006.5 22526 GKI Portishead: 22528.5 GKK/GKA4 Portishead: 4336 6510 8552 8581.6 12713.5 13006.5 17072 GKL Portishead: 8558 GKM/GKW/GKN/GKF Portishead: 4316 6369 8581.6 12714 17098.4 17136.8 22545 GKR Wick: 500 8469 12709 GKS Portishead: 4344.5 GKT5/6 Portishead: 13020 16954.4 GKV Portishead: 6379.5 GKX Portishead: 3225 GKY2/3/4/5 Portishead: 6472.5 8591 GKZ Humber: 484 500 GLD Lands End: 438 500 GLP20 Ongar: 56.4 GLV Anglesey: 447 500 GMH: 489 GND Stonehaven: 458 500 GNF North Foreland: 418 500 GNG: 500 GNI Niton: 464 500 GNK: 500 GNV Bahrein: 8710 GPK Portpatrick: 500 GRL/GKA2/GKB4/GKC4/5 Portishead: 12871.5 GRY Wooferton?: 455 GXB: 17030.5 GXH Thurso: 500 GXM Singapore: 12753 17150 22754 GXO Mauritius: 4234 7792 8626 13029 13033.5 16130 17030.5 22617 GXP: 500 GYA2/3/4/5 London: 78.2 4321 6362 8494 8641 8674 12921 17053.6 20300 22556 GYC/GLO20 London/Onger: 46.9 80.3 GYI London: 6470.5 GYN1/2 London: 52 81 3832 4460 4462.5 6862 GYR2/3/4/5 Malta: 4279 4319 6495 8594 13105.5 16988 22422 GYS3/4/5/6 Singapore: 4334 6481 8630 12781.5 12945 16928.4 22521 GYU3 Gibralter: 3225 8566 GYX Malta: 6386.5 13105.5 GZC/2/3/4/5 Mauritius: 4295 6351.5 8726 12921 12988.5 16978.4 22533 22587 GZO Hong Kong: 4292 8534 17988 GZV Mauritius: 13033.5 17030 22616 GZW Gibralter: 8646 GZX2/3/4/5/6 Mauritius: 6502 12921 17055.2 22479 Galveston: 2450 2530 4425.4 Gan Area Combine: 8967 11234 Gander NAT-A: 3016 5598 8825 13306 17946 Gander NAT-B/C: 2899 5616 8864 13291 17946 Gander NAT-D: 2971 4675 8891 11279 13291 17946 Gander VOLMET-NAT: 3485 6604 10051 13270 Gangbuster: 3060 3996 4497.5 4545 4560 4560 4613 4615 6505 10479 Georgetown: 2678 German Military: 11240 11266 Gibralter RAFB: 4742 9032 11234 13205 Gibson: 11243 Gladhand: 6727 13244 Golden Gate: 9025 Government: 25330-25600 27540-28000 29890-29910 Government (civil air patrol): 26480-26950 Great Lakes: 482 2514 2550 2582 4316 4415.8 4428.6 6474 8249.2 8534 8783.2 Guam CWP-2: 2998 4666 6532 6562 8903 11384 13300 17904 Gulf of Mexico: 153 410 420 434 438 478 484 2042 2048 2049.5 2052.5 2055.5 2063 4256 4274 4310 4322 6369 6435.5 6446 6495 8445 8453 8473 8550 8570 8666 12660 12704.5 12826.5 12840 13038 13051.5 16018.8 16871.3 17117.6 17170.4 17172.4 22318.5 22431 22487 Gull: 9014 HBG Prangins: 75 HBL: 14357 14470 HBX76/HBO88 Geneve: 6945 11402 14462 HEB Berne: 4259 8602 13024.5 17197 22595 HKB Barranquilla: 8666 12732 12781.5 12832 13087.5 17002.4 17148 25562 HKC Buenaventura: 6386.5 8574 12853.5 HMF15/HMN56/HMF32/HML36 Pyongyang: 5244 9440 9875 11230 HOT Tocumen: 3070 HWN: 4232 6348 13085 HZY Dhahran: 8479 12810 16956.5 Hackberry: 11243 Halifax: 8770.4 Havana (ATC-LDOC): 9077.5 Havana (Cubana): 3007 5544 8927 13339 17934 21945 Hawaii: 484 2052.5 4295 6407.5 8542 13029 16978.4 22509 Hawkins: 8980 9006 Hexagon: 6720 11255 Hilo: 2582 Hong Kong CWP-1: 2998 4666 6532 6562 8903 11384 13300 17904 Hong Kong SEA-2: 3485 5649 5655 8942 11396 13309 17907 Hong Kong VOLMET-PAC: 2863 6679 8828 13282 Honolulu CEP-5: 2869 3413 5547 5574 8843 11282 13261 13354 17904 Honolulu CWP-2: 2998 4666 6532 6562 8903 11384 13300 17904 Honolulu SP-7: 3467 5643 8867 13273 17904 Honolulu VOLMET-PAC: 2863 6679 8828 13282 Houston: 6692 Houston (Universal Aviation): 5529 10075 17940 Houston LDOC: 5529 10075 13330 17925 21964 Humber R: 1869 3778 Hurricane: 8972 8997 IAM Rome: 5000 IAR Rome: 500 4292 4292 4320 6407 6410 8530 8670 12884 13001 13011 13015.5 17160 17160.8 17172.4 17232.8 22377 22623 26030 IAR12/67 Rome: 6418 12996 17160.8 IBF Turin: 5000 ICB Genova: 4235 8650 12978 17217 ICV Tavolara: 20.8 IDC Cagliari: 6545 IDQ/2/3/6 Rome: 4280 6390 8486 12889.5 IDR Rome: 2803 3039 4244 4271 4615 6449.5 6867.5 6960 8558 8570 8576 13498 13563.5 IEA20 Rome: 4733 IMA24/25 Rome: 3822.5 7610 IQH Naples: 6376 8656 8664 12995 IQX Trieste: 6418 8679 12975 17084 IRM Rome: 6365.5 8684 12760 17105 22525 Industrial: 27235 27245 27255 27265 27275 Industrial (Business Radio): 27390 27410 27430 27450 27470 27490 27510 27530 Industrial (Forest Products): 1676 1700 2398 29710 29730 29750 29770 29790 Industrial (Motion Picture): 1628 1652 2292 2398 4637.5 Industrial (Petroleum): 1614 1628 1652 1676 1700 2292 2398 4637.5 25020 25040 25060 25080 25100 25120 25140 25160 25180 25200 25220 25240 25260 25280 25300 25320 Industrial (Power): 2292 2398 4637.5 Industrial (Special Industrial): 2292 2398 4637.5 27290 27310 27330 27350 27370 Industrial Scientific and Medical Equipment: 13560 27120 Innsbruck AFB: 11229 International Fixed Public: 26955 Intership: 2082.5 2638 2738 Intership (Great Lakes: 2003 Intership (Gulf of Mexico): 2203 2830 Intership (Pacific): 2142 Irkutsk EA-1: 3016 6571 8897 10042 13297 Irkutsk EA-2: 3485 5649 5655 8942 11396 13309 17907 Irkutsk NCA-2: 2851 4678 6592 10096 17958 Irkutsk NCA-3: 3004 5664 10039 13303 17958 Istanbul VOLMET-MID: 2956 5589 8945 Ivanhoe: 6697 6720 8976 11267 JAX Control: 13221 18009 JCS/JCU Chosi: 6467 6485.5 8654 12826.5 12878.5 17043.2 17112.8 JCT Chosi: 13105.5 17176 JDC Chosi Siishib: 8647 13045 JGZAR Tokyo: 20 JJY Tokyo: 2500 5000 10000 15000 JOR Nagasaki: 13006.5 JOS Nagasaki: 8606 13069.5 JOU Nagasaki: 13092 16960.4 JWT Stavanger: 3690 4055 4563 5811 7987.5 13101 JXZ/J33DS Helgeland: 16.4 Jargon: 8972 Jeddah (Saudia): 5544 8927 13339 13342 21994 Jeddah AFI-3: 3467 5658 10018 11300 13288 17961 Jeddah MID-1: 2992 5667 8918 13312 Jehovah: 8976 Johannes Combine: 11237 Johannesburg (SAA): 5532 8933 11354 21943 Johannesburg AFI-4: 2878 5493 8903 13294 17961 Johannesburg INO-1: 3476 5634 8879 13306 17961 Johannesburg VOLMET-AFI: 2860 5499 10057 13261 June Bug: 9025 KEA Alaska: 416 KFS San Fransisco: 476 2037.5 2061.5 4358 6516 13114.5 KFS/A San Fransisco: 6365.5 8558 12844.5 17026 22425 KFS/B San Fransisco: 6348 8713.5 12695.5 17184.8 22515 KGN Delcambre: 4366.7 KHK Kahuku: 484 8542 13029 16978.4 KJQ North Pacific: 482 KKN44 Washington: 5110 7830 11995 15917 16162 20122 KKN50 Washington: 6925 10637.5 12022.5 15540 18468 23975 KLB Seattle: 6411 8546 12907.5 17007.2 KLC Galveston: 484 500 8666 13038 17208.8 KMI Dixon: 4357.4 4403.9 4407 8728.2 8743.7 8759.2 8784 13100.8 13103.9 13107 13187.6 13190.7 17236 17239.1 17279.4 17304.2 22636.3 22664.2 22697.7 22704.5 KOK Los Angeles: 464 500 4283 6463.5 8590 12993 17064.8 22413 KOM Hawaii: 4110.1 8740.6 13165.9 17232.9 KPH Bolinas: 126.2 147.9 460 500 2045 4247 6477.5 6488 8618 8642 12808 13002 17016.8 17088 22479 22557 KRH50 Washington: 3310 4587 4626 5426 6789 7570 7727 10680 16150 KRL: 3920 KUB Alaska: 416 KWN90 Washington: 3185 3827.5 5320 10225 14360 18359 KWS78 Washington: 3828 14360 Kahuku: 2530 4415.8 Kano AFI-2: 3419 5652 8894 13273 17961 Kano AFI-4: 2878 5493 8903 13294 17961 Kano VOLMET-AFI: 6575 8896 11279 Karachi MID-2: 3467 5658 10018 11300 13288 17961 Karachi VOLMET-SEA: 2965 6676 11387 Keflavik AFB: 11229 Khabaraovsk VOLMET-NCA: 3461 4663 5676 10090 13279 Khabarovsk NCA-3: 3004 5664 10039 13303 17958 Khabarovsk NP-3: 2932 5628 10048 13294 17904 Khanty Mansiysk NCA-1: 3019 5646 13315 17958 Khanty Mansiysk NCA-2: 2851 4678 6592 10096 17958 Khartoum VOLMET-AFI: 6575 8896 11279 Kiev VOLMET-NCA: 3461 4663 5676 10090 13279 Kirensk NCA-2: 2851 4678 6592 10096 17958 Kirensk NCA-3: 3004 5664 10039 13303 17958 Krauton AFB: 3067 5703 6731 6750 9031 11229 13214 Kumming EA-1: 3016 6571 8897 10042 13297 Kumming SEA-1: 3470 6556 10066 11396 13318 17907 Kuybyshev MID-3: 2944 4669 6631 8951 11375 17961 LBG Bergen: 2792 LBJ/2/3/4/5/6/7 Harstad: 57.7 2678 5811 6737 7987.5 LCH Tryvasshoegda: 54.7 LCO/LFT/LHK Jeloey: 13980 16952 20630 LF-/LG- Rogoland: 4241 4325 6432 6467 8528 8574 8678 12727.5 12876 12961.5 16928 16952 17074.4 17165.6 22425 22472 25308 25383 LGA Alesund: 500 LGZ Farsunde: 476 500 LIF Floroe: 2411 LOL Buenos Aires: 5000 10000 12943.5 13101 15000 17180 LORAN-C: 100 LPD Gral Pacheco: 4268 4279 8646 12988.5 17045.6 22419 LSA4/5 Press: 12709 LVO Corrientes: 5415 LZL Bourgas: 8564 8608 LZS: 22596 LZW Varna: 8459 8608 13078.5 17215 La Paz SE-SAM: 3479 5526 8855 10096 13297 17907 La Paz SW-SAM: 2944 4669 6649 10024 11360 17907 Lahr Military: 5690 8996 11265 13231 Lajes AFB: 3078 3081 4746 6738 6750 8967 11271 Lake Allatoona-Lake Sidney Lanier: 2450 Lake Dallas-Lake Texhoma (simplex): 2738 Lake Mead (simplex): 2782 Lanchau EA-1: 3016 6571 8897 10042 13297 Land Mobile: 1605-1715 1715-1800 2107-2170 2194-2300 2300-2495 2505-2850 3155-3200 3200-3400 27410-27540 29700-29800 Land Mobile (industrial): 25010-25070 25110-25330 Land Mobile (remote pickup): 26100-26480 Lantern Chief (Apollo 14): 8980 9006 Leningrad EUR-A: 3479 5661 6598 10084 13288 17961 Liberty: 6756 Lifeboats: 8364 Lighter-than air craft: 3281 Lima (EA): 11215 Lima NW/SW-SAM: 2944 4669 6649 10024 11360 17907 Lima VOLMET-SAM: 2881 5601 10087 13279 Limited coast: 2065 2079 2096.5 4125 4143.6 4419.4 6218.6 6221.6 6521.9 8291.1 8294.2 12429.2 12432.3 12435.4 16587.1 16590.2 16593.3 22124 22127.1 22130.2 22133.3 22136.4 Lisbon AFI-1: 3452 6535 8861 13357 17955 Lisbon NAT-A: 3016 5598 8825 13306 17946 Location: 11243 London (British Airways): 3497 5535 8921 10072 13333 17922 21946 Looking Glass: 5700 6753 8964 9027 11243 15035 Loring AFB: 3078 6715 8989 11236 13201 15095 Los Angeles-San Diego: 2466 2522 2566 2598 Louisville (simplex): 2086 2782 4069.2 6455 8780 13158 15283 Luqa RAFB: 3102 4742 9025 9032 13205 MARS (A1): 4035 MARS (LSB): 4008.5 4013 4017 4020 4025 4035 4040 MEM: 5710 6817 MHW/GQD Anthorn: 19 MKE Akrotiri: 4525 9025 MKL: 3929 6757 MLU Gibralter: 11662.5 MQD Plymouth: 3930 5688 9040 MQY Chatham: 3910 6728 9025 11180 15025 MQY Chatham (USB): 6697 9036 11182 MRB Malta: 5714 MSF: 60 2500 5000 6690 10000 MTN Portsmouth: 2432.5 3228 4238 Madras SEA-1: 3470 6556 10066 11396 13318 17907 Madrid/Las Palmas (Iberia): 5529 10027 17940 21967 Manila CWP-1: 2998 4666 6532 6562 8903 11384 13300 17904 Manila SEA-2: 3485 5649 5655 8942 11396 13309 17907 Manila SEA-3: 3470 6556 10066 11396 13318 17907 Maritime Mobile: 110-130 130-160 415-435 435-490 510-535 2000-2035 2092.5-2107 2107-2170 2194-2300 2300-2495 2505-2850 3155-3200 3200- 3400 Maritime Mobile (coast SITOR): 4349.4-4357.4 6493.9-6506.4 8704.4-8718.9 13070.8-13100.8 17196.9-17232.9 22561-22596 Maritime Mobile (coast telephony): 4357.4-4438 6506.4-6525 8718.9-8815 13100.8-13200 17232.9-17360 22596-22720 Maritime Mobile (coast working): 4219.4-4349.4 6325.4-6493.9 8435.4- 8704.4 12652.3-13070.8 16859.4-17196.9 22310.5-22561 Maritime Mobile (coast): 2035-2065 Maritime Mobile (ship SITOR): 4170-4179.8 6256-6269.8 8297.3-8300 8343.5-8357.8 12491-12526.8 16660-16705.8 22192-22227 25076-25090.1 Maritime Mobile (ship calling): 2089.5-2092.5 4179.8-4188 6269.8-6282 8359.8-8376 12539.6-12564 16719.8-16748.8 22227-22250 25070-25076 Maritime Mobile (ship telephony): 4063-4146.6 6200-6224.6 8195-8297.3 12330-12439.5 16460-16596.4 22000-22139.5 Maritime Mobile (ship working): 4188-4219.4 6282-6325.4 8357.8-8359.8 8376-8435.4 12526.8-12539.6 12564-12652.3 16705.8-16719.8 16748.8- 16859.4 22250-22310.5 25090.1-25110 Maritime Mobile (ship): 2068.5-2078.5 Maritime Mobile (special systems): 4146.6-4170 6224.6-6256 8300-8343.5 12439.5-12491 16596.4-16660 22139.5-22192 Maritime Mobile (telephony): 2065-2068.5 2078.5-2089.5 Maritime Radionavigation: 275-285 285-325 405-415 McClellan AFB: 3067 4746 5700 5710 6727 6738 6997 8989 11176 11236 13201 15031 McCord AFB: 8980 McDill AFB: 4746 5688 6750 8989 8993 11179 11228 11246 13244 15015 Melanesia Common: 2861 5498 5666 8917 Memphis (simplex): 2086 2782 4088.4 6200.8 8246 12379 16488 Merida CAR-A: 2887 5550 6577 8918 11396 13297 17907 Merida VOLMET-CAR: 2950 5580 11315 Miami: 2442 2490 2514 2550 4371 4403.2 4422.2 Miami CAR-A: 2887 5550 6577 8918 11396 13297 17907 Miami VOLMET-CAR: 2950 5580 11315 Migraine: 4725 5700 6761 9027 11239 13241 15041 Miharik Combine (Bahrein, Ceylon, Kuwait): 6745 11237 15036 Missionary: 5722 6697 8982 Mobile: 2572 4399.8 4412.6 4412.6 4438-4650 Montevideo SE-SAM: 3479 5526 8855 10096 13297 17907 Montevideo SW-SAM: 2944 4669 6649 10024 11360 17907 Morgantown: 11770 Moscow (Aeroflot): 5529 8924 10030 13345 17940 21958 Moscow EUR-A: 3479 5661 6598 10084 13288 17961 Moscow MID-3: 2944 4669 6631 8951 11375 17961 Moscow NCA-1: 3019 5646 13315 17958 Moscow VOLMET-NCA: 3461 4663 5676 10090 13279 Murmansk EUR-A: 3479 5661 6598 10084 13288 17961 NAA Cutler: 17.3 22764 NAM Norfolk: 5870 8090 NAS Brooklyn: 5692 NAS Elizabeth City: 5696 8984 NAS San Diego: 5696 NAS San Fransisco: 8984 NAS Traverse City: 3241 5696 NASA Houston (Apollo 14): 6756 NAU Puerto Rico: 5785 5833 14517 NBA Balboa: 18.6 24 147.9 470 500 4352 4354 4548.5 5448.5 8604 8614 11031 11080 11802 12862.5 12883 12894 17136.8 17590 17697.5 NBA Balboa (A7J): 54.1 NBA Balboa (F1): 81.7 NBL (A7J): 128.3 NCI Naples: 7441 NDT Totsuka: 18033 22401 NGP: 12867 NGR Kato Soli: 8578 NIK Argentia: 8728 NKA Asmara: 4515 9060 22760 NLK Jim Creek: 15.3 NMA Miami: 440 500 8470 NMC San Fransisco: 420 4346 6383 8574 8682 12730 12743 12743 17151.2 17247.2 NMC San Fransisco (SSB): 4393.4 6521.8 8760.8 NMF Boston: 472 500 4337 8466 8728 12934.5 22487.5 NMF/NIK Boston/Argentia: 8728 NMG New Orleans: 428 500 8710 17247.2 NMH Washington: 12889 NMJ Ketchikan: 466 NMK Cape May: 2670 NMN Portsmouth: 466 500 2670 8465 12718 17151 NMO Honolulu: 440 8650 NMQ Long Beach: 472 8728 NMR San Juan: 466 500 8466 8471 8710 12700 12718.5 17002.4 NMT: 17002.4 NMV Jacksonville: 430 500 2670 NMW West Port: 440 NMX: 2670 NMY New York: 486 500 12718.5 17002.4 NOK: 8726 NOQ Mobile: 464 500 NOR San Diego: 12743 NOW: 500 NOY Galveston: 456 500 NPG San Fransisco: 115 500 4010 6428.5 9277.5 12966 17288 22635 NPG-FC/FM San Fransisco: 3268 9050 12966 13655 16457.5 16950 22593 NPM Honolulu: 26.1 131.1 4525 6428.5 6536 9050 12966 13655 16457.5 20575 22593 NPN Guam: 484 4955 8150 8506 13380 13530 15925 17530 18033 21760 NPO/NDT: 13380 NRV: 466 8465 12746 17147.2 22476 NRY (A2): 13230 NSS Annapolis: 21.4 88 134.5 185 5870 8090 8530 12135 12966 16180 20225 25590 NSS Annapolis (F1): 122 NST/GXH/AOK/...: 65.9 123 2589.5 4585 4623 5052 5167 5916.5 6487 7504 7705 9318 12691 17011 22919 Nadi SP-6/7: 3467 5643 8867 13273 17904 Naha CWP-1/2: 2998 4666 6532 6562 8903 11384 13300 17904 Nairobi AFI-3: 3467 5658 10018 11300 13288 17961 Nairobi INO-1: 3476 5634 8879 13306 17961 Nairobi VOLMET-AFI: 2860 5499 10057 13261 Neckware: 8972 8976 8980 New Orleans: 2482 2558 2598 4419 New York: 2482 2522 2558 2590 4390.2 4403 4422.2 4428.6 New York (test): 6526 10093 13356 29916 New York CAR-A: 2887 5550 6577 8918 11396 13297 17907 New York NAT-A: 3016 5598 8825 13306 17946 New York NAT-B/C: 2899 5616 8864 13291 17946 New York VOLMET-NAT: 3485 6604 10051 13270 New York/San Juan LDOC: 3494 6640 11342 13330 17925 21964 Norfolk-Quantico: 2450 2538 North Atlantic: 112.9 124.1 130.4 132.1 134.6 137 146.8 147.5 418 436 442 460 472 476 482 2036 2040.5 2046.5 2051 2054 2060 4238 4268 4331 4343 4346 6333.5 6337 6344 6351.5 6376 6414.5 6418 8502 8514 8586 8610 8630 8658 8686 12745.5 12925.5 12948 12961.5 12997.5 13020 13024.5 13033.5 13060.5 16904.9 16968.8 16973.6 16997.6 17021.6 17093.6 18933.2 22348.5 22366.5 22407 22485 22503 North Pacific: 482 488 2058.5 2063 4349 6411 8582 8658 12907.5 12916.5 17007.2 22539 Novosibirsk: 4996 9996 14996 Novosibirsk VOLMET-NCA: 3461 4663 5676 10090 13279 Nugget: 11243 OBC Callao: 490 12307 ODR Beirut: 8702 13101 OFJ Helsinki: 4271 6355 8726 13087.5 13105.5 16924 22395 25065 OLB5 Prague: 3170 OLD/OLG4 Prague: 10308 18303 OLI4/OLH9 (intruder): 13358 13538 OLW2 Prague: 6820 OMA Vinohrady: 50 2500 OMZ: 7960 18386 ONQ27 (A!): 5738 ONT: 449 OSN26/28/212/44 Ostende: 4343 4345 6418 6420 6504 8464 12712 12974 OSN46/412/416: 6397 6504 8702 17253 OST/3/32/5/52/6/62 Ostende: 426 435 500 6411 6496.5 8478 8652 12782 13067.5 17016.8 17187 22533 22602 25135 OUA23/32 Fredrikshaven: 122.5 141.4 2358 OVG4/8/12 Fredrikshaven: 4020 8148 12329 OVK Aarhus: 3230 OXB: 429 500 OXP: 464 OXZ Lyngby: 4253 4303 4319 6439 6446 8598 12753.5 12916.5 16920.8 17068 22404 22418 22458 25262 OYE Roenne: 2586 Oasis: 6686 Oban R: 2738 Odessa EUR-A: 3479 5661 6598 10084 13288 17961 Odessa MID-1: 2992 5667 8918 13312 Old Smokey: 8964 Omega: 10.2 Outway: 4725 4744 6761 9027 11220 15041 Overlord: 6720 Overwork: 5722 6720 15054 PBC32/34/36/38/312/317/322 Goeree: 2576 2581 4360 6895 8514 11135 17047.2 PCH Scheveningen: 421 461 500 4250 6404 8562 8622 8654 12768 12799.5 12853.5 12966 17007.2 17103.2 17237.6 22539 22575 PDC: 9061.5 PEB50: 2809 2810 5830 PGL: 6830 10468 PJC Curacao: 4334 6491.5 8694 13042.5 17170.4 PJK34/38/312: 13074 PKI Djakarta: 8542 17199.2 PPA25: 4246 6369 8492 12738 16983.2 22420 PPE2 Rio de Janeiro: 8476 8721 16952 PPM28: 12743 PPR Rio de Janeiro: 435 4242.5 4244 8634 13105.5 17194.4 PPS74: 13910 PRS5: 17119 22505 PWZ Rio de Janeiro: 4289 6435.5 6483 6535 8550 12754.5 16960.4 17159 17160.8 22530 PZN4 Paramaribo: 6354 8652.5 13046 Palmyra Island: 2530 Panama City CAR-A: 2887 5550 6577 8918 11396 13297 17907 Panama City NW-SAM: 2944 4669 6649 10024 11360 17907 Paris (Air France): 3010 6637 11351 13351 17916 21940 Parkway: 11243 Pauline (LSB): 15786 16237 20250 20624 22805 24450 Personal: 26960-27410 Perth INO-1: 3476 5634 8879 13306 17961 Perth SEA-3: 3470 6556 10066 11396 13318 17907 Peterson: 9023 Pittsburgh (simplex): 2086 2782 4387 6451.8 8207.6 12379 16488 Police: 1610 1618 1626 1634 1642 1650 1658 1666 1674 1682 1690 1698 1706 1714 1722 1730 2326 2366 2382 2390 2406 2414 2422 2430 2442 2450 2458 2466 2474 2482 2490 Police Zone and Interzone: 2804 2808 2812 5135 5140 7480 7805 7935 Ponce: 2585 Port Moresby CWP-1/2: 2998 4666 6532 6562 8903 11384 13300 17904 Port of Spain VOLMET-CAR: 2950 5580 11315 Prague VOLMET-EUR: 2998 6580 11378 Puerto Rico: 153 486 2052.5 4244 8457 12700 Puerto Rico (USCG): 8984 Punta Arenas SW-SAM: 2944 4669 6649 10024 11360 17907 Pyongyang CWP-1: 2998 4666 6532 6562 8903 11384 13300 17904 Pyongyang EA-1: 3016 6571 8897 10042 13297 Pyongyang EA-2: 3485 5649 5655 8942 11396 13309 17907 Pyongyang NCA-3: 3004 5664 10039 13303 17958 Pyongyang NP-3/4: 2932 5628 10048 13294 17904 Quito NW-SAM: 2944 4669 6649 10024 11360 17907 RAF Rescue: 3095 5695.5 RAT Moscow: 2500 5000 RCC4: 15656 RCG77/RSU31: 12250 13491 RCH Tashkent: 2500 RCI Bolchoi: 17.1 RCI/RCC: 8080 13110 17505 RES Moscow: 100 RID Irkutsk: 5004 10004 15004 RMQ4: 7600 RNM Moscow: 10000 15000 20000 25000 ROT Moscow: 12995 22450 RSL2: 3830 RTA: 9996 14996 RUVE/URB2/UDO2/RWWM Klaipeda: 522 8541 12815 17137 22458 RWF Piatigorsk: 25 RWM Moscow: 5000 10000 15000 Radio Astronomy: 2495-2505 9995-10005 14990-15010 19990-20010 21850- 21870 24990-25010 Radio Direction Finding: 410 Radiolocation: 70-90 110-130 1605-1715 1715-1800 Radionavigation: 10-14 90-110 1638 1708 1800-2000 Range1/2: 6982 Rasberry (Bermuda, Miramar, Jacksonville, Cecil): 6700.5 6723 6725 Rasputin: 6753 8964 13204 18019 Recife SAT-1: 3452 6535 8861 13357 17955 Recife SAT-2: 2854 5565 11291 13315 17955 Red Cross AX: 6526 13266 18023 Remote Pickup (BC): 1606 1622 1646 Retail: 4725 5700 6761 9027 11220 13241 15035 15041 17975 Reykjavik NAT-B/C: 2899 5616 8864 13291 17946 Reykjavik NAT-D: 2971 4675 8891 11279 13291 17946 Rio de Janeiro (Varig): 3010 5541 8924 10069 17919 21955 21991 River: 9002 Rome (Alitalia): 4687 5532 10027 13336 17940 21952 SAB/SAG Goeteborg: 4262 6272.5 8498 8646 12755 12817.5 12880.5 12912 17079.2 22413 22607 25461 SAG Goeteborg: 450 500 SDO/SAB/SAG Varberg/Goeteborg: 8177.5 SELCAL coast SITOR: 4357 6506 8718.5 13100 13100.5 17232 17232.5 22595 22595.5 SELCAL ship SITOR: 4187.6 6281.4 8375.2 12562.3 12562.8 16749.9 16750.4 22248 22248.5 SLZ/1: 67 SMA3/7/SAW: 86.6 3195 SNN2: 18496 SNN23: 15772 SOF: 5750 SOT26 Warszawa: 18104 SPA/SPH Gdynia: 4337 8482 8666 12721 12723 16964 17164 17225 22399 22495 SPE: 500 SPE/SPB Szczecin: 2740 4306 6460 8557 12939 15770 16974 17069.6 22505 SUH Alexandria: 8578 12970.5 SVA Athens: 4239 4343 6411 6478.5 6512.5 8530 8537 8687 8692 8704 12833.5 12942.5 13029 13047 16966 17094 17189 17194 22411 22417 22472 25011 25401 SW Pacific Islands: 3008 3460 6575 8924 11319 SXA Athens: 4465 5920 6522.5 8659 SXV/8: 6522.5 8462 Salisbury INO-1: 3476 5634 8879 13306 17961 San Fransisco CEP-5: 2869 3413 5547 5574 8843 11282 13261 13354 17904 San Fransisco-Eureka: 2450 2506 4371 4390.2 4399.8 San Fransisco/Honolulu LDOC: 3013 6640 11348 13348 17925 21964 San Juan: 2530 San Juan CAR-A: 2887 5550 6577 8918 11396 13297 17907 San Juan NAT-A: 3016 5598 8825 13306 17946 San Pablo AFB: 4744 6731 8964 8989 11229 13214 18019 Santa Maria: 8812 Santa Maria NAT-A: 3016 5598 8825 13306 17946 Santa Maria NAT-B/C: 2899 5616 8864 13291 17946 Santiago SW-SAM: 2944 4669 6649 10024 11360 17907 Schoolboy: 11770 Scott AFB: 4742 6727 8964 9014 11182 11233 Seabell: 6731 9002 10479 11229 11243 13214 Seattle: 2482 2522 Seoul (KAL): 3007 10072 13333 17916 21949 21970 Seoul CWP-1: 2998 4666 6532 6562 8903 11384 13300 17904 Seoul EA-1: 3016 6571 8897 10042 13297 Seoul NP-3: 2932 5628 10048 13294 17904 Shanghai CWP-1: 2998 4666 6532 6562 8903 11384 13300 17904 Shanghai EA-1: 3016 6571 8897 10042 13297 Shanghai NP-3: 2932 5628 10048 13294 17904 Shannon NAT-A: 3016 5598 8825 13306 17946 Shannon NAT-B/C: 2899 5616 8864 13291 17946 Shannon NAT-D: 2971 4675 8891 11279 13291 17946 Shannon VOLMET-EUR: 3413 5640 8957 13264 Ship Working: 152 153 154 155 156 157 158 425 454 468 480 Ship/Government working: 444 Sidney (Qantas): 3007 6637 8921 10078 17922 21970 Silver Dollar: 5703 6953 8964 Simplex: 4136.3 4139.5 4434.9 6210.4 6213.5 6518.6 8281.2 8284.2 12421 12424.5 12428 16565 16568.5 16572 22094.5 22098 22101.5 22105 22108.5 Singapore SEA-1: 3470 6556 10066 11396 13318 17907 Singapore SEA-2: 3485 5649 5655 8942 11396 13309 17907 Singapore SEA-3: 3470 6556 10066 11396 13318 17907 Singapore VOLMET-SEA: 2965 6676 11387 Sondrestrom NAT-D: 2971 4675 8891 11279 13291 17946 South Atlantic: 137.7 434 464 472 488 2039 2043.5 2051 2057 4250 4292 4295 6389.7 6407.5 6411 8453 8486 8525 8686 12660 12952.5 12970.5 13011 16861.7 16918.8 17093.6 17160.8 17170.4 22318.5 22431 22503 South Pacific: 418 464 482 2049.5 2055.5 4238 4283 6355 6463.5 8590 8606 8642 12691 12912 12993 13033.5 16880.9 17064.8 17088.8 22413 22467 Spangle: 8972 Spanish Point: 8972 8997 8997 Special Emergency: 2726 3201 Spittle: 8972 St Louis (simplex): 2086 2782 4367.8 6147.5 8210.8 13158 17283 St Pierre: 8980 St Thomas: 2506 Standard Frequency: 19.9-20.1 59-61 2495-2505 4995-5005 9995-10005 14990-15010 19990-20010 24990-25010 Stevenville: 9006 Stockholm (SAS): 5541 8930 8972 11222 11345 13342 17916 21997 Sydney SEA-3: 3470 6556 10066 11396 13318 17907 Sydney SP-6: 3467 5643 8867 13273 17904 Sydney VOLMET-SEA: 2965 6676 11387 TAH Istanbul: 4252 8662 12732 17022 TBA2/3/4 Ankara: 139 4260 6382 6395 TBO2/3: 6374 TEL5 Las Palmas (F1): 4022.5 TEN2 Las Palmas (F1): 3370 TFA Reykjavik: 6512.5 8690 13069.5 TIM Limon: 8478 13100 25434 TTY/FAX Special Systems: 2071 2076 TUA9 Abidjan: 16947.8 TXZ8 Djibouti: 8682 Tahiti SP-7: 3467 5643 8867 13273 17904 Tampa: 2466 2550 4419 Tashkent VOLMET-NCA: 3461 4663 5676 10090 13279 Tehran MID-1: 2992 5667 8918 13312 Tehran MID-2: 3467 5658 10018 11300 13288 17961 Tehran VOLMET-MID: 2956 5589 8945 Tel Aviv (El Al): 3010 6637 8924 13351 17940 21952 Tel Aviv VOLMET-EUR: 2998 6580 11378 Telco Abidjan: 5775 9854 Telco Addis Ababa: 9080 20053 Telco Amsterdam: 7741 10635.5 18619 Telco Athens: 9290 Telco Berlin DDR: 13355 13375 13440 Telco Brazzaville: 25210 Telco Cairo: 20290 Telco Dakar: 5828 14808 Telco Ft Lauderdale (AT&T): 7575 13376 Telco Georgetown Guyana (C&W): 6855 Telco Gothaab: 11999 14448 14454 17666 17672 18614 18620 18626 Telco Guantanamo Bay Cuba (AAC&R): 13750 Telco Hamilton Barbados (C&W): 10605 11515 Telco Havana: 7936.5 10250 16157 18840 Telco Jeddah: 10455 20235 Telco Kabul: 18640 Telco Kampala: 20020 Telco Karachi: 18468 Telco Mexico City: 7350 Telco Monrovia: 7580 10730 16294 Telco Moscow: 7540 14960 15540 Telco New York (AT&T): 5085 5110 7485 7558.5 7565 7566 7978 9980 10295 10540 10550 10885 11045 13400 14364 14540 14748 15793 15798 16270 18924 19080 19298 19820 20708 20920 23464 Telco Oakland (AT&T): 13370 13390 13428 14365 17640 Telco Paris: 7634.5 8075 9153 10230 10295 11004 13905 16415 18330 18805 20900 25189 Telco Rome: 9375 9850 10135 13372 18624 18631 18632 18637 19330 19435 19520 19592 19678 19933 19934 23821.5 Telco San Juan: 10100 Telco St Georges Bermuda (C&W): 5765 6863 10635 11472 14360 Telco Stockholm: 18175 Telco Teheran: 6825 Telco Tel Aviv: 5399 10488 15710 20827 Telco Tuolon: 15833 Telco Warszawa: 7404 The Dalles-Umatilla (simplex): 2784 Thule AFB: 8967 Tokyo (JAL): 6637 13324 Tokyo CWP-1/2: 2998 4666 6532 6562 8903 11384 13300 17904 Tokyo NP-3: 2932 5628 10048 13294 17904 Tokyo VOLMET-PAC: 2863 6679 8828 13282 Tophand: 11263 Tripoli AFI-3: 3467 5658 10018 11300 13288 17961 UAH/UNS Tallin: 8476 8477 UAT Moskow: 8709 12930 16992.8 16992.8 17066 17241 22423 22512 25860 26129 UAX: 8471 UBF2 Aian Khabarov: 8720 UBN/UDC/UBC Jdanov: 3210 8485 8620 12732 17085 17141.6 22616 25860 UDB/URD Leningrad: 500 4313 6354 8575 13030 UDH/UKB Riga: 4236 4334 6410 8615 8660 12895 13070 16997 17181 17246.5 UDK2 Murmansk: 8580 8698 13040 16003 17020 17170 22615 UFB Odessa: 6483 8685 12950 17040 17055 17370 25596 25900 26055 UFH: 6510 UFN Novosibirsk: 4245 4269 6439 8722 8726 12919 17100 UFR2: 8530 UFW: 8535 17064 UJA: 22512 UJO: 472 4277 8586 12754 UJQ: 6420 8657 13055 17015 26110 26150 UJY Iman: 476 476 3620 6350 6386 8466 8556 8722 12877 12885 17005 22403 UKB: 487 UMN Adler: 17230.5 UMV: 1714 6400.5 8515 8690 12730 12906 13074 16960 17134 17230.5 25460 25545 UNF: 487 UNM: 4332.5 UOP: 8571 12844 17172.4 22600 UPW2: 4310 UQK Riga: 4283 8545 8566 8715 12706 URD Leningrad: 484 3540 4325 6354 8575 8687 12693 13015.5 13030 16956.5 16983.2 17004 17375 22589 23891 25387 25416 25725 26062.5 URL: 6416 17160 22420 USCG: 422 2670 USCG WX: 4428.7 6506.4 6765.4 13113.2 17307.3 USR2: 16990 USZ Dikson: 6365.5 UTA: 8535 UU21/31/41/51: 3970 5075 7660 UXN/UGE Arkhangelsk: 4253 6407.5 6470 8471 8530 8610 8703 12713.5 12732 12795 17098 17210 17220 25570 UYK: 12706 Ulan Bator EA-1: 3016 6571 8897 10042 13297 Ulan Bator EA-2: 3485 5649 5655 8942 11396 13309 17907 Ulan Bator NCA-3: 3004 5664 10039 13303 17958 Upavon RAFB: 3102 4742 6690 9032 11234 11272 13205 Urumchi EA-1: 3016 6571 8897 10042 13297 Urumchi MID-2: 3467 5658 10018 11300 13288 17961 Utah Rig: 8976 VAI Vancouver: 500 4235 6351.5 8722 12876 17175.2 VAR St Johns: 430 500 VCC: 500 VCF: 500 VCK: 500 VCS Halifax: 484 500 4286 6491.5 8709 12874.5 16948.4 22387 VFN: 500 VHP Belconnen: 44 4280 6428.5 8478 8512 12750 12907.5 16918.8 22488 22845 VIP4/3: 8597 12994 16947.5 VIS26/5/6/42 Sydney: 6465 8481 8521 12952.5 17161.4 22473 VIX2/3/4/5/6/7 Sydney: 44 4478 4480 6428.5 8478 12907.5 16918.8 22485 VKS3/5/49/74/93/VKH70: 8060 17390 VNG Melbourne: 4500 7500 12000 VOLMET-Russian: 2869 3116 3407 6617 6638 6693 6730 8819 8888 8939 8990 11279 11319 VPN Nassau: 500 8710 VPS25 CD Aguilar: 6371 8738 VRT Bermuda: 500 4277 6488 8718 12709 16947.5 VTG3/4/5/6/7 Bombay: 8634 12808 VTP3/4/5/6 Vizagotapam: 4245 6420 8476 8642 8644 12840 VWB2/3/4/5/6/7/8/0 Bombay: 8614 Vnukovo VOLMET-NCA: 3461 4663 5676 10090 13279 WAK New Orleans: 2598 4369.8 WAQ Ocean Gate: 2558 WAX Miami: 431 488 500 4294 6389.6 8525 8570 13011 17199.2 22458 WBL Buffalo: 4382.2 4410.1 8796.4 WCC Chatham: 75 125 130.4 134.1 147.5 436 500 2036 4238 4331 6376 8586 8630 12925.5 13033.5 16933.2 16968.8 16973.6 22521 22599 WCM Pittsburgh: 4063 6515.7 8213.6 12333.1 16518.9 WEH Newcastle: 2558 WEO/WER/WES/WEU New York: 14830 15987 WFA Madeira Beach: 2466 WFN Louisville: 4115.7 6518.8 8725.1 13103.9 17291.8 WGB Virginia Beach: 2538 2550 WGK St Louis: 4410.1 6212.4 8737.5 13103.9 17291.8 WHZ Balboa: 8115 WJG Memphis: 4067.8 6209.3 8201.2 12333.1 16518.9 WJO Sullivan I: 2566 WKA23 New Orleans (F1): 4985 WKA36: 6785 WLC Rogers City: 4382.2 4410.1 8796.4 WLO Mobile: 438 500 6446 8722 12704.5 17172.4 WLO Mobile (SSB): 4397.7 4413.2 8790.2 8805.7 8808.8 13134.9 13175.2 13178.3 17251.5 17329 17356.9 22676.6 22689 22707.6 WMH Baltimore: 428 500 4346 6519.5 8686 12952.5 WMI Lorain: 4382.2 4410.1 8796.4 WNJ Jacksonville: 2566 WNU Slidell: 478 500 2048 4310 6495 8570 12826.5 17117.6 22431 WOE Lantana: 472 500 6411 8486 12970.5 17160.8 WOM Ojus: 4363.8 4391.5 4407 4425.6 8722 8731.3 8746.8 8793.3 8811.9 13116.3 13122.5 13125.6 13144.2 13169 17232.9 17257.7 17260.8 17283.9 22639.4 22642.5 22661.1 WOO Ocean Gate: 2572 4385.3 4388.4 4403.9 4422.5 8740.6 8749.9 8762.3 8796.4 13107 13128.7 13131.8 13184.5 13190.7 17245.3 17291.8 17310.4 17325.9 22596 22608.4 22623.9 22704.5 WOU Marshfield: 2450 WOX New York: 2482 2522 2590 WPA Port Arthur: 416 500 4322 6435.5 8550 12840 WPD Tampa: 420 13051.5 WPR Puerto Rico: 486 WSC Tuckerton: 460 500 4331 6502 8610 12948 17242.4 WSL Amagansett: 112.9 418 500 4343 8514 8658 12997.5 13024.5 13078.5 16997.6 17021.6 22485 WWD Point Loma: 17105 WWV Ft Collins: 2500 5000 10000 15000 20000 25000 WWVB Ft Collins: 60 WWVH Kihei Maui: 2500 5000 10000 15000 20000 WWVL Ft Collins: 20 Wafer: 8972 Wake Island CWP-2: 2998 4666 6532 6562 8903 11384 13300 17904 Wellbeing: 6586 Wellington (A3): 13165 Westraden R: 4722 11200 Wilmington-Baltimore: 2558 Woodbridge Rescue: 6716 Woodpecker: 8997 XFL: 4250 XFM: 4355 XFU Vera Cruz: 451 451 500 4250 12772.5 XSG Shanghai: 8502 12868 12870 17002 17107 XSM: 12868 XSQ Canton: 4340 8490 8513 8730 12877 17001.5 17006 17218 XSW Kaohsiung: 8581 8582 XVG4 Vietnam: 8531 XXU23/26/33 Mindelo Cape Verde: 6448 6509 6706 XXV/2/3/28/W31 Luanda: 4343 6487 8642 12704.5 17189.6 YAY4: 13585 YIR Basrah: 12988.5 YNA2 Managua (F1): 4505 7600 YND3 Managua: 3189 YUZ Rijeka: 8700 8712 12781.5 16942.5 YVG La Guaira: 4352 6720 8704 8731 YVR Caracas: 13893 17669 YWU: 3300 4451 Yellocab: 11770 ZBM: 476 500 ZDK: 500 ZLFS Lower Hutt: 2500 ZLO: 4260 8598 12718 17012.5 ZLP Awarua: 8504 12740 22533 ZLP2/4/5/6 Wellington: 4250 8678 12943.5 17127.2 ZLW4/5/6 Wellington: 8722 13056 17170.4 ZLZ/ZLX (A1): 14850 ZLZ22/20/ZLX22/31/37: 5915 7600 11130 14950 ZPJ25: 12718.5 ZRH/2/3/4/5/6 Simonstown: 4246 4247 6494 8583 8604 12741 12947 12962.5 13029 16964 16987 17004 22400 22407 ZRQ/2/3/4/5: 4352 6505.5 8470 8583 12741 12962.5 16964.4 16988 22393 ZRY/2/4/5/6/7: 418 4353 8461 12724 17018 17165 ZSC Presse: 441 4261 6478 8718 12709 ZSC/6/9/21/33 Cape Town: 4317 6379.5 6467 8686 12700 22598 ZSD Durban: 4242 8577 13028 ZSL/2/3/4/5/6/7 Simonstown: 8502 12772.5 22455 ZUD Telco: 22670 25250 25255 25329 ZUO Johannesburg: 5000 icom-20120228/r8500_bc0000644000175000017500000000554110423551041013042 0ustar colincolin# R8500 broadcast bank 3 # Time 3.0 3.33 AM dial 5 name "CHU-2" + 7.335 AM dial 5 name "CHU-7" + 14.64 AM dial 5 name "CHU-14" + 2.5 AM name "WWV-2" + 5 AM dial 5 name "WWV-5" + 10 AM dial 5 name "WWV-10" + 15 AM dial 5 name "WWV-15" + 20 AM dial 5 name "WWV-20" # weather + 162.400 FM dial 25 name "NOAA-WX" # + 162.425 FM dial 25 name "NOAA-WX" # + 162.450 FM dial 25 name "NOAA-WX" # + 162.475 FM dial 25 name "NOAA-WX" # Philadelphia, PA + 162.500 FM dial 25 name "NOAA-WX" # Sudlersville, MD + 162.525 FM dial 25 name "NOAA-WX" # + 162.550 FM dial 25 name "NOAA-WX" # + 162.575 FM dial 25 name "NOAA-WX" # # AM radio + 1150 AM name "WDEL" # Wilmington + 1230 AM dial 10 name "none" # Avondale + 1260 AM dial 10 name "WNRK" # Newark + 1290 AM dial 10 name "WJBR" # Wilmington + 1330 AM dial 10 name "WJSS" # Havre de Grace + 1380 AM dial 10 name "WTMC" # Wilmington + 1450 AM dial 10 name "WILM" # Wilmington + 1510 AM dial 10 name "WFAI" # Salem + 1520 AM dial 10 name "WCHE" # West Chester + 1550 AM dial 10 name "WSER" # Elkton # FM radio 4.0 88.1 WFM dial 100 name "WMHS" # Pike Creek + 88.7 WFM dial 100 name "WLIU" # Lincoln University + 89.1 WFM dial 100 name "WXHL" # Christiana + 89.9 WFM dial 100 name "WOEL" # Elkton + 91.3 WFM dial 100 name "WVUD" # Newark + 91.7 WFM dial 100 name "WCUR" # West Chester + 91.7 WFM dial 100 name "WMPH" # Wilmington + 91.9 WFM dial 100 name "none" # Delaware City + 93.7 WFM dial 100 name "WSTW" # Wilmington + 94.7 WFM dial 100 name "none" # + 97.9 WFM dial 100 name "none" # + 98.1 WFM dial 100 name "none" # + 98.9 WFM dial 100 name "none" # + 99.5 WFM dial 100 name "WJBR" # Wilmington + 101.1 WFM dial 100 name "none" # + 102.9 WFM dial 100 name "none" # + 103.5 WFM dial 100 name "WJYN" # + 103.7 WFM dial 100 name "WXCY" # Havre De Grace + 104.3 WFM dial 100 name "none" # + 104.5 WFM dial 100 name "none" # + 105.3 WFM dial 100 name "none" # + 105.9 WFM dial 100 name "none" # + 945.0 WFM dial 100 name "STL" # # TV + 65.75 WFM dial 100 name "CBS-3" # KYWV Philadelphia + 87.75 WFM dial 100 name "ABC-6" # WPVI Philadelphia + 197.75 WFM dial 100 name "NBC-10" # WCAU Philadelphia + 203.75 WFM dial 100 name "PBS-11" # WNVT Camden + 209.75 WFM dial 100 name "PBS-12" # WHYY Wilmington + 493.75 WFM dial 100 name "WB-17" # WPHL Philadelphia + 523.75 WFM dial 100 name "TV-22" # none + 529.75 WFM dial 100 name "PBS-23" # WNJS Camden + 565.75 WFM dial 100 name "FOX-29" # WTXF Philadelphia + 601.75 WFM dial 100 name "PBS-35" # WYBE Philadelphia + 649.75 WFM dial 100 name "TV-43" # WPMT York + 679.75 WFM dial 100 name "IN-48" # WGTW Burlington + 683.74 WFM dial 100 name "TV-49" # WGCB Red Lion + 697.75 WFM dial 100 name "TV-51" # WTVE Reading + 733.75 WFM dial 100 name "UPN-57" # WPSG Philadelphia + 757.75 WFM dial 100 name "PAX-61" # WPPX Wilmington + 781.75 WFM dial 100 name "TV-65" # WUVP Vineland + 805.75 WFM dial 100 name "IND-69" # icom-20120228/8500.MSC0000755000175000017500000000102010376731213012634 0ustar colincolin# Program Scan # 0.53 AM # P1 AM broadcast 1.70 # P2 10 kHz 88.0 WFM # P1 FM broadcast 108. # P2 200 kHz # 30.0 FM # P1 Public Safety 48.0 # P2 20 kHz # 150.0 FM # P1 Public Safety 156.0 # P2 15 kHz # 156.0 FM # P1 Maritime Mobile 158.0 # P2 25 kHz # 158.0 FM # P1 Public Safety 160.0 # P2 15 kHz # 160.0 FM # P1 Maritime Mobile 162.0 # P2 25 kHz # 162.0 FM # P1 ? 169.0 # P2 15 kHz # 169.0 FM # P1 Public Safety 172.0 # P2 25 kHz # 450. FM # P1 land fixed/mobile 470. # P2 25 kHz icom-20120228/html/0000755000175000017500000000000012417523367012653 5ustar colincolinicom-20120228/html/scripts/0000755000175000017500000000000010420036313014320 5ustar colincolinicom-20120228/html/scripts/footer.txt0000644000175000017500000000066707543464300016405 0ustar colincolindocument.write("Last Modified 9/21/2002
\ \ \ \
gif\ Home Pagegif\ David L. Mills <mills@udel.edu>
")icom-20120228/html/scripts/header.txt0000644000175000017500000000022707540745634016340 0ustar colincolindocument.write("")icom-20120228/html/scripts/style.css0000644000175000017500000000304510420036313016174 0ustar colincolinbody {background: #FDF1E1; color: #006600; font-family: "verdana", sans-serif; text-align: justify; margin-left: 5px;} p, h4, hr, li {margin-top: .6em; margin-bottom: .6em} li.inline {text-align: left; margin-top: 0; margin-bottom: 0} ul, dl, ol, {margin-top: .6em; margin-bottom: .6em; margin-left 5em} dt {margin-top: .6em} dd {margin-bottom: .6em} div.header {text-align: center; font-style: italic;} div.footer {text-align: center; font-size: 60%;} img.cell {align: left;} td.sidebar {width: 40px; align: center; valign: top;} img.sidebar {align: center; margin-top: 5px;} h4.sidebar {align: center;} p.top {background: #FDF1E1; color: #006600; position: absolute; margin-left: -90px; text-align: center;} a:link.sidebar {background: transparent; color: #990033; font-weight: bold;} a:visited.sidebar {background: transparent; color: #990033; font-weight: bold;} a:hover.sidebar {background: #FDF1E1; color: #006600;} img {margin: 5px;} div {text-align: center;} h1 {text-align: center; font-size: 250%;} caption {background: #EEEEEE; color: #339999;} tx {text-align: center;} th {background: #FFFFCC; color: #006600; text-align: center; text-decoration: underline; padding-top: 5px;} th.caption {background: #EEEEEE; color: #006600; text-align: center;}icom-20120228/html/scripts/style.css.10000644000175000017500000000315507543636342016361 0ustar colincolinbody {background: #FDF1E1; color: #006600; font-family: "verdana ref","lucida bright",sans-serif; text-align: justify; margin-left: 5px;} p, h4, hr, li {margin-top: .6em; margin-bottom: .6em} li.inline {margin-top: 0; margin-bottom: 0} ul, dl, ol, {margin-top: .6em; margin-bottom: .6em; margin-left 5em} ul.inline {margin-top: .6em; margin-bottom: .6em; margin-left: 150px} dt {margin-top: .6em} dd {margin-bottom: .6em} div.header {text-align: center; font-style: italic;} div.footer {text-align: center; font-size: 60%;} img.cell {align: left;} td.sidebar {width: 40px; align: center; valign: top;} img.sidebar {align: center; margin-top: 5px;} h4.sidebar {align: center;} p.top {background: #FDF1E1; color: #006600; position: absolute; margin-left: -90px; text-align: center;} a:link.sidebar {background: transparent; color: #990033; font-weight: bold;} a:visited.sidebar {background: transparent; color: #990033; font-weight: bold;} a:hover.sidebar {background: #FDF1E1; color: #006600;} img {border: 0px;} div {text-align: center;} h1 {text-align: center; font-size: 250%;} caption {background: #EEEEEE; color: #339999;} tx {text-align: center;} th {background: #FFFFCC; color: #006600; text-align: center; text-decoration: underline; padding-top: 5px;} th.caption {background: #EEEEEE; color: #006600; text-align: center;}icom-20120228/html/keybrd.html0000744000175000017500000005224210423257713015021 0ustar colincolin Keyboard and Batch Commands

Keyboard and Batch Commands

Following is a list of commands recognized in keyboard and batch modes. Note that the radio command must be given before any command that depends on the radio model. Other than this, there are no restrictions on the order of these commands. Note that several commands shown on the ? help billboard, but not documented here, have not been tested.

A command line consists of a string of keyword/argument subcommands executed in order from left to right. Subcommands take on zero, one or more arguments. If the subcommand is the last one on the command line and with no arguments, the general behavior is to display some program or internal radio value. In general, a question mark ? argument invokes a context-sensitive help menu giving all the valid arguments. If one or two arguments, the general behavior is to set some program or internal radio value. Due to variations in the many ICOM radio models, not all the values work in all radios. In such cases use of an unsupported value results in a "radio doesn't do that" message.

Following are the basic commands to control the radio, select the operating mode and control various basic functions. The command parser is designed for easy access to the most often used functions, such as changing the frequency or mode. When processing the next subcommand in the command line, the parser first looks up the function in the help menu and executes it if found. Next, it determines if the token is a valid frequency and sets the radio frequency if it is. Numbers below 1000 are interpreted in MHz, while those above 1000 are interpreted in kHz. If not a valid frequency, the parser looks up the mode in the help menu and sets it if found. If not found, the parser ignores it and displays an error message.

Program Commands

radio [ name ]
Select and initialize the name radio listed on the help menu and display its capabilities, including the upper and lower band limits, number of memory banks and number of memory channels per bank. This must be the first command in keyboard or batch modes. Upon selection the program inspects the radio to set various default options and reads the first memory channel. Note that some ICOM transceivers support noncontiguous band limits, such as .03-200 MHz and 400-470 MHz for the 7000. The band limits displayed depend on which frequency range is active when the radio is selected. If no radios have been selected and no name is present, scan the CI-V bus for all known radios and select any and all that are present. This is useful when multiple radios are in use and for testing. If a radio has been selected and no name is present, display the capabilities of the current selection.
quit
Exit the program and return control to the shell.
include file
Read commands from file until the end of file. Files can be nested up to 20 levels.
pad
Switch to keypad mode.
trace function
Select the CI-V bus trace function from the list on the help menu. The trace all command displays each CI-V command and response in hex, with prefix T: for packets to the radio and R: for packets from the radio.
dump
Dump the current VFO frequency, mode, duplex and tone settings in hex. Dump related channel data, including the dial step and programmed dial step for the R8500 receiver.
verbose on | off ]
Select the verbose mode from the list on the help menu.

Basic Control Commands

mode [ mode ]
Select one of the mode/filter combinations listed on the help menu. If no argument is given, report the current selection. For most radio models the mode selection includes a filter selection of wide, medium and narrow.
duplex [ offset ]
Set the offset of the transmit duplex offset register. Modern transceivers have duplex offset registers for HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read and write these registers, the frequency must be first set within the correct band.
bank [ bank [ name ] ]
Set the current bank number and optional bank name. If no arguments are present, report the current bank number and name. So far as known, this works only on the R8500.
tx
Place the transceiver in the transmit configuration.
rx
Place the transceiver in the receive configuration.
ptt [ on | off ]
With no argument the status of the transceiver is reported as on if transmitting and off otherwise. With one argument the transmitter is switched on or off.
utc
Set the transceiver year, date and time to the current Universal Coordinated Time (UTC) of the host operating system. The 7000 and 7800 can set the year, date and time. The 756 can set the time, but not the year and date.

Memory Management Commands

The following commands are used to read, write and empty (clear) memory channels and transfer memory contents to and from frequency (text) files. They take the argument range defining a single channel or range of channels that might be in the same or different banks. The channel notation used is represented b.c, where b is the bank number and c the channel number. For radios without banks, including the 706G and 756, the bank number is not used. A range of channels is represented by b1.c1:b2.c2. When spanning different banks, channels wrap from the last channel in one bank to the first channel in the next higher bank and vice versa. In addition, the channels wrap from the last channel in the radio to the first channel and vice versa. Numbering always goes from the first channel to the second channel number in either direction as indicated.

Various defaults apply in order to simplify operation. For instance, a chan, write or empty command with no arguments applies to the last selected bank and channel. When multiple banks are available, a channel number with no bank number applies to the last selected bank. The dollar sign $ replacing a bank or channel number applies to the entire range of banks or channels. For instance, a $:$ represents the entire contents of the memory array.

Additional subcommands can appear on these commands when certain features are selected and available. These include the name, split, tone, tsql, dtcs and, in the R8500, atten, step, pstep and scan. These subcommands are useful when channels are read from the radio, written to a file or read from a file.

save range file
Save the block of memory channels in range to file. Note that empty memory channels are not saved.
restore range file
Restore the block of memory channels in range from file. If range is the single character *, restore the channels using the bank and channel number on each line of the file. Otherwise, renumber the channels as indicated by range.
chan [ range ]
Read the block of memory channels in range.
write [ range ]
Write the block of memory channels in range. Include the frequency, mode and other data available in the radio.
empty [ range ]
Empty (clear) the block of memory channels in range. If range is missing, empty the last channel selected.

Switches, Controls and Meters

These commands are used to inspect and change the various switches, controls and meters available in the radio. As each radio is different, not all commands work with all radios. By convention, a subcommand with no argument displays a menu of all functions that work with the particular radio, while a subcommand with one argument ? displays a help menu of all arguments along with a short description of the function.

set [ switch [ value ] ]
Display or set internal radio switches. A set with one argument switch displays the current value of that switch, but does not change its value. A set with two arguments switch and value sets the designated switch to the given value. Most switches take on names of only off or on, but some like agc and break can take on multiple values.
ctl [ control [ value ] ]
Display or set internal radio controls. A ctl with one argument control displays the current value of that control, but does not change its value. A ctl with two arguments control and value sets the designated control to the given value. Note that those controls involving frequency take signed values over the range -128 to 127 inclusive, while others not involving frequency take values over the range 0 to 255 inclusive.
meter [ meter ]
Display the internal radio meters. A meter with one argument meter displays the current value of that meter. The displayed values for most meters take on values in the range 0 to 255 inclusive. However, the signal (S) meter is calibrated in S units and dB above S9.

VFO and Memory Channel Operation

Modern ICOM transceivers have two VFOs, called VFO A (or main VFO) and VFO B (or sub VFO). VFO A is ordinarily used for transmitting and receiving, but in split mode VFO A is used for receiving and VFO B for transmitting. A vfo swap command interchanges the contents of VFO A and VFO B. On the 706G and 7000 a vfo a command shows VFO A on the main display and VFO B on the sub display. A vfo b command shows VFO B on the main display and VFO A on the sub display. A vfo btoa command copies the contents of VFO B to VFO A. The 706G and 7000 can't do any of the other vfo commands.

On the 756 the main display is at the top in large bright font, while the sub display is at the bottom in small dim font. Ordinarily, updates from the panel controls and this program go to VFO A. A split sub command switches updates to VFO B, while a split main command switches back to the main VFO. A vfo equal command copies the contents of the main VFO to the sub VFO. The vfo watch and vfo nowatch turn the dual-watch function on and off.

ICOM transceivers can be switched to operate in either VFO or MEMO mode. In VFO mode the main display shows the frequency, mode and associated memory channel number. The frequency, mode, filter selection and other data can be changed by front panel controls and this program. The current VFO contents can be saved in a memory channel and recalled later. In VFO mode selecting a memory channel does not automatically transfer the contents to the VFO; however, this program does this with the read and restore commands.

In MEMO mode the memory channels are used directly. A read command automatically transfers the memory channel contents to the main VFO. While the VFO and MEMO modes can be selected by front panel controls, there are no explicit means to do this with the CI-V command set. Ordinarily, and to support memory channel operations like write and empty, MEMO mode is required. However, once one of the VFO subcommands is used, the radio switches to VFO mode. There appears no way with CI-V commands to switch back to MEMO mode.

split offset | subcommand
If offset is present and a valid floating-point number preceded by a "+" or "-", set the transmit frequency offset to the value in kHz and turn the split function on. If no "+" or "-", set the transmit frequency directly in MHz and turn the split function on. If subcommand is present, execute one of the subcommands listed on the help menu.
swap
If VFO A is selected, switch to VFO B. Further frequency and mode settings apply to VFO B. If VFO B is selected, switch to VFO A. Further frequency and mode settings apply to VFO A. This is the same function as the split swap subcommand and is most useful in keypad mode.
vfo subcommand
Execute one of the subcommands listed on the help menu.

Radio Control and Status Commands

Various transceivers and receivers have idiosyncratic means to control the preamps and attentuators. In the R8500 the attentuator and tuning step information are saved along with the frequency and mode in a memory channel. In modern transceivers the preamp and attenuator values selected for each band are saved in nonvolatile registers for each band separately.

These commands are used to set and display various internal functions such as AGC time constant, antenna selection, etc. By convention, a command with no argument displays a menu of all subcommands that work with the particular radio, while a command with one argument ? displays a help menu of all subcommands along with a short description of the function.

agc time_constant
Select one of the AGC time constants listed on the help menu. Some radios do not support this command. For the R8500 use the set agcfast or set agcslow commands. In FM modes all radios use the fast setting and cannot be overridden by command.
ant [ antenna ]
Select one of the antennas listed on the help menu. In some radios like the 756, one of two antennas can be selected for transmitting and receiving and a third for receiving only.
atten [ dB ]
Select one of the attenuator dB listed on the help menu. Not all radios support all dB values shown; the 706G supports only 0 and 20 dB, the 7000 only 0 and 12 dB, the 756nand 775 only 0, 6, 12, and 18 dB and the R8500 0, 10, 20 and 30 dB.
preamp [ function ]
Select one of the preamp functions listed on the help menu. The 706G and 7000 support one preamp, the 756 two preamps and R8500 no preamps.
break [ function ]>
Select one of the break functions listed on the help menu.
key channel [ text ]
Select the CW memory channel channel. If no text argument is present, report the current contents; otherwise replace the contents with the text.
say [ code ]
Select one of the announce functions listed on the help menu. If no argument is given, announce the S-meter reading, frequency and mode.

Tuning Rate and Step Commands

These commands set the radio dial tuning step and the variable tuning steps used in keypad mode. The dial and scan functions are provided by the radio, while the rate and step commands provide software control for the keypad tuning functions.

dial [ code ]
Select one of the main dial tuning step listed on the help menu. If no argument is given, report the current selection. While most radios support only the values listed, the R8500 supports programmed steps between 0.5 kHz and 199.5 kHz in steps of 0.5 kHz.
scan [ code ]
Select the scan mode, where the argument corresponds to a member on the help menu. These have not been tested.
band [ lowfreq ] [ highfreq ]
Set the low and high band edges for step-scanning. If stepped above the high band edge, the frequency is set to the low band edge. If stepped below the low band edge, the frequency is set to the high band edge.
rate [ rate ]
Set the initial tuning rate used in keypad mode by the LEFT and RIGHT keyboard arrow keys.to a value between 0 and 12 corresponding to rates from 1 Hz in increasing 1-2.5-5 multiples to the maximum 5 MHz. Whether or not the argument is present, report the current frequency, mode, rate and step values.
step [ step ]
Set the tuning step used in keypad mode by the UP and DOWN keyboard arrow keys. The step value does not have to conform to the steps available with the dial command and can be any value as long as the resulting frequency is valid for the radio.

Tone Commands

Modern ICOM transceivers include provisions for repeater tone and tone squelch (CTSS), and digital tone squelch (DTCS) functions used to access repeaters. At the moment, the only radio verified to support all three tone functions is the 7000. The 756 supports only the tone and tone squelch functions. The 706G tone functions cannot be programmed via CI-V commands.

The CTSS uses discrete analog frequencies in the range 67.0-254.1 Hz as shown by the tone ? and tsql ? commands. The DTCS uses discrete digital codes 023-754, as shown by the dtcs ? command. The DTCS codes are augmented by -NN, where the first N ndicates normal transmit polarity and the second N indicates normal receive polarity. The N for normal polarity can be replaced by R for reverse polarity.

All three of the following commands work the same way. A command with no arguments reports the tone status (on or off) and tone code. An argument on turns the function on and argument off turns it off. An argument matching one of the help menu selections sets that tone code and turns the function on.

tone on | off | frequency
Turn the repeater tone function on or off or select the frequency from the list on the help menu.
tsql on | off | frequency
Turn the tone squelch function on or off or select the frequency from the list on the help menu.
dtcs on | off | code
Turn the digital tone squelch function on or off or select the code from the list on the help menu.

Frequency Compensation Commands

These commands can provide software compensation for VFO and BFO frequency errors. Older radios generate LO frequencies from a single VFO synthesizer and generate BFO frequencies using a VCXO separately for each mode. Modern radios generate all LO and BFO frequencies from a single VFO synthesizer. The vfocomp command corrects for the VFO frequency error, while the bfocomp command corrects for the BFO frequency error in each mode.

Where all frequencies are synthesized from a common VFO, the calibration procedure is simple using a single WWV/H frequency. With keyboard commands, tune to the highest available WWV/H frequency in USB mode and note the beat note of the 500/600-Hz modulation tone, then switch to LSB mode and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary until the beat notes are the same. Using this technique, it is readily possible to compensate within 0.1 PPM.

When the BFO frequencies are synthesized by a VCXO separately for each mode a different technique is necessary involving two WWV/H frequencies. As before, tune to the highest available frequency in USB mode and note the beat note. Then, retune to the lowest available WWV/H frequency and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary between the highest and lowest frequencies until the beat notes are the same. This completes the VFO compensation.

The BFO compensation must be done for each mode separately, although usually only the USB and LSB modes are required. Using any available WWV/H frequency, note the difference between the 500/600-Hz modulation tones in AM mode and either USB or LSB mode. Adjust the USB and LSB BFO compensation so all three beat notes are the same.

vfocomp [ offset ]
If the argument offset is present, set the VFO frequency correction to the value specified in PPM. If not, display the current frequency and value.
bfocomp [ offset ]
If the argument offset is present, set the BFO frequency correction to the value specified in Hz for the current mode. If not, display the current frequency and value.

icom-20120228/html/option.html0000744000175000017500000000355310423257754015057 0ustar colincolin Command Line Options

Command Line Options


Following is a list of recognized command line options. Note that, in the case of multiple options, the preferred order is -r, -c, -m, -g, -d, -k, -a and -f. The following options are valid at any time.

-d
Enable debug trace as in the trace keyboard command.
-f filename
Read commands from the file filename.
-k
Begin program operation in keypad mode.
-r name
Select the radio with identifier name. See above for a list of radio names and modes currently supported.

The following options are valid only after a radio has been selected

-c channel
Select the memory channel channel and set the radio frequency, mode and offset to its contents.
-d
Display the current radio frequency and mode. This is designed for use in shell scripts to confirm or log the results.
-g frequency
Set the radio frequency to frequency in MHz if less than 1000 and in kHz otherwise.
-m mode
Set the radio mode to mode. See above for a list of mode names valid for various radios. The mode names are specific to each radio type; not all radios support the same modes.

icom-20120228/html/keypad.html0000744000175000017500000001051610423257673015021 0ustar colincolin Keypad Commands

Keypad Commands


Following is a list of commands recognized in keypad mode. There are no restrictions on the order of these commands.

DEL
Erase the current keypad input line as if it had never been entered.
q
Exit keypad mode and return to keyboard mode.
s
Receive on transmit frequency. Used with transmit duplex offset feature. This is the same function as the keyboard swap command.
r
Switch to receive mode as in the rx keyboard command.
t
Switch to transmit mode as in the tx keyboard command.
u
Display the radio time in UTC as in the utc keyboard command.
x
Exchange the contents of VFO A and VFO B as in the swap keyboard command.

Frequency and Mode Settings

The most common operations in keypad mode involve quickly navigating or scanning frequency bands. The easy way to do this is to type the frequency in MHz followed by the Enter key. Each Enter key, by itself or preceeded by a frequency, displays the current channel, frequency and mode. The display is correct whether programmed in this way or set using the radio controls.

Frequency scanning is done using the arrow keys UP, DOWN, LEFT and RIGHT. The UP key increases the frequency by one step, the DOWN key decreases it by one step. The size of the step is determined by the rate, which can be selected from 20 discrete levels, where the rate at each level increases in 1-2.5-5-10-... order from 1 Hz to 5 MHz. The LEFT key decreases the level by one, the RIGHT key increases it by one.

The step and rate values can also be set in keyboard mode, but in keyboard mode the step command can set the step to any value which results in a valid frequency for the selected radio. For instance, the step value can be set to 3 kHz when scanning HF aviation bands or 15 kHz when scanning VHF repeater bands.

Modes are selected by a single letter: l (LSB), u (USB), k (CW), a (AM) and f (FM). These work in the same way as the corresponding keyboard mode commands with the default filter selections.

Memory Commands

In these commands the channel argument format is the same as the keyboard memory channel commands. If the argument is missing, the operation applies to the last selected memory bank and channel.

channelc
Read the memory channel as in the chan keyboard command.
channelw
Write the memory channel as in the write keyboard command.
channele
Empty the memory channel as in the empty keyboard command.

Function Keys

F1
Display the antenna selection as in the ant keyboard command.
F2
Display the AGC time constant as in the agc keyboard command.
F3
Display the attenuator selection as in the agc keyboard command.
F4
Display the preamp selection as in the pamp keyboard command.
F5
Display the break selection as in the break keyboard command.
F6
Say the S meter, frequency and mode as in the say keyboard command. This works in the 7000 only.
F7
Display the current meter readings as in the meter keyboard command.
F8
Display the current switches as in the set keyboard command.
F9
Display the currrent controls as in the ctl keyboard command.

icom-20120228/html/icons/0000755000175000017500000000000007543656467014002 5ustar colincolinicom-20120228/html/icons/home.gif0000644000175000017500000000172706572410600015402 0ustar colincolinGIF89a$÷€€€€€€€€€ÀÀÀÀÜÀ¤ÈðUªÕ+U+€+ª+Õ+ÿ+UUU€UªUÕUÿUU€ª€Õ€ÿ€ªUª€ªªªÕªÿªÕUÕ€ÕªÕÕÕÿÕUÿ€ÿªÿÕÿUUU€UªUÕUÿU+UU+U€+Uª+UÕ+Uÿ+UUUUUU€UUªUUÕUUÿUU€UU€U€€Uª€UÕ€Uÿ€UªUUªU€ªUªªUÕªUÿªUÕUUÕU€ÕUªÕUÕÕUÿÕUÿUUÿU€ÿUªÿUÕÿUÿÿUU€ª€Õ€ÿ€+€U+€€+€ª+€Õ+€ÿ+€U€UU€€U€ªU€ÕU€ÿU€U€€ª€€Õ€€ÿ€€ª€Uª€€ª€ªª€Õª€ÿª€Õ€UÕ€€Õ€ªÕ€ÕÕ€ÿÕ€ÿ€Uÿ€€ÿ€ªÿ€Õÿ€ÿÿ€ªUª€ªªªÕªÿª+ªU+ª€+ªª+ªÕ+ªÿ+ªUªUUª€UªªUªÕUªÿUª€ªU€ª€€ªª€ªÕ€ªÿ€ªªªUªª€ªªªªªÕªªÿªªÕªUÕª€ÕªªÕªÕÕªÿ€ ÿªUÿª€ÿªªÿªÕÿªÿÿªÕUÕ€ÕªÕÕÕÿÕ+ÕU+Õ€+Õª+ÕÕ+Õÿ+ÕUÕUUÕ€UÕªUÕÕUÕÿUÕ€ÕU€Õ€€Õª€ÕÕ€Õÿ€ÕªÕUªÕ€ªÕªªÕÕªÕÿªÕÕÕUÕÕ€ÕÕªÕÕÕÕÕÿÕÕÿÕUÿÕ€ÿÕªÿÕÕÿÕÿÿÕUÿ€ÿªÿÕÿ+ÿU+ÿ€+ÿª+ÿÕ+ÿÿ+ÿUÿUUÿ€UÿªUÿÕUÿÿUÿ€ÿU€ÿ€€ÿª€ÿÕ€ÿÿ€ÿªÿUªÿ€ªÿªªÿÕªÿÿªÿÕÿUÕÿ€ÕÿªÕÿÕÕÿÿÕÿUÿÿ€ÿÿªÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,$´H° Áƒ*\˜ŸÃ‡#Jœø° ʼnþ.J,¨¢¿ Éïc?! †4ÙïdÆŽ;²lé²cA3iÖ¼XðbN;'¤øhЈ‰~\Ê´)Å‚DóIJuêK‰£îÛZuë¾|W#Ô à+Õ}eÁR,¨•ëY®a!ŒZµ®Ú‰éNÕÇ·j܇õJÕ@Ÿ_ŠçÓWøðÄ‚J›JF)± ÉËjÞ̹3Á€;icom-20120228/html/icons/mail2.gif0000644000175000017500000000043706572411016015455 0ustar colincolinGIF89a"ƒ„„ÿÿÿÿÅÞÖsœœsŒ”ÖïÖŒ¤¤)BZ”œ­­¤½µ½ÎÅ!ù,"ÌÈI«½7h{å’ €^&•H–S€¾”°’KÜ0Žsiã8€n·ú¼€A±÷:‘ÉÏø|"«œ…)ÉAQ@¬­ÕÂ/M0{F\…ÍÄs·Ù=ç»Nwn*ep}/l=Sz|rcˆb`c‘pqL¦¦¯-´-­•¶g¶‚®ºƒ£¬³¿¬2o¹Ä·2S¨É["#ш4Ï˪Ôa„¨ÔÙ<ÁÜÀÒeáÅß×ÜÚäå[hìï;icom-20120228/html/icons/radio2.jpg0000644000175000017500000004115606575564310015660 0ustar colincolinÿØÿàJFIFHHÿínPhotoshop 3.08BIMíHH8BIM x8BIMó8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIM ÞpEPZÂÿØÿàJFIFHHÿþ&File written by Adobe Photoshop¨ 5.0ÿîAdobed€ÿÛ„            ÿÀEp"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õE81Žyá “ò ÜàÑ'ÊÚÑoõ]ù*kŽ¢ó‹ö¿A»É.íçwõVOüúé£ëôò «{«tTò70íxcöm~ßä®`ÙÒÆswæåÛê4· ¡ã?Ea.ôv3ó¿Á¡ý—¥g6·çä×OÙ²2ÚÚÞâÝÂÇVéú?÷ä—P{þ¸`Zb¼l·ágþAr=s§õ~§~Krò1Ýk§Òv ï-ÚâÝ¿º“º/ÕÀÐÑÔ¨ ´ú ÿB½«¤éw¤ÐÚë~}ÔÚÄZ –†·óü” 5ú+Ó£ÍQÒ:}`5ÝFÁ½…sGâ䳺gJuZõ–4D@ƵÇüÖ9Î]}¿X:3·2™<ÍÿÉ ³¬tÒé4x"ÆGß¹GîäýÏåö.á‡ïSç¿°p…Ìë5:;\–ëþc—cOÖZªèTô¾‰“[º­±¡÷Uo§µ›Eöµ›}O£üß·þ1m³¬tÂÝ2ª.þMŒ=üœ°~³õJ¬ÍÅ~%¥Îm74šIÝ©g·ôg¹¨Ã$¥*” |”V˜±¶üáúò.¨³3§ØÖ}n‹ðïÐTæaÊÇY³'§a7Ź˜m5Ü] s,ymÐßÒ×’Ú²ªþ¢¡o\Ë}7?!ä…‡¦=±§úV³é*öõÌ£µ§4=Ï2ZÜ )°G.s?ù*[7ý‹tëkÞôŽ zN£-Ñê=»nk¥vßäïnåxÍýLÉae0™"öÚ ™"êØgÝÿ U‹¡ß¢oU?ÿÐõES4†ô¼§2@ôlpƒÇ´Ÿj¶¨aÜçã[KÚA¯Ôk\xsCŸ^ŸÔsv¿ÿ3@¤<[ËÙvʺ~ö5ÕîêN i,}~ßÒ{÷lP£»1­öu›ÞçÜiôpæíº¿Jܪ÷3þg¨³Vé/É©·õ[…ƶ¹˜{?@í£ms~æûôõ>‚6'Öz°¬n;-c赑{ 渒ïmÖ¼¶Ê67ô›Ù¿þ-¥¯¦Ö7Méž­' ½A¶VÙyk(.w {šçåm«wòUH»)ìõz–ÐÒMª kH†9ÖŒw¸ÿ]e·ëdU}eí ´6×2y¶ºl;^æ©[×:vM¯É{é¬Ý[˜XݺXölõ_^ç6Ÿw¾Ý®ý G]Åým£k#-ûœü¬­h|Ù]`†YíkœÀ_³õ“6œzÆPªd],Ä¢Èe{Yô¯¿ÓönþmŸù?ÑRwUÀt´_[wWS%£Z¶‹Lþc_³ôoÿ ©[•Ôú…,£¥9ÊǵÕËžÆKé1Õ¾ïÐý/fç~b@VÀ¥(«µv^5§}Ý?Ú[ëa4ÓkC„;óUÿñW3Þ³~Êq²w?#í kÞHo¦"Æ;Ô—:ªvÛJ8¹œFW–ößÒæ¹Õæ˜?¾ßc¶þ{ÙìCnev>·²ÐàͰêËK¢¸o¨Æ;Ùô¿šõ?Gô­¡»§vs6äŠîŇz~–U¼¤ìOP{Ùþ÷7úOôjWeÐì^£dâ¼M´¹¹Ž°=ßc®ÆoÉÿ„Ýéªç6̶edd¼[cÿWìbC6ë”Ýìý;vþ‡ìß ú·ó—!çuF?¨ã›¯õrž×YV1 k¤dc—zvþçÙômˆŸèv:Sz#íûtWUÔTÚ™H²Û kí³Õ¶±KVæÜælûMÊåŸ_:+r«ÅmYoº×²¶H0a fïQÿGܲsóqòëcØ-®·µ€ƒ«Cêež›Ûô˜öÙ[ýŽT1+®Î§ˆçq¾­~j6-Z?ÿÑõmv}µÄv.ªõN±…׳݄ÖÒ×rÝkëªÐ[U—ú˜”²üž¡}[ý_•ý‘yÞcúÞx`Ì¡™[³Ö±îäðØ·sw­>Žÿ­S¨GO̳ìJÝ[˜n5Šê/oê´—¹•2Æ1¿õ´ØÙñ>¯— E“Qï/Jýo;/§[ê¥Ù$h}jÝ\XÖímÌÇ­Öío¦ïN·ßúÂÁ³­Ôë]˜Õ¾ë6RwûOÑöÛ]ù뾫ëùúÙE…Ïs²Ú×N•6¯sÞý»™ïÙ³ü"&Ö†dÛ—ˆ.nUïmy–ú¬kô¿H÷±Û¶ÿ!8B_»/±o½‹üî?ñ¢ð÷uì{ÙcŽÑai;77hhN¯Í®»>Íoç©»ë&;ƒÿÉØþö†´‚é¯h-õ(÷~Žß¢ÿSþ ¥Øæa}gÉÈÁ£ªÐó{žë±Ãî¦ÏNÖíÙoèëc7»þ[·ë­Ö[[ñŸ}vÙ¹Ïć45¿§³Ô£ô¿¹ý„¸eû¥^î?óÿ/ÿ917î6€6íØ×ÝݯçúCÒ ³¬µõ+­õ¸÷kÁ™çvíÛ÷)w9/ë%ø×]O¾æúvVY‰½Í,o¿Ðg±Û½‹΋ˆl;ús†ë»Ôdå߬V=¾öÿ4ˆ„ÎÑ‘ú(eÇÓ$>’‹“õŠüŠ]E´Vá´¶½Œ‘àïIŒÜ£W^Å©»jÆ{,2 ¡À¸ƒßpw±Žöµk» a—87§YhhiÜËÐtqµß¤ÿEµ¿T=g4WÓ.ci©¯qÜÆÛì÷5Žr>ÜÇèKìAÍ®H}e3/ëK±ê6ä>æ°Ã+-h,ÓéNÅgO©c3(ZYŠÓé¶@/ aÜvÖÆ}s¿9¿Rrl¬XÌ|p× äuñý ßUóº}”n­­78š›MÆÂ\͆6mk=ÛÛô”QÉ È@IBqR©%ÚêÝE·WÔpq¬ª·eWh¤í/q-µ¶ú±·ôõ7³ýÕ.ÖÛo\éÕ¬h³&¶Ë™»úé°ïêã¬ÞrÙu7äãÙ°¾¶hækvÒÆ¶¿s™ìÝWç¬:—YÃëC#$æÕuVº¢Ö±»Øṕþ¾£?œsT’„€Ô§PÂ' R¾ÆöÿÒÖúµõi½4×——]@ZÀa•ŸÜ¥Îúvÿÿþ·é®_ ¹úÉÕ‹AÙ»$´îHÒ]ïþÒï0:“mèõujñì~ê…¢€Ó¼Ÿ‡î/ýâzUYÌ˯–[s®°czž™{^çdµÔ?eÕ6·¹¿g¯í—élTùiÊFf{íÿ ¶óD áè–λy´U[lqÍÊmxͪÆm{›±­ s¬m³ô³ú7ú/Ü[c¨Œ~™öœvϪf¢Ðunö¶w[éû½'})³ÕÿB¹6[››•n?üÚË;·z•5Å®ù·0¹Õ žßÑ­¯›ž0î³#êÆ}!זּÇd<¶­›ZÊ马Û]nÙïÙûÿMMÇãí 8 õû ¥Ñú•yÝW!¯¨‹(5±®²Ákší¯ÞÆ:·z{=&{ŸüøU_«õ×Õ—•K}OM˜åÅÕ¹¬üâ×»ô§Ó©¿¢¯ý«é~Uè™ùõÔr±~¬æ?|µ¶0ˆ Zæ³ucý©Õ:®CúŸ¥wÕüº®·iôÒ/yoéú=»¬ôظ;´+ƒZ×ìzlž£s:7Úë¶àÖ ¯±¥Á¡ÖUì6>ç[¯éÛK…ÇmŒ·ú¬sÙ’ç‚ÊØÙüϤýî¯g³ôþÿô5®«#¨u±?ýWê0€È÷NŒýïrçqz†Eî}”tLǸê:¦™$êÿÑûw%î 4GÚ4íµýRŠœl®§ïc]Yl¿p ôëeÄPÇ»wóÖè¥Ý}\³//3 6¦WkkµáÂÒßÒßÑ×½¾ÿM›*«ùµÇeç^ʇھ¯çm°‘60#lz>ïcœ·iêýn¼j±1¾­õ ñ^Ãg¦Hs¯ªçzŸôê{Ñ9 GÚ£ŒYßìj¯n¦¦3öEk³ö‚KÈö7s}/nôl_¬c®e¶‡àÓ‡özݵÕÝêïu–â°³ak?5¾¢Ñ§ë?Öš(ªŠ~¬åµ• ¼V% q®1Ûýoz¥Õþ³fåÕ•gÕÜh--fæíw¨íYS?œrdc‚$Hp‚?¬£îF¤9­ÈÎËúÏÔñîš2 ØL“[ë(Ùû»^¹OIýG¯¶°ÏSÖÈ’ÃÝ >gù Zø–õ*zõø¹8ÖbåeUuT×aÚâ뇭E§·ÛúþÍìÿH¯t N•…ž:¶tý±ö[öŸnßÑ–1Í·/ªíwè1Ùcm«þ¹_ñ_¤SÊ`ÄX„uÿÓîqý(vÄ ±Ä~nØOú¶çϧ·OSnßfýŸÊú ç–8ØyºÝúgô›fߣ>ÑlîëWúOûu©›é“¦æ?¶ÙwÝ»Ózù%9Üß ­þsÿýcN·ý]¿ï¥ÏÓ3¯‰Ô»UcÛ¿o”Çà¾jIW–Ý7軳ô©ÝoòúHnõgQgÌ»û—ÍÉ&Ï¢ø¿Gdû¼õw÷'=üù‰_8$”w\_¤Lw™üP,ô£¼ë?ëôWΩ)J#õ}×­êÜvafõ"ËMw]é»)´Çë é8ÖìªÛû÷eS³ý×<¦ñK²ÃÆ9`µ¥=ØMy~;=Þ§±Ž²ÿåú^šò´•Ÿòpíý_–ÿéñœYž]üwÿ ô¸ÿÿÙ8BIMÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿþ&File written by Adobe Photoshop¨ 5.0ÿîAdobedÿÛ„         ÿÀl°ÿÝÿÄ¢  s!1AQa"q2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ „”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“ &6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ ?õF*ÓtÈ”¹>ÈÀ„1ÔôðH7 Phwî0ØM4um0 ›”Ûß E¯Òú]+õ¨öë¾6ŠïÒšu+õ˜éãÈckMOO'k˜ÿà†6´ùÛó3ÊdÕ<ѨÝiút·PI34rGĆ × CÒÿ.¼õòméEv¯¤E:Pz¡–xÉnüIŸN>GÒ.üÝcçMRëÌ0Bð#XÁk¬ªy¥$‘ç©Å/)‘66H6óaî<ç ‹T¤I¥Ý ý1„hösš˜ƒI$l9ÅÂ4ØL°Ž Äì^ïm}m}W–®$¶¸E–‚ ¸¨Üm˜öÍ]N]]°¡ÿÐõF*ÓtÈ”¹: yJùëʾ_•†µõ—¸•œ †Yrý­¶jà‰m!,×¼í£yŠÖæ_/‰âŠÚÙÖid‡Ða#ƒ€Ú´ŽO.Ôo5]"ËG’MWR»›TŠI .8q1ÉÀ³V¹9FÎÔˆ‘Ö×Ûë×2H#–çVŒŽ§ë€|?»9T„¿£òÿ6ÒI•Ÿ™- *O6¸ïê-Ül?äÞ5>ø}¿­—‡µðÉÛþ_ê³O¯™¯Õ$aü¤Ðöë’œÀÓDy§-ùc©D‡˜ï˜ø·˜'U.àäˆ@¨#ëðîšõËÐH€×ñÁù²?…Ÿõ¯¡yÉA5e þÓ[‚GÈòÇóµÑ?–zùÏ2³2ù¢hùt_HP¿çÿ£ö±:h÷¯OËÏ<«y®Sãû‘×è8ÿ(æý¬.;ÐÚŸåÿžìôù=OAypx¨ð®]‡V' 8Z§Œ©v‡,÷ú~ž«·éK…¤>”9P±<Ãqÿ…ÌÃA©2“˺¸`¦õºî¯Óî88‚`±¾–R΄±Bcy×âVâFÑøä7ïûøñ7ý’_¬ØÜFÈ×÷Ã-¥-ËM!!w¢ÖõÉÂûØd”ôŠø³_ÊmI®|µ%¬’s}>êH%ÉôÜ ¢ÚEGUá'À~ÇŘݬ3pqJúìrHÿÑõF*¤eV,ƒí)¡õ䨟dax½yäë=CÖ×ãšg,á!Š6‘ «ñqxÊä"OFúAgËwv—ã˶’Zج$ÊÒ+GYˆ;ï#†›× ¾¨.Э|·¨ùG“Q¼µŽ{häN2•õ²øK}ŽÝ2R;µƒIàÒü•?ïžûL7÷†F,Y»¶ÍMò$6O-›P“EòŒ‘¿§ye‘O‚AÃa@x–?¯ Dª¯fUaæ=&9âs,dTz©½>œŒÁ"š¢wdÎz)Oüúæ'å{h˜@Ïæ}2Fj\DNüzöß|•—{`̵»j%ˆí°)Ö¾=0,»Óù€‹‡\±z¹– ¤Ñ¿xœ¶ðäŽ^KãÅÞ`ÓxHµÿ])¿û,ÑOÉ‹»Ì¾b°mú’²¼D ¨#á$N]ƒM8ÌÉ®s³ÂRÒ—M¶”sýOŠh‘È,á¡O‹®l·è×JSj?–0ͨÇ&Õ “¨éñPŠþ×L}]ÈAÛÞy¤¥Î©l I1úìAý‘ÇáýxïÜ‚§© ¬Îm/n.‡)/«%v4`x×$=Èzïäæ¡[Í^Õ¤fÇm{y.š†‰Ú·*®Ûªsuý×/‚?±•dæ l¥£&Ç$ÿÿÒõF*¡s:2ž2¯Øoà}²!R¬°W`Ák¶â´Ã{!à3èvz·Õîu üe¨iÁu«¨'~™i½ &›¥YEy§i…¥ø…¡fõÃ^%¾#ü¸Ý­!4ß.yÆËABú=½ÚÛÎþ••Õ¼ÒN=Jr  éíüØ2a•Ü¢¢Æ3 U%¶¿—~iÔg¹¹–ÑtõåÈDñÈŠy’i ÿ åñ ö² Dè>Q×RV‚M)|^­úLª¡GÙ)ö²#|‰õY@×E{­3S¶¹1…m›#Ô'(ÃÅInžùW†&ÛÁ~£k{`Ò#yzÒO²ÜLÑŠ¨Ø1aÿ]`ðó¤¦`tI.àÉ!+ÉU@_X¡©añþ×ÙÉŒgùÇìk3òTM7RÖî౱Ѣ±r]ÙÑP ¥ZFrÜR?æÿ+ù²PÏ ¯£/É—Ú8X¼ÁªKq|@õ!´^[mÈde"FÍsŒ«Óõ0MRç\Ž+:{qÿºQ(<‰ãêo³—D1Þ·Oü¹%¤i»Ô"ÓaôÀ2OÊŽÛ| @Û÷Èžm‰¥¦­l!½ŠMzÒßê¡Ï[¥%_Ý’Q‡Â¿gâÀ¥6¦eÑËbÈßJ㞟û¿YTšq+éìÃퟋìa´S^qÓ4­>ÒÙ¬5KMBI‹,Éi,r²£r"E!I®U‹?ìC)B‘¿•Ú•§›tË8î­¤’ãNžÞáb»ßÕÕÑd†ìúÞ¥¨¨¨‘¯,99[ö¯[m²¦T´ÈHÉ?ÿÓõFBÝÎ"’ ôwáô‘¶@Ùˆ+XÊ÷"Ÿ†,_>júž£a§Ùêw&Ú f™'xÚ0ÜÖFÙFD!*º^öZUÌ“GYEÃrzñDÌÚ†í ¿Ëú«¬Äí¡­±BÅžBd^4øBó}ذ ÐIu95+[é`M[XˆU’þà=ÛÑøõðÀ”çËšV¯«Û¿§«y…¦—3ëút¡+¼Ž '2@y ¤÷ך•ž©è^†Ú3I‹]3\mPÁCZrû8‘Os#\ÝÙÞk:åÄV±4“ÛÝI¡Z3É‹¯5Z ãÆ‡—§$ªc¿W›Õ±P­=1ëÿt(y`'cºŽiŸ­ç[" ü¾º©Æ4–9e—šÕG¥ûÔŽž•g—ÚÌl$ïrãg*®HÍJÕt ˆï4‹k+K—2G%ìv™½Uûur9~ñY_ý–^æÒeI«æ¿<5´¯½:²©*±Çoá°Äâ 2oÉŽyoWó­ÿšô˜ïu{Éa{È}Di[‰^`@4¦W!³;ÿÔõFI<Õ3C¦‹…ë ±¿ü52©³‡4ÃJ¿¶‚R¾œ¨Íñ©"2œ˜`ù×Ívþ\¹¹¾]zýì,๘‰cEóõXP‚W!ä%æÛËv:G£¢_5í±G•ÕSâjÙgáÉj§qæÕÓ5¥S¨Of"EhÞÕ=F,`/(Ôrþw9 = êšêÜš•ÛÞÌ–Z4ƒá'‘ë¸ Ëýjd€bBçÎqé×ÛM¨M¦ˆSÔ·x#i vcËáF_á@ÏH=êˆÕõË^g¾ <ŠB@ Zn[ŽÇ#kÙ«­oO—QÔ®ÒjÛjQÏ“ño¦ ¥*µ ~ÖC€ð€›Ý×½¤vÊá®`–I%~AeTÙplˆ”I5¾±+>«¥ƒÊ]¥·FÜ#FdZxq‘ÿàpÏeØe®ƒù‚grÚÝGñ7²‡3)—™ýßúª¹g jÚŒ‹Ñý q™“pRX ƒQ•²¤¾Kº…€·6¸”ÙÆ>•ßêñÂÞŸ6„ :Ê^¼4>ŠØË‘­KÔ¯ÃO³þVH%o„ö— Ñê²\±"ÎH#g‰To™•©Í¿ÝÛ7Ã’ O7M&‡•¤Eµ+{ä• ÜòE*Ä¢¿¼ôêü¦7ˆ*+`•ÒŽh¯0êþZ¸Õ4¹´­JþöÞ)Së_/§IÕ=wcñŽ\ÿgìæ>( ÄAœ›&×çY×U C"41kÕŒlGÌ:åðiaÓË_‡¨=rÖ´_”m­ÛÍZY*.ƒ¿mò…1‘·ÿÕõEr Iüǯ£ÝGP¤¥C‚„šøddÊ<ØŽƒç{›.®uOKPÑ”/š,ãk{y_ìŽpÈÍÊŠ>+›bð6JØÓÁüï–ïµ M¥Ž†7Ó= G 21d  ¨? ®F;7Õ†= i^W±Óe†K˜–I ÐH_ÓZ|+SNMÞ´Âd‘?³5ÄåîbO(~×}êßG MfÑm!±K•Õàžî@ŒÖkêS'T PÜ¢êßx“ÂPÚ¯—Âjvö¶º¼71LËyñ*U©Èo_±’á)òõ«_u֢Юn™ÝŸ—.>€@ÊœÛÿWð–¡òê½Äð~œ…#·e r­#½Eåö9qOKì7ö±â S¶Ñd–§mEa6Êߺ3II½-Éä[’ú¿²«‡‰xJQÎòÖøÜ#~ðñpÙø˜/6%¹'q ±$2cçS{f–z¡½[e<šÞÝÀ…Ïùq+î«"Çÿåb$3‘É ªùÎÝ-äýe4óÓá{’¡AÿŒi^_ìŸù †‹‚K¥G­_JÏõ†…ç ,²¼¼X¡j®Ü™¹9+aE;ý1ŒvësÏ@•îÄR¬ {Žø7ZDÜùòÂ==u,YÁ¸,†¢Ÿe|]7ÃEyÚ)"š;Ö½¸¨å —É_r+½>“È|m6M<Ø4kÔ¾“§Ò(¢Ÿ½‘«;ד±ÈVñßÈ?ÎiË·/r`RD'ˆß쇯L¸H5ÒU§ycΚã 3KÒ®oníb¤0¥]UHROû,YZ´ß•_šv“Eþ\ÔD— ±³ÕºÓà,ý–BVž]ó[êï£G§Ý¾¬ŒÈö(ŽÓQV§aŠm{yCÏXšÜhÚ‘žÚž¼BÞrÉÈTrv® ÿDù¤‰8Øß ”ˆ¦<~ÒµÂËÜVФë ™¾°!=%"@žk¦+k>»~¦ž¼€û±À¶ã©ßþô?üÀ¶V6­¨ËCÿÁ -•#¬j®dì²Tñ{=oQr–åœx9¨ür$(’;Uó ²ØF•ŠupZXöb´;`ˆ)%OÊ÷my¯ZA©]2Ø–&à³ðª€M9{°Ë`Ä­ii¥Ù^E6%ºß)-nÇŒò+EPò‡+ÜóJe¦Ë{5åäz•Û6©{ ñ[³8zþå¶UÝ[ƒq''º `wúG›ô¥’V›…¼ŒË"¨Rì(~&Oùx×r-8ü©º×óG[§RŒdj„Ž„zMÑÔ„Á¤Ç›ÿ×âóy³Q!Ò[”ÔñVõ ~‚§õåÊñOrÝ3ÌsÇõ”].;)®ÿ§GÍe@†¥Uˆ?íd„wæÄËnI®”|Ûu©Í>•-ëz‹¹ki$€(¼ÊŸ+’<˜Ä²o¯ù‚ÚÞæiîµJÚT\D·3‹p«ê €9WáÈÑl°‹®¼-a–iu›D¸þín¦ž2àö'— ØH òS¯4x¦¼³’öLä·•£3ËÄàOÁqç¿0Ú‹·“VÖ—ê̪xÌæ¥¶l‹]Ê‘ùë_+nbÕµ¡ãšGB;ÊÝjk滊§˜õh´Ÿ©ßjóiîÂ3f”\*ª‡c¾SîcóZyRëUº·¸Y弈–™Ú:‡*99çö4‹ ,t/,_ÛGs³œ°`è¡… 6ך6î@5‘–šhæEY½ü`Wµv¦?îT“ËÞNúÜv‘Å!šH½u¬bœJÔoµ:÷»”?Âd¶ÒOobgX¸óXÖ­ñ¸h½M]•vÁŵÞ̧ŒƒÃ[©¿î¨iåÛáN¿èÏ•~góâ§O?桟ȷ„Ñ|¿}òú´ŸÓ%ùœÏ‹'óJÝÉô}A5]>âÚGŒHbÖEQÉx?³÷ËãRäl4Èw‹o3»y¿O¾º½2È.FõU#'¹<~±·\$$£3<Çæk «%oCZ\À¶Æ(ÈXÚ«NDW~5Â#ÕIa^TóUþ¬iz„ Ìle4T¯%òOöJHÊæ6LNïÿЂi–ójQÚYÀfžcE‰IÌIžNtbI Ë¼ûùi‰ùms«\+I©$Ð)¼P«¸R+Ý·§,ÇÁœÏ ¡émÍŒFþ¤7ä~­sfú¤QpâÂy('`ß×7ÔÊ¡NUÙøóeÅ·óeÂôëÏ8­ƒ«a2^‰ 4q,Í,–ÅC,‘¡çDVûoðþΪ‘çM1ìŒ@‚ öþ’*5Á¬j—ÓÕXƒH³Iª»•§îµR¸#«”yS,•ŽDÈ™ú¿¤¯az~Ÿ4)h—JI•¡‡,Prû'ùi\2×J]#òAìœwõdÿN£qçØF‘5Ž¿®²H)p2FÑzu.d` àyäø~ÖGó&îƒ/äÈðpqN¯‹êõ¦By?L»Òn.n. Hä¹UtR¢¼ãcÞ¹dõÒ;T~H—eÀ׫&ßÓLîüɧX_Çöp«Ü¼r¸ú»9™9i@>§¦@ Ë u$ŽAìÈÄ‚%“oé)Xy–ßX¿¹a¦!m=‹¬ÒDµE‘Š+v+Ο³æhrŠ%Ù`›ãÉ¿ô•u{ûjêÞÏâ` õÂ" (JžNB­:×%YþlXžÊÏËþó¾¡ç»u¸’ßÕ³qO%"‰Ã;ó ±¬”ýç%ø“öW/üà»áƒäöŽ{y§v·±Íoê,h W’Ð|$užÏB&þžOôÉ,žv¶°ÕD3ÚÇúÓ@e’¬#ªìOÙ|™Õ‚>ˆ5þLƒ|sù½3ÈO¢êZD:³·»y!Hæ¸XØÆŽyH»üG)dg®̃.Ì‘ÿ+—ý3 ™%•ÚYXŠ̲YÆŒ‚†­yÚµðÌÐÕqa—¦1Øý.wfèΠœ™2öšÏåÛËhÛÖ%wØ,hv¯|ãqÉêe0y+XùgPwË]Å °•9bï8Ò¼¯gúqžö˜\j:ŒsE(­pZþªœì{7P!éŒù}O1ÚÚie Ïü-…kÒyO1ZÙ< ac VoN(È"ž®¿i…79´üä+û¸:Èh2D{’_ÖYù•¨Ùâjö¢Æ30x!¼Ô ¥ÉÝs9â Gßø›§¤™Ì'âO†1þïø%ý'ÙAssªC ˜_]ÈXùìµ§|™çÁÿÑŸù3É7–mV©ê]0X½VG>ŸeÉÉåÔË!ܽ$qF‚Wùå-ì–º”\Ö[)¦µ) ‹F…ÖQV‰‡óþÒ¿ûØh5Ä' UˆWW–~P¹š•GTƒð囉]HýOWÔ^ý#ì“ZEé;Kiq G)Æ$[‡1üfF^MŒ›8 _—ºõüúž¥xò~áaú¨†VÙä’æN(±#ZaÍãìÿ>-”@½Η^†‹ÁýYT7S´¨°ŸHÑ×Ñݾ«|Å‘Dmä·¾e×mthQ®âw•€:w£Ö>8‰PݹôÙg'a<ëþL¹2éQV;ƒ 0D÷QI$ÂGXÃ5L”£GÈGÅ?v¼2$îƒy£[¾ÿZµ«Ám‘ªHÞá e‘ÀIÚaÅ=fýï¥ýÎHIx +ɺÅÝǘoÚêæÞåÈKxÑ¡Y™å_Š€äú½ø·îW’ðAù -äÑÂH“I(ŽW¶XÊ,\ÔÆbä| /³ñ`‰b#o!EKß,ÜC6!]…#1!½yÙ±ýè_åáðe†kÀ™è–nº9‰xq’0#ôÄ¿` ñ;ò'í7í}¬¤Ow#ƒf3%½Å—˜£¹¹Ê…å-qoÐR7i6f‰aòþ+1ƒÔÿ+4û»ï4Oo%äú¬Z4·,dôêÒ¥´!mÊ?ëû?±ö[!)/ÖÌ?1’çGò¶«i Ì–Ú”kõiW”RIó#!b8ªýªâ(¼^}[ÏB²6½¨NWöÕÕ[é4Â!àÈ™!†»çÑ ³yƒPŠFuW[{wÃÁÐ1&OGò 쯤é_Yºk»Ø£5äÒ3»—>£ŽLà3 ¹dTÞM­ÚE?Ây^1w<>QöŒŒ¡W‘§Áו2s;0 ƒóÇ÷Z…ä1ݱ†CZ ʆ5§úÃDžlòóI“Sólq! èD÷ O„t¨ürŒÓ2Û†RÿÒëº Ýž¥§A{nUâ™C+;ýƘh½6BÁÿ>µ>/$Üé 9ÞLð9¥(вSîi›-=…œž{Ê,ï­4û»™/ ‚uVrŽÑò^LAeŸùº<}n×üëùtÚ—¯mª#:0q$jô ¹) e&¾3º·–¼Çù[©e¨]kkY3´P€ÌßäkËo‰¾ÖH*<Šksæ¯Ê™4MJ+¿6ÝÞß\‰¼ŽìȈƨ« B+çûXw®L@ߘ¦/§yƒÈŠ&Öhë*9šRõª/+1êá~1=ͼqïz&•ùùk§Ù¥­¾¹l±§rƤÉ;wÉoÜÓ!}Có'›¿/gÔÕíõhÚtšF‘ "5A ñûX8KddÜ£ü§æoËË"×’ëVË771$Js5g¡ý§'s™¾I—™<ïùs©i’C6µi#(-†äKS¥)½r[–^~þ`òL²mJ&•ÙYýJ€¦5â”cཾÎ<%·Š=è¥ó?•SoÒÖ£À <'¹x‡z˽ÈÄÉ­)e EX€d^/¸4©]¹d€,xƒ)ò—ž¿-¼½iõ«-r1z€WR@TRIãðïÈþÖFP=9¨–âë…wù¥ä‹±×ZÕ¼ÎO&ŠRZ”j€ÌkÌž¤ãG4ê2 ’°#ê²¹¿ç"üJaÕlJ€ÑýTª…é×Ô=]Åäáø~h=SþrÉRé×6ðk6²M"4q¹´àhàC ‰êßg%káù¼òßóÉ\O3j‘žp\ â &I¢díÝŸs„I3µó™×m¦æ“.RU~µTpÀŠîÙ+Ú˜ÙdŸ˜ä^]k -×+«{—f¼âv€‹©n1­rRåhè?•_•°y.Í¼×æøjWvÌ4/r¬ˆx“5Æÿu ðÿÁü»Ì\Æ4 ¹öMúxHÊ¢ÿÿÓé—¾U—ËZ:{»Ï)øåjž!e€ÎO.OVôr *ù)y§òÆÏ\¸k…Uj}jËzt`Fês+nG“2 ·‘|•qå©RAÆD´i>£§ÄXBaIY‹îÒ8Ù+ðÇþË.‡hT…Oñ5O Hܱí_þq‹òïW¿šïJ/cëm¦Ò=xn•Ì™qË|RâÍþ&œ"*qÿ>?J6ÏþqÃòÂÒÖ8.tY'’5£ÜJò†sÝUÿÌ)æÎªãðgÅŒòSÔ¿ç¿+î,¥†ÏHkIœQ.‘ævC✮Wù¼·±¶B0ê"‘éßó‹¾Nµ¾ŽkÉ¥¾·Z–µ*Ñ+6äÊܶöÉO]—’D1w}¬„Î<þSðѾ´ÿó^Djòÿ9 {ƒÖÿç<•uv&Ó¦›L„(V¶¦¿›“·-ü0ŽÑÉ{²ð z&š7üã§å…µ’Ci5ýÈ$½ËI,DÔì8#qr']žt‰cV¾ÿœxü¤’ÞHàÓe‚FRa4Ä¡#fš†žønQü_rÇê·ÿœ\òŒwJ×:¥Íźš´B10ðåÈÓîÉÔlÌiãÝö¦'þq£òʵ zG‡®?¦CùK7xeùxw õùÆ?"ÎÈlno,€tn3>5b´ÉG´òŽh:hw&Úwüã¯å•½‡¡yg5åÇÅ[Ó#Æô=(ªÜ~–'_”›µð#ÜÎ=~S,KiNäïiKsFðÇó™Oñ#€èüãïåJš •{™eÿšòšÍüåðáÜòþAþW)øtT§y漉Õfþs!‹óB‹þDþYš2òÿÍx¯/ó‹!ƒóCó§üã›IwÏ”-Hæ`’Ø("§Y9±øbþnG3tš©ÏÒw..§8î6Eù‹Éú‘¨i³j÷62jÚP·:…ãz“ÙÈR%kxå‹«Vž›rû|ÊÌü“1…Æ\\p•Àæ‹Î†¯¨ù²êf»žê×®ÖKtáZ…†Ýþ/IaxF¿µ˜™uÉ@ÿ±rq`œ ‡ÿÔî6ü¶§ã ô3F·/L×¾_.MšŒ4åûÊcÍœ¹uDIè|>¿§_دÚÿcû_vdCŠöæÓîµx¿KSý×ãÿÓÓÿ’¿¼§ú¹´Åù‡ûgã‰Ç—‡üUþoã…¡éÿ¹C×ïèrÉåð?‡‹ú ^«ôqWôw_Tâ~­ê}4ãøæ³7…ünF>;õR¿«Ç÷œ+í”É×F›ÓäkJþL©"Ú^?GÑ’‚•²Ö›VžÜkŒÓ<ž¥6ëÛ¦PÚ)Lýf›pöé\C?JŒŸ]çíþOã‡vC…V.\O©Ê”ÿ'-&2ò_ r§½?Ž[L%j­Ç—Ãôå›1澟÷•øiָǞÜÔòß’n5jñå]ë×ß"k«`¾‰oæ/øüuþô}oúZò¯Ö½*|^Ÿì×þ5û»Óx~îÿÎþs¯—‰ûÎÃü×é_௨§Ô>µús€ý'õÏWCŸ«Ëàû_Üú_><2Œ>/â¯ø¿›Âäfà­¯ø¬É<ÝËô=ÇÕùrÚµëOz÷Ì Program to Control ICOM Receivers and Transceivers

icom - Program to Control ICOM Receivers and Transceivers

jpg

Related Links

Table of Contents


Synopsis

icom [ -r radio ] [ -c channel ] [ -m mode ] [ -g frequency ] [ -f file] [ -dk ]

Description

This program controls ICOM radio transceivers and receivers with the CI-V option. Most recent ICOM radios already have this option; older radios can be converted with an appropriate adapter mounted inside the radio. Up to four CI-V radios can be connected to a single serial port using a level converter such as the CT-17, which includes a MAX232 chip and not much else.

The program is intended to control a radio or transceiver over the Internet, so is specifically designed for keyboard control from another computer via a full-duplex secure connection. No graphics interface is necessary or provided. Internet tools are available to support a two-way audio link.

The program implements a radio interface capable of controlling almost all radio functions, including frequency and mode selection, AGC, antenna, attenuator, break and preamp selection and, in some radios, tone, duplex and split controls. Commands are provided to read, write and empty memory banks and channels, where available. Banks and channels can be assigned attributes such as name, tone and duplex. The program can save and restore channel information to and from files for backup and cloning. Where supported by the radio, the program can set and reset switches such as the noise blanker, read and write controls such as the AF gain and read meters such as the signal (S) meter.

The program operates in one of three modes: keyboard, batch and keypad. In keyboard mode, commands and arguments are entered from the keyboard following the icom> prompt and the complete command set is available. In batch mode, the same commands and arguments are read from a specified file. In keypad mode, commands and arguments are entered from the keyboard and numeric keypad following the > prompt. In this mode, numeric data are entered from the numeric keypad followed by a single alphabetic character representing the command name. Shortcut arrow keys on the keyboard are used to tune up/down or increase/decrease the tuning rate.

Shell command line options can be used to select the radio model and set the frequency and mode. Using batch mode and a suitably crafted Unix crontab file, it is possible to tune a radio to different frequencies used by a shortwave broadcaster throughout the day, for example. With the minimuf program (available in a separate distribution), it is possible to build shell scripts that predict the most likely frequencies and tune the radio accordingly.

The program knows about most early and late model ICOM radios, including the 706, 756 and 7000 transceivers and the R72 and R8500 receivers. Use the radio ? command to see the currently supported list. The program can be told which radio is present or directed to scan for all known radios and report each one found. A number of diagnostic tests are performed on the selected radio to determine which options are present and to initialize to a known state. The program detects certain anomalistic behavior of some radios and adjusts its operations to make the behavior conform to a consistent model.

Basic Operation

Following is an overview demonstrating how this program can be used in typical operating scenarios. The first command is ordinarily radio, which specifies the radio by model number. This initializes the program and radio to a known condition. The program displays the radio attributes and the first memory channel frequency, mode and additional data as available. The frequency and mode and other attributes can be entered and edited using the keyboard; the data are transferred to the radio with an enter keystroke. Alternatively, the radio controls can be used to set frequency and mode, and the data transferred to the program with an enter keystroke. Details on the keyboard and keypad commands are on the Keyboard and Batch Commands and Keypad Commands pages.

Most commands take arguments, although many arguments can be defaulted. A frequency argument less than 1000 specifies the frequency in MHz, while greater than 1000 specifies the frequency in kHz. An offset argument preceded by an explicit + or - character specifies the offset frequency relative to the current VFO frequency in kHz. Signed or unsigned step and rate arguments specify a tuning step in Hz. A bank.channel argument specifies a bank and memory channel available in the particular radio. For most commands a question mark ? argument displays context-sensitive help information for that command. The help information consists of a keyword argument followed by a brief description of the function.

Since the most common function is tuning the radio to different frequencies or scanning a band of frequencies, a compact parsing convention is provided. The parser scans the tokens in each command line in turn. If the current token is the name of a defined command, that command is executed. Otherwise, if the current token is a valid frequency, the radio frequency is set to that value. Otherwise, if the token is a valid mode name, the radio mode is set accordingly. Otherwise, the command is discarded and an error message is displayed. Use the mode ? command to see a list of valid mode names; however, note that not all radios implement all modes.

Tuning Operations

The keyboard mode can be very awkward when searching a band for signals, since a new command must be used every time the frequency is changed. The pad keyboard command puts the program in keypad mode and changes the prompt string to >. In this mode, arguments such as frequency, tuning step, etc., can be entered directly from the keyboard and numeric keypad. Of course, the keypad must be in numlock mode for this to work properly. In keypad mode, the argument is given first followed by a single character which executes the function. A single ? character displays a list of all functions.

Most ICOM receivers tune in 10-Hz steps, while most HF transceivers tune in 1-Hz steps and some VHF/UHF radios tune in 100-Hz steps. The easiest way to tune the radio is using keypad mode and the arrow keys. The UP and DOWN arrow keys adjust the frequency up or down one step, while the LEFT and RIGHT arrow keys decrease and increase the tuning rate (Hz per step) respectively. The rate values begin at the minimum tuning step and extend in 1-2.5-5-10 steps to 5 MHz per step. The arrow and ENTER keystrokes display the frequency and mode after the step. With a little practice, it is easy to scan a band (say with 1-kHz steps in USB) looking for signals and, when one is found, change to 100-Hz steps to move closer and then to 10-Hz steps for the final adjustment.

Transmit/Receive Duplex and Split Operation

Late model ICOM transceivers have provisions for duplex and split operations. Ordinarily, FM repeater operations require that the station receiving on a frequency transmit at a fixed offset relative to that frequency. This operation is automatic with most VHF/UHF transceivers. Keyboard commands are available to specify the duplex offset and sign, although some early VHF/UHF transceivers apparently have no provision to control the sign of the offset with CI-V commands. Modern transceivers include separate duplex offset registers for HF, 6 m, 2 m and 70 cm. Front panel controls and this program can be used to select other than the default duplex offset and set either positive or negative duplex or none (simplex). In most modern transceiver the duplex sign can be saved in a memory channel, but the duplex offset magnitudes apply to all channels.

In split operation VFO A controls the receive frequency and VFO B the transmit frequency. The VFOs can be programmed from the front panel or this program. The split command does this automatically, either as an absolute frequency or a signed offset value added to the receive frequency.

Saving and Restoring Memory Channels

Modern radios can save and recall a huge number of memory channels, 20 banks of 40 channels in the R8500 and 5 banks of 99 channels in the 7000. This program simulates uses the numbering schemes defined by the various radios where bank and channel numbering start at zero or one. The chan, write and empty commands operate on every channel in a selected range. The program displays the frequency, mode and related data provided by the radio. For most radios this includes the memory name, although the maximum supported characters varies. For instance, the 756 memory channels includes the filter, duplex, tone, tone squelch and digital tone squelch data. The R8500 includes the tuning step, programmed tuning step, attenuator and scan data. The save command saves this information for each channel in the selected range to a file, one line per channel. The restore command restores each channel in the selected range from the file.

The file can be constructed by the radio or from scratch and modified as necessary. Each line of the file has the form

b.c frequency mode ...,

where b.c is the bank and channel number, frequency is in MHz and mode a valid mode name. The "..." includes one or more subcommands of the form keyword value, as in an ordinary keyboard command. Use the chan ? command to see the list of valid keywords. Not all radios support the same commands and subcommands, so cloning one radio from another of a different model might require editing the file.

Oscillator Calibration

Modern ICOM radios, synthesize all oscillator signals from a single master oscillator. Once the master oscillator frequency is accurately calibrated, the various LO and BFO signals will be exactly on frequency. Older ICOM radios synthesize the LO signal, but use an independent oscillator for the BFO signal. In these radios, the BFO frequency is shifted using a varactor and a network of diodes and resistors to generate the necessary BFO frequencies. This method is not very accurate when remotely tuning the radio to a narrowband RTTY or packet transmission, for example.

This program has provisions to compensate for the systematic errors in both the synthesized LO signal and varactor-switched BFO signals. This is done by adjusting the VFO frequency to compensate for the LO error and BFO frequency is compensated for each mode separately. Individual BFO errors. The commands to do this along with the calibration procedure are on the Keyboard and Batch Commands page.

Batch mode is designed for cases where a number of radios are to be cloned or programmed with memory channel blocks from another program. In principle, a Unix shell script could search an archive for the current VOA transmission schedules and transmitter locations, another program could determine the propagation model and best frequencies for the receiver location and current time of day, and then program the radio(s) with the results.

When using this program to operate more than one radio, it is useful for the batch file to define the VFO and BFO compensation for each radio. This allows the frequency files to use the assigned frequency of the station. The batch file can then load the frequency files in memory channel blocks as required. This allows channel blocks to be created by other programs and copied from one radio to another.

Interface Debugging

The program communicates with one or more radios using the icom CI-V broadcast bus and serial asynchronous protocol. The CT-17 level converter can be used to interface the CI-V voltage levels (TTL) to EIA (RS-232) levels, or a homebrew unit can be made from the MAX232 IC plus a handful of capacitors. The CT-17 supports up to four radios, but there is no inherent protocol limitation to this number. The CI-V uses active-low drivers with resistor pullups, so multiple radios can be connected to the same wire.

Messages are exchanged in the form of frames beginning with two preamble octets (0xfe) and ending with one postamble octet (0xfd). The message itself contains the source, destination, command and argument octets as necessary. In order to handle the older radios, the control program operates at 9600 bps; however, it can be compiled to operate at other speeds. All radios on the bus need to operate at the same rate. Each radio model is assigned a unique identifier octet, which can be changed if necessary. The control program sends a frame with that identifier and expects a reply, either containing data or a single ACK (0xfb) or NAK (0xfa). Most functions implemented by the control program require an exchange of several frames.

It has been the experience that some radios can occasionally fail to respond to a command or respond with a mangled frame. Therefore, the control program includes a good deal of error recovery code and uses timeouts and retransmissions as necessary. Since the CI-V bus uses a broadcast architecture, every octet transmitted by the control program is read back for verification. If the readback fails or no reply is received after three retransmissions, the operation fails and an error message is displayed.

The trace command can be used to watch the protocol interactions between the program and radios. The argument bus enables packet trace. The trace operates from received octets, either a readback of a transmitted frame preceded by T: or a copy of a received frame preceded by R:. Each transmission is repeated up to three times in case of error, after which the operation fails and is reported as an error. The argument packet enables bus error messages, which are normally suppressed until the maximum retry limit is reached.

The dump command displays the current main VFO contents in hex plus other information as labelled.

History

Written by David L. Mills, W3HCF; this update 24 April 2006, last update 24 September 1996.

Bugs

This is a work in progress. Many idiosyncrasies of various ICOM radios remain to be discovered.


icom-20120228/706g_rpt0000644000175000017500000000407210453570703013177 0ustar colincolin# Newark area repeaters + 53.0500 FM name "Colora" split -1000 # K3UAV r 107.2 + 53.7100 FM name "Quinton" split -1000 # N2KEJ oe 74.4 + 53.8300 FM name "Port Deposit" split -1000 # N3OUT (CA) 94.8 + 53.9500 FM name "Rising Sun" split -1000 # K3DWB (CA) 94.8 + 145.1900 FM name "Chesapeake City" split dup- # K3NCL aez 162.2 + 145.3100 FM name "w3ud" split dup- tsql on # U Delaware ARC + 145.4700 FM name "Charlestown" split dup- # N3RCN o(CA)rz 107.2 + 146.6250 FM name "Pennsville" split dup- # N2KEJ o(CA)er 131.8 + 146.7000 FM name "Newark" split dup- # W3DRA e + 146.7300 FM name "Wilmington" split dup- # W3DRA e + 146.7450 FM name "Colora" split dup- # N3NAB a 156.7 + 146.8500 FM name "Havre de Grace" split dup- # WA3SFJ az 107.2 + 146.9250 FM name "Rising Sun" split dup- # K3DWB a 156.7 + 146.9400 FM name "West Chester" split dup- # W3EOC oaelrsWX 131.8 + 146.9550 FM name "Wilmington" split dup- # WA3UYJ ae + 147.1650 FM name "Colora" split dup+ # K3UAV aer 107.2 + 147.2250 FM name "Wilmington" split dup+ # K3WAJ al + 442.5000 FM name "Pennsville" split dup+ # WB3IKP oers 114.8 + 442.9500 FM name "Charlestown" split dup+ # N3RCN oa 103.5 + 443.0000 FM name "Colora" split dup+ # K3UAV oelr 107.2 + 443.7000 FM name "Wilmington" split dup+ # W3GQP + 444.2500 FM name "Oxford" split dup+ # W3SWR oaeWX 100.0 + 444.7500 FM name "Havre de Grace" split dup+ # N3KZ oalp + 444.9500 FM name "Claymont" split dup+ # KA3JRG a + 446.5250 FM name "West Chester"split dup- # W3EOC oaers 100.0 + 447.3250 FM name "Elkton" split dup- # WA3BXW o(CA)lWX 131.8 + 447.7250 FM name "Elkton" split dup- # N3XJT oar + 448.2750 FM name "Quinton" split dup- # N2KEJ oaesWX 74.4 + 448.3750 FM name "Wilmington" split dup- # W3DRA 131.8 + 448.8250 FM name "Delaware City" split dup- # N3HTT 131.8 + 448.8750 FM name "Oxford" split dup- # W3EOC oaelrsWX 100.0 + 448.9750 FM name "New London" split dup- # KB3DRX o 107.2 + 449.0250 FM name "Newark" split dup- # W3DRA 131.8 + 449.6750 FM name "Cochranville" split dup- # WB3LGG o(CA) RB 94.8 + 449.8250 FM name "Port Deposit" split dup- # WA3SFJ oaz 131.8 icom-20120228/icom.h0000644000175000017500000003422110453510572013001 0ustar colincolin/*********************************************************************** * * * Copyright (c) David L. Mills 1994-2006 * * * * Permission to use, copy, modify, and distribute this software and * * its documentation for any purpose and without fee is hereby * * granted, provided that the above copyright notice appears in all * * copies that both the copyright notice and this permission * * notice appear in supporting documentation, and that the name * * University of Delaware not be used in advertising or publicity * * pertaining to distribution of the software without specific, * * written prior permission. The University of Delaware makes no * * representations about the suitability this software for any * * purpose. It is provided "as is" without express or implied * * warranty. * * * *********************************************************************** */ /* * Program to control ICOM radios * * Common header files */ #include #include #include #include #include /* * Common definitions */ #define TRUE 1 /* veracibty */ #define FALSE 0 /* tenacity */ #define LINMAX 100 /* max display line */ #define BMAX 100 /* max packet buffer size */ #define NAMMAX 40 /* max capability name string size */ #define VALMAX 80 /* max capability value string size */ #define CAPMAX 10 /* max capabilities */ #define FPMAX 20 /* max include file stack index */ #define MODES 9 /* number of modes in ICOM radios */ #define RETRY 3 /* max packet retries */ #define COMPMAX 100e-6 /* max frequency compensation */ #define ESC 0x1b /* ANSI escape character (keypad) */ #define KILL 0x7f /* delete character (keypad) */ /* * Return codes */ #define R_OK 0 /* return success */ #define R_CMD -1 /* unknown command */ #define R_ARG -2 /* unknown command argument */ #define R_FMT -3 /* invalid format */ #define R_BAD -4 /* radio can't do that */ #define R_RAD -5 /* unknown radio */ #define R_IO -7 /* file open error */ #define R_ERR -8 /* radio can't do that */ #define R_NOP -9 /* no op */ #define R_NOR -10 /* no radios found */ #define R_DEF -11 /* radio not defined */ /* * Program flags (pflags) */ #define P_VERB 0x0001 /* verbose switch */ #define P_DSPCH 0x0002 /* display chan */ #define P_DISP 0x0004 /* display freq, mode, split */ #define P_KEYP 0x0008 /* keypad command non-null */ #define P_EXIT 0x0010 /* exit after command line */ #define P_PAD 0x0020 /* keypad mode */ #define P_ESC 0x0040 /* escape sequence in progress */ #define P_TRACE 0x0080 /* trace packets */ #define P_ERMSG 0x0100 /* print bus error messages */ #define P_DSPST 0x0200 /* display step/rate */ /* * CI-V frame codes */ #define PR 0xfe /* preamble */ #define TX 0xe0 /* controller address */ #define FI 0xfd /* end of message */ #define ACK 0xfb /* controller normal reply */ #define NAK 0xfa /* controller error reply */ #define PAD 0xff /* transmit padding */ /* * CI-V controller commands */ #define V_FREQT 0x00 /* freq set (transceive) */ #define V_MODET 0x01 /* set mode (transceive) */ #define V_RBAND 0x02 /* read band edge */ #define V_RFREQ 0x03 /* read frequency */ #define V_RMODE 0x04 /* read mode */ #define V_SFREQ 0x05 /* set frequency */ #define V_SMODE 0x06 /* set mode */ #define V_SVFO 0x07 /* select vfo */ #define V_SMEM 0x08 /* select channel/bank */ #define V_WRITE 0x09 /* write channel */ #define V_VFOM 0x0a /* memory -> vfo */ #define V_EMPTY 0x0b /* empty channel */ #define V_ROFFS 0x0c /* read tx offset */ #define V_SOFFS 0x0d /* write tx offset */ #define V_SCAN 0x0e /* scan control */ #define V_SPLIT 0x0f /* split control */ #define V_DIAL 0x10 /* set dial tuning step */ #define V_ATTEN 0x11 /* set attenuator */ #define V_SANT 0x12 /* select antenna */ #define V_ANNC 0x13 /* announce control */ #define V_WRCTL 0x14 /* read/write controls */ #define V_RMTR 0x15 /* read meters */ #define V_TOGL 0x16 /* read/write switches */ #define V_ASCII 0x17 /* send CW message */ #define V_POWER 0x18 /* power control */ #define V_RDID 0x19 /* read model ID */ #define V_SETW 0x1a /* read/write channel/bank data */ #define V_TONE 0x1b /* set repeater tone frequency */ #define V_TX 0x1c /* set transmit on/off */ #define V_CTRL 0x7f /* miscellaneous control */ /* * Read/write bank/channel data (R8500) subcommands */ #define S_WCHN 0x00 /* write channel data */ #define S_RCHN 0x01 /* read channel data */ #define S_WBNK 0x02 /* write bank data */ #define S_RBNK 0x03 /* read bank data */ /* * Command decode */ #define C_ANT 1 /* select antenna */ #define C_READ 2 /* read channel */ #define C_EMPTY 3 /* empty channel */ #define C_DEBUG 4 /* trace CI-V messages */ #define C_DOWN 5 /* step down */ #define C_DUPLEX 6 /* set transmit duplex */ #define C_ANNC 7 /* announce control */ #define C_ERASE 8 /* erase input */ #define C_KEY 10 /* send CW message */ #define C_KEYBD 11 /* switch to keyboard mode */ #define C_KEYPAD 12 /* switch to keypad mode */ #define C_BCOMP 13 /* set BFO compensation */ #define C_VCOMP 14 /* set VFO compensation */ #define C_QUIT 15 /* exit program */ #define C_RADIO 16 /* select radio */ #define C_RESTORE 17 /* restore channels */ #define C_SAVE 18 /* save channels */ #define C_SPLIT 19 /* toggle split mode with offset */ #define C_STEP 20 /* set tuning step */ #define C_SCAN 21 /* scan control */ #define C_UP 22 /* step up */ #define C_VFO 23 /* vfo commands */ #define C_WRITE 24 /* write channel */ #define C_ATTEN 25 /* select attenuator */ #define C_DIAL 26 /* set dial tuning step */ #define C_MISC 27 /* miscellaneous control */ #define C_METER 28 /* read meters */ #define C_TONE 29 /* set repeater tone frequency */ #define C_RX 30 /* receive */ #define C_FREQ 31 /* set vfo frequency compensation */ #define C_FREQX 32 /* set vfo frequency/mode */ #define C_RATE 33 /* set tuning rate */ #define C_RUP 34 /* rate up */ #define C_RDOWN 35 /* rate down */ #define C_PTT 36 /* push to talk */ #define C_MODE 37 /* set mode */ #define C_VERB 38 /* set verbose */ #define C_BAND 39 /* set band limits */ #define C_BANK 40 /* read/write bank and name */ #define C_POWER 41 /* power on/off */ #define C_TX 42 /* transmit */ #define C_TEST 43 /* send CI-V test message */ #define C_DTCS 44 /* set digital tone squelch code */ #define C_NAME 45 /* set channel name */ #define C_AGC 46 /* AGC fast/medium/slow */ #define C_DUMP 47 /* dump VFO (debug) */ #define C_SWAP 48 /* VFO A <-> VFO B */ #define C_INCLD 49 /* include file */ #define C_PAMP 50 /* preamp off/on */ #define C_DEFLT 51 /* set default string */ #define C_TIME 52 /* set date and time */ #define C_BREAK 55 /* break-in off/semi/full */ #define C_CTRL 56 /* control commands */ #define C_SWTCH 57 /* set/clear switches */ #define C_VFOM 58 /* memory -> vfo */ #define C_TSQL 59 /* set tone squelch frequency */ /* * Read meter format codes */ #define A 0 /* agc fast/mid/slow */ #define B 1 /* break in off/semi/full */ #define F 2 /* frequency -50/50 */ #define G 3 /* gain 0-100 */ #define P 4 /* preamp off/1/2 */ #define Q 5 /* squelch open/close */ #define S 6 /* S meter table */ #define W 7 /* switch on/off */ /* * Radio control flags */ #define F_VFO 0x001 /* radio has mem -> vfo */ #define F_OFFSET 0x002 /* radio has duplex offset */ #define F_RELD 0x004 /* reload after mode change */ #define F_735 0x008 /* 4 octets frequency (IC-735) */ #define F_BANK 0x010 /* radio has memory banks */ #define F_8500 0x020 /* radio is a R8500 or equivalent */ #define F_MODE 0x040 /* mode command has two octets */ #define F_CACHE 0x080 /* frequency/mode cache valid */ #define F_CHAN 0x100 /* radio has 0x1a command */ #define F_756 0x200 /* radio is 7 56 or equivalent */ #define F_7000 0x400 /* radio is a 7000 or equivalent */ /* * Capability structure */ struct cmdtable { char name[NAMMAX]; /* name */ int ident; /* capability key */ char descr[VALMAX]; /* value */ }; /* * Radio name decode structure */ struct namestruct { char name[NAMMAX]; /* radio name */ int ident; /* CI-V bus address */ int baud; /* CI-V bit rate */ int maxch; /* max channel number */ int maxbk; /* max bank number */ struct cmdtable *ctrl; /* control table */ struct cmdtable *modetab; /* mode table */ struct cmdtable *dialtab; /* dial tuning step table */ int flags; /* flag bits */ struct icom *radio; /* radio structure pointer */ }; /* * 776 memory channel format */ struct vfo756 { u_char freq[5]; /* frequency */ u_char mode[2]; /* mode */ u_char mode2; /* duplex/tone select */ u_char tone[3]; /* repeater tone frequency */ u_char tsql[3]; /* tone squelch frequency */ }; /* * 7000 memory channel format */ struct vfo7000 { u_char freq[5]; /* frequency */ u_char mode[2]; /* mode */ u_char mode2; /* duplex/tone select */ u_char tone[3]; /* repeater tone frequency */ u_char tsql[3]; /* tone squelch frequency */ u_char dtcs[3]; /* digital tone squelch code */ }; /* * Aux controls structure */ struct aux { u_char step; /* tune step */ u_char pstep[2]; /* program tune step */ u_char atten; /* attenuator */ u_char scan; /* scan controls */ }; /* * Channel data structure */ struct chan { int bank; /* bank number */ int mchan; /* channel number */ double freq; /* frequency (MHz) */ int mode; /* mode */ double split; /* transmit split */ int step; /* step code */ double pstep; /* toggle step */ struct aux aux; /* aux controls */ struct vfo7000 vfo; /* VFO frequency/mode/tone */ char name[11]; /* channel name */ }; /* * Radio control structure */ struct icom { char name[NAMMAX]; /* radio name */ int ident; /* CI-V bus address */ int baud; /* CI-V bit rate */ int minch; /* min channel */ int maxch; /* max channel */ int topch; /* top channel */ int minbk; /* min bank */ int maxbk; /* max bank */ int topbk; /* top bank */ int flags; /* flag bits */ int rate; /* VFO tuning rate */ int minstep; /* min tuning rate */ double step; /* tuning step */ struct chan chan; /* memory channel */ struct cmdtable *ctrl; /* control table */ struct cmdtable *modetab; /* mode decode table */ struct cmdtable *dialtab; /* dial tuning step table */ struct cmdtable cap[CAPMAX]; /* miscellaneous capabilities */ double uband; /* upper radio band edge (MHz) */ double lband; /* lower radio band edge (MHz) */ double ustep; /* upper step band edge (MHz) */ double lstep; /* lower step band edge (MHz) */ double bfo[MODES]; /* BFO calibration offsets (Hz) */ double freq_comp; /* VFO calibration offset (PPM) */ }; /* * Read band reply message format */ struct readbandmsg { u_char cmd; /* command */ u_char lband[5]; /* lower band edge */ u_char pad; /* unknown function */ u_char uband[5]; /* upper band edge */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write bank data message format */ struct bankmsg { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WBNK, S_RBNK) */ u_char bank; /* bank number */ u_char name[5]; /* name */ u_char fd; /* end delimiter (0xfd) */ }; /* * R8500 read/write channel data message format */ struct chanmsg { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WCHN, S_RCHN) */ u_char bank; /* bank number */ u_char mchan[2]; /* channel number */ u_char freq[5]; /* frequency */ u_char mode[2]; /* mode */ struct aux aux; /* aux controls */ u_char name[8]; /* name */ u_char fd; /* end delimiter (0xfd) */ }; /* * 756 read/write channel data message format */ struct chan756 { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WCHN, S_RCHN) */ u_char mchan[2]; /* channel number */ u_char scan; /* scan select */ struct vfo756 vfo; /* VFO frequency/mode/tone */ u_char name[10]; /* memory name */ u_char fd; /* end delimiter (0xfd) */ }; /* * 7000 read/write channel data message format */ struct chan7000 { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WCHN, S_RCHN) */ u_char bank; /* bank number */ u_char mchan[2]; /* channel number */ u_char scan; /* scan select */ struct vfo7000 vfoa; /* VFO A frequency/mode/tone */ struct vfo7000 vfob; /* VFO B frequency/mode/tone */ u_char name[9]; /* channel name */ u_char fd; /* end delimiter (0xfd) */ }; struct metertab { int smeter; /* S meter reading */ char pip[NAMMAX]; /* meter translation */ }; /* * Exported by icom.c */ extern int flags, pflags, fd_icom; extern double logtab[]; extern char *modetoa(int, struct cmdtable *); extern char *getcap(char *, struct cmdtable *); extern void setcap(char *, struct cmdtable *, char *); /* * Exported by radio.c */ extern int loadfreq(struct icom *, double); extern int loadmode(int, int); extern int loadoffset(int, double); extern int readchan(struct icom *); extern int writechan(struct icom *); extern int sendcw(int, char *); extern int setchan(int, int, int); extern int setbank(int, int); extern int setcmd(int, int, int); extern int setcmda(int, u_char *, u_char *); extern int write_chan(int, struct chan *); extern int empty_chan(int, struct chan *); extern int loadbank(int, int, char *); extern int readbank(int, int, char *); extern struct icom *select_radio(int, int); /* * Exported by packet.c */ extern int retry; extern void initpkt(int); extern int sndpkt(int, u_char *, u_char *); /* * Exported by tables.c */ extern struct namestruct name[]; extern struct cmdtable dbx[], cmd[], identab[], misc[], split[], agc[]; extern struct cmdtable agc1[], nb[], nb1[], atten[], ant[], say[]; extern struct cmdtable meter[], power[], verbx[], key[], vfo[], scan[]; extern struct cmdtable split[], apf[], diala[], dialb[], dialc[]; extern struct cmdtable loadtab[], preamp[], tone[], comp[], vox[]; extern struct cmdtable qsk[], ctlc[], switches[], toneon[]; extern struct cmdtable fmtb[], fmtw[], tx[], tone[], dtcs[], polar[]; extern struct cmdtable argch[], baud[]; extern double logtab[]; extern int sigtab[]; extern struct metertab mtab[]; icom-20120228/8500.POL0000755000175000017500000000460710376731213012662 0ustar colincolin# Police # 37.02 FM # Police 37.04 FM # Police 37.06 FM # Police 37.08 FM # Police 37.10 FM # Police 37.12 FM # Police 37.14 FM # Police 37.16 FM # Police 37.18 FM # Police 37.20 FM # Police 37.22 FM # Police 37.24 FM # Police 37.26 FM # Police 37.28 FM # Police 37.30 FM # Police 37.32 FM # Police 37.34 FM # Police 37.36 FM # Police 37.38 FM # Police 37.40 FM # Police 37.42 FM # Police # 37.10 FM # Local Government 37.18 FM # Local Government 37.26 FM # Local Government # 39.02 FM # Police 39.04 FM # Police 39.06 FM # Police/Local Government 39.08 FM # Police 39.10 FM # Police/Local Government 39.12 FM # Police 39.14 FM # Police 39.16 FM # Police 39.18 FM # Police/Local Government 39.20 FM # Police 39.22 FM # Police # 39.50 FM # Local Government 39.58 FM # Local Government 39.82 FM # Local Government 39.90 FM # Local Government 39.98 FM # Local Government # 45.08 FM # Local Government 45.12 FM # Local Government 45.16 FM # Local Government 45.20 FM # Local Government 45.24 FM # Local Government 45.28 FM # Local Government 45.32 FM # Local Government 45.36 FM # Local Government 45.40 FM # Local Government 45.44 FM # Local Government 45.48 FM # Local Government 45.52 FM # Local Government 45.56 FM # Local Government 45.60 FM # Local Government 45.64 FM # Local Government # 46.52 FM # Local Government 46.54 FM # Local Government 46.56 FM # Local Government 46.58 FM # Local Government # 153.740 FM # Local Government 153.755 FM # Local Government 153.785 FM # Local Government 153.800 FM # Local Government 153.815 FM # Local Government 153.845 FM # Local Government 153.860 FM # Local Government 153.875 FM # Local Government 153.905 FM # Local Government 153.920 FM # Local Government 153.935 FM # Local Government 153.965 FM # Local Government 153.980 FM # Local Government 153.995 FM # Local Government 154.025 FM # Local Government 154.040 FM # Local Government 154.055 FM # Local Government 154.081 FM # Local Government 154.100 FM # Local Government 154.115 FM # Local Government 154.45625 FM # Local Government 154.46375 FM # Local Government 154.47125 FM # Local Government 154.47875 FM # Local Government 154.965 FM # Local Government 154.965 FM # Local Government 154.960 FM # Local Government 155.025 FM # Local Government 155.040 FM # Local Government icom-20120228/r8500_arinc0000644000175000017500000002623510423510541013555 0ustar colincolin# R8500 Aviation Radio (banks 13-19) # Carribean/South America 13.0 2887 USB dial 3 name "CAR A" # CAR-A + 3455 USB dial 3 name "CAR B" # CAR-B + 5520 USB dial 3 name "CAR B" # CAR-B + 5550 USB dial 3 name "CAR A" # CAR-A + 6577 USB dial 3 name "CAR A" # CAR-A + 6586 USB dial 3 name "CAR B" # CAR-B + 8846 USB dial 3 name "CAR B" # CAR-B + 8918 USB dial 3 name "CAR A" # CAR-A + 11330 USB dial 3 name "CAR B" # CAR-B + 11387 USB dial 3 name "CAR B" # CAR-B + 11396 USB dial 3 name "CAR A" # CAR-A + 13297 USB dial 3 name "CAR A" # CAR-A + 17907 USB dial 3 name "CAR A/B" # CAR-A # VOLMET + 3485 USB dial 3 name "VOLM NAT" # VOLMET-NAT + 6604 USB dial 3 name "VOLM NAT" # VOLMET-NAT + 10051 USB dial 3 name "VOLM NAT" # VOLMET-NAT + 13270 USB dial 3 name "VOLM NAT" # VOLMET-NAT + 3413 USB dial 3 name "VOLM EU" # VOLMET-EU + 5505 USB dial 3 name "VOLM EU" # VOLMET-EU + 8957 USB dial 3 name "VOLM EU" # VOLMET-EU + 13264 USB dial 3 name "VOLM EU" # VOLMET-EU + 2863 USB dial 3 name "VOLM PAC" # VOLMET-PAC + 6679 USB dial 3 name "VOLM PAC" # VOLMET-PAC + 8828 USB dial 3 name "VOLM PAC" # VOLMET-PAC + 13282 USB dial 3 name "VOLM PAC" # VOLMET-PAC + 5450 USB dial 3 name "VOLM ME" # VOLMET-ME + 3479 USB dial 3 name "E SAM" # E-SAM + 5526 USB dial 3 name "E SAM" # E-SAM + 8855 USB dial 3 name "E SAM" # E-SAM + 10096 USB dial 3 name "E SAM" # E-SAM + 13297 USB dial 3 name "E SAM" # E-SAM + 17907 USB dial 3 name "E SAM" # E-SAM + 2944 USB dial 3 name "W SAM" # W-SAM + 4669 USB dial 3 name "W SAM" # W-SAM + 6549 USB dial 3 name "W SAM" # W-SAM + 10024 USB dial 3 name "W SAM" # W-SAM + 11360 USB dial 3 name "W SAM" # W-SAM + 17907 USB dial 3 name "W SAM" # W-SAM # North Atlantic # NAT-A Gander, New York, Santa Maria, Shanwick (43N-47N 14.0 3016 USB dial 3 name "NAT A" # NAT-A + 5598 USB dial 3 name "NAT A" # NAT-A + 8906 USB dial 3 name "NAT A" # NAT-A + 13306 USB dial 3 name "NAT A" # NAT-A + 17946 USB dial 3 name "NAT A" # NAT-A # NAT-B Gander, Iceland, Shanwick (47N-64N) + 2899 USB dial 3 name "NAT B" # NAT-B + 5616 USB dial 3 name "NAT B" # NAT-B + 8864 USB dial 3 name "NAT B" # NAT-B + 13291 USB dial 3 name "NAT B" # NAT-B + 17946 USB dial 3 name "NAT B" # NAT-B # NAT-C Gander, Iceland, Shanwick (47N-64N) + 2872 USB dial 3 name "NAT C" # NAT-C + 5649 USB dial 3 name "NAT C" # NAT-C + 8879 USB dial 3 name "NAT C" # NAT-C + 13306 USB dial 3 name "NAT C" # NAT-C + 17946 USB dial 3 name "NAT C" # NAT-C # NAT-D Bodo, Gander, Iceland, Shanwick, Arctic Radio (north of 62N) + 2971 USB dial 3 name "NAT D" # NAT-D + 4675 USB dial 3 name "NAT D" # NAT-D + 8891 USB dial 3 name "NAT D" # NAT-D + 11279 USB dial 3 name "NAT D" # NAT-D + 13291 USB dial 3 name "NAT D" # NAT-D + 17946 USB dial 3 name "NAT D" # NAT-D # NAT-E Canarias, New York, Santa Maria (south of 43N) + 2962 USB dial 3 name "NAT E" # NAT-E + 6628 USB dial 3 name "NAT E" # NAT-E + 8825 USB dial 3 name "NAT E" # NAT-E + 11309 USB dial 3 name "NAT E" # NAT-E + 13354 USB dial 3 name "NAT E" # NAT-E + 17946 USB dial 3 name "NAT D" # NAT-E # NAT-F Gander, Shanwick (Gander-Shanwick express) + 3476 USB dial 3 name "NAT F" # NAT-F + 6622 USB dial 3 name "NAT F" # NAT-F + 8831 USB dial 3 name "NAT F" # NAT-F + 13291 USB dial 3 name "NAT F" # NAT-F + 17946 USB dial 3 name "NAT D" # NAT-F # Pacific 15.0 2869 USB dial 3 name "CEP" # CEP-1/2 + 3413 USB dial 3 name "CEP" # CEP-1/2 + 5547 USB dial 3 name "CEP" # CEP-1/2 + 5574 USB dial 3 name "CEP" # CEP-1/2 + 8843 USB dial 3 name "CEP" # CEP-1/2 + 11282 USB dial 3 name "CEP" # CEP-1/2 + 13261 USB dial 3 name "CEP" # CEP-1/2 + 13354 USB dial 3 name "CEP" # CEP-1/2 + 17904 USB dial 3 name "CEP" # CEP-1/2 + 2998 USB dial 3 name "CWP" # CWP-1/2 + 4666 USB dial 3 name "CWP" # CWP-1/2 + 6532 USB dial 3 name "CWP" # CWP-1/2 + 6562 USB dial 3 name "CWP" # CWP-1/2 + 8903 USB dial 3 name "CWP" # CWP-1/2 + 11384 USB dial 3 name "CWP" # CWP-1/2 + 13300 USB dial 3 name "CWP" # CWP-1/2 + 17904 USB dial 3 name "CWP" # CWP-1/2 + 21985 USB dial 3 name "CWP" # CWP-1/2 + 2932 USB dial 3 name "NP" # NP + 5628 USB dial 3 name "NP" # NP + 5667 USB dial 3 name "NP" # NP + 6665 USB dial 3 name "NP" # NP + 8915 USB dial 3 name "NP" # NP + 10048 USB dial 3 name "NP" # NP + 13294 USB dial 3 name "NP" # NP + 17904 USB dial 3 name "NP" # NP + 17946 USB dial 3 name "NP" # NP + 21925 USB dial 3 name "NP" # NP + 3467 USB dial 3 name "SP" # SP + 5643 USB dial 3 name "SP" # SP + 5667 USB dial 3 name "SP" # SP + 8867 USB dial 3 name "SP" # SP + 13273 USB dial 3 name "SP" # SP + 17904 USB dial 3 name "SP" # SP # Africa/South Atlantic/Mideast/Indean Ocean 16.0 2854 USB dial 3 name "SAT 2" # SAT-2 + 5565 USB dial 3 name "SAT 2" # SAT-2 + 11291 USB dial 3 name "SAT 2" # SAT-2 + 13315 USB dial 3 name "SAT 2" # SAT-2 + 17955 USB dial 3 name "SAT 2" # SAT-2 + 3452 USB dial 3 name "AFI/SAT" # AFI-1/SAT-1 + 6535 USB dial 3 name "AFI/SAT" # AFI-1/SAT-1 + 8861 USB dial 3 name "AFI/SAT" # AFI-1/SAT-1 + 13357 USB dial 3 name "AFI/SAT" # AFI-1/SAT-1 + 17955 USB dial 3 name "AFI/SAT" # AFI-1/SAT-1 + 3419 USB dial 3 name "AFI 2" # AFI-2 + 5652 USB dial 3 name "AFI 2" # AFI-2 + 8894 USB dial 3 name "AFI 2" # AFI-2 + 13273 USB dial 3 name "AFI 2" # AFI-2 + 17961 USB dial 3 name "AFI 2" # AFI-2 + 3467 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 5658 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 10018 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 11300 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 13288 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 17961 USB dial 3 name "AFI/MID" # AFI-3/MID-2 + 2878 USB dial 3 name "AFI 4" # AFI-4 + 5493 USB dial 3 name "AFI 4" # AFI-4 + 8903 USB dial 3 name "AFI 4" # AFI-4 + 13294 USB dial 3 name "AFI 4" # AFI-4 + 17961 USB dial 3 name "AFI 4" # AFI-4 + 3476 USB dial 3 name "AFI/INO" # AFI-5/INO-1 + 5634 USB dial 3 name "AFI/INO" # AFI-5/INO-1 + 8879 USB dial 3 name "AFI/INO" # AFI-5/INO-1 + 13306 USB dial 3 name "AFI/INO" # AFI-5/INO-1 + 17961 USB dial 3 name "AFI/INO" # AFI-5/INO-1 # Europe/West Asia 17.0 3479 USB dial 3 name "EUR A" # EUR-A + 5661 USB dial 3 name "EUR A" # EUR-A + 6598 USB dial 3 name "EUR A" # EUR-A + 10084 USB dial 3 name "EUR A" # EUR-A + 13288 USB dial 3 name "EUR A" # EUR-A + 17961 USB dial 3 name "EUR A" # EUR-A + 2992 USB dial 3 name "MID 1" # MID-1 + 4669 USB dial 3 name "MID 1" # MID-1 + 6631 USB dial 3 name "MID 1" # MID-1 + 8951 USB dial 3 name "MID 1" # MID-1 + 11375 USB dial 3 name "MID 1" # MID-1 + 17961 USB dial 3 name "MID 1" # MID-1 + 2944 USB dial 3 name "MID 3" # MID-3 + 4669 USB dial 3 name "MID 3" # MID-3 + 6631 USB dial 3 name "MID 3" # MID-3 + 8951 USB dial 3 name "MID 3" # MID-3 + 11375 USB dial 3 name "MID 3" # MID-3 + 17961 USB dial 3 name "MID 3" # MID-3 + 3019 USB dial 3 name "NCA 1" # NCA-1 + 5646 USB dial 3 name "NCA 1" # NCA-1 + 13315 USB dial 3 name "NCA 1" # NCA-1 + 17958 USB dial 3 name "NCA 1" # NCA-1 + 2851 USB dial 3 name "NCA 2" # NCA-2 + 4678 USB dial 3 name "NCA 2" # NCA-2 + 6592 USB dial 3 name "NCA 2" # NCA-2 + 10096 USB dial 3 name "NCA 2" # NCA-2 + 17958 USB dial 3 name "NCA 2" # NCA-2 + 3004 USB dial 3 name "NCA 3" # NCA-3 + 5664 USB dial 3 name "NCA 3" # NCA-3 + 10039 USB dial 3 name "NCA 3" # NCA-3 + 13303 USB dial 3 name "NCA 3" # NCA-3 + 17958 USB dial 3 name "NCA 3" # NCA-3 # East/South Asia 18.0 3016 USB dial 3 name "EA 1" # EA-1 + 6571 USB dial 3 name "EA 1" # EA-1 + 8897 USB dial 3 name "EA 1" # EA-1 + 10042 USB dial 3 name "EA 1" # EA-1 + 17958 USB dial 3 name "EA 1" # EA-1 + 3470 USB dial 3 name "SEA 1/3" # SEA-1/3 + 6556 USB dial 3 name "SEA 1/3" # SEA-1/3 + 10066 USB dial 3 name "SEA 1/3" # SEA-1/3 + 11396 USB dial 3 name "SEA 1/3" # SEA-1/3 + 13318 USB dial 3 name "SEA 1/3" # SEA-1/3 + 17907 USB dial 3 name "SEA 1/3" # SEA-1/3 + 3485 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 5649 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 5655 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 8942 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 11396 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 13309 USB dial 3 name "SEA/EA" # SEA-2/EA-2 + 17907 USB dial 3 name "SEA/EA" # SEA-2/EA-2 # Company Radio 19.0 3010 USB dial 3 name "Berne" # Berne + 3013 USB dial 3 name "San Fran" # ARINC San Fransisco, Honolulu + 3482 USB dial 3 name "Portis" # Portishead + 3485 USB dial 3 name "St Johns" # Rainbow St Johns + 3494 USB dial 3 name "New York" # ARINC New York # 4550 USB dial 3 name "Gulf Mex" # ARINC Gulf Mexico + 4654 USB dial 3 name "Berne" # Berne + 4670 USB dial 3 name "Berne" # Berne # 4702 USB dial 3 name "Berne" # Berne # 4807 USB dial 3 name "Portis" # Portishead + 5529 USB dial 3 name "Houston" # Houston + 5604 USB dial 3 name "St Johns" # Rainbow St Johns + 5610 USB dial 3 name "Portis" # Portishead + 6526 USB dial 3 name "New York" # ARINC New York, Berne + 6634 USB dial 3 name "Portis" # Portishead + 6637 USB dial 3 name "Houston" # Houston + 6640 USB dial 3 name "ARINC" # ARINC New York, San Fransisco, Honolulu + 6643 USB dial 3 name "Berne" # Berne # 6705 USB dial 3 name "Berne" # Berne # 6742 USB dial 3 name "Berne" # Berne # 6820 USB dial 3 name "Gulf Mex" # ARINC Gulf Mexico # 8070 USB dial 3 name "Gulf Mex" # ARINC Gulf Mexico # 8170 USB dial 3 name "Portis" # Portishead + 8819 USB dial 3 name "St Johns" # Rainbow St Johns + 8843 USB dial 3 name "San Fran" # ARINC San Fransisco + 8936 USB dial 3 name "Berne" # Berne + 8960 USB dial 3 name "Portis" # Portishead # 9211 USB dial 3 name "Berne" # Berne + 10033 USB dial 3 name "Honolulu" # ARINC Honolulu + 10069 USB dial 3 name "Berne" # Berne + 10075 USB dial 3 name "Houston" # Houston # 10291 USB dial 3 name "Portis" # Portishead + 11306 USB dial 3 name "Portis" # Portishead + 11342 USB dial 3 name "ARINC" # ARINC New York, Honolulu, San Fransisco # 12133 USB dial 3 name "Portis" # Portishead # 13205 USB dial 3 name "Berne" # Berne # 13266 USB dial 3 name "Berne" # Berne + 13285 USB dial 3 name "St Johns" # Rainbow St Johns + 13300 USB dial 3 name "San Fran" # ARINC San Fransisco + 13324 USB dial 3 name "Berne" # Berne + 13330 USB dial 3 name "New York" # ARINC New York, Houston + 13348 USB dial 3 name "San Fran" # ARINC San Fransisco, Honolulu + 13354 USB dial 3 name "ARINC" # ARINC New York, San Fransisco, Honolulu, Gulf Mexico # 13420 USB dial 3 name "St Johns" # Rainbow St Johns # 13865 USB dial 3 name "Portis" # Portishead # 14890 USB dial 3 name "Portis" # Portishead # 15046 USB dial 3 name "Berne" # Berne # 15050 USB dial 3 name "Berne" # Berne # 15835 USB dial 3 name "Berne" # Berne # 17405 USB dial 3 name "Portis" # Portishead + 17910 USB dial 3 name "St Johns" # Rainbow St Johns + 17925 USB dial 3 name "ARINC" # ARINC New York, San Fransisco, Honolulu + 17931 USB dial 3 name "Berne" # Berne + 17940 USB dial 3 name "Houston" # Houston # 18023 USB dial 3 name "Berne" # Berne # 18480 USB dial 3 name "Berne" # Berne # 19510 USB dial 3 name "Portis" # Portishead # 19554 USB dial 3 name "Berne" # Berne # 20035 USB dial 3 name "Berne" # Berne # 20065 USB dial 3 name "Portis" # Portishead # 20870 USB dial 3 name "Berne" # Berne # 21765 USB dial 3 name "Portis" # Portishead + 21933 USB dial 3 name "Berne" # Berne + 21964 USB dial 3 name "ARINC" # ARINC New York, San Fransisco, Honolulu, Houston + 21988 USB dial 3 name "Berne" # Berne # 23285 USB dial 3 name "Berne" # Berne # 25500 USB dial 3 name "Berne" # Berne icom-20120228/7000_rpt0000644000175000017500000000447210416007122013073 0ustar colincolin# Newark area repeaters 2.1 53.0500 FM tone 107.2 name "Colora" split -1000 # K3UAV r 107.2 + 53.7100 FM name "Quinton" split -1000 # N2KEJ oe 74.4 + 53.8300 FM name "Port Deposit" split -1000 # N3OUT (CA) 94.8 + 53.9500 FM name "Rising Sun" split -1000 # K3DWB (CA) 94.8 + 145.1900 FM tone 162.2 name "Chesapeake City" split dup- # K3NCL aez 162.2 + 145.3100 FM tsql 141.3 name "w3ud" split dup- # U Delaware ARC + 145.4700 FM tone 107.2 name "Charlestown" split dup- # N3RCN o(CA)rz 107.2 + 146.6250 FM tone 131.8 name "Pennsville" split dup- # N2KEJ o(CA)er 131.8 + 146.7000 FM name "Newark" split dup- # W3DRA e + 146.7300 FM name "Wilmington" split dup- # W3DRA e + 146.7450 FM tone 156.7 name "Colora" split dup- # N3NAB a 156.7 + 146.8500 FM tone 107.2 name "Havre de Grace" split dup- # WA3SFJ az 107.2 + 146.9250 FM tone 156.7 name "Rising Sun" split dup- # K3DWB a 156.7 + 146.9400 FM tone 131.8 name "West Chester" split dup- # W3EOC oaelrsWX 131.8 + 146.9550 FM name "Wilmington" split dup- # WA3UYJ ae + 147.1650 FM tone 107.2 name "Colora" split dup+ # K3UAV aer 107.2 + 147.2250 FM name "Wilmington" split dup+ # K3WAJ al + 442.5000 FM tone 114.8 name "Pennsville" split dup+ # WB3IKP oers 114.8 + 442.9500 FM tone 103.5 name "Charlestown" split dup+ # N3RCN oa 103.5 + 443.0000 FM tone 107.2 name "Colora" split dup+ # K3UAV oelr 107.2 + 443.7000 FM name "Wilmington" split dup+ # W3GQP + 444.2500 FM tone 100.0 name "Oxford" split dup+ # W3SWR oaeWX 100.0 + 444.7500 FM name "Havre de Grace" split dup+ # N3KZ oalp + 444.9500 FM name "Claymont" split dup+ # KA3JRG a + 446.5250 FM tone 100.0 name "West Chester"split dup- # W3EOC oaers 100.0 + 447.3250 FM tone 131.8 name "Elkton" split dup- # WA3BXW o(CA)lWX 131.8 + 447.7250 FM name "Elkton" split dup- # N3XJT oar + 448.2750 FM tone 74.4 name "Quinton" split dup- # N2KEJ oaesWX 74.4 + 448.3750 FM tone 131.8 name "Wilmington" split dup- # W3DRA 131.8 + 448.8250 FM tone 131.8 name "Delaware City" split dup- # N3HTT 131.8 + 448.8750 FM tone 100.0 name "Oxford" split dup- # W3EOC oaelrsWX 100.0 + 448.9750 FM tone 107.2 name "New London" split dup- # KB3DRX o 107.2 + 449.0250 FM tone 131.8 name "Newark" split dup- # W3DRA 131.8 + 449.6750 FM tone 94.8 name "Cochranville" split dup- # WB3LGG o(CA) RB 94.8 + 449.8250 FM tone 131.8 name "Port Deposit" split dup- # WA3SFJ oaz 131.8 icom-20120228/PK.C0000744000175000017500000002253710453524227012331 0ustar colincolin/* * Program to control ICOM radios * * Input/output interface */ #include "icom.h" #ifndef MSDOS #include #include #include #else /* MSDOS */ #include #endif /* MSDOS */ /* * Parameters */ #ifdef MSDOS #define XFRETRY 3000 /* interface timeout counter (MSDOS) */ /* * Define port and speed */ #define PORT 0x03f8 /* port address (COM1) */ /* #define PORT 0x02f8 /* port address (COM2) */ /* #define PORT 0x03e8 /* port address (COM3) */ /* #define PORT 0x02e8 /* port address (COM4) */ /* #define BAUD 384 /* baud rate 300 */ #define BAUD 96 /* baud rate 1200 */ /* #define BAUD 12 /* baud rate 9600 */ /* * Serial port definitions (8250) */ #define THR 0 /* transmitter holding register */ #define RBR 0 /* receiver buffer register */ #define DLL 0 /* divisor latch LSB */ #define DLM 1 /* divisor latch MSB */ #define LCR 3 /* line control register */ #define LCR_8BITS 3 /* 8 bit words */ #define LCR_DLAB 0x80 /* divisor latch access bit */ #define MCR 4 /* modem control register */ #define MCR_DTR 1 /* data terminal ready */ #define MCR_RTS 2 /* request to send */ #define LSR 5 /* line status register */ #define LSR_DR 0x01 /* data ready */ #define LSR_THRE 0x20 /* trans line holding register empty */ #define LSR_TSRE 0x40 /* transmitter shift register empty */ #endif /* MSDOS */ /* * fsa definitions */ #define S_IDLE 0 /* idle */ #define S_HDR 1 /* header */ #define S_TX 2 /* address */ #define S_DATA 3 /* data */ #define S_ERROR 4 /* error */ /* * Global variables */ int retry; /* max command retries */ /* * Local function prototypes */ static u_char sndoctet(u_char); /* send octet */ static u_char rcvoctet(); /* receive octet */ /* * Local variables */ static int count; /* retry counter */ static int state; /* fsa state */ #ifdef MSDOS static int inp(int); /* input port byte */ static void outp(int, int); /* output port byte */ static void outpw(int, int); /* output port word */ #endif /* MSDOS */ /* * Packet routines * * These routines send a packet and receive the response. Since the CI-V * bus is bidirectional, every octet sent by this program is read back * for check. If an error occurs on transmit (readback compare check), * the packet is resent. If an error occurs on receive (timeout), all * input to the terminating fe is discarded and the packet is resent. If * the maximum number of retries is not exceeded, the program returns * the number of octets in the user buffer; otherwise, it returns zero. * * ICOM frame format * * Frames begin with a two-octet preamble (fe-fe) followed by the radio * address RA, controller address (e0), command CN, subcommand SN * (optional), zero or more data octets DA and terminator fd. If a * subcommand is not used, the data field begins with the SN octet. * * The radio responds to a command frame with a response frame in the * same format, but with the radio and controller addresses * interchanged. If the response contains no data, the CN octet is fb * for success or fa for failure and the following octet fd ends the * frame. If the response format includes a data field, a frame with a * nonempty data field is a success, but an empty data field is a * failure. * * +------+------+------+------+------+------+--//--+------+ * | fe | fe | RA | e0 | CN | SN | DA | fd | * +------+------+------+------+------+------+--//--+------+ */ /* * initpkt() - initialize serial interface * * This routine opens the serial interface for raw transmission; that * is, character-at-a-time, no stripping, checking or monkeying with the * bits. For Unix, an input operation ends either with the receipt of a * character or a 0.5-s timeout. */ void initpkt( int baud /* CI-V bit rate code */ ) /* no return value */ { #ifdef MSDOS outp(PORT+LCR, LCR_DLAB); /* set baud */ outpw(PORT+DLL, BAUD); outp(PORT+LCR, LCR_8BITS); /* set 8 bits, no parity */ outp(PORT+MCR, MCR_DTR+MCR_RTS); /* wake up modem */ #else /* MSDOS */ struct termios ttyb, *ttyp; if (pflags & P_ERMSG) printf("*** baud %d\n", baud); ttyp = &ttyb; if (tcgetattr(fd_icom, ttyp) < 0) { printf("\n*** Unable to get line parameters\n"); exit(1); } ttyp->c_iflag = 0; /* input modes */ ttyp->c_oflag = 0; /* output modes */ ttyp->c_cflag = CS8|CREAD|CLOCAL; /* control modes */ ttyp->c_lflag = 0; /* local modes */ ttyp->c_cc[VMIN] = 0; /* min chars */ ttyp->c_cc[VTIME] = 5; /* receive timeout */ cfsetispeed(ttyp, baud); /* bit rate */ cfsetospeed(ttyp, baud); if (tcsetattr(fd_icom, TCSANOW, ttyp) < 0) { printf("\n*** Unable to set line parameters\n"); exit(1); } #endif /* MSDOS */ retry = RETRY; } /* * sndpkt(r, x, y) - send packet and receive response * * This routine sends a command frame, which consists of all except the * preamble octets fe-fe. It then listens for the response frame and * returns the payload to the caller. The routine checks for correct * response header format; that is, the length of the response vector * returned to the caller must be at least two and the radio and * controller address octets must be interchanged; otherwise, the * operation is retried up to the number of times specified in a global * variable. * * The trace function, which is enabled by the P_TRACE bit of the global * pflags variable, prints all characters received or echoed on the bus * preceded by a T (transmit) or R (receive). The P_ERMSG bit of the * pflags variable enables printing of bus error messages. * * Note that the first octet sent is a pad (ff) in order to allow time * for the radio to flush its receive buffer after sending the previous * response. Even with this precaution, some of the older radios * occasionally fail to receive a command and it has to be sent again. */ int sndpkt( /* returns octet count */ int r, /* radio address */ u_char *x, /* command vector */ u_char *y /* response vector */ ) { int i, j, k; /* temps */ u_char temp; #ifndef MSDOS (void)tcflush(fd_icom, TCIOFLUSH); #endif /* MSDOS */ for (i = 0; i < retry; i++) { state = S_IDLE; /* * Transmit packet. */ if (pflags & P_TRACE) printf("T:"); sndoctet(PAD); /* send header */ sndoctet(PR); sndoctet(PR); sndoctet(r); sndoctet(TX); for (j = 0; j < BMAX; j++) { /* send body */ if (sndoctet(x[j]) == FI) break; } while (rcvoctet() != FI); /* purge echos */ if (x[0] == V_FREQT || x[0] == V_MODET) return (0); /* shortcut for broadcast */ /* * Receive packet. First, delete all characters * preceeding a PR, then discard all PRs. Check that the * RE and TX fields are correctly interchanged, then * copy the remaining data and FI to the user buffer. */ if (pflags & P_TRACE) printf("\nR:"); j = 0; while ((temp = rcvoctet()) != FI) { switch (state) { case S_IDLE: if (temp != PR) continue; state = S_HDR; break; case S_HDR: if (temp == PR) { continue; } else if (temp != TX) { if (pflags & P_ERMSG) printf( "\n*** TX error\n"); state = S_ERROR; } state = S_TX; break; case S_TX: if (temp != r) { if (pflags & P_ERMSG) printf( "\n*** RE error\n"); state = S_ERROR; } state = S_DATA; break; case S_DATA: if (j >= BMAX ) { if (pflags & P_ERMSG) printf( "\n*** buffer overrun\n"); state = S_ERROR; j = 0; } y[j++] = temp; break; case S_ERROR: break; } } if (pflags & P_TRACE) printf("\n"); if (j > 0) { y[j++] = FI; return (j); } } if (pflags & P_ERMSG) printf("*** retries exceeded\n"); return (0); } /* * Interface routines * * These routines read and write octets on the bus. In case of receive * timeout a FI code is returned. In case of output collision (echo * does not match octet sent), the remainder of the collision frame * (including the trailing FI) is discarded. */ #ifdef MSDOS /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x; /* octet */ ) { u_char temp; inp(PORT+RBR); /* flush spikes */ outp(PORT+THR, x); /* write octet */ if (x == (temp = rcvoctet())) return (x); if (pflags & P_ERMSG) printf("\n*** bus error %02x %02x\n", x, temp); while (rcvoctet() != FI); /* discard junk */ return (FI); } /* * Receive octet */ static u_char rcvoctet() /* returns octet, FI if error */ { int i; u_char temp; for (i = 0; i < XFRETRY; i++) /* wait for input */ if ((inp(PORT + LSR)) & LSR_DR != 0) { if (i > count) count = i; temp = inp(PORT+RBR); /* read octet */ return (temp); } return (FI); } #else /* MSDOS */ /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x /* octet */ ) { write(fd_icom, &x, 1); return (x); } /* * rcvoctet () - receive octet */ static u_char rcvoctet() /* returns octet */ { u_char y; if (read(fd_icom, &y, 1) < 1) y = FI; /* come here if timeout */ if (pflags & P_TRACE && y != PAD) printf(" %02x", y); return (y); } #endif /* MSDOS */ /* end program */ icom-20120228/r710000644000175000017500000000066310376731213012241 0ustar colincolinradio r71 5.610000 USB 20.000000 USB 6.643000 USB 2.500000 USB 5.000000 USB 6.643000 USB 15.000000 USB 20.000000 USB 3.330000 USB 7.335000 USB 14.670000 USB 3.016000 USB 2.899000 USB 2.971000 USB 2.962000 USB 5.598000 USB 5.995000 AM 4.675000 USB 5.649000 USB 8.825000 USB 8.864000 USB 8.891000 USB 8.879000 USB 13.291000 USB 3.485000 USB 6.604000 USB 10.051000 USB 9.915000 USB 15.260000 USB 7.325000 USB 10.537000 LSB 12.095000 USB icom-20120228/radio.c0000644000175000017500000005602110453572232013146 0ustar colincolin/* * Program to control ICOM radios * * Subroutine library */ #include "icom.h" #include /* * Local function prototypes */ void dtohex(int, u_char *); void doublefreq(double, u_char *, int); /* double to frequency */ double freqdouble(u_char *, int); /* frequency to double */ static int read_r8500(int, struct chan *); static int write_r8500(int, struct chan *); static int read_756(int, struct chan *); static int write_756(int, struct chan *); static int read_7000(int, struct chan *); static int write_7000(int, struct chan *); int emptyvfo(struct chan *); /* * select_radio(ident, baud) - select/initalize radio structure */ struct icom * select_radio( /* returns icom pointer or NULL */ int ident, /* radio ID */ int baud /* CI-V bit rate */ ) { struct icom *rp; struct chan *cp; struct readbandmsg rspband; u_char rspfreq1[BMAX]; u_char rspfreq2[BMAX]; double dtemp; char s1[LINMAX]; int i, j, temp1, temp2; u_char cmdband[] = {V_RBAND, FI}; u_char cmdbank[] = {V_SETW, S_RBNK, 0, 1, 1, FI}; u_char cmdrbnk[] = {V_SMEM, 0xa0, 0, FI}; u_char cmdsmem[] = {V_SMEM, 0, FI}; u_char cmdrfreq[] = {V_RFREQ, FI}; u_char cmdrmode[] = {V_RMODE, FI}; u_char cmdroffs[] = {V_ROFFS, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; u_char rspfreq[BMAX]; /* saved frequency */ u_char rspmode[BMAX]; /* saved mode */ /* * Find prototype. Bad tables if not found. */ for (i = 0; name[i].ident != 0x0; i++) { if (name[i].ident == ident) break; } if (name[i].ident == 0x0) return (NULL); /* * If radio is already enabled, just restore pointers and read * the current channel. */ rp = name[i].radio; if (rp != NULL) { cp = &rp->chan; flags = rp->flags; initpkt(rp->baud); readchan(rp); return (rp); } /* * Read band limits. Every radio and transceiver supports this * command, so we use it to see if the radio is lit. If the * radio set mode for CI-V baud is AUTO, the radio bit rate is * set by the first command received and cannot be changed after * that. Older radioS support 1200 bps by default, sometimes * other rates by clipping diodes. */ if (baud != 0) temp1 = baud; else temp1 = name[i].baud; initpkt(temp1); retry = 1; if (setcmda(ident, cmdband, (u_char *)&rspband) == R_ERR) { retry = RETRY; return (NULL); } retry = RETRY; /* * Allocate control block and initialize bits and pieces. */ rp = malloc(sizeof(struct icom)); name[i].radio = rp; memset(rp, 0, sizeof(struct icom)); strcpy(rp->name, name[i].name); rp->ident = ident; rp->baud = temp1; rp->maxch = name[i].maxch; rp->maxbk = name[i].maxbk; rp->ctrl = name[i].ctrl; rp->flags = name[i].flags; rp->modetab = name[i].modetab; rp->dialtab = name[i].dialtab; rp->lband = freqdouble(rspband.lband, 5) / 1e6; rp->uband = freqdouble(rspband.uband, 5) / 1e6; if (rp->lband > rp->uband) { dtemp = rp->lband; rp->lband = rp->uband; rp->uband = dtemp; } rp->lstep = rp->lband; rp->ustep = rp->uband; /* * Save the frequency and mode. On the way, figure out whether * the mode is one octet or two. */ setcmda(ident, cmdrfreq, rspfreq); temp1 = setcmda(ident, cmdrmode, rspmode); if (temp1 > 3) rp->flags |= F_MODE; /* * If a read channel zero fails, the channel range starts at * one. */ if (setcmda(ident, cmdsmem, rsp) == R_ERR) rp->minch = 1; /* * If the radio supports multiple memory banks and a read bank * zero fails, the bank range starts at one. */ if (rp->maxbk > 0) { rp->flags |= F_BANK; if (setcmda(ident, cmdrbnk, rsp) == R_ERR) rp->minbk = 1; } /* * If the read offset command works, the radio supports duplex. */ if (setcmda(ident, cmdroffs, rsp) != R_ERR) rp->flags |= F_OFFSET; /* * If the memory -> vfo command works, we have to use it in VFO * mode every time the channel is changed. */ if (setcmda(ident, cmdvfom, rsp) != R_ERR) rp->flags |= F_VFO; /* * Determine whether the frequency needs to be reset after a * mode change. We first write the channel with mode USB, then * read the frequency back and remember it. Then we write the * channel with mode LSB, read back the frequency and see if it * changed. If so, we have to write the frequency every time the * mode is changed. What a drag. */ temp1 = capkey("lsb", rp->modetab); temp2 = capkey("usb", rp->modetab); if (temp1 != R_ERR && temp2 != R_ERR) { loadmode(ident, temp2); setcmda(ident, cmdrfreq, rspfreq1); loadmode(ident, temp1); setcmda(ident, cmdrfreq, rspfreq2); if (memcmp(&rspfreq1[1], &rspfreq2[1], 5) != 0) rp->flags |= F_RELD; } rp->chan.bank = rp->minbk; rp->chan.mchan = rp->minch; /* * Determine the frequency resolution. This depends on the radio * and TS button. We first write the frequency and mode near the * lower band edge. The value is chosen with '1' in each * significant digit ending in the units digit. Then, we read * the frequency back and determine the resolution corresponding * to the first nonzero significant digit. */ loadfreq(rp, rp->lband + 11111e-6); setcmda(ident, cmdrfreq, rspfreq1); rp->minstep = 6; if (rspfreq1[1] & 0x0f) rp->minstep = 0; else if (rspfreq1[1] & 0xf0) rp->minstep = 3; else if (rspfreq1[2] & 0x0f) rp->minstep = 6; else if (rspfreq1[2] & 0xf0) printf("*** tuning step error\n"); rp->rate = rp->minstep; rp->step = logtab[rp->rate]; /* * Restore the original frequency and mode. This is silly, as * the following code reads the base channel. However, some * radios are picky and maybe the read channel fails. Do the * frequency restore last, since some old radios don't * automatically shift the LO. */ rspmode[0] = V_SMODE; setcmda(ident, rspmode, rsp); rspfreq[0] = V_SFREQ; setcmda(ident, rspfreq, rsp); /* * Read the base channel. If error, give up now and return the * marbles. */ flags = rp->flags; cp = &rp->chan; cp->bank = rp->minbk; cp->mchan = rp->minch; temp1 = readchan(rp); if (temp1 < 0) { free(rp); return(NULL); } return (rp); } /* * setchan(ident, bank, chan) - select bank and channel */ int setchan( /* returns 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ int mchan /* channel number */ ) { char s1[LINMAX]; u_char cmd[] = {V_SMEM, 0, 0, FI}; u_char rsp[BMAX]; int temp; /* * Radios with memory banks require two commands, one to * set the bank, another to set the channel. Bank numbers 0-99 * are encoded in one octet. */ if (flags & F_BANK) { sprintf(s1, "%02d", bank); cmd[1] = 0xa0; cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid bank %d\n", bank); return (R_ERR); } } /* * Channel numbers 0-99 are encoded in one octet. Channel * numbers 100-9999 are encoded in two octets. */ sprintf(s1, "%04d", mchan); if (mchan < 100) { cmd[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); cmd[2] = FI; } else { cmd[1] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); cmd[2] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid channel %d\n", mchan); return (R_ERR); } return (R_OK); } /* * readchan(radio) - read channel frequency and mode */ int readchan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; int rval; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; /* * For radios with a 0x1a command, read the model-specific * data message and extract the frequency, mode and ancillary * data. */ cp = &rp->chan; rval = R_OK; if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); if (flags & F_7000) rval = read_7000(rp->ident, cp); if (flags & F_756) rval = read_756(rp->ident, cp); if (flags & F_8500) rval = read_r8500(rp->ident, cp); if (rval < 0) return (rval); /* * For radios without a 0x1a command, read the frequency and * mode directly later. */ if (flags & F_VFO) setcmda(rp->ident, cmdvfom, rsp); if (flags & (F_7000 | F_756 | F_8500)) return (rval); return (readvfo(rp)); } /* * writechan(radio) - write channel frequency and mode */ int writechan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdwrite[] = {V_WRITE, FI}; u_char rsp[BMAX]; int temp; /* * For radios with a 0x1a command, construct the model-specific * data message and write the frequency, mode and ancillary * data. First, read the current frequency and mode, which might * have been changed recently without telling this program. */ cp = &rp->chan; readvfo(rp); if (flags & F_7000) return (write_7000(rp->ident, cp)); if (flags & F_756) return (write_756(rp->ident, cp)); if (flags & F_8500) return (write_r8500(rp->ident, cp)); /* * For older radios, write the frequency and mode directly. */ if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); return (setcmda(rp->ident, cmdwrite, rsp)); } /* * emptychan(ident, chan) - empty channel */ int emptychan( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { u_char cmdempty[] = {V_EMPTY, FI}; u_char rsp[BMAX]; /* * Set bank and channel as necessary. */ if (setchan(ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); return (setcmda(ident, cmdempty, rsp)); } /* * readvfo(radio) - read current frequency and mode */ int readvfo( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdfreq[] = {V_RFREQ, FI}; u_char cmdmode[] = {V_RMODE, FI}; u_char rsp[BMAX]; double dtemp; int rval; /* * If the cache is valid, don't diddle the radio. */ if (flags & F_CACHE) return(R_OK); /* * Update VFO frequency and mode. */ cp = &rp->chan; rval = setcmda(rp->ident, cmdfreq, rsp); if (rval < 0) return (rval); if (rval == 6 && (flags & F_735)) memcpy(&cp->vfo.freq[1], &rsp[1], 4); else if (rval == 7) memcpy(cp->vfo.freq, &rsp[1], 5); rval = setcmda(rp->ident, cmdmode, rsp); if (rval < 0) return (rval); memcpy(cp->vfo.mode, &rsp[1], rval - 2); /* * Update channel frequency and mode. */ dtemp = freqdouble(cp->vfo.freq, 5); cp->freq = (dtemp * (1 - rp->freq_comp / 1e6) - rp->bfo[cp->mode & 0x0f]) / 1e6; cp->mode = cp->vfo.mode[0]; if (rval > 3) cp->mode |= cp->vfo.mode[1] << 8; flags |= F_CACHE; return (rval); } /* * emptyvfo - initialize VFO * * Initialize VFO with zero frequency and valid ancillary values. Once * the frequency and mode have been set, the VFO can be stored in a * memory channgel. Both the 756 and 7000 are quite particular about * vaild or default tone data before storing. */ int emptyvfo( struct chan *cp ) { u_char tone[] = {0x00, 0x08, 0x85}; u_char dtcs[] = {0x00, 0x00, 0x23}; struct vfo7000 *vp; /* * An ampth VFO has default repeater tone, tone squelch and * digital tone squelch, and empty name. */ cp->freq = 0; cp->mode = 0; cp->split = 0; cp->step = 0; cp->pstep = 0; memset(&cp->aux, 0, sizeof(struct aux)); memset(cp->name, 0, sizeof(cp->name)); vp = &cp->vfo; memset(vp, 0, sizeof(struct vfo7000)); memcpy(&vp->tone, tone, 3); memcpy(&vp->tsql, tone, 3); memcpy(&vp->dtcs, dtcs, 3); flags &= ~F_CACHE; return (R_OK); } /* * loadfreq(radio, freq) - write vfo frequency */ int loadfreq( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp, /* radio structure */ double freq /* frequency (MHz) */ ) { struct chan *cp; u_char cmd[] = {V_SFREQ, 0, 0, 0, 0, FI, FI}; u_char rsp[BMAX]; int temp; double dtemp; cp = &rp->chan; if (flags & F_735) temp = 4; else temp = 5; dtemp = freq * 1e6 * (1 + rp->freq_comp / 1e6) + rp->bfo[cp->mode & 0x0f]; doublefreq(dtemp, &cmd[1], temp); return (setcmda(rp->ident, cmd, rsp)); } /* * loadmode(ident, mode) - write vfo mode */ int loadmode( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int mode /* mode */ ) { u_char frq[] = {V_RFREQ, FI}; u_char cmd[] = {V_SMODE, 0, FI, FI}; u_char rsp[BMAX], sfrq[BMAX]; int rval; cmd[1] = mode; if (flags & F_MODE) cmd[2] = mode >> 8; /* * If VFO is not corrected, restore it after loading the mode. */ if (!(flags & F_RELD)) return (setcmda(ident, cmd, rsp)); setcmda(ident, frq, sfrq); rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); sfrq[0] = V_SFREQ; return (setcmda(ident, sfrq, rsp)); } /* * readoffset(ident, offset) read transmit duplex offset */ int readoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double *freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_ROFFS, FI}; u_char rsp[BMAX]; double dtemp; int rval; rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); dtemp = freqdouble(&rsp[1], 3); *freq = dtemp / 10.; return (rval); } /* * loadoffset(ident, offset) - write transmit duplex offset */ int loadoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_SOFFS, 0, 0, 0, FI}; u_char rsp[BMAX]; doublefreq(fabs(freq) * 10., &cmd[1], 3); return (setcmda(ident, cmd, rsp)); } /* * readbank(ident, bank, name) - read bank name (R8500) */ int readbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { u_char cmd[] = {V_SETW, S_RBNK, 0, FI}; struct bankmsg rsp; char s1[LINMAX]; int rval; sprintf(s1, "%02d", bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); rval = setcmda(ident, (u_char *)&cmd, (u_char *)&rsp); if (rval < 0) return (rval); rsp.name[sizeof(rsp.name)] = '\0'; sscanf(rsp.name, "%s", name); return (rval); } /* * loadbank(ident, bank, name) - write bank name (R8500) */ int loadbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { struct bankmsg cmd = {V_SETW, S_WBNK}; u_char rsp[BMAX]; char s1[LINMAX]; int temp; sprintf(s1, "%02d", bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(name); if (temp > sizeof(cmd.name)) temp = sizeof(cmd.name); memcpy(cmd.name, name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_r8500(ident, chan) - read channel data (R8500) * * This radio is a receiver only. It has no VFO; data are stored only in * channels. In addition to the usual frequency and mode data, it can * store the step, programmed step and attenuator data in each channel. */ int read_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident , /* radio ident */ struct chan *cp /* channel structure */ ) { struct chanmsg rsp; u_char cmd[] = {V_SETW, 0x01, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return (R_ERR); /* * Assemble VFO data */ if (temp < sizeof(struct chanmsg)) return (R_OK); memcpy(cp->vfo.freq, rsp.freq, 5); memcpy(cp->vfo.mode, rsp.mode, 2); /* * Copy step, pstep, attenuator and scan. */ cp->aux = rsp.aux; /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * write_r8500(ident, chan) - write channel data (R8500) */ int write_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chanmsg cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.freq, &cp->vfo.freq, 5); memcpy(&cmd.mode, &cp->vfo.mode, 2); /* * Insert step, program step, attenuator and scan. The radio * insists on a nonero pstep, even if not used. */ cmd.aux = cp->aux; if (cmd.aux.pstep[0] == 0 && cmd.aux.pstep[1] == 0) { cmd.aux.pstep[0] = 0x10; cmd.aux.pstep[1] = 0x00; } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_756(radio, chan) - read channel data (756 class) * * This radio can store the frequency, mode and tone codes for the * A VFO when the memory channel is written. */ int read_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident */ struct chan *cp /* channel structure */ ) { struct vfo7000 *wf; struct chan756 rsp; u_char cmd[] = {V_SETW, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble channel number and read. */ dtohex(cp->mchan, &cmd[2]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO contents. */ if (temp < sizeof(struct chan756)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfo, sizeof(struct vfo756)); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_756(ident, chan) - write channel data (756 class) */ int write_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan756 cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert channel number. */ dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.vfo, &cp->vfo, sizeof(struct vfo756)); /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_7000(radio, channel) - read channel data (7000 class) * * This radio can store the frequency, mode and tone codes for both the * A and B VFOs when the memory channel is written. If operating in * split mode, the A VFO is used for receiving and the B VFO for * transmitting. This is handy for splits and odd duplex conditions. */ int read_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident*/ struct chan *cp /* channel structure */ ) { struct chan7000 rsp; u_char cmd[] = {V_SETW, 0x00, 0, 0, 0, FI}; u_char cmdsplit[]= {V_SPLIT, 0x00, FI}; u_char rsp1[BMAX]; char s1[LINMAX]; int temp, i, rval; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO A contents. */ if (temp < sizeof(struct chan7000)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfoa, sizeof(struct vfo7000)); /* * If the A and B VFOs are different, turn on the split. */ if (memcmp(rsp.vfoa.freq, rsp.vfob.freq, 5) == 0) { cp->split = 0; cmdsplit[1] = 0x00; } else { cp->split = freqdouble(rsp.vfob.freq, 5) / 1e6; cmdsplit[1] = 0x01; } rval = setcmda(ident, cmdsplit, rsp1); if (rval < 0) return (rval); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_7000(ident, chan) - write channel data (7000 class) */ int write_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan7000 cmd = {V_SETW, 0x0}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode in both the A and B VFOs. If in * split mode update the split frequency in the B VFO. */ memcpy(&cmd.vfoa, &cp->vfo, sizeof(struct vfo7000)); memcpy(&cmd.vfob, &cp->vfo, sizeof(struct vfo7000)); if (cp->split != 0) { doublefreq(cp->split * 1e6, cmd.vfob.freq, 5); memcpy(&cmd.vfob.mode, cp->vfo.mode, 2); } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * setcmda(ident, cmd, rsp) - send CI-V command and receive response. */ int setcmda( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ u_char *cmd, /* command */ u_char *rsp /* response */ ) { int temp; temp = sndpkt(ident, cmd, rsp); if (temp < 2 || rsp[0] == NAK) return (R_ERR); return (temp); } /* * BCD conversion routines * * These routines convert between internal (floating point) format and * radio (BCD) format. BCD data are two digits per octet in big normal * or reversed order, depending on data type. These routines convert * between internal and reversed data types. * * data type BCD units order * ==================================================== * bank 2 1 normal * channel 2/4 1 normal (4 for R8500) * frequency 8/10 1/10 Hz reversed (8 for 735) * transmit offset 6 100 Hz reversed * dial tune step 4 100 Hz reversed */ /* * dtohex(dec, hex) integer to 4 packed digits */ void dtohex( int arg, /* decimal integer */ u_char *hex /* packet hex string */ ) { u_char *ptr; char s1[LINMAX]; sprintf(s1, "%04d", arg); hex[0] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); hex[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } /* * doublefreq(freq, y, len) - double to ICOM frequency with padding */ void doublefreq( double freq, /* frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s1[11]; char *y; sprintf(s1, " %10.0lf", freq); y = s1 + 10; i = 0; while (*y != ' ') { x[i] = *y-- & 0xf; x[i] = x[i] | ((*y-- & 0xf) << 4); i++; } for (; i < len; i++) x[i] = 0; x[i] = FI; } /* * freqdouble(x, len) - ICOM frequency to double */ double freqdouble( /* returns frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s[11]; char *y; double dtemp; y = s + 2 * len; *y-- = '\0'; for (i = 0; i < len && x[i] != FI; i++) { *y-- = (char)((x[i] & 0xf) + '0'); *y-- = (char)(((x[i] >> 4) & 0xf) + '0'); } sscanf(s, "%lf", &dtemp); return (dtemp); } /* end program */ icom-20120228/RAD.BAK0000744000175000017500000006004310453545430012631 0ustar colincolin/* * Program to control ICOM radios * * Subroutine library */ #include "icom.h" #include /* * Local function prototypes */ void dtohex(int, u_char *); void doublefreq(double, u_char *, int); /* double to frequency */ double freqdouble(u_char *, int); /* frequency to double */ static int read_r8500(int, struct chan *); static int write_r8500(int, struct chan *); static int read_756(int, struct chan *); static int write_756(int, struct chan *); static int read_7000(int, struct chan *); static int write_7000(int, struct chan *); int emptyvfo(struct chan *); /* * select_radio(ident, baud) - select/initalize radio structure */ struct icom * select_radio( /* returns icom pointer or NULL */ int ident, /* radio ID */ int baud /* CI-V bit rate */ ) { struct icom *rp; struct chan *cp; struct readbandmsg rspband; u_char rspfreq1[BMAX]; u_char rspfreq2[BMAX]; double dtemp; char s1[LINMAX]; int i, j, temp1, temp2; u_char cmdband[] = {V_RBAND, FI}; u_char cmdbank[] = {V_SETW, S_RBNK, 0, 1, 1, FI}; u_char cmdrbnk[] = {V_SMEM, 0xa0, 0, FI}; u_char cmdsmem[] = {V_SMEM, 0, FI}; u_char cmdrfreq[] = {V_RFREQ, FI}; u_char cmdrmode[] = {V_RMODE, FI}; u_char cmdroffs[] = {V_ROFFS, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; u_char rspfreq[BMAX]; /* saved frequency */ u_char rspmode[BMAX]; /* saved mode */ /* * Find prototype. Bad tables if not found. */ for (i = 0; name[i].ident != 0x0; i++) { if (name[i].ident == ident) break; } if (name[i].ident == 0x0) return (NULL); /* * If radio is already enabled, just restore pointers and read * the current channel. */ rp = name[i].radio; if (rp != NULL) { cp = &rp->chan; flags = rp->flags; readchan(rp); return (rp); } /* * Read band limits. Every radio and transceiver supports this * command, so we use it to see if the radio is lit. If the * radio set mode for CI-V baud is AUTO, the radio bit rate is * set by the first command received and cannot be changed after * that. Older radioS support 1200 bps by default, sometimes * other rates by clipping diodes. */ if (baud != 0) temp1 = baud; else temp1 = name[i].baud; initpkt(temp1); retry = 1; if (setcmda(ident, cmdband, (u_char *)&rspband) == R_ERR) { retry = RETRY; return (NULL); } retry = RETRY; /* * Allocate control block and initialize bits and pieces. */ rp = malloc(sizeof(struct icom)); name[i].radio = rp; memset(rp, 0, sizeof(struct icom)); strcpy(rp->name, name[i].name); rp->ident = ident; rp->baud = temp1; rp->maxch = name[i].maxch; rp->maxbk = name[i].maxbk; rp->ctrl = name[i].ctrl; rp->flags = name[i].flags; rp->modetab = name[i].modetab; rp->dialtab = name[i].dialtab; rp->lband = freqdouble(rspband.lband, 5) / 1e6; rp->uband = freqdouble(rspband.uband, 5) / 1e6; if (rp->lband > rp->uband) { dtemp = rp->lband; rp->lband = rp->uband; rp->uband = dtemp; } rp->lstep = rp->lband; rp->ustep = rp->uband; /* * Save the frequency and mode. On the way, figure out whether * the mode is one octet or two. */ setcmda(ident, cmdrfreq, rspfreq); temp1 = setcmda(ident, cmdrmode, rspmode); if (temp1 > 3) rp->flags |= F_MODE; /* * If a read channel zero fails, the channel range starts at * one. */ if (setcmda(ident, cmdsmem, rsp) == R_ERR) rp->minch = 1; /* * If the radio supports multiple memory banks and a read bank * zero fails, the bank range starts at one. */ if (rp->maxbk > 0) { rp->flags |= F_BANK; if (setcmda(ident, cmdrbnk, rsp) == R_ERR) rp->minbk = 1; } /* * If the read offset command works, the radio supports duplex. */ if (setcmda(ident, cmdroffs, rsp) != R_ERR) rp->flags |= F_OFFSET; /* * If the memory -> vfo command works, we have to use it in VFO * mode every time the channel is changed. */ if (setcmda(ident, cmdvfom, rsp) != R_ERR) rp->flags |= F_VFO; /* * Determine whether the frequency needs to be reset after a * mode change. We first write the channel with mode USB, then * read the frequency back and remember it. Then we write the * channel with mode LSB, read back the frequency and see if it * changed. If so, we have to write the frequency every time the * mode is changed. What a drag. */ temp1 = capkey("lsb", rp->modetab); temp2 = capkey("usb", rp->modetab); if (temp1 != R_ERR && temp2 != R_ERR) { loadmode(ident, temp2); setcmda(ident, cmdrfreq, rspfreq1); loadmode(ident, temp1); setcmda(ident, cmdrfreq, rspfreq2); if (memcmp(&rspfreq1[1], &rspfreq2[1], 5) != 0) rp->flags |= F_RELD; } rp->chan.bank = rp->minbk; rp->chan.mchan = rp->minch; /* * Determine the frequency resolution. This depends on the radio * and TS button. We first write the frequency and mode near the * lower band edge. The value is chosen with '1' in each * significant digit ending in the units digit. Then, we read * the frequency back and determine the resolution corresponding * to the first nonzero significant digit. */ loadfreq(rp, rp->lband + 11111e-6); setcmda(ident, cmdrfreq, rspfreq1); rp->minstep = 6; if (rspfreq1[1] & 0x0f) rp->minstep = 0; else if (rspfreq1[1] & 0xf0) rp->minstep = 3; else if (rspfreq1[2] & 0x0f) rp->minstep = 6; else if (rspfreq1[2] & 0xf0) printf("*** tuning step error\n"); rp->rate = rp->minstep; rp->step = logtab[rp->rate]; /* * Restore the original frequency and mode. This is silly, as * the following code reads the base channel. However, some * radios are picky and maybe the read channel fails. Do the * frequency restore last, since some old radios don't * automatically shift the LO. */ rspmode[0] = V_SMODE; setcmda(ident, rspmode, rsp); rspfreq[0] = V_SFREQ; setcmda(ident, rspfreq, rsp); /* * Read the base channel. If error, give up now and return the * marbles. */ flags = rp->flags; cp = &rp->chan; cp->bank = rp->minbk; cp->mchan = rp->minch; temp1 = readchan(rp); if (temp1 < 0) { free(rp); return(NULL); } return (rp); } /* * setchan(ident, bank, chan) - select bank and channel */ int setchan( /* returns 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ int mchan /* channel number */ ) { char s1[LINMAX]; u_char cmd[] = {V_SMEM, 0, 0, FI}; u_char rsp[BMAX]; int temp; /* * Radios with memory banks require two commands, one to * set the bank, another to set the channel. Bank numbers 0-99 * are encoded in one octet. */ if (flags & F_BANK) { sprintf(s1, "%02d", bank); cmd[1] = 0xa0; cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid bank %d\n", bank); return (R_ERR); } } /* * Channel numbers 0-99 are encoded in one octet. Channel * numbers 100-9999 are encoded in two octets. */ sprintf(s1, "%04d", mchan); if (mchan < 100) { cmd[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); cmd[2] = FI; } else { cmd[1] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); cmd[2] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid channel %d\n", mchan); return (R_ERR); } return (R_OK); } /* * readchan(radio) - read channel frequency and mode */ int readchan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; int rval; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; /* * For radios with a 0x1a command, read the model-specific * data message and extract the frequency, mode and ancillary * data. */ cp = &rp->chan; rval = R_OK; if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); if (flags & F_7000) rval = read_7000(rp->ident, cp); if (flags & F_756) rval = read_756(rp->ident, cp); if (flags & F_8500) rval = read_r8500(rp->ident, cp); if (rval < 0) return (rval); /* * For radios without a 0x1a command, read the frequency and * mode directly later. */ if (flags & F_VFO) setcmda(rp->ident, cmdvfom, rsp); if (flags & (F_7000 | F_756 | F_8500)) return (rval); return (readvfo(rp)); } /* * writechan(radio) - write channel frequency and mode */ int writechan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdwrite[] = {V_WRITE, FI}; u_char rsp[BMAX]; int temp; /* * For radios with a 0x1a command, construct the model-specific * data message and write the frequency, mode and ancillary * data. First, read the current frequency and mode, which might * have been changed recently without telling this program. */ cp = &rp->chan; readvfo(rp); if (flags & F_7000) return (write_7000(rp->ident, cp)); if (flags & F_756) return (write_756(rp->ident, cp)); if (flags & F_8500) return (write_r8500(rp->ident, cp)); /* * For older radios, write the frequency and mode directly. */ if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); return (setcmda(rp->ident, cmdwrite, rsp)); } /* * emptychan(ident, chan) - empty channel */ int emptychan( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { u_char cmdempty[] = {V_EMPTY, FI}; u_char rsp[BMAX]; /* * Set bank and channel as necessary. */ if (setchan(ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); return (setcmda(ident, cmdempty, rsp)); } /* * readvfo(radio) - read current frequency and mode */ int readvfo( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdfreq[] = {V_RFREQ, FI}; u_char cmdmode[] = {V_RMODE, FI}; u_char rsp[BMAX]; double dtemp; int rval; /* * If the cache is valid, don't diddle the radio. */ if (flags & F_CACHE) return(R_OK); /* * Update VFO frequency and mode. */ cp = &rp->chan; rval = setcmda(rp->ident, cmdfreq, rsp); if (rval < 0) return (rval); if (rval == 6 && (flags & F_735)) memcpy(&cp->vfo.freq[1], &rsp[1], 4); else if (rval == 7) memcpy(cp->vfo.freq, &rsp[1], 5); rval = setcmda(rp->ident, cmdmode, rsp); if (rval < 0) return (rval); memcpy(cp->vfo.mode, &rsp[1], rval - 2); /* * Update channel frequency and mode. */ dtemp = freqdouble(cp->vfo.freq, 5); cp->freq = (dtemp * (1 - rp->freq_comp / 1e6) - rp->bfo[cp->mode & 0x0f]) / 1e6; cp->mode = cp->vfo.mode[0]; if (rval > 3) cp->mode |= cp->vfo.mode[1] << 8; flags |= F_CACHE; return (rval); } /* * emptyvfo - initialize VFO * * Initialize VFO with zero frequency and valid ancillary values. Once * the frequency and mode have been set, the VFO can be stored in a * memory channgel. Both the 756 and 7000 are quite particular about * vaild or default tone data before storing. */ int emptyvfo( struct chan *cp ) { u_char tone[] = {0x00, 0x08, 0x85}; u_char dtcs[] = {0x00, 0x00, 0x23}; struct vfo7000 *vp; /* * An ampth VFO has default repeater tone, tone squelch and * digital tone squelch, and empty name. */ cp->freq = 0; cp->mode = 0; cp->split = 0; cp->step = 0; cp->pstep = 0; memset(&cp->aux, 0, sizeof(struct aux)); memset(cp->name, 0, sizeof(cp->name)); vp = &cp->vfo; memset(vp, 0, sizeof(struct vfo7000)); memcpy(&vp->tone, tone, 3); memcpy(&vp->tsql, tone, 3); memcpy(&vp->dtcs, dtcs, 3); flags &= ~F_CACHE; return (R_OK); } /* * loadfreq(radio, freq) - write vfo frequency */ int loadfreq( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp, /* radio structure */ double freq /* frequency (MHz) */ ) { struct chan *cp; u_char cmd[] = {V_SFREQ, 0, 0, 0, 0, FI, FI}; u_char rsp[BMAX]; int temp; double dtemp; cp = &rp->chan; if (flags & F_735) temp = 4; else temp = 5; dtemp = freq * 1e6 * (1 + rp->freq_comp / 1e6) + rp->bfo[cp->mode & 0x0f]; doublefreq(dtemp, &cmd[1], temp); return (setcmda(rp->ident, cmd, rsp)); } /* * loadmode(ident, mode) - write vfo mode */ int loadmode( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int mode /* mode */ ) { u_char frq[] = {V_RFREQ, FI}; u_char cmd[] = {V_SMODE, 0, FI, FI}; u_char rsp[BMAX], sfrq[BMAX]; int rval; cmd[1] = mode; if (flags & F_MODE) cmd[2] = mode >> 8; /* * If VFO is not corrected, restore it after loading the mode. */ if (!(flags & F_RELD)) return (setcmda(ident, cmd, rsp)); setcmda(ident, frq, sfrq); rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); sfrq[0] = V_SFREQ; return (setcmda(ident, sfrq, rsp)); } /* * readoffset(ident, offset) read transmit duplex offset */ int readoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double *freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_ROFFS, FI}; u_char rsp[BMAX]; double dtemp; int rval; rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); dtemp = freqdouble(&rsp[1], 3); *freq = dtemp / 10.; return (rval); } /* * loadoffset(ident, offset) - write transmit duplex offset */ int loadoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_SOFFS, 0, 0, 0, FI}; u_char rsp[BMAX]; doublefreq(fabs(freq) * 10., &cmd[1], 3); return (setcmda(ident, cmd, rsp)); } /* * readbank(ident, bank, name) - read bank name (R8500) */ int readbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { u_char cmd[] = {V_SETW, S_RBNK, 0, FI}; struct bankmsg rsp; char s1[LINMAX]; int rval; sprintf(s1, "%02d", bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); rval = setcmda(ident, (u_char *)&cmd, (u_char *)&rsp); if (rval < 0) return (rval); rsp.name[sizeof(rsp.name)] = '\0'; sscanf(rsp.name, "%s", name); return (rval); } /* * loadbank(ident, bank, name) - write bank name (R8500) */ int loadbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { struct bankmsg cmd = {V_SETW, S_WBNK}; u_char rsp[BMAX]; char s1[LINMAX]; int temp; sprintf(s1, "%02d", bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(name); if (temp > sizeof(cmd.name)) temp = sizeof(cmd.name); memcpy(cmd.name, name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_r8500(ident, chan) - read channel data (R8500) * * This radio is a receiver only. It has no VFO; data are stored only in * channels. In addition to the usual frequency and mode data, it can * store the step, programmed step and attenuator data in each channel. */ int read_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident , /* radio ident */ struct chan *cp /* channel structure */ ) { struct chanmsg rsp; u_char cmd[] = {V_SETW, 0x01, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return (R_ERR); /* * Assemble VFO data */ if (temp < sizeof(struct chanmsg)) return (R_OK); memcpy(cp->vfo.freq, rsp.freq, 5); memcpy(cp->vfo.mode, rsp.mode, 2); /* * Copy step, pstep, attenuator and scan. */ cp->aux = rsp.aux; /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * write_r8500(ident, chan) - write channel data (R8500) */ int write_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chanmsg cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.freq, &cp->vfo.freq, 5); memcpy(&cmd.mode, &cp->vfo.mode, 2); /* * Insert step, program step, attenuator and scan. The radio * insists on a nonero pstep, even if not used. */ cmd.aux = cp->aux; if (cmd.aux.pstep[0] == 0 && cmd.aux.pstep[1] == 0) { cmd.aux.pstep[0] = 0x10; cmd.aux.pstep[1] = 0x00; } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_756(radio, chan) - read channel data (756 class) * * This radio can store the frequency, mode and tone codes for the * A VFO when the memory channel is written. */ int read_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident */ struct chan *cp /* channel structure */ ) { struct vfo7000 *wf; struct chan756 rsp; u_char cmd[] = {V_SETW, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble channel number and read. */ dtohex(cp->mchan, &cmd[2]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO contents. */ if (temp < sizeof(struct chan756)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfo, sizeof(struct vfo756)); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_756(ident, chan) - write channel data (756 class) */ int write_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan756 cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert channel number. */ dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.vfo, &cp->vfo, sizeof(struct vfo756)); /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_7000(radio, channel) - read channel data (7000 class) * * This radio can store the frequency, mode and tone codes for both the * A and B VFOs when the memory channel is written. If operating in * split mode, the A VFO is used for receiving and the B VFO for * transmitting. This is handy for splits and odd duplex conditions. */ int read_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident*/ struct chan *cp /* channel structure */ ) { struct chan7000 rsp; u_char cmd[] = {V_SETW, 0x00, 0, 0, 0, FI}; u_char cmdsplit[]= {V_SPLIT, 0x00, FI}; u_char rsp1[BMAX]; char s1[LINMAX]; int temp, i, rval; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO A contents. */ if (temp < sizeof(struct chan7000)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfoa, sizeof(struct vfo7000)); /* * If the A and B VFOs are different, turn on the split. */ if (memcmp(rsp.vfoa.freq, rsp.vfob.freq, 5) == 0) { cp->split = 0; cmdsplit[1] = 0x00; } else { cp->split = freqdouble(rsp.vfob.freq, 5) / 1e6; cmdsplit[1] = 0x01; } rval = setcmda(ident, cmdsplit, rsp1); if (rval < 0) return (rval); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_7000(ident, chan) - write channel data (7000 class) */ int write_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan7000 cmd = {V_SETW, 0x0}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode in both the A and B VFOs. If in * split mode update the split frequency in the B VFO. */ memcpy(&cmd.vfoa, &cp->vfo, sizeof(struct vfo7000)); memcpy(&cmd.vfob, &cp->vfo, sizeof(struct vfo7000)); if (cp->split != 0) { doublefreq(cp->split * 1e6, cmd.vfob.freq, 5); memcpy(&cmd.vfob.mode, cp->vfo.mode, 2); } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * setcmda(ident, cmd, rsp) - send CI-V command and receive response. */ int setcmda( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ u_char *cmd, /* command */ u_char *rsp /* response */ ) { int temp; temp = sndpkt(ident, cmd, rsp); if (temp < 2 || rsp[0] == NAK) return (R_ERR); return (temp); } /* * BCD conversion routines * * These routines convert between internal (floating point) format and * radio (BCD) format. BCD data are two digits per octet in big normal * or reversed order, depending on data type. These routines convert * between internal and reversed data types. * * data type BCD units order * ==================================================== * bank 2 1 normal * channel 2/4 1 normal (4 for R8500) * frequency 8/10 1/10 Hz reversed (8 for 735) * transmit offset 6 100 Hz reversed * dial tune step 4 100 Hz reversed */ /* * dtohex(dec, hex) integer to 4 packed digits */ void dtohex( int arg, /* decimal integer */ u_char *hex /* packet hex string */ ) { u_char *ptr; char s1[LINMAX]; sprintf(s1, "%04d", arg); hex[0] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); hex[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } /* * doublefreq(freq, y, len) - double to ICOM frequency with padding */ void doublefreq( double freq, /* frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s1[11]; char *y; sprintf(s1, " %10.0lf", freq); y = s1 + 10; i = 0; while (*y != ' ') { x[i] = *y-- & 0xf; x[i] = x[i] | ((*y-- & 0xf) << 4); i++; } for (; i < len; i++) x[i] = 0; x[i] = FI; } /* * freqdouble(x, len) - ICOM frequency to double */ double freqdouble( /* returns frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s[11]; char *y; double dtemp; y = s + 2 * len; *y-- = '\0'; for (i = 0; i < len && x[i] != FI; i++) { *y-- = (char)((x[i] & 0xf) + '0'); *y-- = (char)(((x[i] >> 4) & 0xf) + '0'); } sscanf(s, "%lf", &dtemp); return (dtemp); } /* end program */ icom-20120228/README0000644000175000017500000000162410376731213012563 0ustar colincolinSee the ./html/index.htm page for run-time documentation. Just about any C compiler can make this stuff. It has been compiled for Unix and Windows. Mumble "make" and watch it build. ICOM radios use a serial interface called CI-V. A number of radios can be connected in parallel to a level converter compatible with TTL levels. Each radio is selected by an assigned code. You might have to dig out the code for some recent radios; it is in the instruction book. There are a number of example files included for various radios and frequency sensibilities. The qsy directory contains a wadge of scripts which can be used or modified to automatically tune radios throughout the day. There are some for the BBC, now out of date, and some for ship coast stations that broadcast weather information, for example. Use with the minimuf distribution for ultimate customer satisfaction. Dave Mills, w3hcf 23 September 2002 icom-20120228/r70000000644000175000017500000000303410376731213012373 0ustar colincolin# # NOAA weather # 162.400000 FMn # Baltimore 162.475000 FMn # Philadelphia 162.550000 FMn # Harrisburg # # 2-meter FM # 145.010000 FMn # packet 145.550000 FMn # 145.825000 FMn # satellite downlink 146.520000 FMn # Simplex 146.625000 FMn # Wilmington 146.700000 FMn # Newark 146.760000 FMn # Burtonsville 146.775000 FMn # 146.850000 FMn # Havre de Grace 146.955000 FMn # Wilmington 147.120000 FMn # 147.225000 FMn # 221.010000 FMn # packet # # Marine # 156.800000 FMn # Distress and calling # # Aviation # 121.700000 AM # ground control 123.000000 AM 123.950000 AM # Wilmington ATIS 125.000000 AM 126.000000 AM # # Public Safety # 33.780000 FMn 33.820000 FMn 33.850000 FMn 154.665000 FMn 154.695000 FMn 154.755000 FMn 154.785000 FMn 154.860000 FMn 155.250000 FMn 158.805000 FMn 501.660000 FMn # campus police # # FM stations # 89.900000 FMw 90.900000 FMw # WETA 91.300000 FMw # WVUD 94.700000 FMw 95.700000 FMw # WFLN 96.500000 FMw 97.900000 FMw 98.900000 FMw 99.500000 FMw # WJBR 102.100000 FMw 103.300000 FMw 104.300000 FMw 106.100000 FMw 106.900000 FMw 107.700000 FMw # # TV sound # 59.750000 FMw # 2 65.750000 FMw # 3 87.750000 FMw # 5 185.750000 FMw # 8 197.750000 FMw # 10 209.750000 FMw # 12 215.750000 FMw # 13 493.750000 FMw # 523.750000 FMw # 529.750000 FMw # 565.750000 FMw # 733.750000 FMw # 757.750000 FMw # 781.750000 FMw # # # stuff # 143.865000 FMn 439.210000 FMn 452.750000 FMn 461.475000 FMn 462.200000 FMn 462.800000 FMn 851.000000 FMn 851.000000 FMn 861.562000 FMn 861.562000 FMn 862.712500 FMn 862.712500 FMn 862.812500 FMn 864.062500 FMn icom-20120228/7000_arinc0000644000175000017500000000571210422251000013351 0ustar colincolin # Carribean/South America 5.1 2887 USB name "CAR A" # CAR-A + 3455 USB name "CAR B" # CAR-B + 5520 USB name "CAR B" # CAR-B + 5550 USB name "CAR A" # CAR-A + 6577 USB name "CAR A" # CAR-A + 6586 USB name "CAR B" # CAR-B + 8846 USB name "CAR B" # CAR-B + 8918 USB name "CAR A" # CAR-A + 11330 USB name "CAR B" # CAR-B + 11387 USB name "CAR B" # CAR-B + 11396 USB name "CAR A" # CAR-A + 13297 USB name "CAR A" # CAR-A + 17907 USB name "CAR A/B" # CAR-A # VOLMET + 3485 USB name "VOLM NAT" # VOLMET-NAT + 6604 USB name "VOLM NAT" # VOLMET-NAT + 10051 USB name "VOLM NAT" # VOLMET-NAT + 13270 USB name "VOLM NAT" # VOLMET-NAT + 3413 USB name "VOLM EU" # VOLMET-EU + 5505 USB name "VOLM EU" # VOLMET-EU + 8957 USB name "VOLM EU" # VOLMET-EU + 13264 USB name "VOLM EU" # VOLMET-EU + 2863 USB name "VOLM PAC" # VOLMET-PAC + 6679 USB name "VOLM PAC" # VOLMET-PAC + 8828 USB name "VOLM PAC" # VOLMET-PAC + 13282 USB name "VOLM PAC" # VOLMET-PAC + 5450 USB name "VOLM ME" # VOLMET-ME # North Atlantic + 3016 USB name "NAT A" # NAT-A + 5598 USB name "NAT A" # NAT-A + 8906 USB name "NAT A" # NAT-A + 13306 USB name "NAT A" # NAT-A + 17946 USB name "NAT A" # NAT-A + 2899 USB name "NAT B" # NAT-B + 5616 USB name "NAT B" # NAT-B + 8864 USB name "NAT B" # NAT-B + 13291 USB name "NAT B" # NAT-B + 17946 USB name "NAT B" # NAT-B + 2862 USB name "NAT C" # NAT-C + 5649 USB name "NAT C" # NAT-C + 8879 USB name "NAT C" # NAT-C + 13306 USB name "NAT C" # NAT-C + 17946 USB name "NAT C" # NAT-C + 2971 USB name "NAT D" # NAT-D + 4675 USB name "NAT D" # NAT-D + 8891 USB name "NAT D" # NAT-D + 11279 USB name "NAT D" # NAT-D + 13291 USB name "NAT D" # NAT-D + 17946 USB name "NAT D" # NAT-D + 2962 USB name "NAT E" # NAT-E + 6628 USB name "NAT E" # NAT-E + 8825 USB name "NAT E" # NAT-E + 11309 USB name "NAT E" # NAT-E + 13354 USB name "NAT E" # NAT-E + 3476 USB name "NAT F" # NAT-F + 6622 USB name "NAT F" # NAT-F + 8831 USB name "NAT F" # NAT-F # Pacific + 2869 USB name "CEP" # CEP-1/2 + 3413 USB name "CEP" # CEP-1/2 + 5547 USB name "CEP" # CEP-1/2 + 5574 USB name "CEP" # CEP-1/2 + 8843 USB name "CEP" # CEP-1/2 + 11282 USB name "CEP" # CEP-1/2 + 13261 USB name "CEP" # CEP-1/2 + 13354 USB name "CEP" # CEP-1/2 + 17904 USB name "CEP" # CEP-1/2 + 2998 USB name "CWP" # CWP-1/2 + 4666 USB name "CWP" # CWP-1/2 + 6532 USB name "CWP" # CWP-1/2 + 6562 USB name "CWP" # CWP-1/2 + 8903 USB name "CWP" # CWP-1/2 + 11384 USB name "CWP" # CWP-1/2 + 13300 USB name "CWP" # CWP-1/2 + 17904 USB name "CWP" # CWP-1/2 + 21985 USB name "CWP" # CWP-1/2 + 2932 USB name "NP" # NP + 5628 USB name "NP" # NP + 5667 USB name "NP" # NP + 6665 USB name "NP" # NP + 8915 USB name "NP" # NP + 10048 USB name "NP" # NP + 13294 USB name "NP" # NP + 17904 USB name "NP" # NP + 17946 USB name "NP" # NP + 21925 USB name "NP" # NP + 3467 USB name "SP" # SP + 5643 USB name "SP" # SP + 5667 USB name "SP" # SP + 8867 USB name "SP" # SP + 13273 USB name "SP" # SP + 17904 USB name "SP" # SP icom-20120228/RAD.C0000744000175000017500000006007110453554761012426 0ustar colincolin/* * Program to control ICOM radios * * Subroutine library */ #include "icom.h" #include /* * Local function prototypes */ void dtohex(int, u_char *); void doublefreq(double, u_char *, int); /* double to frequency */ double freqdouble(u_char *, int); /* frequency to double */ static int read_r8500(int, struct chan *); static int write_r8500(int, struct chan *); static int read_756(int, struct chan *); static int write_756(int, struct chan *); static int read_7000(int, struct chan *); static int write_7000(int, struct chan *); int emptyvfo(struct chan *); /* * select_radio(ident, baud) - select/initalize radio structure */ struct icom * select_radio( /* returns icom pointer or NULL */ int ident, /* radio ID */ int baud /* CI-V bit rate */ ) { struct icom *rp; struct chan *cp; struct readbandmsg rspband; u_char rspfreq1[BMAX]; u_char rspfreq2[BMAX]; double dtemp; char s1[LINMAX]; int i, j, temp1, temp2; u_char cmdband[] = {V_RBAND, FI}; u_char cmdbank[] = {V_SETW, S_RBNK, 0, 1, 1, FI}; u_char cmdrbnk[] = {V_SMEM, 0xa0, 0, FI}; u_char cmdsmem[] = {V_SMEM, 0, FI}; u_char cmdrfreq[] = {V_RFREQ, FI}; u_char cmdrmode[] = {V_RMODE, FI}; u_char cmdroffs[] = {V_ROFFS, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; u_char rspfreq[BMAX]; /* saved frequency */ u_char rspmode[BMAX]; /* saved mode */ /* * Find prototype. Bad tables if not found. */ for (i = 0; name[i].ident != 0x0; i++) { if (name[i].ident == ident) break; } if (name[i].ident == 0x0) return (NULL); /* * If radio is already enabled, just restore pointers and read * the current channel. */ rp = name[i].radio; if (rp != NULL) { cp = &rp->chan; flags = rp->flags; initpkt(rp->baud); readchan(rp); return (rp); } /* * Read band limits. Every radio and transceiver supports this * command, so we use it to see if the radio is lit. If the * radio set mode for CI-V baud is AUTO, the radio bit rate is * set by the first command received and cannot be changed after * that. Older radioS support 1200 bps by default, sometimes * other rates by clipping diodes. */ if (baud != 0) temp1 = baud; else temp1 = name[i].baud; initpkt(temp1); retry = 1; if (setcmda(ident, cmdband, (u_char *)&rspband) == R_ERR) { retry = RETRY; return (NULL); } retry = RETRY; /* * Allocate control block and initialize bits and pieces. */ rp = malloc(sizeof(struct icom)); name[i].radio = rp; memset(rp, 0, sizeof(struct icom)); strcpy(rp->name, name[i].name); rp->ident = ident; rp->baud = temp1; rp->maxch = name[i].maxch; rp->maxbk = name[i].maxbk; rp->ctrl = name[i].ctrl; rp->flags = name[i].flags; rp->modetab = name[i].modetab; rp->dialtab = name[i].dialtab; rp->lband = freqdouble(rspband.lband, 5) / 1e6; rp->uband = freqdouble(rspband.uband, 5) / 1e6; if (rp->lband > rp->uband) { dtemp = rp->lband; rp->lband = rp->uband; rp->uband = dtemp; } rp->lstep = rp->lband; rp->ustep = rp->uband; /* * Save the frequency and mode. On the way, figure out whether * the mode is one octet or two. */ setcmda(ident, cmdrfreq, rspfreq); temp1 = setcmda(ident, cmdrmode, rspmode); if (temp1 > 3) rp->flags |= F_MODE; /* * If a read channel zero fails, the channel range starts at * one. */ if (setcmda(ident, cmdsmem, rsp) == R_ERR) rp->minch = 1; /* * If the radio supports multiple memory banks and a read bank * zero fails, the bank range starts at one. */ if (rp->maxbk > 0) { rp->flags |= F_BANK; if (setcmda(ident, cmdrbnk, rsp) == R_ERR) rp->minbk = 1; } /* * If the read offset command works, the radio supports duplex. */ if (setcmda(ident, cmdroffs, rsp) != R_ERR) rp->flags |= F_OFFSET; /* * If the memory -> vfo command works, we have to use it in VFO * mode every time the channel is changed. */ if (setcmda(ident, cmdvfom, rsp) != R_ERR) rp->flags |= F_VFO; /* * Determine whether the frequency needs to be reset after a * mode change. We first write the channel with mode USB, then * read the frequency back and remember it. Then we write the * channel with mode LSB, read back the frequency and see if it * changed. If so, we have to write the frequency every time the * mode is changed. What a drag. */ temp1 = capkey("lsb", rp->modetab); temp2 = capkey("usb", rp->modetab); if (temp1 != R_ERR && temp2 != R_ERR) { loadmode(ident, temp2); setcmda(ident, cmdrfreq, rspfreq1); loadmode(ident, temp1); setcmda(ident, cmdrfreq, rspfreq2); if (memcmp(&rspfreq1[1], &rspfreq2[1], 5) != 0) rp->flags |= F_RELD; } rp->chan.bank = rp->minbk; rp->chan.mchan = rp->minch; /* * Determine the frequency resolution. This depends on the radio * and TS button. We first write the frequency and mode near the * lower band edge. The value is chosen with '1' in each * significant digit ending in the units digit. Then, we read * the frequency back and determine the resolution corresponding * to the first nonzero significant digit. */ loadfreq(rp, rp->lband + 11111e-6); setcmda(ident, cmdrfreq, rspfreq1); rp->minstep = 6; if (rspfreq1[1] & 0x0f) rp->minstep = 0; else if (rspfreq1[1] & 0xf0) rp->minstep = 3; else if (rspfreq1[2] & 0x0f) rp->minstep = 6; else if (rspfreq1[2] & 0xf0) printf("*** tuning step error\n"); rp->rate = rp->minstep; rp->step = logtab[rp->rate]; /* * Restore the original frequency and mode. This is silly, as * the following code reads the base channel. However, some * radios are picky and maybe the read channel fails. Do the * frequency restore last, since some old radios don't * automatically shift the LO. */ rspmode[0] = V_SMODE; setcmda(ident, rspmode, rsp); rspfreq[0] = V_SFREQ; setcmda(ident, rspfreq, rsp); /* * Read the base channel. If error, give up now and return the * marbles. */ flags = rp->flags; cp = &rp->chan; cp->bank = rp->minbk; cp->mchan = rp->minch; temp1 = readchan(rp); if (temp1 < 0) { free(rp); return(NULL); } return (rp); } /* * setchan(ident, bank, chan) - select bank and channel */ int setchan( /* returns 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ int mchan /* channel number */ ) { char s1[LINMAX]; u_char cmd[] = {V_SMEM, 0, 0, FI}; u_char rsp[BMAX]; int temp; /* * Radios with memory banks require two commands, one to * set the bank, another to set the channel. Bank numbers 0-99 * are encoded in one octet. */ if (flags & F_BANK) { sprintf(s1, "%02d", bank); cmd[1] = 0xa0; cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid bank %d\n", bank); return (R_ERR); } } /* * Channel numbers 0-99 are encoded in one octet. Channel * numbers 100-9999 are encoded in two octets. */ sprintf(s1, "%04d", mchan); if (mchan < 100) { cmd[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); cmd[2] = FI; } else { cmd[1] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); cmd[2] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } temp = setcmda(ident, cmd, rsp); if (temp == R_ERR) { printf("*** invalid channel %d\n", mchan); return (R_ERR); } return (R_OK); } /* * readchan(radio) - read channel frequency and mode */ int readchan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; int rval; u_char cmdvfom[] = {V_VFOM, FI}; u_char rsp[BMAX]; /* * For radios with a 0x1a command, read the model-specific * data message and extract the frequency, mode and ancillary * data. */ cp = &rp->chan; rval = R_OK; if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); if (flags & F_7000) rval = read_7000(rp->ident, cp); if (flags & F_756) rval = read_756(rp->ident, cp); if (flags & F_8500) rval = read_r8500(rp->ident, cp); if (rval < 0) return (rval); /* * For radios without a 0x1a command, read the frequency and * mode directly later. */ if (flags & F_VFO) setcmda(rp->ident, cmdvfom, rsp); if (flags & (F_7000 | F_756 | F_8500)) return (rval); return (readvfo(rp)); } /* * writechan(radio) - write channel frequency and mode */ int writechan( /* returns 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdwrite[] = {V_WRITE, FI}; u_char rsp[BMAX]; int temp; /* * For radios with a 0x1a command, construct the model-specific * data message and write the frequency, mode and ancillary * data. First, read the current frequency and mode, which might * have been changed recently without telling this program. */ cp = &rp->chan; readvfo(rp); if (flags & F_7000) return (write_7000(rp->ident, cp)); if (flags & F_756) return (write_756(rp->ident, cp)); if (flags & F_8500) return (write_r8500(rp->ident, cp)); /* * For older radios, write the frequency and mode directly. */ if (setchan(rp->ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); return (setcmda(rp->ident, cmdwrite, rsp)); } /* * emptychan(ident, chan) - empty channel */ int emptychan( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { u_char cmdempty[] = {V_EMPTY, FI}; u_char rsp[BMAX]; /* * Set bank and channel as necessary. */ if (setchan(ident, cp->bank, cp->mchan) == R_ERR) return (R_ERR); emptyvfo(cp); return (setcmda(ident, cmdempty, rsp)); } /* * readvfo(radio) - read current frequency and mode */ int readvfo( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp /* radio structure */ ) { struct chan *cp; u_char cmdfreq[] = {V_RFREQ, FI}; u_char cmdmode[] = {V_RMODE, FI}; u_char rsp[BMAX]; double dtemp; int rval; /* * If the cache is valid, don't diddle the radio. */ if (flags & F_CACHE) return(R_OK); /* * Update VFO frequency and mode. */ cp = &rp->chan; rval = setcmda(rp->ident, cmdfreq, rsp); if (rval < 0) return (rval); if (rval == 6 && (flags & F_735)) memcpy(&cp->vfo.freq[1], &rsp[1], 4); else if (rval == 7) memcpy(cp->vfo.freq, &rsp[1], 5); rval = setcmda(rp->ident, cmdmode, rsp); if (rval < 0) return (rval); memcpy(cp->vfo.mode, &rsp[1], rval - 2); /* * Update channel frequency and mode. */ dtemp = freqdouble(cp->vfo.freq, 5); cp->freq = (dtemp * (1 - rp->freq_comp / 1e6) - rp->bfo[cp->mode & 0x0f]) / 1e6; cp->mode = cp->vfo.mode[0]; if (rval > 3) cp->mode |= cp->vfo.mode[1] << 8; flags |= F_CACHE; return (rval); } /* * emptyvfo - initialize VFO * * Initialize VFO with zero frequency and valid ancillary values. Once * the frequency and mode have been set, the VFO can be stored in a * memory channgel. Both the 756 and 7000 are quite particular about * vaild or default tone data before storing. */ int emptyvfo( struct chan *cp ) { u_char tone[] = {0x00, 0x08, 0x85}; u_char dtcs[] = {0x00, 0x00, 0x23}; struct vfo7000 *vp; /* * An ampth VFO has default repeater tone, tone squelch and * digital tone squelch, and empty name. */ cp->freq = 0; cp->mode = 0; cp->split = 0; cp->step = 0; cp->pstep = 0; memset(&cp->aux, 0, sizeof(struct aux)); memset(cp->name, 0, sizeof(cp->name)); vp = &cp->vfo; memset(vp, 0, sizeof(struct vfo7000)); memcpy(&vp->tone, tone, 3); memcpy(&vp->tsql, tone, 3); memcpy(&vp->dtcs, dtcs, 3); flags &= ~F_CACHE; return (R_OK); } /* * loadfreq(radio, freq) - write vfo frequency */ int loadfreq( /* returns > 0 (ok) or < 0 (error) */ struct icom *rp, /* radio structure */ double freq /* frequency (MHz) */ ) { struct chan *cp; u_char cmd[] = {V_SFREQ, 0, 0, 0, 0, FI, FI}; u_char rsp[BMAX]; int temp; double dtemp; cp = &rp->chan; if (flags & F_735) temp = 4; else temp = 5; dtemp = freq * 1e6 * (1 + rp->freq_comp / 1e6) + rp->bfo[cp->mode & 0x0f]; doublefreq(dtemp, &cmd[1], temp); return (setcmda(rp->ident, cmd, rsp)); } /* * loadmode(ident, mode) - write vfo mode */ int loadmode( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int mode /* mode */ ) { u_char frq[] = {V_RFREQ, FI}; u_char cmd[] = {V_SMODE, 0, FI, FI}; u_char rsp[BMAX], sfrq[BMAX]; int rval; cmd[1] = mode; if (flags & F_MODE) cmd[2] = mode >> 8; /* * If VFO is not corrected, restore it after loading the mode. */ if (!(flags & F_RELD)) return (setcmda(ident, cmd, rsp)); setcmda(ident, frq, sfrq); rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); sfrq[0] = V_SFREQ; return (setcmda(ident, sfrq, rsp)); } /* * readoffset(ident, offset) read transmit duplex offset */ int readoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double *freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_ROFFS, FI}; u_char rsp[BMAX]; double dtemp; int rval; rval = setcmda(ident, cmd, rsp); if (rval < 0) return (rval); dtemp = freqdouble(&rsp[1], 3); *freq = dtemp / 10.; return (rval); } /* * loadoffset(ident, offset) - write transmit duplex offset */ int loadoffset( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ double freq /* transmit offset (kHz) */ ) { u_char cmd[] = {V_SOFFS, 0, 0, 0, FI}; u_char rsp[BMAX]; doublefreq(fabs(freq) * 10., &cmd[1], 3); return (setcmda(ident, cmd, rsp)); } /* * readbank(ident, bank, name) - read bank name (R8500) */ int readbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { u_char cmd[] = {V_SETW, S_RBNK, 0, FI}; struct bankmsg rsp; char s1[LINMAX]; int rval; sprintf(s1, "%02d", bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); rval = setcmda(ident, (u_char *)&cmd, (u_char *)&rsp); if (rval < 0) return (rval); rsp.name[sizeof(rsp.name)] = '\0'; sscanf(rsp.name, "%s", name); return (rval); } /* * loadbank(ident, bank, name) - write bank name (R8500) */ int loadbank( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ int bank, /* bank number */ char *name /* bank name */ ) { struct bankmsg cmd = {V_SETW, S_WBNK}; u_char rsp[BMAX]; char s1[LINMAX]; int temp; sprintf(s1, "%02d", bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(name); if (temp > sizeof(cmd.name)) temp = sizeof(cmd.name); memcpy(cmd.name, name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_r8500(ident, chan) - read channel data (R8500) * * This radio is a receiver only. It has no VFO; data are stored only in * channels. In addition to the usual frequency and mode data, it can * store the step, programmed step and attenuator data in each channel. */ int read_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident , /* radio ident */ struct chan *cp /* channel structure */ ) { struct chanmsg rsp; u_char cmd[] = {V_SETW, 0x01, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return (R_ERR); /* * Assemble VFO data */ if (temp < sizeof(struct chanmsg)) return (R_OK); memcpy(cp->vfo.freq, rsp.freq, 5); memcpy(cp->vfo.mode, rsp.mode, 2); /* * Copy step, pstep, attenuator and scan. */ cp->aux = rsp.aux; /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * write_r8500(ident, chan) - write channel data (R8500) */ int write_r8500( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chanmsg cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.freq, &cp->vfo.freq, 5); memcpy(&cmd.mode, &cp->vfo.mode, 2); /* * Insert step, program step, attenuator and scan. The radio * insists on a nonero pstep, even if not used. */ cmd.aux = cp->aux; if (cmd.aux.pstep[0] == 0 && cmd.aux.pstep[1] == 0) { cmd.aux.pstep[0] = 0x10; cmd.aux.pstep[1] = 0x00; } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_756(radio, chan) - read channel data (756 class) * * This radio can store the frequency, mode and tone codes for the * A VFO when the memory channel is written. */ int read_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident */ struct chan *cp /* channel structure */ ) { struct vfo7000 *wf; struct chan756 rsp; u_char cmd[] = {V_SETW, 0x00, 0x00, 0x00, FI}; char s1[LINMAX]; int temp, i; /* * Assemble channel number and read. */ dtohex(cp->mchan, &cmd[2]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO contents. */ if (temp < sizeof(struct chan756)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfo, sizeof(struct vfo756)); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_756(ident, chan) - write channel data (756 class) */ int write_756( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan756 cmd = {V_SETW, 0x00}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert channel number. */ dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode. */ memcpy(&cmd.vfo, &cp->vfo, sizeof(struct vfo756)); /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * read_7000(radio, channel) - read channel data (7000 class) * * This radio can store the frequency, mode and tone codes for both the * A and B VFOs when the memory channel is written. If operating in * split mode, the A VFO is used for receiving and the B VFO for * transmitting. This is handy for splits and odd duplex conditions. */ int read_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ident*/ struct chan *cp /* channel structure */ ) { struct chan7000 rsp; u_char cmd[] = {V_SETW, 0x00, 0, 0, 0, FI}; u_char cmdsplit[]= {V_SPLIT, 0x00, FI}; u_char rsp1[BMAX]; char s1[LINMAX]; int temp, i, rval; /* * Assemble bank/channel number and read. */ sprintf(s1, "%02d", cp->bank); cmd[2] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, &cmd[3]); memset(&rsp, 0, sizeof(rsp)); temp = setcmda(ident, cmd, (u_char *)&rsp); if (temp == R_ERR) return(R_ERR); /* * Copy VFO A contents. */ if (temp < sizeof(struct chan7000)) return (R_OK); cp->aux.scan = rsp.scan; memcpy(&cp->vfo, &rsp.vfoa, sizeof(struct vfo7000)); /* * If the A and B VFOs are different, turn on the split. */ if (memcmp(rsp.vfoa.freq, rsp.vfob.freq, 5) == 0) { cp->split = 0; cmdsplit[1] = 0x00; } else { cp->split = freqdouble(rsp.vfob.freq, 5) / 1e6; cmdsplit[1] = 0x01; } rval = setcmda(ident, cmdsplit, rsp1); if (rval < 0) return (rval); /* * Copy channel name. Left justify and trim trailing space. */ memset(cp->name, 0, sizeof(cp->name)); temp = sizeof(rsp.name); memcpy(cp->name, rsp.name, temp); for (i = temp - 1; i >= 0; i--) { if (cp->name[i] <= ' ') cp->name[i] = '\0'; else break; } return (R_OK); } /* * Write_7000(ident, chan) - write channel data (7000 class) */ int write_7000( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ struct chan *cp /* channel structure */ ) { struct chan7000 cmd = {V_SETW, 0x0}; char s1[LINMAX]; u_char rsp[BMAX]; int temp; double dtemp; /* * Insert band/chan address. */ sprintf(s1, "%02d", cp->bank); cmd.bank = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); dtohex(cp->mchan, cmd.mchan); /* * Insert current frequency/mode in both the A and B VFOs. If in * split mode update the split frequency in the B VFO. */ memcpy(&cmd.vfoa, &cp->vfo, sizeof(struct vfo7000)); memcpy(&cmd.vfob, &cp->vfo, sizeof(struct vfo7000)); if (cp->split != 0) { doublefreq(cp->split * 1e6, cmd.vfob.freq, 5); memcpy(&cmd.vfob.mode, cp->vfo.mode, 2); } /* * Insert channel name. */ memset(cmd.name, ' ', sizeof(cmd.name)); temp = strlen(cp->name); if (temp > strlen(cmd.name)) temp = strlen(cmd.name); memcpy(cmd.name, cp->name, temp); cmd.fd = FI; return (setcmda(ident, (u_char *)&cmd, rsp)); } /* * setcmda(ident, cmd, rsp) - send CI-V command and receive response. */ int setcmda( /* returns > 0 (ok) or < 0 (error) */ int ident, /* radio ID */ u_char *cmd, /* command */ u_char *rsp /* response */ ) { int temp; temp = sndpkt(ident, cmd, rsp); if (temp < 2 || rsp[0] == NAK) return (R_ERR); return (temp); } /* * BCD conversion routines * * These routines convert between internal (floating point) format and * radio (BCD) format. BCD data are two digits per octet in big normal * or reversed order, depending on data type. These routines convert * between internal and reversed data types. * * data type BCD units order * ==================================================== * bank 2 1 normal * channel 2/4 1 normal (4 for R8500) * frequency 8/10 1/10 Hz reversed (8 for 735) * transmit offset 6 100 Hz reversed * dial tune step 4 100 Hz reversed */ /* * dtohex(dec, hex) integer to 4 packed digits */ void dtohex( int arg, /* decimal integer */ u_char *hex /* packet hex string */ ) { u_char *ptr; char s1[LINMAX]; sprintf(s1, "%04d", arg); hex[0] = ((s1[0] & 0xf) << 4) | (s1[1] & 0xf); hex[1] = ((s1[2] & 0xf) << 4) | (s1[3] & 0xf); } /* * doublefreq(freq, y, len) - double to ICOM frequency with padding */ void doublefreq( double freq, /* frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s1[11]; char *y; sprintf(s1, " %10.0lf", freq); y = s1 + 10; i = 0; while (*y != ' ') { x[i] = *y-- & 0xf; x[i] = x[i] | ((*y-- & 0xf) << 4); i++; } for (; i < len; i++) x[i] = 0; x[i] = FI; } /* * freqdouble(x, len) - ICOM frequency to double */ double freqdouble( /* returns frequency */ u_char *x, /* radio frequency */ int len /* length (octets) */ ) { int i; char s[11]; char *y; double dtemp; y = s + 2 * len; *y-- = '\0'; for (i = 0; i < len && x[i] != FI; i++) { *y-- = (char)((x[i] & 0xf) + '0'); *y-- = (char)(((x[i] >> 4) & 0xf) + '0'); } sscanf(s, "%lf", &dtemp); return (dtemp); } /* end program */ icom-20120228/r8500_ham0000644000175000017500000001070410423551761013231 0ustar colincolin# r8500 # Amateur radio # w1aw cw practice 1300Z 2000Z 2300Z 0200Z # w1aw cw bulletin 2100Z 0000Z 0300Z 5.0 1817.5 cw name w1aw-cw + 3581.5 cw name w1aw-cw + 7047.5 cw name w1aw-cw + 14047.5 cw name w1aw-cw + 18097.5 cw name w1aw-cw + 21067.5 cw name w1aw-cw + 28067.5 cw name w1aw-cw #+ 147.555 fm name w1aw-cw # w1aw rtty bulletin 2200 0100Z #+ 3625 rtty name w1aw-rtty #+ 7095 rtty name w1aw-rtty #+ 14095 rtty name w1aw-rtty #+ 180125 rtty name w1aw-rtty #+ 21095 rtty name w1aw-rtty #+ 28095 rtty name w1aw-rtty #+ 147.555 fm name w1aw-rtty # w1aw lsb bulletin 0145Z + 1855 lsb name w1aw-phone + 3990 lsb name w1aw-phone + 7290 lsb name w1aw-phone + 14290 usb name w1aw-phone + 18160 usb name w1aw-phone + 21390 usb name w1aw-phone + 28590 usb name w1aw-phone # 147.555 fm name w1aw-phone # bandplan #+ 1.8 cw name cw # 1.8-1.843 cw #+ 1.843 lsb name phone # 1.843-2.0 phone #+ 3.5 cw name cw # 3.5-3.58 cw #+ 3.58 lsb name rtty # 3.58-3.62 rtty #+ 3.62 lsb name pkt # 3.62-3.635 packet #+ 3.635 lsb name cw # 3.635-3.75 cw #+ 3.75 lsb name phone # 3.75-4.0 phone + 5330.5 usb name 60-1 # 60 M phone 50 W + 5346.5 usb name 60-2 # 60 M phone 50 W + 5366.5 usb name 60-3 # 60 M phone 50 W + 5371.5 usb name 60-4 # 60 M phone 50 W + 5403.5 usb name 60-UK # 60 M phone 50 W UK #+ 7.0 cw name cw # 7.0-7.08 cw #+ 7.08 lsb name rtty # 7.08-7.1 rtty #+ 7.1 lsb name cw # 7.1-7.15 cw #+ 7.15 lsb name phone # 7.15-7.3 phone #+ 10.1 cw name cw # 10.1-10.13 cw #+ 10.13 lsb name rtty # 10.13-10.14 rtty #+ 10.14 lsb name packet # 10.14-10.15 packet #+ 14.0 cw name cw # 14.0-14.07 cw #+ 14.07 lsb name rtty # 14.07-14.95 rtty #+ 14.095 lsb name packet # 14.095-14.112 packet #+ 14.112 cw name cw # 14.112-14.15 cw #+ 14.15 usb name phone # 14.15-14.35 phone #+ 18.068 cw name cw # 18.068-18.1 cw #+ 18.1 lsb name rtty # 18.1-18.105 rtty #+ 18.105 lsb name packet # 18.105-18.11 packet #+ 18.11 usb name phone # 18.11-18.168 phone #+ 21.0 cw name cw # 21.0-21.2 cw #+ 21.2 usb name phone # 21.2-21.45 phone #+ 24.89 cw name cw # 24.89-24.93 cw #+ 24.93 usb name phone # 24.93-24.99 phone #+ 28.0 cw name cw # 28.0-28.07 cw #+ 28.07 lsb name rtty # 28.07-29.15 rtty #+ 28.15 cw name cw # 28.15-29.19 cw #+ 28.3 usb name phone # 28.3-29.3 phone #+ 50.0 cw name cw # 50.0-50.1 cw #+ 50.1 usb name phone # 50.1-50.6 phone #+ 144.0 cw name cw # 144-144.1 cw #+ 144.1 usb name phone # 148 phone #+ 222.0 usb name cw # 148 cw #+ 420.0 usb name phone # 450 #+ 902.0 usb name wifi # 928 #+ 1240.0 usb name wifi # 1300 # FM #+ 29.52 fm dial 20 name rpt-in # 4 channels + 29.62 fm dial 20 name rpt-out # 4 channels #+ 52.0 fm dial 20 name rpt-in # 23 channels + 52.5 fm dial 20 name rpt-out # 23 channels #+ 144.6 fm name rpt-in dial 15 # 20 channels + 145.2 fm name rpt-out dial 15 # 20 channels #+ 146.01 fm name rpt-in dial 15 # 20 channels + 146.61 fm name rpt-out dial 15 # 20 channels #+ 146.52 fm name simplex dial 15 # 20 channels + 147.0 fm name rpt-out dial 15 # 20 channels + 146.42 fm name simplex dial 15 # 20 channels #+ 147.6 fm name rpt-in dial 15 # 20 channels #+ 222.25 name rpt-in dial 20 # 20 channels + 223.4 name simplex dial 20 # 20 channels + 223.85 name rpt-out dial 20 # 20 channels # + 442.0 fm name rpt dial 25 # 442-445 + 446.0 fm name simplex dial 25 # 445-447 + 447.0 fm name rpt dial 25 # 447-450 # #+ 906.0 fm name rpt-in dial 25 # 906-909 + 918.0 fm name rpt-out dial 25 # 918-921 + 927.0 fm name simplex dial 25 # 927-928 #+ 29.61 FM name rpt-out dial 20 # 29.7 repeater output # 0.53 AM name MW dial 10 # 1.70 AM broadcast # 30.0 FM name SAFETY dial 20 # 38.9 Public Safety # 35.2 FM name BEEPER dial 20 # 35.7 beeper # 43.20 FM name BEEPER dial 20 # 43.7 beeper # 52.52 FM name rpt-out dial 20 # 53.0 repeater output # 53.01 FM name rpt-out dial 20 # 54.0 repeater output # 72.00 FM name FIXED dial 20 # 76.0 operational fixed # 88.0 WFM name FM dial 100 # 108.0 FM broadcast #150.0 FM name SAFETY dial 20 # 160.0 Public Safety #169.0 FM name SAFETY dial 25 # 172.0 Public Safety #223.70 FM name rpt-out dial 20 # 225.0 repeater output #442.0 FM name rpt-out dial 25 # 445.0 repeater output #447.0 FM name rpt-out dial 25 # 450.0 repeater output #450.0 FM name MOBILE dial 25 # 470.0 land fixed/mobile #931.0125 FM name BEEPER dial 25 # 932.0 beeper #1282.0 FM name rpt-out dial 25 # 1288.0 repeater output #+ 145.21 FM name rpt-out dial 15 # 145.5 repeater output #+ 146.61 FM name rpt-out dial 15 # 147.4 repeater output icom-20120228/8500.PAG0000755000175000017500000000103410376731213012626 0ustar colincolin# Beepers and Pagers # 35.26 FM # 1 35.30 FM # 2 35.34 FM # 3 35.38 FM # 4 35.42 FM # 5 35.46 FM # 6 35.50 FM # 7 35.54 FM # 8 35.62 FM # 9 35.66 FM # 10 # 43.26 FM # 1 43.30 FM # 2 43.34 FM # 3 43.38 FM # 4 43.42 FM # 5 43.46 FM # 6 43.50 FM # 7 43.54 FM # 8 43.62 FM # 9 43.66 FM # 10 # 152.24 FM # 152.84 FM # 158.10 FM # 158.70 FM # # 462.550 FM # GMRS 462.575 FM # GMRS 462.600 FM # GMRS 462.625 FM # GMRS 462.650 FM # GMRS 462.675 FM # GMRS 462.700 FM # GMRS 462.725 FM # GMRS icom-20120228/PK.BAK0000744000175000017500000002243210453521345012534 0ustar colincolin/* * Program to control ICOM radios * * Input/output interface */ #include "icom.h" #ifndef MSDOS #include #include #include #else /* MSDOS */ #include #endif /* MSDOS */ /* * Parameters */ #ifdef MSDOS #define XFRETRY 3000 /* interface timeout counter (MSDOS) */ /* * Define port and speed */ #define PORT 0x03f8 /* port address (COM1) */ /* #define PORT 0x02f8 /* port address (COM2) */ /* #define PORT 0x03e8 /* port address (COM3) */ /* #define PORT 0x02e8 /* port address (COM4) */ /* #define BAUD 384 /* baud rate 300 */ #define BAUD 96 /* baud rate 1200 */ /* #define BAUD 12 /* baud rate 9600 */ /* * Serial port definitions (8250) */ #define THR 0 /* transmitter holding register */ #define RBR 0 /* receiver buffer register */ #define DLL 0 /* divisor latch LSB */ #define DLM 1 /* divisor latch MSB */ #define LCR 3 /* line control register */ #define LCR_8BITS 3 /* 8 bit words */ #define LCR_DLAB 0x80 /* divisor latch access bit */ #define MCR 4 /* modem control register */ #define MCR_DTR 1 /* data terminal ready */ #define MCR_RTS 2 /* request to send */ #define LSR 5 /* line status register */ #define LSR_DR 0x01 /* data ready */ #define LSR_THRE 0x20 /* trans line holding register empty */ #define LSR_TSRE 0x40 /* transmitter shift register empty */ #endif /* MSDOS */ /* * fsa definitions */ #define S_IDLE 0 /* idle */ #define S_HDR 1 /* header */ #define S_TX 2 /* address */ #define S_DATA 3 /* data */ #define S_ERROR 4 /* error */ /* * Global variables */ int retry; /* max command retries */ /* * Local function prototypes */ static u_char sndoctet(u_char); /* send octet */ static u_char rcvoctet(); /* receive octet */ /* * Local variables */ static int count; /* retry counter */ static int state; /* fsa state */ #ifdef MSDOS static int inp(int); /* input port byte */ static void outp(int, int); /* output port byte */ static void outpw(int, int); /* output port word */ #endif /* MSDOS */ /* * Packet routines * * These routines send a packet and receive the response. Since the CI-V * bus is bidirectional, every octet sent by this program is read back * for check. If an error occurs on transmit (readback compare check), * the packet is resent. If an error occurs on receive (timeout), all * input to the terminating fe is discarded and the packet is resent. If * the maximum number of retries is not exceeded, the program returns * the number of octets in the user buffer; otherwise, it returns zero. * * ICOM frame format * * Frames begin with a two-octet preamble (fe-fe) followed by the radio * address RA, controller address (e0), command CN, subcommand SN * (optional), zero or more data octets DA and terminator fd. If a * subcommand is not used, the data field begins with the SN octet. * * The radio responds to a command frame with a response frame in the * same format, but with the radio and controller addresses * interchanged. If the response contains no data, the CN octet is fb * for success or fa for failure and the following octet fd ends the * frame. If the response format includes a data field, a frame with a * nonempty data field is a success, but an empty data field is a * failure. * * +------+------+------+------+------+------+--//--+------+ * | fe | fe | RA | e0 | CN | SN | DA | fd | * +------+------+------+------+------+------+--//--+------+ */ /* * initpkt() - initialize serial interface * * This routine opens the serial interface for raw transmission; that * is, character-at-a-time, no stripping, checking or monkeying with the * bits. For Unix, an input operation ends either with the receipt of a * character or a 0.5-s timeout. */ void initpkt( int baud /* CI-V bit rate code */ ) /* no return value */ { #ifdef MSDOS outp(PORT+LCR, LCR_DLAB); /* set baud */ outpw(PORT+DLL, BAUD); outp(PORT+LCR, LCR_8BITS); /* set 8 bits, no parity */ outp(PORT+MCR, MCR_DTR+MCR_RTS); /* wake up modem */ #else /* MSDOS */ struct termios ttyb, *ttyp; if (pflags & P_ERMSG) printf("*** baud %d\n", baud); ttyp = &ttyb; if (tcgetattr(fd_icom, ttyp) < 0) { printf("\n*** Unable to get line parameters\n"); exit(1); } ttyp->c_iflag = 0; /* input modes */ ttyp->c_oflag = 0; /* output modes */ ttyp->c_cflag = CS8|CREAD|CLOCAL|baud; /* control modes */ ttyp->c_lflag = 0; /* local modes */ ttyp->c_cc[VMIN] = 0; /* min chars */ ttyp->c_cc[VTIME] = 5; /* receive timeout */ if (tcsetattr(fd_icom, TCSANOW, ttyp) < 0) { printf("\n*** Unable to set line parameters\n"); exit(1); } #endif /* MSDOS */ retry = RETRY; } /* * sndpkt(r, x, y) - send packet and receive response * * This routine sends a command frame, which consists of all except the * preamble octets fe-fe. It then listens for the response frame and * returns the payload to the caller. The routine checks for correct * response header format; that is, the length of the response vector * returned to the caller must be at least two and the radio and * controller address octets must be interchanged; otherwise, the * operation is retried up to the number of times specified in a global * variable. * * The trace function, which is enabled by the P_TRACE bit of the global * pflags variable, prints all characters received or echoed on the bus * preceded by a T (transmit) or R (receive). The P_ERMSG bit of the * pflags variable enables printing of bus error messages. * * Note that the first octet sent is a pad (ff) in order to allow time * for the radio to flush its receive buffer after sending the previous * response. Even with this precaution, some of the older radios * occasionally fail to receive a command and it has to be sent again. */ int sndpkt( /* returns octet count */ int r, /* radio address */ u_char *x, /* command vector */ u_char *y /* response vector */ ) { int i, j, k; /* temps */ u_char temp; #ifndef MSDOS (void)tcflush(fd_icom, TCIOFLUSH); #endif /* MSDOS */ for (i = 0; i < retry; i++) { state = S_IDLE; /* * Transmit packet. */ if (pflags & P_TRACE) printf("T:"); sndoctet(PAD); /* send header */ sndoctet(PR); sndoctet(PR); sndoctet(r); sndoctet(TX); for (j = 0; j < BMAX; j++) { /* send body */ if (sndoctet(x[j]) == FI) break; } while (rcvoctet() != FI); /* purge echos */ if (x[0] == V_FREQT || x[0] == V_MODET) return (0); /* shortcut for broadcast */ /* * Receive packet. First, delete all characters * preceeding a PR, then discard all PRs. Check that the * RE and TX fields are correctly interchanged, then * copy the remaining data and FI to the user buffer. */ if (pflags & P_TRACE) printf("\nR:"); j = 0; while ((temp = rcvoctet()) != FI) { switch (state) { case S_IDLE: if (temp != PR) continue; state = S_HDR; break; case S_HDR: if (temp == PR) { continue; } else if (temp != TX) { if (pflags & P_ERMSG) printf( "\n*** TX error\n"); state = S_ERROR; } state = S_TX; break; case S_TX: if (temp != r) { if (pflags & P_ERMSG) printf( "\n*** RE error\n"); state = S_ERROR; } state = S_DATA; break; case S_DATA: if (j >= BMAX ) { if (pflags & P_ERMSG) printf( "\n*** buffer overrun\n"); state = S_ERROR; j = 0; } y[j++] = temp; break; case S_ERROR: break; } } if (pflags & P_TRACE) printf("\n"); if (j > 0) { y[j++] = FI; return (j); } } if (pflags & P_ERMSG) printf("*** retries exceeded\n"); return (0); } /* * Interface routines * * These routines read and write octets on the bus. In case of receive * timeout a FI code is returned. In case of output collision (echo * does not match octet sent), the remainder of the collision frame * (including the trailing FI) is discarded. */ #ifdef MSDOS /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x; /* octet */ ) { u_char temp; inp(PORT+RBR); /* flush spikes */ outp(PORT+THR, x); /* write octet */ if (x == (temp = rcvoctet())) return (x); if (pflags & P_ERMSG) printf("\n*** bus error %02x %02x\n", x, temp); while (rcvoctet() != FI); /* discard junk */ return (FI); } /* * Receive octet */ static u_char rcvoctet() /* returns octet, FI if error */ { int i; u_char temp; for (i = 0; i < XFRETRY; i++) /* wait for input */ if ((inp(PORT + LSR)) & LSR_DR != 0) { if (i > count) count = i; temp = inp(PORT+RBR); /* read octet */ return (temp); } return (FI); } #else /* MSDOS */ /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x /* octet */ ) { write(fd_icom, &x, 1); return (x); } /* * rcvoctet () - receive octet */ static u_char rcvoctet() /* returns octet */ { u_char y; if (read(fd_icom, &y, 1) < 1) y = FI; /* come here if timeout */ if (pflags & P_TRACE && y != PAD) printf(" %02x", y); return (y); } #endif /* MSDOS */ /* end program */ icom-20120228/PCR.MCH0000744000175000017500000003740310376731213012665 0ustar colincolin[REV],,,,,,,,, ID=1.0.0,,,,,,,,, APP=IC-PCR1000 Revision 2.0,,,,,,,,, [BANK00],,,,,,,,, BANKNAME=Africa,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=AFI/SAT,,3.452,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=AFI/SAT,,6.535,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=AFI/SAT,,8.861,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=AFI/SAT,,13.357,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=AFI/SAT,,17.955,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=AFI-2,,3.419,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=AFI-2,,5.652,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=AFI-2,,8.894,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=AFI-2,,13.273,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=AFI-2,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=AFI/MID,,3.467,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=AFI/MID,,5.658,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=AFI/MID,,10.018,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=AFI/MID,,11.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=AFI/MID,,13.288,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=AFI/MID,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=AFI-4,,2.878,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=AFI-4,,5.493,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=AFI-4,,8.903,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=AFI-4,,13.294,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=AFI-4,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=AFI/INO,,3.476,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=AFI/INO,,5.634,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=AFI/INO,,8.879,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=AFI/INO,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=AFI/INO,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK01],,,,,,,,, BANKNAME=Pacific,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=CEP-1/2,,2.869,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=CEP-1/2,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=CEP-1/2,,5.547,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=CEP-1/2,,5.574,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=CEP-1/2,,8.843,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=CEP-1/2,,11.282,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=CEP-1/2,,13.261,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=CEP-1/2,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=CEP-1/2,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=CWP-1/2,,2.998,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=CWP-1/2,,4.666,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=CWP-1/2,,6.532,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=CWP-1/2,,6.562,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=CWP-1/2,,8.903,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=CWP-1/2,,11.384,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=CWP-1/2,,13.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=CWP-1/2,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=CWP-1/2,,21.985,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NP,,2.932,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NP,,5.628,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NP,,5.667,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NP,,6.665,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NP,,8.915,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NP,,10.048,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NP,,13.294,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NP,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NP,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NP,,21.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=SP,,3.467,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=SP,,5.643,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=SP,,5.667,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=SP,,8.867,USB,3k,OFF,3kHz,OFF,OFF,OFF 32=SP,,13.273,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=SP,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK02],,,,,,,,, BANKNAME=Eur/W_Asia,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=EUR-A,,3.479,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=EUR-A,,5.661,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=EUR-A,,6.598,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=EUR-A,,10.084,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=EUR-A,,13.288,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=EUR-A,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=MID-1,,2.992,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=MID-1,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=MID-1,,6.631,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=MID-1,,8.951,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=MID-1,,11.375,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=MID-1,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=MID-3,,2.944,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=MID-3,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=MID-3,,6.631,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=MID-3,,8.951,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=MID-3,,11.375,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=MID-3,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NCA-1,,3.019,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NCA-1,,5.646,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NCA-1,,13.315,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NCA-1,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NCA-2,,2.851,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NCA-2,,4.678,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NCA-2,,6.592,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NCA-2,,10.096,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NCA-2,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NCA-3,,3.004,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=NCA-3,,5.664,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=NCA-3,,10.039,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=NCA-3,,13.303,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=NCA-3,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK03],,,,,,,,, BANKNAME=N_Atlantic,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=NAT-A,,3.016,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=NAT-A,,5.598,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=NAT-A,,8.906,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=NAT-A,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=NAT-A,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=NAT-B,,2.899,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=NAT-B,,5.616,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=NAT-B,,8.864,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=NAT-B,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=NAT-B,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=NAT-C,,2.862,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=NAT-C,,5.649,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=NAT-C,,8.879,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=NAT-C,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=NAT-C,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=NAT-D,,2.971,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=NAT-D,,4.675,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=NAT-D,,8.891,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NAT-D,,11.279,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NAT-D,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NAT-D,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NAT-E,,2.962,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NAT-E,,6.628,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NAT-E,,8.825,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NAT-E,,11.309,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NAT-E,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NAT-F,,3.476,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NAT-F,,6.622,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=NAT-F,,8.831,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK04],,,,,,,,, BANKNAME=Carr/S_Am,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=CAR-A,,2.887,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=CAR-A,,5.55,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=CAR-A,,6.577,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=CAR-A,,8.918,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=CAR-A,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=CAR-A,,13.297,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=CAR-A,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=CAR-B,,3.455,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=CAR-B,,5.52,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=CAR-B,,6.586,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=CAR-B,,8.846,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=CAR-B,,11.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=CAR-B,,11.387,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=CAR-B,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=E_SAM,,3.479,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=E_SAM,,5.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=E_SAM,,8.855,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=E_SAM,,10.096,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=E_SAM,,13.297,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=E_SAM,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=W_SAM,,2.944,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=W_SAM,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=W_SAM,,6.549,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=W_SAM,,10.024,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=W_SAM,,11.36,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=W_SAM,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=SAT-2,,2.854,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=SAT-2,,5.565,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=SAT-2,,11.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=SAT-2,,13.315,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=SAT-2,,17.955,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK05],,,,,,,,, BANKNAME=E/S_Asia,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=EA-1,,3.016,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=EA-1,,6.571,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=EA-1,,8.897,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=EA-1,,10.042,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=EA-1,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=SEA-1/3,,3.47,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=SEA-1/3,,6.556,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=SEA-1/3,,10.066,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=SEA-1/3,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=SEA-1/3,,13.318,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=SEA-1/3,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=SEA/EA,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=SEA/EA,,5.649,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=SEA/EA,,5.655,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=SEA/EA,,8.942,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=SEA/EA,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=SEA/EA,,13.309,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=SEA/EA,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK06],,,,,,,,, BANKNAME=MET,,,,,,,,, ACTIVECH=1,,,,,,,,, 00=MET-NAT,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=MET-NAT,,6.604,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=MET-NAT,,10.051,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=MET-NAT,,13.27,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=MET-EU,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=MET-EU,,5.505,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=MET-EU,,8.957,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=MET-EU,,13.264,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=MET-PAC,,2.863,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=MET-PAC,,6.679,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=MET-PAC,,8.828,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=MET-PAC,,13.282,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK07],,,,,,,,, BANKNAME=Comp-1,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=Houston,,5.529,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=Houston,,6.637,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=Houston,,10.075,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=Houston,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=Houston,,13.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=Houston,,17.94,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=Honolulu,,3.013,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=Honolulu,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=Honolulu,,10.033,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=Honolulu,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=Honolulu,,13.348,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=Honolulu,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=Honolulu,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=Honolulu,,21.964,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=New_York,,3.494,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=New_York,,6.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=New_York,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=New_York,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=New_York,,13.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=New_York,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=New_York,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=San_Fran,,3.013,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=San_Fran,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=San_Fran,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=San_Fran,,8.843,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=San_Fran,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=San_Fran,,13.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=San_Fran,,13.348,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=San_Fran,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=San_Fran,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=Gulf_Mex,,4.55,USB,3k,OFF,3kHz,OFF,OFF,OFF 34=Gulf_Mex,,6.82,USB,3k,OFF,3kHz,OFF,OFF,OFF 35=Gulf_Mex,,8.07,USB,3k,OFF,3kHz,OFF,OFF,OFF 36=Gulf_Mex,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 37=St_Johns,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 38=St_Johns,,5.604,USB,3k,OFF,3kHz,OFF,OFF,OFF 39=St_Johns,,8.819,USB,3k,OFF,3kHz,OFF,OFF,OFF 40=St_Johns,,13.285,USB,3k,OFF,3kHz,OFF,OFF,OFF 41=St_Johns,,13.42,USB,3k,OFF,3kHz,OFF,OFF,OFF 42=St_Johns,,17.91,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK08],,,,,,,,, BANKNAME=Comp-2,,,,,,,,, ACTIVECH=42,,,,,,,,, 00=Berne,,3.01,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=Berne,,4.654,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=Berne,,4.67,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=Berne,,4.702,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=Berne,,6.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=Berne,,6.643,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=Berne,,6.705,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=Berne,,6.742,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=Berne,,8.936,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=Berne,,9.211,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=Berne,,10.069,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=Berne,,13.205,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=Berne,,13.266,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=Berne,,13.324,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=Berne,,15.046,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=Berne,,15.05,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=Berne,,15.835,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=Berne,,17.931,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=Berne,,18.023,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=Berne,,18.48,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=Berne,,19.554,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=Berne,,20.035,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=Berne,,20.87,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=Berne,,21.933,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=Berne,,21.988,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=Berne,,23.285,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=Berne,,25.5,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=London,,3.482,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=London,,4.807,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=London,,5.61,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=London,,6.634,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=London,,8.17,USB,3k,OFF,3kHz,OFF,OFF,OFF 32=London,,8.96,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=London,,10.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 34=London,,11.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 35=London,,12.133,USB,3k,OFF,3kHz,OFF,OFF,OFF 36=London,,13.865,USB,3k,OFF,3kHz,OFF,OFF,OFF 37=London,,14.89,USB,3k,OFF,3kHz,OFF,OFF,OFF 38=London,,17.405,USB,3k,OFF,3kHz,OFF,OFF,OFF 39=London,,19.51,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK09],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=7,,,,,,,,, 00=WWV2,,2.5,AM,6k,ON,5kHz,OFF,OFF,OFF 01=WWV5,,5,AM,6k,ON,5kHz,OFF,OFF,OFF 02=WWV10,,10,AM,6k,ON,5kHz,OFF,OFF,OFF 03=WWV15,,15,AM,6k,ON,5kHz,OFF,OFF,OFF 04=WWV20,,20,AM,6k,ON,5kHz,OFF,OFF,OFF 05=CHU3,,3.33,AM,6k,ON,5kHz,OFF,OFF,OFF 06=CHU5,,7.335,AM,6k,ON,5kHz,OFF,OFF,OFF 07=CHU14,,14.67,AM,6k,ON,20kHz,OFF,OFF,OFF [BANK10],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=WFAN,,0.66,AM,15k,OFF,10kHz,OFF,OFF,OFF 19=NONAME,,0.8,AM,15k,OFF,10kHz,OFF,OFF,OFF 01=NONAME,,0.83,AM,15k,OFF,10kHz,OFF,OFF,OFF 18=NONAME,,0.88,AM,15k,OFF,10kHz,OFF,OFF,OFF 02=WPEN,,0.95,AM,15k,OFF,10kHz,OFF,OFF,OFF 03=WBZ,,1.03,AM,15k,OFF,20kHz,OFF,OFF,OFF 04=KYW,,1.06,AM,15k,OFF,10kHz,OFF,OFF,OFF 05=WBAL,,1.09,AM,15k,OFF,10kHz,OFF,OFF,OFF 06=NONAME,,1.1,AM,15k,OFF,10kHz,OFF,OFF,OFF 07=NONAME,,1.11,AM,15k,OFF,10kHz,OFF,OFF,OFF 08=WDEL,,1.15,AM,15k,OFF,10kHz,OFF,OFF,OFF 09=NONAME,,1.17,AM,15k,OFF,10kHz,OFF,OFF,OFF 10=WPHT,,1.21,AM,15k,OFF,10kHz,OFF,OFF,OFF 11=WNRK,,1.26,AM,15k,OFF,10kHz,OFF,OFF,OFF 12=WJBR,,1.29,AM,15k,OFF,10kHz,OFF,OFF,OFF 13=NONAME,,1.33,AM,15k,OFF,10kHz,OFF,OFF,OFF 14=WTMC,,1.38,AM,15k,OFF,10kHz,OFF,OFF,OFF 15=WILM,,1.45,AM,15k,OFF,10kHz,OFF,OFF,OFF 16=NONAME,,1.51,AM,15k,OFF,10kHz,OFF,OFF,OFF 17=WSER,,1.55,AM,15k,OFF,10kHz,OFF,OFF,OFF 20=NONAME,,89.9,WFM,230k,OFF,200kHz,OFF,OFF,OFF 21=WVUD,,91.3,WFM,230k,OFF,200kHz,OFF,OFF,OFF 22=WSTW,,93.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 23=NONAME,,94.1,WFM,230k,OFF,200kHz,OFF,OFF,OFF 24=NONAME,,94.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 25=NONAME,,95.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 26=WJBR,,99.5,WFM,230k,OFF,200kHz,OFF,OFF,OFF 27=WXCY,,103.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 28=NONAME,,107.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF [BANK14],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK15],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK16],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK17],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK18],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK19],,,,,,,,, BANKNAME=scan,,,,,,,,, ACTIVECH=7,,,,,,,,, 02=C17,,493.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 04=C22,,523.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 05=C23,,529.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 07=C48,,679.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 08=C61,,757.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 10=C65,,781.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 13=C29,,565.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 16=C43,,649.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 17=C45,,661.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 20=C57,,733.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF [COMMON],,,,,,,,, ACTIVEBANK=11,,,,,,,,, [BANK11],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=10,,,,,,,,, 00=C2,,59.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 01=C10,,197.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 02=C11,,203.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 03=C12,,209.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 04=C13,,215.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 05=C17,,493.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 06=C22,,523.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 07=C23,,529.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 08=C48,,679.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 09=C61,,757.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 10=C65,,781.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 11=C29,,565.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 12=C43,,649.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 13=C45,,661.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 14=C57,,733.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF icom-20120228/html.data/0000755000175000017500000000000010417560444013556 5ustar colincolinicom-20120228/html.data/SmartObjects/0000755000175000017500000000000010417560444016156 5ustar colincolinicom-20120228/html.data/Snippets/0000755000175000017500000000000010417560444015363 5ustar colincolinicom-20120228/html.data/Queries/0000755000175000017500000000000010417560445015174 5ustar colincolinicom-20120228/html.data/Queries/published-files.aglq0000744000175000017500000000057107742235556021136 0ustar colincolin icom-20120228/html.data/Stationery/0000755000175000017500000000000010417560437015721 5ustar colincolinicom-20120228/html.data/Templates/0000755000175000017500000000000010417560437015516 5ustar colincolinicom-20120228/html.data/Diagrams/0000755000175000017500000000000010417560437015307 5ustar colincolinicom-20120228/html.data/SiteTrash/0000755000175000017500000000000010423261244015455 5ustar colincolinicom-20120228/html.data/SiteTrash/KEYPAD.HTM0000744000175000017500000001051610423257346017020 0ustar colincolin Keypad Commands

Keypad Commands


Following is a list of commands recognized in keypad mode. There are no restrictions on the order of these commands.

DEL
Erase the current keypad input line as if it had never been entered.
q
Exit keypad mode and return to keyboard mode.
s
Receive on transmit frequency. Used with transmit duplex offset feature. This is the same function as the keyboard swap command.
r
Switch to receive mode as in the rx keyboard command.
t
Switch to transmit mode as in the tx keyboard command.
u
Display the radio time in UTC as in the utc keyboard command.
x
Exchange the contents of VFO A and VFO B as in the swap keyboard command.

Frequency and Mode Settings

The most common operations in keypad mode involve quickly navigating or scanning frequency bands. The easy way to do this is to type the frequency in MHz followed by the Enter key. Each Enter key, by itself or preceeded by a frequency, displays the current channel, frequency and mode. The display is correct whether programmed in this way or set using the radio controls.

Frequency scanning is done using the arrow keys UP, DOWN, LEFT and RIGHT. The UP key increases the frequency by one step, the DOWN key decreases it by one step. The size of the step is determined by the rate, which can be selected from 20 discrete levels, where the rate at each level increases in 1-2.5-5-10-... order from 1 Hz to 5 MHz. The LEFT key decreases the level by one, the RIGHT key increases it by one.

The step and rate values can also be set in keyboard mode, but in keyboard mode the step command can set the step to any value which results in a valid frequency for the selected radio. For instance, the step value can be set to 3 kHz when scanning HF aviation bands or 15 kHz when scanning VHF repeater bands.

Modes are selected by a single letter: l (LSB), u (USB), k (CW), a (AM) and f (FM). These work in the same way as the corresponding keyboard mode commands with the default filter selections.

Memory Commands

In these commands the channel argument format is the same as the keyboard memory channel commands. If the argument is missing, the operation applies to the last selected memory bank and channel.

channelc
Read the memory channel as in the chan keyboard command.
channelw
Write the memory channel as in the write keyboard command.
channele
Empty the memory channel as in the empty keyboard command.

Function Keys

F1
Display the antenna selection as in the ant keyboard command.
F2
Display the AGC time constant as in the agc keyboard command.
F3
Display the attenuator selection as in the agc keyboard command.
F4
Display the preamp selection as in the pamp keyboard command.
F5
Display the break selection as in the break keyboard command.
F6
Say the S meter, frequency and mode as in the say keyboard command. This works in the 7000 only.
F7
Display the current meter readings as in the meter keyboard command.
F8
Display the current switches as in the set keyboard command.
F9
Display the currrent controls as in the ctl keyboard command.

icom-20120228/html.data/SiteTrash/KEYBRD.HTM0000744000175000017500000005224210423240017017010 0ustar colincolin Keyboard and Batch Commands

Keyboard and Batch Commands

Following is a list of commands recognized in keyboard and batch modes. Note that the radio command must be given before any command that depends on the radio model. Other than this, there are no restrictions on the order of these commands. Note that several commands shown on the ? help billboard, but not documented here, have not been tested.

A command line consists of a string of keyword/argument subcommands executed in order from left to right. Subcommands take on zero, one or more arguments. If the subcommand is the last one on the command line and with no arguments, the general behavior is to display some program or internal radio value. In general, a question mark ? argument invokes a context-sensitive help menu giving all the valid arguments. If one or two arguments, the general behavior is to set some program or internal radio value. Due to variations in the many ICOM radio models, not all the values work in all radios. In such cases use of an unsupported value results in a "radio doesn't do that" message.

Following are the basic commands to control the radio, select the operating mode and control various basic functions. The command parser is designed for easy access to the most often used functions, such as changing the frequency or mode. When processing the next subcommand in the command line, the parser first looks up the function in the help menu and executes it if found. Next, it determines if the token is a valid frequency and sets the radio frequency if it is. Numbers below 1000 are interpreted in MHz, while those above 1000 are interpreted in kHz. If not a valid frequency, the parser looks up the mode in the help menu and sets it if found. If not found, the parser ignores it and displays an error message.

Program Commands

radio [ name ]
Select and initialize the name radio listed on the help menu and display its capabilities, including the upper and lower band limits, number of memory banks and number of memory channels per bank. This must be the first command in keyboard or batch modes. Upon selection the program inspects the radio to set various default options and reads the first memory channel. Note that some ICOM transceivers support noncontiguous band limits, such as .03-200 MHz and 400-470 MHz for the 7000. The band limits displayed depend on which frequency range is active when the radio is selected. If no radios have been selected and no name is present, scan the CI-V bus for all known radios and select any and all that are present. This is useful when multiple radios are in use and for testing. If a radio has been selected and no name is present, display the capabilities of the current selection.
quit
Exit the program and return control to the shell.
include file
Read commands from file until the end of file. Files can be nested up to 20 levels.
pad
Switch to keypad mode.
trace function
Select the CI-V bus trace function from the list on the help menu. The trace all command displays each CI-V command and response in hex, with prefix T: for packets to the radio and R: for packets from the radio.
dump
Dump the current VFO frequency, mode, duplex and tone settings in hex. Dump related channel data, including the dial step and programmed dial step for the R8500 receiver.
verbose on | off ]
Select the verbose mode from the list on the help menu.

Basic Control Commands

mode [ mode ]
Select one of the mode/filter combinations listed on the help menu. If no argument is given, report the current selection. For most radio models the mode selection includes a filter selection of wide, medium and narrow.
duplex [ offset ]
Set the offset of the transmit duplex offset register. Modern transceivers have duplex offset registers for HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read and write these registers, the frequency must be first set within the correct band.
bank [ bank [ name ] ]
Set the current bank number and optional bank name. If no arguments are present, report the current bank number and name. So far as known, this works only on the R8500.
tx
Place the transceiver in the transmit configuration.
rx
Place the transceiver in the receive configuration.
ptt [ on | off ]
With no argument the status of the transceiver is reported as on if transmitting and off otherwise. With one argument the transmitter is switched on or off.
utc
Set the transceiver year, date and time to the current Universal Coordinated Time (UTC) of the host operating system. The 7000 and 7800 can set the year, date and time. The 756 can set the time, but not the year and date.

Memory Management Commands

The following commands are used to read, write and empty (clear) memory channels and transfer memory contents to and from frequency (text) files. They take the argument range defining a single channel or range of channels that might be in the same or different banks. The channel notation used is represented b.c, where b is the bank number and c the channel number. For radios without banks, including the 706G and 756, the bank number is not used. A range of channels is represented by b1.c1:b2.c2. When spanning different banks, channels wrap from the last channel in one bank to the first channel in the next higher bank and vice versa. In addition, the channels wrap from the last channel in the radio to the first channel and vice versa. Numbering always goes from the first channel to the second channel number in either direction as indicated.

Various defaults apply in order to simplify operation. For instance, a chan, write or empty command with no arguments applies to the last selected bank and channel. When multiple banks are available, a channel number with no bank number applies to the last selected bank. The dollar sign $ replacing a bank or channel number applies to the entire range of banks or channels. For instance, a $:$ represents the entire contents of the memory array.

Additional subcommands can appear on these commands when certain features are selected and available. These include the name, split, tone, tsql, dtcs and, in the R8500, atten, step, pstep and scan. These subcommands are useful when channels are read from the radio, written to a file or read from a file.

save range file
Save the block of memory channels in range to file. Note that empty memory channels are not saved.
restore range file
Restore the block of memory channels in range from file. If range is the single character *, restore the channels using the bank and channel number on each line of the file. Otherwise, renumber the channels as indicated by range.
chan [ range ]
Read the block of memory channels in range.
write [ range ]
Write the block of memory channels in range. Include the frequency, mode and other data available in the radio.
empty [ range ]
Empty (clear) the block of memory channels in range. If range is missing, empty the last channel selected.

Switches, Controls and Meters

These commands are used to inspect and change the various switches, controls and meters available in the radio. As each radio is different, not all commands work with all radios. By convention, a subcommand with no argument displays a menu of all functions that work with the particular radio, while a subcommand with one argument ? displays a help menu of all arguments along with a short description of the function.

set [ switch [ value ] ]
Display or set internal radio switches. A set with one argument switch displays the current value of that switch, but does not change its value. A set with two arguments switch and value sets the designated switch to the given value. Most switches take on names of only off or on, but some like agc and break can take on multiple values.
ctl [ control [ value ] ]
Display or set internal radio controls. A ctl with one argument control displays the current value of that control, but does not change its value. A ctl with two arguments control and value sets the designated control to the given value. Note that those controls involving frequency take signed values over the range -128 to 127 inclusive, while others not involving frequency take values over the range 0 to 255 inclusive.
meter [ meter ]
Display the internal radio meters. A meter with one argument meter displays the current value of that meter. The displayed values for most meters take on values in the range 0 to 255 inclusive. However, the signal (S) meter is calibrated in S units and dB above S9.

VFO and Memory Channel Operation

Modern ICOM transceivers have two VFOs, called VFO A (or main VFO) and VFO B (or sub VFO). VFO A is ordinarily used for transmitting and receiving, but in split mode VFO A is used for receiving and VFO B for transmitting. A vfo swap command interchanges the contents of VFO A and VFO B. On the 706G and 7000 a vfo a command shows VFO A on the main display and VFO B on the sub display. A vfo b command shows VFO B on the main display and VFO A on the sub display. A vfo btoa command copies the contents of VFO B to VFO A. The 706G and 7000 can't do any of the other vfo commands.

On the 756 the main display is at the top in large bright font, while the sub display is at the bottom in small dim font. Ordinarily, updates from the panel controls and this program go to VFO A. A split sub command switches updates to VFO B, while a split main command switches back to the main VFO. A vfo equal command copies the contents of the main VFO to the sub VFO. The vfo watch and vfo nowatch turn the dual-watch function on and off.

ICOM transceivers can be switched to operate in either VFO or MEMO mode. In VFO mode the main display shows the frequency, mode and associated memory channel number. The frequency, mode, filter selection and other data can be changed by front panel controls and this program. The current VFO contents can be saved in a memory channel and recalled later. In VFO mode selecting a memory channel does not automatically transfer the contents to the VFO; however, this program does this with the read and restore commands.

In MEMO mode the memory channels are used directly. A read command automatically transfers the memory channel contents to the main VFO. While the VFO and MEMO modes can be selected by front panel controls, there are no explicit means to do this with the CI-V command set. Ordinarily, and to support memory channel operations like write and empty, MEMO mode is required. However, once one of the VFO subcommands is used, the radio switches to VFO mode. There appears no way with CI-V commands to switch back to MEMO mode.

split offset | subcommand
If offset is present and a valid floating-point number preceded by a "+" or "-", set the transmit frequency offset to the value in kHz and turn the split function on. If no "+" or "-", set the transmit frequency directly in MHz and turn the split function on. If subcommand is present, execute one of the subcommands listed on the help menu.
swap
If VFO A is selected, switch to VFO B. Further frequency and mode settings apply to VFO B. If VFO B is selected, switch to VFO A. Further frequency and mode settings apply to VFO A. This is the same function as the split swap subcommand and is most useful in keypad mode.
vfo subcommand
Execute one of the subcommands listed on the help menu.

Radio Control and Status Commands

Various transceivers and receivers have idiosyncratic means to control the preamps and attentuators. In the R8500 the attentuator and tuning step information are saved along with the frequency and mode in a memory channel. In modern transceivers the preamp and attenuator values selected for each band are saved in nonvolatile registers for each band separately.

These commands are used to set and display various internal functions such as AGC time constant, antenna selection, etc. By convention, a command with no argument displays a menu of all subcommands that work with the particular radio, while a command with one argument ? displays a help menu of all subcommands along with a short description of the function.

agc time_constant
Select one of the AGC time constants listed on the help menu. Some radios do not support this command. For the R8500 use the set agcfast or set agcslow commands. In FM modes all radios use the fast setting and cannot be overridden by command.
ant [ antenna ]
Select one of the antennas listed on the help menu. In some radios like the 756, one of two antennas can be selected for transmitting and receiving and a third for receiving only.
atten [ dB ]
Select one of the attenuator dB listed on the help menu. Not all radios support all dB values shown; the 706G supports only 0 and 20 dB, the 7000 only 0 and 12 dB, the 756nand 775 only 0, 6, 12, and 18 dB and the R8500 0, 10, 20 and 30 dB.
preamp [ function ]
Select one of the preamp functions listed on the help menu. The 706G and 7000 support one preamp, the 756 two preamps and R8500 no preamps.
break [ function ]>
Select one of the break functions listed on the help menu.
key channel [ text ]
Select the CW memory channel channel. If no text argument is present, report the current contents; otherwise replace the contents with the text.
say [ code ]
Select one of the announce functions listed on the help menu. If no argument is given, announce the S-meter reading, frequency and mode.

Tuning Rate and Step Commands

These commands set the radio dial tuning step and the variable tuning steps used in keypad mode. The dial and scan functions are provided by the radio, while the rate and step commands provide software control for the keypad tuning functions.

dial [ code ]
Select one of the main dial tuning step listed on the help menu. If no argument is given, report the current selection. While most radios support only the values listed, the R8500 supports programmed steps between 0.5 kHz and 199.5 kHz in steps of 0.5 kHz.
scan [ code ]
Select the scan mode, where the argument corresponds to a member on the help menu. These have not been tested.
band [ lowfreq ] [ highfreq ]
Set the low and high band edges for step-scanning. If stepped above the high band edge, the frequency is set to the low band edge. If stepped below the low band edge, the frequency is set to the high band edge.
rate [ rate ]
Set the initial tuning rate used in keypad mode by the LEFT and RIGHT keyboard arrow keys.to a value between 0 and 12 corresponding to rates from 1 Hz in increasing 1-2.5-5 multiples to the maximum 5 MHz. Whether or not the argument is present, report the current frequency, mode, rate and step values.
step [ step ]
Set the tuning step used in keypad mode by the UP and DOWN keyboard arrow keys. The step value does not have to conform to the steps available with the dial command and can be any value as long as the resulting frequency is valid for the radio.

Tone Commands

Modern ICOM transceivers include provisions for repeater tone and tone squelch (CTSS), and digital tone squelch (DTCS) functions used to access repeaters. At the moment, the only radio verified to support all three tone functions is the 7000. The 756 supports only the tone and tone squelch functions. The 706G tone functions cannot be programmed via CI-V commands.

The CTSS uses discrete analog frequencies in the range 67.0-254.1 Hz as shown by the tone ? and tsql ? commands. The DTCS uses discrete digital codes 023-754, as shown by the dtcs ? command. The DTCS codes are augmented by -NN, where the first N ndicates normal transmit polarity and the second N indicates normal receive polarity. The N for normal polarity can be replaced by R for reverse polarity.

All three of the following commands work the same way. A command with no arguments reports the tone status (on or off) and tone code. An argument on turns the function on and argument off turns it off. An argument matching one of the help menu selections sets that tone code and turns the function on.

tone on | off | frequency
Turn the repeater tone function on or off or select the frequency from the list on the help menu.
tsql on | off | frequency
Turn the tone squelch function on or off or select the frequency from the list on the help menu.
dtcs on | off | code
Turn the digital tone squelch function on or off or select the code from the list on the help menu.

Frequency Compensation Commands

These commands can provide software compensation for VFO and BFO frequency errors. Older radios generate LO frequencies from a single VFO synthesizer and generate BFO frequencies using a VCXO separately for each mode. Modern radios generate all LO and BFO frequencies from a single VFO synthesizer. The vfocomp command corrects for the VFO frequency error, while the bfocomp command corrects for the BFO frequency error in each mode.

Where all frequencies are synthesized from a common VFO, the calibration procedure is simple using a single WWV/H frequency. With keyboard commands, tune to the highest available WWV/H frequency in USB mode and note the beat note of the 500/600-Hz modulation tone, then switch to LSB mode and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary until the beat notes are the same. Using this technique, it is readily possible to compensate within 0.1 PPM.

When the BFO frequencies are synthesized by a VCXO separately for each mode a different technique is necessary involving two WWV/H frequencies. As before, tune to the highest available frequency in USB mode and note the beat note. Then, retune to the lowest available WWV/H frequency and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary between the highest and lowest frequencies until the beat notes are the same. This completes the VFO compensation.

The BFO compensation must be done for each mode separately, although usually only the USB and LSB modes are required. Using any available WWV/H frequency, note the difference between the 500/600-Hz modulation tones in AM mode and either USB or LSB mode. Adjust the USB and LSB BFO compensation so all three beat notes are the same.

vfocomp [ offset ]
If the argument offset is present, set the VFO frequency correction to the value specified in PPM. If not, display the current frequency and value.
bfocomp [ offset ]
If the argument offset is present, set the BFO frequency correction to the value specified in Hz for the current mode. If not, display the current frequency and value.

icom-20120228/html.data/SiteTrash/KEYPAD.BAK0000744000175000017500000001046610417757010016765 0ustar colincolin Keypad Commands

Keypad Commands


Following is a list of commands recognized in keypad mode. There are no restrictions on the order of these commands.

DEL
Erase the current keypad input line as if it had never been entered.
q
Exit keypad mode and return to keyboard mode.
s
Receive on transmit frequency. Used with transmit duplex offset feature. This is the same function as the keyboard swap command.
r
Switch to receive mode as in the rx keyboard command.
t
Switch to transmit mode as in the tx keyboard command.
x
Exchange the contents of VFO A and VFO B as in the swap keyboard command.

Audio Controls (Sun Solaris only)

g
Adjust the speaker volume as in the gain keyboard command.
m
Toggle the mute state as in the mute keyboard command.
m
Select the input port as in the port keyboard command.

Frequency and Mode Settings

The most common operations in keypad mode involve quickly navigating or scanning frequency bands. The easy way to do this is to type the frequency in MHz followed by the Enter key. Each Enter key, by itself or preceeded by a frequency, displays the current channel, frequency and mode. The display is correct whether programmed in this way or set using the radio controls.

Frequency scanning is done using the arrow keys UP, DOWN, LEFT and RIGHT. The UP key increases the frequency by one step, the DOWN key decreases it by one step. The size of the step is determined by the rate, which can be selected from 20 discrete levels, where the rate at each level increases in 1-2.5-5-10-... order from 1 Hz to 5 MHz. The LEFT key decreases the level by one, the RIGHT key increases it by one.

The step and rate values can also be set in keyboard mode, but in keyboard mode the step command can set the step to any value which results in a valid frequency for the selected radio. For instance, the step value can be set to 3 kHz when scanning HF aviation bands or 15 kHz when scanning VHF repeater bands.

Modes are selected by a single letter: l (LSB), u (USB), k (CW), a (AM) and f (FM). These work in the same way as the corresponding keyboard mode commands with the default filter selections.

Memory Commands

In these commands the channel argument format is the same as the keyboard memory channel commands. If the argument is missing, the operation applies to the last selected memory bank and channel.

channelc
Read the memory channel as in the chan keyboard command.
channelw
Write the memory channel as in the write keyboard command.
channele
Empty the memory channel as in the empty keyboard command.

Function Keys

F1
Display the antenna selection as in the ant keyboard command.
F2
Display the AGC time constant as in the agc keyboard command.
F3
Display the attenuator selection as in the agc keyboard command.
F4
Display the preamp selection as in the pamp keyboard command.
F5
Display the break selection as in the break keyboard command.
F6
Say the S meter, frequency and mode as in the say keyboard command. This works in the 7000 only.

icom-20120228/html.data/SiteTrash/Thumbs.db0000744000175000017500000002200010420224456017222 0ustar colincolinÐÏࡱá>þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿ þÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ€—¯`Æ€1ÿÿÿÿÿÿÿÿ5Catalogÿÿÿÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿ )ÿØÿàJFIFxxÿÛC     ÿÛC   ÿÀ``"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ûßÄ^%‚ÁžØjºfÒ÷÷l¢;|Œª€ÄŽBç >fê‹&`ñ‡Àñ\¡÷ûuÿ­ ªY_xÛSŽšú½±É1ÀY[6Üÿ ’qè3Ðb—ÄO]^¥³ü9ÕíÙæh–I/6}å¼Ì*åv à–#Œ×äÕ^e˜b*¼=G8Ù_£iuZ¿ëK%íK‡Â¨Âp»v{w·÷XÈ|Oá©1»ÇÑ/ÖþÇÿTßðø_þŠ?øcÿÆë=þ)øì@e‹áV»2æPª$¶F`±$Šv´ åö ÿ6pkBÿâŒlõ[«Hþê×PÃ3B·qy^\ 9@ë™3´à0$t`N0qŸö~u¿Ö%÷?ó9Þa†z¨?»ÿ´)Þø×HÑÛí¾,ÓµÛr1%œ—ö‰8=š74#Õ[d†ÈÚÕáoé?óÅðm¦ÿòUzƒµMgÄÞ¶Ôµ *oÝJò£é×ðæh¶JÈ (ÅpÁCŒºÂµn Å ¦¸Uœ &]ÄöžµÛK žáé7í®·Õ&ûõ•Íã_4¥É¿¿DyOü-ý'þx¯þ ´ßþJ£þþ“ÿ6éÞþÒ¶ûv‘q­ÚÄ÷èÓêVÖW3F²H¤´KŒ,lä±hÈ5›¡ütÔÔäAtqɶX£Êï‘NÈu‰û€ x¼}ãö™Ä¿ 5HmÄÐÆ³›Ë6Ü®ŒÎûrÁc*ªÙ%ÆÐÀ4äÏçâÿÀ?à•õÜ'üûù7ù¿ð·ôŸùâ¿ø6Óù*·4/ØëÞHŒy&fe„™à™dee Ž»€çi …l6ÃÇž2ºµ†KjvH">TÏ Þ±–ÜRBÏ0ƒïãÇrv縶3Ó'Mbñy®½%‰š”e(ÆÜ¶Ý¥½Í©ÔÃâPƒVO¿E~© ÑØˆxR]Ö î£×1ßéþ"kyÝvßb ŽÑ,±ÛFA º6‹÷fE,º}ý¶£«[ê:ëëö“.œ°jö·‡ÉyC,jÛ9¯¶‡‘cuäe¯Ôèž<Òouû{9ü‘i·×>jÝ[hú¬Á¦ó,¬­§$Kóɹ¥i^¤¼}*„¼ßÖ‡Óm]úyÿ_æyÔúf‘6³g{a¡5–¡s¥û[høTyR*ÛÜÌٸ̤ˆÞf @òÕ…1»t4M@ñ%”Zu¥¬z…ÂG4ße‹E-âòƒml‡å»;'ï ®ëù±±å錴‚[k¯Û Ü̲yº&¡ýž/!+oû¶°Ø"ÚÁMÁQCcr©5¥¡ø›O–M2ÔxjÛCÔïaIí¥Œæ&² 3<ey ù-‡\îÛƒ\¸špteyùïýo·àtQ§Y5+ê|éñïãÇ ëvÿ t-jm+NŠÛOŠtI¥K»¶º“̹†äi—1I Çs º´Ñ4mmrŸ•›ÝfoxëÅßt»ï‰MÖ›ãn®¬of¼³û+Þ¬3ºEpËŒ…tà ÇrHP® 㯆¼¦øÇH×o|%¢]ë³C5Ä·ÇMðã]I$sF!‘åÔ§ŠS制¯–p;œªãAñŽ“à›+ˆ|k…« ÞMqá¨|!l’ËY'‘‡ÛÀ¤rrC 1'èp˜Z¸Œ%)E¤š_†šþ;GK :–©Y·»zYµ·/êϪh¯<ðÆ¥{ãý×PÐþ"Båb_µÛÛZé×o+FAŽV†G@êàçkÊ0‡5ÜéV×VZ]­½íûj—‘¦Ùo„Ìr~b‰òŽ08ô®:”½–«ö×ü‡(òèÞ¿?Õ"Ðë\‡ŒÎuú‰Iÿ¤w׎µÆxÁ³­øDÔJOý#¸¯‘Îþ¹·œÆÍ#ê:œ¬šivÄQÝ%›EoŽŸñ=uê¦@áŒë ÜŠfXÊ.êâU¿åä¿ô¦y9²÷©&¯xþˆÐŽ#j—3ÛMwu©ÙÜ]XÇ=µ·‰å·¶3¤qHvE‰!ób)D_ ¹Göž¯Ô¯£šy,Ö{Å+5´±Ç"n ^G 'n]ÃF$).ZV¢Ï°ñEç‰u:펕ªmæ›R¼ž(RÚKhˆ±ëæh<Ò·ò×ùŠvÄÄÙÑu+ÄWÖiÿùg;ÚÇ«@nÝ4Ë”´‘žßZ ónXJ™.ɽ¼£N>kÑ_×õcÁM;Y~úþ´Ø·‘Ö“¬GŸycÒ\E¨Çˆ§’H¢åc‰–GiVQ `a”¬‚F")>jÚð]”Ñx†KÉmgK«‰g“Q2Úkð%Ü“e¾Ì—¤Ãå…9ˆX ¢B>“§[^êúhñ¡µÔ"žÞ÷J±¿ ¦˜8L’ªëRF±Æˆ¬)#+bP»né<;ªønçQÐeÒôÝVG¸ÓŒÉ{wâ%¿‚#)Kƒy7›8Iáu”+(ŠTT”) X×N4fì–‡f^¬[Ikç~æo޵][Âþ3ÓaÒuk¦—V³™áÓ¦ÕZÖu¼„¦pÀÈò*3ïóp,„Mðã_±×¤Ñÿ´¾!j1jóÊñ/†îï­ WžS2²ÅæÙA4é°€HU<óó Ó~-^$Ú1v•|½:ê_Ük:–œà ˆØl×çÀBp\gOÞR9½r[ÖͼWW—Wriö¾7×í¤Eó1j¦(#c ’¬Û™A%2ebG¿‚ÃQ«ƒ¢Ü_3[¯+÷åøŸQOB­%7ÌܵO´¥çoËñ>ˆw.I!rz ×üOçM¯3±ƒâ^­`nl¯¬â‚æÑV/í9¬öóG-±ò¤Ó·ëäÒcîðƒ–{¡üK®Ñ­igN:”²™¾×˜- ¨±Ä"û7,*ÒædÊ웂hòxf›NqûÅì¬í̾ÿø µÄxµ³â ú‰Kÿ¤—Ôh67Ún“¶£«>·x…·_Im»H3ÆR<.@îÏ ®KÅ-ŸxPzjRÿé%Å|^z­S ¯ÞGÿJ‰­¬ýäÊv-‹ß-åÍèýÜg ßèVüêk‚·ñn™©\ÜÃ{âwHîí/<5fêªÍž³²VHÏ”ûˆÌw‚ÇNêÆS©âö\[å _±ÛûçWßân ©-ådžu•²Ã¾Ö QäTKò ’ÈUâaÊ«(4Y%I¬2šj¥\SæjÕ%ßùŸf¿‡3²öW’^êÝ_¢óGœZx§Om{FÞø’ìG ¶ö+Ï Úˆ§·.­ö ë ’’@¬ˆ¬„ˆ…G¢…:°ÒÓO›Å73FŒç2YéyÚcXÑ6‹0¸Õp¹Ä®°Û¶ä¾;Ô!ծ펃ª5¬/n·(š™ßå@d±öe‚î¼¶*î¥ñúÂæêÜhZ´²[ÚMp̰j®Œé(€"²Y0}ÓoÆÜ·”Á 05¾ÔT £U¤’ë-?Pž2¬\£©$Þ–ÛWçêPøoã{-VdðÞ™i­[Mmo-Ø#[æ›gžCnšè³±ü+1ÂíÚ]ÿ“¨zYÿßÊà5ïŠZ†’…“ÂúÕä-¿Ëd¶Õܸ™2‰`줄9ȱP nRl\|CžfæÑ|;«½½´„É?Ù5l˜T3»¦,J;ùhÅcW%œ¬`îeΞÎ-ûÒmúÈ!ŒŠV©4ߡ۵Ÿ„†¸O3øT67hÍœtÏÙ.*;_ˆÚœ­a Þ¾†â[$¸¹u”–ðJÊ®#YZÉQÀGRYÌ`6ä8*Ä7\˜Mâ ¸ ¨JØÈ8ÿD¸ô¯—Δ#S Êßñ!Õ¿µ篭ʧ+½¢úy2=9”kÞ* v¯ö‚dçc·ïV.|/«i:ΰúoíùô÷‰ô­^H­RâójÚ3îÀ]’óÀa´/‡U4òG‰|NB>¿õéoRkþ+ðœßuÝâÿ[‡XKØšámü]²D«dŒÒ¥·ÛUã‰!œÈëå ”2mb#c¾H“ž.ÿóö_œ¼™Ë›¤¡E¾Ëò^LécÔ™Ö(õ+÷ËÐPþé$U9m§“‚­€F ,7^4ilüÝ/ÃQÆÓ¨º ª\¹ŽñîdÿFßg…;FB|Ø'oš¯Å߇o¡éú­¾¥®ÜÃqg-ľ8Yä0/™n|ÍD9ú?”Ÿ•ŒL+V凋ü&º”°DÞ'”ØÁ ‡ñ`’)­|¶×`}¸ïIÄy ·s“󌖯¦N=õ÷*Äsh§øÿö§a§Iã)m­ý·‡-®ƒí&Þêæd'Ìq0@bB?wå2“Ÿ˜² H%ñ4¶Mý¯k£Z¯’Í)Ó®æ˜îß.‰8òü“»9ݼmÆùÿü,/X´¾N«­^–Y%¶‰<}›«bŒMÔ[µ L^\M(bA ¸à¹áxwSµÔô¯ ÝÝëPA)ó®æ×aÕ|²è@ù–âiUI†@]ÑÉÈÆ6&QTgïtÖÇFº•XEËñÿ€‹Wº%’¦¥ƒõÝzúòÖeiô+ô„…WEU"[ˆU$&WteÎ<–mÊÁExjÄÝùkà¿ÄÒMýš%‹\ †LQ\¦/±••°È¥, €k•ø§¬Á¦Ÿ Ù¾¶ž7–W®^MCì¢ô m÷ªõ;9 «¶%ö‰€Ü¡˜4þñç‚æ»ŠëÄtY¼GtÁ'°ÓüJ,¡Vh–ØÁöS}p¨ë#c|ù…ycËi‡åöpVéݽ.sÖqx‰ÂÖ×É~kúÔëô­2 å»·ð_ŠRI\Yˆo/អƒÉXe½ÛF‹ûµu*‚$b¡œîtMewwÂýV+«¢¾}ÔvÚZ¼û~évûVæÛµ@Ï<®8Žxøëábé× ~)Ø›x`˜Í+xÙ¤sùvÁÙÌÙ\9Q²6Èù3s¹¥øÓÀz§ˆ/tý/Çv7šÎ¡s±¬!ñ:\ʲÆ$FŽ(LåŸÝ˹UG1¶FTã£Ýzßúû‹…´´•½cþF…†¤_jS­Ç£ÓZÊOÜ]ÞiÖ{dÛ3²¼M;än rå° sÍx³ã/ úˆÏÿ¤·Ø\xJÊëQkÙ/u¯5öo‰u{…¶ª(Ha' (ÉfÏZâuÆ^EUÔgz²Ï_%Ÿ$ªá-ÿ?!ÿ¥Dú,º0ªšû/ò~DvDÿÂQâP3¨ÅÏýº[ÖïŠ5(GŠõ{)ô i­åeIoíoîÒÞfòcH€Žv’×áx\“µ1ÏêZÆ—â-V{}mVÚöt¹W·š 1ÆU„ާ9ŒžaÎr•Ç‹|[6±5âi~%·¶“~Ý>+½+É1ª‚ !“åegsó;g+…eµþ¥Wðšæ¨Úµ9É5w­ÔZ¶½ÊÇÑxšt]&’¾±ì»´ii÷3ÜiþW…¼D¶—M ­vþ Àf…7´Š×[Ï—»vœ,œà—xv}J Å™¼#¯XIæÇn¼B—1*´» Ó/Êê#?.âdVÅy©uÏMqæoƸƒ1ÆúF @¢C–By´“ÏŽ00Ëâ/-Õ̿ٚãÇ-ÄÇ’i[a%/$@€‰÷d±$ÁÉ>çö¦ÿ Oü?þ@ò–ªiéÿSÿ3¼ÑõÝjúy’ÿB¼Ócg1Èo­å $  …“*brêz‚-œVZx“]Õ¬gŠÿÂ÷Ú*ù%Þ[»ÛY£*R³n$œqŒH$ æô¿øºÂXÞãG×5¶öð´W銌ñŸÞKòmÒÝ´ Š¥gªøÆ(Z+Û UB›qs6—Í€7$FO9ã8ç¾3X×ÌéN”£Õ»Oþ]ÏõÕK YN-µkÿ5?óü?øò?…-WĺW‡­ïYŒË¬Ø™ÅÂùÑ©ò¤p ۉY9ž6Æ«B¿ïåc“âÿÂÒEuD,]\Ín]¹Õ9XŒnÎ˜ÎØÜLÞ¯qñ öK3k¤µºÙL¸‘Ü£±Vž9 J$•Ù‘6;.C.×ÞÄàÝøwâÆ“ºA¨EwçÜOqpº¾¤«!’$B…ÖÃ(R™ÁvQŸ#ÅQÍ)œbá=ÿ—u{.Ñ8«á1R«)A&®íïÅuÿÙÿÂá†Ö9.n¾7ü.s'ú4žFÀ–A,uRoBp1¸Fê?2ß½ñæ§iµ¿~Áqþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ```€®pä¨`Æ{A42CD7B6-E9B9-4D02-B7A6-288B71AD28BA}§8K‡—Np¶Dn‰Öu:¨ ùíä®0P‚ÌxÍkLñÖª“,V¥¶ýF[°WZ¿\C)ýä_»ÖŸ½°Œ$y#åßcø€u«kóc}µuv½žª^…’Ô²²À«ý±±\~ó,Q£!”@\6ßÚ´¿–ø.¯ÿ"aõ,bzrÿàÅÿÉž³ÿ /ÁÍ{öDñw‡ä»ûY°û™Ä·/%ÌжýÑIÐ#v;³ <€09À>eYã«a£FœýÚ‘nðšIs.®+±ô8V•:¯â¯•¤ŸGÙ³ÿÙicom-20120228/html.data/SiteTrash/KEYBRD.BAK0000744000175000017500000005232010422730527016763 0ustar colincolin Keyboard and Batch Commands

Keyboard and Batch Commands

Following is a list of commands recognized in keyboard and batch modes. Note that the radio command must be given before any command that depends on the radio model. Other than this, there are no restrictions on the order of these commands. Note that several commands shown on the ? help billboard, but not documented here, have not been tested.

A command line consists of a string of keyword/argument subcommands executed in order from left to right. Subcommands take on zero, one or more arguments. If the subcommand is the last one on the command line and with no arguments, the general behavior is to display some program or internal radio value. In general, a question mark ? argument invokes a context-sensitive help menu giving all the valid arguments. If one or two arguments, the general behavior is to set some program or internal radio value. Due to variations in the many ICOM radio models, not all the values work in all radios. In such cases use of an unsupported value results in a "radio doesn't do that" message.

Following are the basic commands to control the radio, select the operating mode and control various basic functions. The command parser is designed for easy access to the most often used functions, such as changing the frequency or mode. When processing the next subcommand in the command line, the parser first looks up the function in the help menu and executes it if found. Next, it determines if the token is a valid frequency and sets the radio frequency if it is. Numbers below 1000 are interpreted in MHz, while those above 1000 are interpreted in kHz. If not a valid frequency, the parser looks up the mode in the help menu and sets it if found. If not found, the parser exits with an error message.

Program Commands

radio [ name ]
Select and initialize the name radio listed on the help menu and display its capabilities, including the upper and lower band limits, number of memory banks and number of memory channels per bank. This must be the first command in keyboard or batch modes. Upon selection the program inspects the radio to set various default options and reads the first radio channel. Multiple radios can be specified, but only one can be active at a time. Note that some ICOM transceivers support noncontiguous band limits, such as .03-200 MHz and 400-470 MHz for the 7000. The band limits displayed depend on which frequency range is active when the radio is selected. If no radios have been selected and no name is present, scan the CI-V bus for all known radios and selects any and all that are present. This is useful when multiple radios are in use and for testing. If a radio has been selected and no name is present, display the capabilities of the current selection.
quit
Exit the program and return control to the shell.
include file
Read commands from file until the end of file. Files can be nested up to 20 levels.
pad
Switch to keypad mode.
trace function
Select the CI-V bus trace function from the list on the help menu. The trace all command displays each CI-V command and response in hex, with prefix T: for packets to the radio and R: for packets from the radio.
dump
Dump the current VFO frequency, mode, duplex and tone settings in hex. Dump related channel data, including the dial step and programmed dial step for the R8500 receiver.
verbose on | off ]
Select the verbose mode from the list on the help menu.

Basic Control Commands

mode [ mode ]
Select one of the mode/filter combinations listed on the help menu. If no argument is given, report the current selection. For most radio models the mode selection includes a filter selection of wide, medium and narrow.
duplex [ offset ]
Set the offset of the transmit duplex offset register. Modern transceivers have duplex offset registers for HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read and write these registers, the frequency must be first set within the correct band.
bank [ bank [ name ] ]
Set the current bank number and optional bank name. If no arguments are present, report the current bank number and name. So far as known, this works only on the R8500.
tx
Place the transceiver in the transmit configuration.
rx
Place the transceiver in the receive configuration.
ptt [ on | off ]
With no argument the status of the transceiver is reported as on if transmitting and off othersise. With one argument the transmitter is switche on or off.
time
Set the transceiver year, date and time to the current Universal Coordinated Time (UTC) of the operating system. The 7000 and 7800 can set the year, date and time. The 756 can set the time, but not the year and date.

Memory Management Commands

The following commands are used to read, write and empty (clear) memory channels and transfer memory contents to and from frequency (text) files. They take the argument range defining a single channel or range of channels that might be in the same or different banks. The channel notation used is represented b.c, where b is the bank number and c the channel number. For radios without banks, including the 706G and 756, the bank number is not used. A range of channels is represented by b1.c1:b2.c2. When spanning different banks, channels wrap from the last channel in one bank to the first channel in the next higher bank and vice versa. In addition, the channels wrap from the last channel in the radio to the first channel and vice versa. Numbering always goes from the first channel to the second channel number in either direction as indicated.

Various defaults apply in order to simplify operation. For instance, a chan, write or empty command with no arguments applies to the last selected bank and channel. When multiple banks are available, a channel number with no bank number applies to the last selected bank. The dollar sign $ replacing a bank or channel number applies to the entire range of banks or channels. For instance, a $:$ represents the entire contents of the memory array.

Additional subcommands can appear on these commands when certain features are selected and available. These include the name, split, tone, tsql, dtcs and, in the R8500, atten, step, pstep and scan subcommands. These subcommands are useful when channels are read from the radio, written to a file or read from a file.

save range file
Save the block of memory channels in range to file. Note that empty memory channels are not saved.
restore range file
Restore the block of memory channels in range from file. If range is the single character *, restore the channels using the bank and channel number on each line of the file. Otherwise, renumber the channels as indicated by range.
chan [ range ]
Read the block of memory channels in range.
write [ range ]
Write the block of memory channels in range. Include the frequency, mode and other data available in the radio.
empty [ range ]
Empty (clear) the block of memory channels in range. If range is missing, empty the last channel selected.

Switches, Controls and Meters

The set, ctl and meter commands are used to inspect and change the various switches, controls and meters available in the radio. As each radio is different, not all commands work with all radios. By convention, a subcommand with no argument displays a menu of all functions that work with the particular radio, while a subcommand with one argument ? displays a help menu of all arguments along with a short description of the function.

set [ switch [ value ] ]
Display or set internal radio switches. A set with one argument switch displays the current value of that switch, but does not change its value. A set with two arguments switch and value sets the designated switch to the given value. Most switches take on names of only off or on, but some like agc and break can take on multiple values.
ctl [ control [ value ] ]
Display or set internal radio controls. A ctl with one argument control displays the current value of that control, but does not change its value. A ctl with two arguments control and value sets the designated control to the given value. Note that those controls involving frequency take signed values over the range -128 to 127 inclusive, while others not involving frequency take values over the range 0 to 255 inclusive.
meter [ meter ]
Display the internal radio meters. A meter with one argument meter displays the current value of that meter. The displayed values for most meters take on values in the range 0 to 255 inclusive. However, the signal (S) meter is calibrated in S units and dB above S9.

VFO and Memory Channel Operation

Modern ICOM transceivers have two VFOs, called VFO A (or main VFO) and VFO B (or sub VFO). VFO A is ordinarily used for transmitting and receiving, but in split mode VFO A is used for receiving and VFO B for transmitting. A vfo swap command interchanges the contents of VFO A and VFO B. On the 706g and 7000 a vfo a command shows VFO A on the main display and VFO B on the sub display. A vfo b command shows VFO B on the main display and VFO A on the sub display. A vfo btoa command copies the contents of VFO B to VFO A. The 706g and 7000 can't do any of the other vfo commands.

On the 756 the main display is at the top in large bright font, while the sub display is at the bottom in small dim font. Ordinarily, updates from the panel controls and this program go to VFO A. A split sub command switches updates to VFO B, while a split main command switches back to the main VFO. A vfo equal command copies the contents of the main VFO to the sub VFO. The vfo watch and vfo nowatch turn the dual-watch function on and off.

ICOM transceivers can be switched to operate in either VFO or MEMO mode. In VFO mode the main display shows the frequency, mode and associated memory channel. The frequency, mode, filter selection and other data can be changed by front panel controls and this program. The current VFO contents can be saved in a memory channel and recalled later. In VFO mode selecting a memory channel does not automatically transfer the contents to the VFO; however, this program does this with the read and restore commands.

In MEMO mode the memory channels are used directly. A read command automatically transfers the memory channel contents to the main VFO. While the VFO and MEMO modes can be selected by front panel controls, there are no explicit means to do this with the CI-V command set. Ordinarily, and to support memory channel operations like write and empty, MEMO mode is required. However, once one of the VFO subcommands is used, the radio switches to VFO mode. There appears no way with CI-V commands to switch back to MEMO mode.

split offset | subcommand
If offset is present and a valid floating-point number preceeded by a "+" or "-", set the transmit frequency offset to the value in kHz and turn the split function on. If no "+" or "-", set the transmit frequency directly in MHz and turn the split function on. If subcommand is present, execute one of the subcommands listed on the help menu.
swap
If VFO A is selected, switch to VFO B. Further frequency and mode settings apply to VFO B. If VFO B is selected, switch to VFO A. Further frequency and mode settings apply to VFO A. This is the same function as the split swap subcommand and is most useful in keypad mode.
vfo [ subcommand ]
Execute one of the subcommands listed on the help menu.

Radio Control and Status Commands

Various transceivers and receivers have idiosyncratic means to control the preamps and attentuators. In the R8500 the attentuator and tuning step information are saved along with the frequency and mode in a memory channel. In modern transceivers the preamp and attenuator values selected for each band are saved in nonvolatile registers for each band separately.

These commands are used to set and display various internal functions such as AGC time constante, antenna selection, etc. By convention, a command with no argument displays a menu of all subcommands that work with the particular radio, while a command with one argument ? displays a help menu of all subcommands along with a short description of the function.

agc time_constant
Select one of the AGC time constants listed on the help menu. Some radios do not support this command. For the R8500 use the set agcfast or set agcslow commands. In FM modes all radios uses the fast setting and cannot be overriden by command.
ant [ antenna ]
Select one of the antennas listed on the help menu. In some radios like the 756, one of two antennas can be selected for transmitting and receiving and a third for receiving only.
atten [ dB ]
Select one of the attenuator dB listed on the help menu. Not all radios support all dB values shown; the 706g supports only 0 and 20 dB, the 7000 only 0 and 12 dB, the 756 0, 6, 12, and 18 dB and the R8500 0, 10, 20 and 30 dB.
preamp [ function ]
Select one of the preamp functions listed on the help menu. The 706g and 7000 support one preamp, the 756 two preamps and R8500 no preamp.
break [ function ]>
Select one of the break functions listed on the help menu.
key channel [ text ]
Select the CW memory channel channel. If no text argument is present, report the current contents; otherwise replace the contents with the text.
say [ code ]
Select one of the announce functions listed on the help menu. If no argument is given, announce the S-meter reading, frequency and mode.

Tuning Rate and Step Commands

These commands set the radio dial tuning step and the variable tuning steps used in keypad mode. The dial and scan functions are provided by the radio, while the rate and step commands provide software control for the keypad tuning functions.

dial [ code ]
Select one of the main dial tuning step listed on the help menu. If no argument is given, report the current selection.
scan [ code ]
Select the scan mode, where the argument corresponds to a member on the help menu. If no argument is given, report the current selection.
band [ lowfreq ] [ highfreq ]
Set the low and high band edges for step-scanning. If stepped above the high band edge, the frequency is set to the low band edge. If stepped below the low band edge, the frequency is set to the high band edge.
rate [ rate ]
Set the initial tuning rate used in keypad mode by the LEFT and RIGHT keyboard arrow keys.to a value between 0 and 12 corresponding to rates from 1 Hz in increasing 1-2.5-5 multiples to the minimum 5 MHz. Whether or not the argument is present, report the current frequency, mode, rate and step values.
step [ step ]
Set the tuning step used in keypad mode by the UP and DOWN keyboard arrow keys. The step value does not have to conform to the steps available with the dial command and can be any value as long as the resulting frequency is valid for the radio. current mode.

Tone Commands

Modern ICOM transceivers include provisions for repeater tone and tone squelch (CTSS), and digital tone squelch (DTCS) functions used to access repeaters. At the moment, the only radio verified to support all three tone functions is the 7000. The 756 supports only the tone and tone squelch functions, while the 706g tone functions cannot be programmed via CI-V commands.

The CTSS uses discrete analog frequencies in the range 67.0-254.1 Hz as shown by the tone ? and tsql ? commands. The DTCS uses discrete digital codes 023-754, as shown by the dtcs ? command. The DTCS codes are augmented by -NN, where the first N ndicates normal transmit polarity and the second N indicates normal receive polarity. Tthe N for normal polarity can be replaced by R for reverse polarity.

All three of the following commands work the same way. A command with no arguments reports the tone status (on or off) and tone code. An argument on turns the function on and argument off turns it off. An argument matching one of the help menu selections sets that tone code and turns the function on.

tone on | off | frequency
Turn the repeater tone function on or off or select the frequency from the list on the help menu.
tsql on | off | frequency
Turn the tone squelch function on or off or select the frequency from the list on the help menu.
dtcs on | off | code
Turn the digital tone squelch function on or off or select the code from the list on the help menu.

Frequency Compensation Commands

The following commands can provide software compensation for VFO and BFO frequency errors. Older radios generate LO frequencies from a single VFO synthesizer and generate BFO frequencies using a VCXO separately for each mode. Modern radios generate all LO and BFO frequencies from a single VFO synthesizer. The vfocomp command corrects for the VFO frequency error, while the bfocomp command corrects for the BFO frequency error in each mode.

Where all frequencies are synthesized from a common VFO, the calibration procedure is simple using a single WWV/H frequency. Using the keyboard commands, tune to the highest available WWV/H frequency in USB mode and note the beat note of the 500/600-Hz modulation tone, then switch to LSB mode and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary until the beat notes are the same. Using this technique, it is readily possible to compensate within 0.1 PPM.

When the BFO frequecies are synthesized by a VCXO separately for each mode a different technique is necessary involving two WWV/H frequencies. As before, tune to the highest available frequency in USB mode and note the beat note. Then, retune to the lowest available WWV/H frequency and note the beat note. Use the vfocomp command to set the VFO compensation and retune the radio to implement it. Repeat as necessary between the highest and lowest frequencies until the beat notes are the same. This completes the VFO compensation.

The BFO compensation must be done for each mode separately, although usually only the USB and LSB modes are required. Using any available WWV/H frequency, note the difference between the 500/600-Hz modulation tones in AM mode and either USB or LSB mode. Adjust the USB and LSB BFO compensation so all three beat notes are the same.

vfocomp [ offset ]
If the argument offset is present, set the VFO frequency correction to the value specified in PPM. If not, display the current frequency and value.
bfocomp [ offset ]
If the argument offset is present, set the BFO frequency correction to the value specified in Hz for the current mode. If not, display the current frequency and value.

icom-20120228/html.data/SiteTrash/OPTION.BAK0000744000175000017500000000366710417756526017040 0ustar colincolin Command Line Options

Command Line Options


Following is a list of recognized command line options. Note that, in the case of multiple options, the preferred order is -r, -c, -m, -g, -d, -k, -a and -f. The following options are valid at any time.

-a
Enable the audio codec (Sun workstations only).
-d
Enable debug trace as in the trace keyboard command.
-f filename
Read commands from the file filename.
-k
Begin program operation in keypad mode.
-r name
Select the radio with identifier name. See above for a list of radio names and modes currently supported.

The following options are valid only after a radio has been selected

-c channel
Select the memory channel channel and set the radio frequency, mode and offset to its contents.
-d
Display the current radio frequency and mode. This is designed for use in shell scripts to confirm or log the results.
-g frequency
Set the radio frequency to frequency in MHz if less than 1000 and in kHz otherwise.
-m mode
Set the radio mode to mode. See above for a list of mode names valid for various radios. The mode names are specific to each radio type; not all radios support the same modes.

icom-20120228/html.data/SiteTrash/INDEX.HTM0000744000175000017500000004011310423221350016670 0ustar colincolin Program to Control ICOM Receivers and Transceivers

icom - Program to Control ICOM Receivers and Transceivers

jpg

Related Links

Table of Contents


Synopsis

icom [ -r radio ] [ -c channel ] [ -m mode ] [ -g frequency ] [ -f file] [ -dk ]

Description

This program controls ICOM radio transceivers and receivers with the CI-V option. Most recent ICOM radios already have this option; older radios can be converted with an appropriate adapter mounted inside the radio. Up to four CI-V radios can be connected to a single serial port using a level converter such as the CT-17, which includes a MAX232 chip and not much else.

The program is intended to control a radio or transceiver over the Internet, so is specifically designed for keyboard control from another computer via a full-duplex secure connection. No graphics interface is necessary or provided. Internet tools are available to support a two-way audio link.

The program implements a radio interface capable of controlling almost all radio functions, including frequency and mode selection, AGC, antenna, attenuator, break and preamp selection and, in some radios, tone, duplex and split controls. Commands are provided to read, write and empty memory banks and channels, where available. Banks and channels can be assigned attributes such as name, tone and duplex. The program can save and restore channel information to and from files for backup and cloning. Where supported by the radio, the program can set and reset switches such as the noise blanker, read and write controls such as the AF gain and read meters such as the signal (S) meter.

The program operates in one of three modes: keyboard, batch and keypad. In keyboard mode, commands and arguments are entered from the keyboard following the icom> prompt and the complete command set is available. In batch mode, the same commands and arguments are read from a specified file. In keypad mode, commands and arguments are entered from the keyboard and numeric keypad following the > prompt. In this mode, numeric data are entered from the numeric keypad followed by a single alphabetic character representing the command name. Shortcut arrow keys on the keyboard are used to tune up/down or increase/decrease the tuning rate.

Shell command line options can be used to select the radio model and set the frequency and mode. Using batch mode and a suitably crafted Unix crontab file, it is possible to tune a radio to different frequencies used by a shortwave broadcaster throughout the day, for example. With the minimuf program (available in a separate distribution), it is possible to build shell scripts that predict the most likely frequencies and tune the radio accordingly.

The program knows about most early and late model ICOM radios, including the 706, 756 and 7000 transceivers and the R72 and R8500 receivers. Use the radio ? command to see the currently supported list. The program can be told which radio is present or directed to scan for all known radios and report each one found. A number of diagnostic tests are performed on the selected radio to determine which options are present and to initialize to a known state. The program detects certain anomalistic behavior of some radios and adjusts its operations to make the behavior conform to a consistent model.

Basic Operation

Following is an overview demonstrating how this program can be used in typical operating scenarios. The first command is ordinarily radio, which specifies the radio by model number. This initializes the program and radio to a known condition. The program displays the radio attributes and the first memory channel frequency, mode and additional data as available. The frequency and mode and other attributes can be entered and edited using the keyboard; the data are transferred to the radio with an enter keystroke. Alternatively, the radio controls can be used to set frequency and mode, and the data transferred to the program with an enter keystroke. Details on the keyboard and keypad commands are on the Keyboard and Batch Commands and Keypad Commands pages.

Most commands take arguments, although many arguments can be defaulted. A frequency argument less than 1000 specifies the frequency in MHz, while greater than 1000 specifies the frequency in kHz. An offset argument preceded by an explicit + or - character specifies the offset frequency relative to the current VFO frequency in kHz. Signed or unsigned step and rate arguments specify a tuning step in Hz. A bank.channel argument specifies a bank and memory channel available in the particular radio. For most commands a question mark ? argument displays context-sensitive help information for that command. The help information consists of a keyword argument followed by a brief description of the function.

Since the most common function is tuning the radio to different frequencies or scanning a band of frequencies, a compact parsing convention is provided. The parser scans the tokens in each command line in turn. If the current token is the name of a defined command, that command is executed. Otherwise, if the current token is a valid frequency, the radio frequency is set to that value. Otherwise, if the token is a valid mode name, the radio mode is set accordingly. Otherwise, the command is discarded and an error message is displayed. Use the mode ? command to see a list of valid mode names; however, note that not all radios implement all modes.

Tuning Operations

The keyboard mode can be very awkward when searching a band for signals, since a new command must be used every time the frequency is changed. The pad keyboard command puts the program in keypad mode and changes the prompt string to >. In this mode, arguments such as frequency, tuning step, etc., can be entered directly from the keyboard and numeric keypad. Of course, the keypad must be in numlock mode for this to work properly. In keypad mode, the argument is given first followed by a single character which executes the function. A single ? character displays a list of all functions.

Most ICOM receivers tune in 10-Hz steps, while most HF transceivers tune in 1-Hz steps and some VHF/UHF radios tune in 100-Hz steps. The easiest way to tune the radio is using keypad mode and the arrow keys. The UP and DOWN arrow keys adjust the frequency up or down one step, while the LEFT and RIGHT arrow keys decrease and increase the tuning rate (Hz per step) respectively. The rate values begin at the minimum tuning step and extend in 1-2.5-5-10 steps to 5 MHz per step. The arrow and ENTER keystrokes display the frequency and mode after the step. With a little practice, it is easy to scan a band (say with 1-kHz steps in USB) looking for signals and, when one is found, change to 100-Hz steps to move closer and then to 10-Hz steps for the final adjustment.

Transmit/Receive Duplex and Split Operation

Late model ICOM transceivers have provisions for duplex and split operations. Ordinarily, FM repeater operations require that the station receiving on a frequency transmit at a fixed offset relative to that frequency. This operation is automatic with most VHF/UHF transceivers. Keyboard commands are available to specify the duplex offset and sign, although some early VHF/UHF transceivers apparently have no provision to control the sign of the offset with CI-V commands. Modern transceivers include separate duplex offset registers for HF, 6 m, 2 m and 70 cm. Front panel controls and this program can be used to select other than the default duplex offset and set either positive or negative duplex or none (simplex). In most modern transceiver the duplex sign can be saved in a memory channel, but the duplex offset magnitudes apply to all channels.

In split operation VFO A controls the receive frequency and VFO B the transmit frequency. The VFOs can be programmed from the front panel or this program. The split command does this automatically, either as an absolute frequency or a signed offset value added to the receive frequency.

Saving and Restoring Memory Channels

Modern radios can save and recall a huge number of memory channels, 20 banks of 40 channels in the R8500 and 5 banks of 99 channels in the 7000. This program simulates uses the numbering schemes defined by the various radios where bank and channel numbering start at zero or one. The chan, write and empty commands operate on every channel in a selected range. The program displays the frequency, mode and related data provided by the radio. For most radios this includes the memory name, although the maximum supported characters varies. For instance, the 756 memory channels includes the filter, duplex, tone, tone squelch and digital tone squelch data. The R8500 includes the tuning step, programmed tuning step, attenuator and scan data. The save command saves this information for each channel in the selected range to a file, one line per channel. The restore command restores each channel in the selected range from the file.

The file can be constructed by the radio or from scratch and modified as necessary. Each line of the file has the form

b.c frequency mode ...,

where b.c is the bank and channel number, frequency is in MHz and mode a valid mode name. The "..." includes one or more subcommands of the form keyword value, as in an ordinary keyboard command. Use the chan ? command to see the list of valid keywords. Not all radios support the same commands and subcommands, so cloning one radio from another of a different model might require editing the file.

Oscillator Calibration

Modern ICOM radios, synthesize all oscillator signals from a single master oscillator. Once the master oscillator frequency is accurately calibrated, the various LO and BFO signals will be exactly on frequency. Older ICOM radios synthesize the LO signal, but use an independent oscillator for the BFO signal. In these radios, the BFO frequency is shifted using a varactor and a network of diodes and resistors to generate the necessary BFO frequencies. This method is not very accurate when remotely tuning the radio to a narrowband RTTY or packet transmission, for example.

This program has provisions to compensate for the systematic errors in both the synthesized LO signal and varactor-switched BFO signals. This is done by adjusting the VFO frequency to compensate for the LO error and BFO frequency is compensated for each mode separately. Individual BFO errors. The commands to do this along with the calibration procedure are on the Keyboard and Batch Commands page.

Batch mode is designed for cases where a number of radios are to be cloned or programmed with memory channel blocks from another program. In principle, a Unix shell script could search an archive for the current VOA transmission schedules and transmitter locations, another program could determine the propagation model and best frequencies for the receiver location and current time of day, and then program the radio(s) with the results.

When using this program to operate more than one radio, it is useful for the batch file to define the VFO and BFO compensation for each radio. This allows the frequency files to use the assigned frequency of the station. The batch file can then load the frequency files in memory channel blocks as required. This allows channel blocks to be created by other programs and copied from one radio to another.

Interface Debugging

The program communicates with one or more radios using the icom CI-V broadcast bus and serial asynchronous protocol. The CT-17 level converter can be used to interface the CI-V voltage levels (TTL) to EIA (RS-232) levels, or a homebrew unit can be made from the MAX232 IC plus a handful of capacitors. The CT-17 supports up to four radios, but there is no inherent protocol limitation to this number. The CI-V uses active-low drivers with resistor pullups, so multiple radios can be connected to the same wire.

Messages are exchanged in the form of frames beginning with two preamble octets (0xfe) and ending with one postamble octet (0xfd). The message itself contains the source, destination, command and argument octets as necessary. In order to handle the older radios, the control program operates at 9600 bps; however, it can be compiled to operate at other speeds. All radios on the bus need to operate at the same rate. Each radio model is assigned a unique identifier octet, which can be changed if necessary. The control program sends a frame with that identifier and expects a reply, either containing data or a single ACK (0xfb) or NAK (0xfa). Most functions implemented by the control program require an exchange of several frames.

It has been the experience that some radios can occasionally fail to respond to a command or respond with a mangled frame. Therefore, the control program includes a good deal of error recovery code and uses timeouts and retransmissions as necessary. Since the CI-V bus uses a broadcast architecture, every octet transmitted by the control program is read back for verification. If the readback fails or no reply is received after three retransmissions, the operation fails and an error message is displayed.

The trace command can be used to watch the protocol interactions between the program and radios. The argument bus enables packet trace. The trace operates from received octets, either a readback of a transmitted frame preceded by T: or a copy of a received frame preceded by R:. Each transmission is repeated up to three times in case of error, after which the operation fails and is reported as an error. The argument packet enables bus error messages, which are normally suppressed until the maximum retry limit is reached.

The dump command displays the current main VFO contents in hex plus other information as labelled.

History

Written by David L. Mills, W3HCF; this update 24 April 2006, last update 24 September 1996.

Bugs

This is a work in progress. Many idiosyncrasies of various ICOM radios remain to be discovered.


icom-20120228/html.data/SiteTrash/OPTION.HTM0000744000175000017500000000355310420250236017042 0ustar colincolin Command Line Options

Command Line Options


Following is a list of recognized command line options. Note that, in the case of multiple options, the preferred order is -r, -c, -m, -g, -d, -k, -a and -f. The following options are valid at any time.

-d
Enable debug trace as in the trace keyboard command.
-f filename
Read commands from the file filename.
-k
Begin program operation in keypad mode.
-r name
Select the radio with identifier name. See above for a list of radio names and modes currently supported.

The following options are valid only after a radio has been selected

-c channel
Select the memory channel channel and set the radio frequency, mode and offset to its contents.
-d
Display the current radio frequency and mode. This is designed for use in shell scripts to confirm or log the results.
-g frequency
Set the radio frequency to frequency in MHz if less than 1000 and in kHz otherwise.
-m mode
Set the radio mode to mode. See above for a list of mode names valid for various radios. The mode names are specific to each radio type; not all radios support the same modes.

icom-20120228/html.data/SiteTrash/INDEX.BAK0000744000175000017500000004006710420033151016642 0ustar colincolin Program to Control ICOM Receivers and Transceivers

icom - Program to Control ICOM Receivers and Transceivers

jpg

Related Links

Command Line Options
Keyboard and Batch Commands
Keypad Commands
l>

Table of Contents


Synopsis

icom [ -r radio ] [ -c channel ] [ -m mode ] [ -g frequency ] [ -f file] [ -adk ]

Description

This program controls ICOM radio transceivers and receivers with the CI-V option. Most recent ICOM radios already have this option; older radios can be converted with an appropriate adapter mounted inside the radio. Up to four CI-V radios can be connected to a single serial port using a level converter such as the CT-17, which includes a MAX232 chip and not much else.

The program is intended to control a radio or transceiver over the Internet, so is specifically designed for keyboard control from another computer, so no graphics interface is necessary or provided. Other Internet tools are available to support a two-way audio link.

The program implements a radio interface capable of controlling almost all radio functions, including frequency and mode selection, agc, antenna, attenuator, break and preamp selection and, in some radios, tone, duplex and split controls. Commands are provided to read, write and empty memory banks and channels, where available. Banks and channels can be assigned attributes such as name, tone and duplex. The program can save and restore channel information to and from files for backup and cloning. Where supported by the radio, the program can set and reset switches such as the noise blanker, read and write controls such as the AF gain and read meters such as the signal (S) meter.

The program operates in one of three modes: keyboard, batch and keypad. In keyboard mode, commands and arguments are entered from the keyboard following the icom> prompt and the complete command set is available. In batch mode, the same commands and arguments are read from the file specified as an option in the shell command line. In keypad mode, commands and arguments are entered from the keyboard and numeric keypad following the > prompt. In this mode, numeric data are enterred from the numeric keypad followed by a single alphabetic character representing the command name. Shortcut arrow keys on the keyboard are used to tune up/down or increase/decrease the tuning rate.

Options on the shell command line can be used to select the radio model and set the frequency and mode. A description of each option is at Command Line Options. Using batch mode and a suitably crafted Unix crontab file, it is possible to tune a radio to different frequencies used by a shortwave broadcaster throughout the day, for example. With the minimuf program (available in a separate distribution), it is possible to build shell scripts that predict the most likely frequencies and tune the radio accordingly.

The program knows about most early and late model ICOM radios, including the 706, 756 and 7000 transceivers and the R72 and R8500 receivers. Use the radio ? command to see the currently supported list. The program can be told which radio is present or directed to scan for all known radios and report each one found. A number of diagnostic tests are performed on the selected radio to determine which options are present and to initialize to a known state. The program detects certain anomalistic behavior of some radios and adjusts its operations to make the behavior conform to a consistent model.

Basic Operation

Following is an overview demonstrating how this program can be used in typical operating scenarios. The first command is ordinarily radio, which specifies the radio by model number. This initializes the program and radio to a known condition. The program displays the radio attributes and then the first memory channel frequency, mode and additional data as available. The frequency and mode and other attributes can be enterred and edited using the keyboard; the data are transferred to the radio with an enter keystroke. Alternatively, the radio controls can be used to set frequency and mode, and the data transferred to the program with an enter keystroke. Details on the keyboard and keypad commands are in Keyboard and Batch Commands and Keyboard and Batch Commands.

Most commands take arguments, although many arguments can be defaulted. A frequency argument less than 1000 specifies the frequency in MHz, while greater than 1000 specifies the frequency in kHz. An offset argument preceeded by an explicit + or - character specifies the offset frequency relative to the current VFO frequency in kHz. Signed or unsigned step and rate arguments specify a tuning step in Hz. A bank.channel argument specifies a bank and memory channel number available in the particular radio. For most commands a question mark ? argument displays context-sensitive help information for that command. The help information consists of a keyword argument followed by a brief description of the function.

Since the most common function is tuning the radio to different frequencies or scanning a band of frequencies, a compact parsing convention is provided. The parser scans the tokens in each command line in turn. If the current token is the name of a defined command, that command is executed. Otherwise, if the current token is a valid frequency, the radio frequency is set to that value. Otherwise, if the token is a valid mode name, the radio mode is set accordingly. Otherwise, the command is discarded and an error message is displayed. Use the mode ? command to see a list of valid mode names; however, note that not all radios implement all modes.

Tuning Operations

The keyboard mode can be very awkward when searching a band for signals, since a new command must be used every time the frequency is changed. The keypad command puts the program in keypad mode and changes the prompt string to ">". In this mode, arguments such as frequency, tuning step, etc., can be entered directly from the keyboard and numeric keypad. Of course, the keypad must be in Num Lock mode for this to work properly. In keypad mode, the argument is given first followed by a single character which executes the function.

Most ICOM receivers tune in 10-Hz steps, while most HF transceiers tune in 1-Hz steps and some VHF/UHF radios tune in 100-Hz steps. The easiest way to tune the radio is using keypad mode and the arrow keys. The UP and DOWN arrow keys adjust the frequency up or down one step, while the LEFT and RIGHT arrow keys decrease and increase the tuning rate (Hz per step) respectively. The rate values begin at the minimum tuning step and extend in 1-2.5-5-10 steps to 5 MHz per step. The arrow and ENTER keystrokes display the frequency and mode after the step. With a little practice, it is easy to scan a band (say with 1-kHz steps in USB) looking for signals and, when one is found, change to 100-Hz steps to move closer and then to 10-Hz steps for the final adjustment.

Transmit/Receive Duplex and Split Operation

Late model ICOM transceivers have provisions for duplex and split operations. Ordinarily, FM repeater operations require that the station receiving on a frequency transmit at a fixed offset relative to that frequency. This operation is automatic with most VHF/UHF transceivers. Keyboard commands are available to specify the duplex offset and sign, although some early VHF/UHF transceivers apparently have no provision to control the sign of the offset with CI-V commands. Modern transceivers include separate duplex ofset registers for HF, 6 m, 2 m and 70 cm. Front panel controls and this program can be used to select other than the default duplex offset and set either positive or negative duplex or none (simplex). In most modern transceiver the duplex sign can be saved in a memory channel, but the duplex offset magnitudes apply to all channels.

In split operation VFO A controls the receive frequency and VFO B the transmit frequency. The VFOs can be programmed from the front panel or this program. The split command does this automatically, either as an absolute frequency or a signed offset value added to the receive frequency. In the 706g the split condition is saved together with frequence, mode and tone attributes.

Saving and Restoring Memory Channels

Modern radios can save and recall a huge number of memory channels, 20 banks of 40 channels in the R8500 and 5 banks of 99 channels in the 7000. This program simulates uses the numbering schemes defined by the various radios where bank and channel numbering start at zero or one. The chan, write and empty commands operate on every channel in a selected range. The program displays the frequency, mode and related data provided by the radio. For most radios this includes the memory name, although the maximum supported characters varies. For instance, the 756 momory channels includes the filter, duplex, tone, tone squelch and digital tone squelch data. The R8500 includes the tuning step, programmed tuning step, attenuator and scan data. The save command saves this information for each channel in the selected range to a file, one line per channel. The restore command restores each channel in the selected range from the file.

The file can be constructed by the radio or from scratch and modified as necessary. Each line of the file has the form

b.c frequency mode ...,

where b.c is the bank and channel number, frequency is in MHz and mode a valid mode name. The "..." includes one or more subcommands of the form keyword value, as described later. Use the chan ? command to see the list of valid keywords. Not all radios support the same commands and subcommands, so cloning one radio from another of a different model might require editing the file.

Oscillator Calibration

Modern ICOM radios, synthesize all oscillator signals from a single master oscillator. Once the master oscillator frequency is accurately calibrated, the various LO and BFO signals will be exactly on frequency. Older ICOM radios synthesize the LO signal, but use an independent oscillator for the BFO signal. In these radios, the BFO frequency is shifted using a varactor and a network of diodes and resistors to generate the necessary BFO frequencies. This method is not very accurate when remotely tuning the radio to a narrowband RTTY or packet transmission, for example.

This program has provisions to compensate for the systematic errors in both the synthesized LO signal and varactor-switched BFO signals. This is done by adjusting the VFO frequency to compensate for the LO error and BFO frequency is sompensated for each mode separately. individual BFO errors. The commands to do this along with the calibration prodecure are on Keyboard and Batch Commands.

Channel Palettes

Batch mode is designed for cases where a number of radios are to be cloned or programmed with memory channel blocks from another program. In principle, a Unix shell script could search an archive for the current VOA transmission schedules and transmitter locations, another program could determine the propagation model and best frequencies for the receiver location and current time of day, and then program the radio(s) with the results.

When using this program to operate more than one radio, it is useful for the batch file to define the VFO and BFO compensation for each radio. This allows the frequency files to use the assigned frequency of the station. The batch file can then load the frequency files in memory channel blocks as required. This allows channel blocks to be created by other programs and copied from one radio to another.

Interface Debugging

The program communicates with one or more radios using the icom CI-V broadcast bus and serial asynchronous protocol. The CT-17 level converter can be used to interface the CI-V voltage levels (TTL) to EIA (RS-232) levels, or a homebrew unit can be made from the MAX232 IC plus a handful of capacitors. The CT-17 supports up to four radios, but there is no inherent protocol limitation to this number. The CI-V uses active-low drivers with resistor pullups, so multiple radios can be connected to the same wire.

Messages are exchanged in the form of frames beginning with two preamble octets (0xfe) and ending with one postamble octet (0xfd). In order to handle the older radios, the control program operates at 9600 bps; however, it can be compiled to operate at other speeds. Each radio model is assigned a unique identifier octet, which can be changed if necessary. The control program sends a frame with that identifier and expects a reply, either containing data or a single ACK (0xfb) or NAK (0xfa). Most functions implemented by the control program require an exchange of several frames.

It has been the experience that some radios can occasionally fail to respond to a command or respond with a mangled frame. Therefore, the control program includes a good deal of error recovery code and uses timeouts and retransmissions as necessary. Since the CI-V bus uses a broadcast architecture, every octet transmitted by the control program is read back for verification. If the readback fails or no reply is received after three retransmissions, the operation fails and an error message is displayed.

the trace command can be used to watch the protocol interactions between the program and radios. The argument bus enables packet trace. The trace operates from received octets, either a readback of a transmitted frame preceded by T: or a copy of a received frame preceded by R:. Each transmission is repeated up to three times in case of error, after which the operation fails and is reported as an error. The argument packet enables bus error messages, which are normally suppressed until the maximum retry limit is reached.

The dump command displays the current main VFO contents in hex plus other information as labelled.

History

Written by David L. Mills, W3HCF; this update 25 September 1996.

Bugs

This is a work in progress. Many idiosyncrasies of various ICOM radios remain to be discovered.


icom-20120228/html.data/InDesignPackages/0000755000175000017500000000000010417560437016717 5ustar colincolinicom-20120228/html.data/Components/0000755000175000017500000000000010417560437015705 5ustar colincolinicom-20120228/icom.c0000644000175000017500000017535110606004450012777 0ustar colincolin/* * Program to control ICOM radios * * Main program */ #include "icom.h" #include #ifndef MSDOS /* include for Unix */ #include #include #include #include #endif /* MSDOS */ /* * Module definitions */ #define ARGMAX 20 /* maximum number of command args */ #define DICOM "/dev/icom" /* CI-V serial port device */ /* * External functions */ extern FILE *fopen(); extern char *strtok(), *strcpy(); extern char *optarg; extern int optind, opterr; extern double freqdouble(u_char *, int); /* * Local function prototypes */ static int getline(char *); static int argchan(struct icom *, struct chan *, char *); static int argbank(struct icom *, struct chan *, char *); static int setswitch(struct icom *, struct cmdtable *, int); static int setswitch2(struct icom *, struct cmdtable *, int); static int setswitch3(struct icom *, struct cmdtable *, int, int); static int sw_keypad(void); static int sw_keybd(void); char *capname(int, struct cmdtable *); static char *capdescr(char *, struct cmdtable *); int capkey(char *, struct cmdtable *); double fabs(double); static void printch(struct icom *, char *); static int readmeter(struct icom *, struct cmdtable *, int, char *); static void perr(int); static int qqsv(struct icom *, struct cmdtable *); static void banner(struct icom *); /* * Global variables */ int fd_icom; /* CI-V device */ struct icom *rptr = NULL; /* radio structure pointer */ int flags; /* radio flags */ int pflags; /* program flags */ static char defarg[LINMAX]; /* default arguments */ static char args[LINMAX]; /* command line */ static char *argv[ARGMAX]; /* command line args */ static int argn; /* number of command line args */ static int argi; /* command args index */ static FILE *fp_cmd[FPMAX] = {NULL}; /* include file stack */ static int fp = 0; /* include file statck index */ static char *updown = " +- "; /* channel dinkle */ #ifndef MSDOS static int fd; /* terminal control file descriptor */ static struct termios terma, termb; /* Unix terminal interface */ extern int errno; #endif /* MSDOS */ /* * Main program */ int main( int argc, /* number of arguments */ char **argcv /* vector of argument pointers */ ) { char chr; /* char temp */ char *ptr; /* fiddles */ int i, temp; /* int temps */ double freq; /* double temp */ struct icom *rp; /* radio structure pointer */ struct chan *cp; /* memory channel pointer */ char s1[LINMAX]; /* string buffer */ FILE *fp_temp; /* * Initialize */ flags = pflags = 0; *defarg = '\0'; rptr = NULL; #ifndef MSDOS /* * Process command-line arguments */ if ((fd_icom = open(DICOM, O_RDWR, 0777)) < 0) { printf("*** Unable to open serial port %s\n", DICOM); exit(1); } while ((temp = getopt(argc, argcv, "c:df:g:km:o:r:")) != -1) { switch (temp) { /* * -d - debug trace */ case 'd': pflags |= P_TRACE | P_ERMSG; continue; /* * -f - open command file */ case 'f': if ((fp_temp = fopen(optarg, "r")) == NULL) { perr(R_IO); exit(R_IO); } fp++; fp_cmd[fp] = fp_temp; continue; /* * -k - select keypad mode */ case 'k': pflags |= P_PAD; continue; /* * -r - select radio. Use default bit rate. */ case 'r': temp = capkey(optarg, identab); if (temp < 0) { perr(temp); exit(temp); } rptr = select_radio(temp, 0); if (rptr == NULL) { perr(R_RAD); exit(R_RAD); } continue; } /* * The remaining options are valid only after a radio * has been selected. If any are selected, the program * exits after executing the command line options. */ if (rptr == NULL) { perr(R_DEF); exit(R_DEF); } rp = rptr; cp = &rp->chan; switch (temp) { /* * -c - set bank, channel * * This is the same as the chan keyboard command. */ case 'c': pflags |= P_EXIT; temp = argchan(rp, cp, optarg); if (temp < 0) { perr(temp); continue; } temp = readchan(rp); if (temp < 0) perr(temp); continue; /* * -g - set frequency * * This is the same as the default frequency keyboard * command. */ case 'g': pflags |= P_EXIT; if (sscanf(optarg, "%lf", &freq) != 1) { perr(R_FMT); continue; } if (freq > 1000) freq /= 1000; temp = loadfreq(rp, freq); if (temp < 0) perr(temp); continue; /* * -m - set mode * * This is the same as the mode keybard command. Note, * this option must precede the -g option for older * radios. */ case 'm': pflags |= P_EXIT; temp = capkey(optarg, rp->modetab); if (temp < 0) { perr(temp); continue; } temp = loadmode(rp->ident, temp); if (temp < 0) perr(temp); continue; } } /* * If a radio was found, initialize it. If its settings were * changed and a command file is not open, assume this is run * from a script and nothing more needs to be done. */ if (pflags & P_EXIT) exit(0); if (pflags & P_PAD) { if (sw_keypad()) pflags &= ~P_PAD; } #endif /* MSDOS */ /* * Main loop */ while (1) { flags &= ~F_CACHE; pflags &= ~(P_DISP | P_DSPCH | P_DSPST | P_KEYP | P_ESC); if (pflags & P_PAD) { /* * Keypad mode. Keypad commands begin with a * sequence of digits and special characters and * end with a single letter, ANSI escape * sequence or '\n', which specifies the * function. Escape sequences consist of ESC * followed by '[' and either a letter or * sequence of digits followed by '~', which is * not part of the command. Help '?' displays a * list of command names and descriptions. */ printf(">"); ptr = s1; *ptr = *args = '\0'; while (1) { chr = (char)getchar(); if (chr == KILL) { printf(" XXX\n>"); ptr = s1; *ptr = *args = '\0'; continue; } if (chr == ESC) { pflags |= P_ESC; *ptr = '\0'; ptr = args; continue; } if (pflags & P_ESC) { if (chr == '~' || chr == '\n') break; *ptr++ = chr; if (isalpha(chr)) break; continue; } if (!isalpha(chr) && !iscntrl(chr) && chr != '?' && chr != ' ') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); continue; } *ptr = '\0'; ptr = args; if (chr != '\n') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); } if (pflags & P_KEYP) putchar('\n'); break; } /* * Rewrite the line with the command letter * first followed by the argument, then pretend * it a keyboard command. */ *ptr = '\0'; strcat(args, " "); strcat(args, s1); argn = getline(args); argi = 0; temp = command(rptr, key); } else { /* * Keyboard mode. Get the next command line and * parse the tokens separated by whitespace. * Ignore '#' and the rest of the line. This is * handy for command script annotations. */ if (fp_cmd[fp] != NULL) { if (fgets(args, LINMAX, fp_cmd[fp]) == NULL) { close(fp_cmd[fp]); fp--; continue; } else { printf("%s", args); } } else { printf("icom>"); if (gets(args) == NULL) exit(0); } if (*args == '#') continue; argn = getline(args); argi = 0; temp = command(rptr, cmd); } perr(temp); if (rptr == NULL) continue; /* * Update chan, freq, mode. */ rp = rptr; cp = &rp->chan; if (pflags & (P_DISP | P_DSPCH | P_DSPST)) { printch(rp, s1); printf("%s\n", s1); } } } /* * Process each command in the line in turn. */ int command( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { int rval; rval = R_OK; if (argn == 0) { pflags |= P_DISP; return (rval); } while (argn - argi > 0) { rval = qqsv(rptr, cmdop); if (rval < 0) break; argi++; } return (rval); } /* * Execute command * * This routine executes a command consisting of a single line beginning * with a command token followed by argument tokens. Some commands cause * this routine to be invoked recursively. In each case the recursive * call points to a command token. */ int qqsv( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { FILE *fp_in; /* data input file */ FILE *fp_out; /* data output file */ char s1[LINMAX]; /* string buffer */ char s2[LINMAX]; /* string buffer */ u_char rsp[BMAX]; /* radio response */ u_char *ptr; /* fiddles */ int i, temp, sw, rval; /* int temps */ FILE *fp_temp; double freq, step, dtemp; /* double temps */ struct chan *cp; /* memory channel pointer */ u_char cmdempty[] = {V_EMPTY, FI}; u_char cmdctl[] = {0, 0, 0, 0, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char cmdwrite[] = {V_WRITE, FI}; u_char cmdtx[] = {V_TX, 0x00, 0x01, FI}; u_char cmdrx[] = {V_TX, 0x00, 0x00, FI}; u_char cmdvfoa[] = {V_SVFO, 0x00, FI}; u_char cmdvfob[] = {V_SVFO, 0x01, FI}; u_char cmdsplit[] = {V_SPLIT, 0x00, FI}; u_char cmdswap[] = {V_SVFO, 0xb0, FI}; struct timeval tv; struct tm *tm; /* * For the 756, 7000 and 7800 time comands */ u_char year7000[] = {V_SETW, 0x05, 0x00, 0x39, FI, 0x00, FI}; u_char date7000[] = {V_SETW, 0x05, 0x00, 0x40, FI, 0x00, FI}; u_char time7000[] = {V_SETW, 0x05, 0x00, 0x41, FI, 0x00, FI}; u_char date7800[] = {V_SETW, 0x05, 0x00, 0x59, FI, 0x00, 0x00, 0x00, FI}; u_char time7800[] = {V_SETW, 0x05, 0x00, 0x60, FI, 0x00, FI}; u_char time756[] = {V_SETW, 0x05, 0x16, FI, 0x00, FI}; /* * Ignore selected noise strings. */ rval = R_OK; if (strcmp(argv[argi], "MHz") == 0 || strcmp(argv[argi], "kHz") == 0 || strcmp(argv[argi], "dB") == 0) return(rval); sw = capkey(argv[argi], cmdop); switch (sw) { /* * radio [ [ ]] * * Select the radio and CI-V bit rate for further * commands and display its description and band limits. If * is missing, use the default from tables. If is * missing and the radio has not been previously defined, the * bus is probed for all known radios, which takes some time. If * previously defined, its description and band limits of are * displayed. */ case C_RADIO: if (argn - argi < 2) { if (rp != NULL) { banner(rp); break; } temp = R_NOR;; for (i = 0; name[i].name[0] != '\0'; i++) { rp = select_radio(name[i].ident, 0); if (rp != NULL) banner(rp); } } else { temp = capkey(argv[++argi], identab); if (temp < 0) return (temp); if (argn - argi < 2) i = 0; else i = capkey(argv[++argi], baud); if (i < 0) return(i); rp = select_radio(temp, i); if (rp != NULL) banner(rp); } if (rptr == NULL) return (R_RAD); pflags |= P_DSPCH; break; /* * include * * include command file. */ case C_INCLD: if (argn - argi < 2) { rval = R_ARG; break; } if ((fp_temp = fopen(argv[++argi], "r")) == NULL) { rval = (R_IO); break; } fp++; fp_cmd[fp] = fp_temp; break; /* * quit * * Quit the dance */ case C_QUIT: exit(0); /* * verbose off | on * * Set verbose mode */ case C_VERB: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], verbx); if (temp < 0) rval = temp; else pflags = (pflags & ~P_VERB) | temp; return (rval); /* * trace [ all | none | bus | pkt ] * * Set debug flags */ case C_DEBUG: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], dbx); if (temp < 0) rval = temp; else pflags = (pflags & ~(P_TRACE | P_ERMSG)) | temp; return (rval); /* * pad * * Switch to keypad mode. */ case C_KEYPAD: if (!sw_keypad()) pflags |= P_PAD; return (rval); /* * / (keypad mode) * * Erase input */ case R_ERR: case C_ERASE: return (rval); /* * q (keypad mode) * * Switch to keyboard mode. */ case C_KEYBD: if (!sw_keybd()) pflags &= ~P_PAD; return (rval); } /* * The remaining commands are valid only after a radio has been * selected. */ if (rp == NULL) return (R_DEF); cp = &rp->chan; switch (sw) { /* * dump vfo (debug) */ case C_DUMP: printf("flags %x pflags %x vfo", flags, pflags); ptr = (u_char *)&cp->vfo; for (i = 0; i < sizeof(struct vfo7000); i++) printf(" %02x", *ptr++ & 0xff); printf("\nsplit %f step %02x pstep %02x %02x atten %02x scan %02x\n", cp->split, cp->aux.step, cp->aux.pstep[0], cp->aux.pstep[1], cp->aux.atten, cp->aux.scan); break; /* * default * * Concatenate remaining tokens as default string for restore. */ case C_DEFLT: if (argn - argi < 2) { printf("default:%s\n", defarg); break; } *defarg = '\0'; while (argn - argi > 1) { strcat(defarg, " "); strcat(defarg, argv[++argi]); } break; /* * time [ set ] * * Set date and time and display for readback. This works for * the 7000 and 756 and maybe works for the 7800. */ case C_TIME: gettimeofday(&tv, NULL); tm = gmtime((time_t *)&tv.tv_sec); /* * 7000 yyyy mm/dd hhmm */ if (rp->ident == 0x70) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &year7000[4]); rval = setcmda(rp->ident, year7000, rsp); if (rval < 0) break; dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7000[4]); setcmda(rp->ident, date7000, rsp); dtohex(tm->tm_hour * 100 + tm->tm_min, &time7000[4]); setcmda(rp->ident, time7000, rsp); } year7000[4] = FI; setcmda(rp->ident, year7000, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); date7000[4] = FI; setcmda(rp->ident, date7000, rsp); sprintf(s2, "%x/%x ", rsp[4], rsp[5]); strcat(s1, s2); time7000[4] = FI; setcmda(rp->ident, time7000, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 7800 yyyy mm/dd hhmm */ } else if (rp->ident == 0x6a) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &date7800[4]); dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7800[6]); rval = setcmda(rp->ident, date7800, rsp); if (rval < 0) break; dtohex(tm->tm_hour * 100 + tm->tm_min, &time7800[4]); setcmda(rp->ident, time7800, rsp); } date7800[4] = FI; setcmda(rp->ident, date7800, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); sprintf(s2, "%x/%x ", rsp[6], rsp[7]); strcat(s1, s2); time7800[4] = FI; setcmda(rp->ident, time7800, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 756 hhmm */ } else { if (argn - argi > 1) { ++argi; dtohex(tm->tm_hour * 100 + tm->tm_min, &time756[3]); rval = setcmda(rp->ident, time756, rsp); if (rval < 0) break; } time756[3] = FI; setcmda(rp->ident, time756, rsp); sprintf(s1, "%02x%02x UTC", rsp[3], rsp[4]); } printf("%s\n", s1); break; /* * (command not found) * * We get here if the token matches no valid command name. If it * has valid floating-point format, set the frequency as given. * If it is a valid mode name, then set the mode as given. * Otherwise, declare an error. */ case C_FREQX: if (sscanf(argv[argi], "%lf", &freq) == 1) { if (freq > 1000.) freq /= 1000; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DISP; break; } temp = capkey(argv[argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* * mode * * The only reason this command is here is to provide help with * the valid mode combinations. The following radios support the * mode variants listed (1 narrow, 2 medium, 3 wide). * * usb/lsb cw/rtty am fm wfm * 706g 2, 3 1, 2, 3 2, 3 2, 3 1 * 756 1, 2, 3 1, 2, 3 1, 2, 3 2, 3 no * 7000 1, 2, 3 1, 2, 3 1, 2, 3 1, 2, 3 1 * R8500 1, 2, 3 1, 2, 3 1, 2, 3 1, 2 1 */ case C_MODE: if (argn - argi < 2) { pflags |= P_DISP; break; } temp = capkey(argv[++argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* *************************************************************** * * * These commands are the bread and butter for most operators. * * They can be used to enter and display frequency and mode * * data and, when available, filter configuration. Note the * * difference between the freq and chan commands; the freq * * command operates directly on the VFO, while the chan * * command retrieves the entire channel contents, including in * * the 7000 both VFOs and channel name. * * * *************************************************************** */ /* *************************************************************** * * * The save and restore commands are used to save a single * * channel or block of channels to a file and restore them * * from a file. They can also be used to clone data between * * compatible radios. The read, write and empty commands * * operate on a single channel or block of channels. * * * *************************************************************** * * The arguments to these commands specify a single bank/chanel * number or a range of bank/channel numbers. See argchan() for * syntax */ /* * save [ chan ] [ file ] * * Save a block of memory channels to a file. */ case C_SAVE: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp);; if ((fp_out = fopen(argv[++argi], "w")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (cp->freq != 0) fprintf(fp_out, "%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } fclose(fp_out); pflags &= ~P_DSPCH; break; /* * restore [ chan ] [ file ] * * Restore a block of memory channels from a file. If the * argument is '*', restore each file line to the same memory * channel it came from. If not, restore the block specified, * from the first channel to the lase. */ case C_RESTORE: if (argn < 3) return (R_ARG); if (*argv[++argi] == '*') temp = 4; else temp = argchan(rp, cp, argv[argi]); if (temp < 0) return (temp); if ((fp_in = fopen(argv[++argi], "r")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { /* * Get next line from file. Ignore empty lines. */ if (fgets(s1, LINMAX, fp_in) == NULL) break; if (*defarg != '\0') { strcpy(s2, defarg); argn = getline(s2); argi = 0; if (argn == 0) continue; rval = command(rp, loadtab); if (rval < 0) break; } argn = getline(s1); argi = 0; if (argn == 0) continue; /* * If '*' argument, copy the data to the channel * specified on the file line. If not, copy the * data to the channel specified in the * argument. */ emptyvfo(cp); if (temp == 4) { rval = argchan(rp, cp, argv[argi++]); if (rval < 0) break; if (argn == 1) continue; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; } else { if (argn == 1) continue; argi++; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } } close(fp_in); pflags &= ~(P_DISP | P_DSPCH); break; /* * read [ chan ] * * Read frequency, mode and other data from a memory channel. * While it seems silly, specifying a block of channels reads * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_READ: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) { if (temp == R_NOP) capkey("?", loadtab); return (temp); } pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } pflags &= ~P_DSPCH; break; /* * write [ chan ] * * Write the current frequency, mode and other data to a memory * channel. Various radios interpret other data in various ways. * For the 7000, this includes both VFOs with their current * mode, filter setting, duplex and CTSS/DTCS configuration. * While it seems silly, specifying a block of channels writes * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_WRITE: if (argn < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } break; /* * empty [ chan ] [ chan ] * * Empty memory channel or block of memory channels. */ case C_EMPTY: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = emptychan(rp->ident, cp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } cp->freq = 0; break; /* * bank [ bank ] [ name ] [...] * * Read/write bank name. This works for the R8500 and maybe * R9000, but not for known transceivers, which don't have a * bank name. */ case C_BANK: if (argn - argi < 2) temp = cp->bank; else if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (argn > 2) loadbank(rp->ident, temp, cp->name); rval = readbank(rp->ident, temp, s1); if (rval < 0) break; cp->bank = temp; printf("bank %d %s\n", temp, s1); break; /* *************************************************************** * * * The following commands can provide software compensation * * for VFO or BFO frequency errors. Some radios generate BFO * * frequencies using a VCXO for each mode. The BFO * * compensation command corrects for the intrinsic frequency * * error (Hz) in each mode. Other radios generate all LO and * * BFO frequencies from a single VFO synthesizer. The VFO * * compensation corrects for the intrinsic frequency error * * (PPM). As each radio is different, these commands should * * probably live in a batch file. * * * *************************************************************** */ /* * vfocomp [ ] * * Set the VFO frequency compensation (PPM). */ case C_VCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->freq_comp = freq; } printf("frequency %f VFO offset %.2f PPM\n", cp->freq, rp->freq_comp); break; /* * bfocomp [ ] * * Set the BFO frequency compensation (Hz). */ case C_BCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->bfo[cp->mode & 0x0f] = freq; } freq = rp->bfo[cp->mode & 0x0f]; printf("mode %s BFO offset %.0lf Hz\n", capname(cp->mode, rp->modetab), freq); break; /* *************************************************************** * * * Radio commands that read and write internal registers, * * including VFO options, scan options, and duplex/simplex * * options. * * * *************************************************************** */ /* * Modern transceivers have two VFOs, called A and B, * alternatively main and sub, and two frequency/mode displays. * Each VFO is associated with mode and memory channel. The * functions of the vfo commands differ in funky ways on the * various transceivers. * * On the 7000 a "vfo a" command shows VFO A on the main display * and VFO B on the sub display. A "vfo b" command shows VFO B * on the main display and VFO A on the sub display. A "vfo * btoa" command copies the contents of VFO B to VFO A. A "vfo * swap" command interchanges the contents of VFO A and VFO B. * The 7000 can't do any of the other vfo commands. * * On the 756 the main display is at the top in large bright * font, while the sub display is at the bottom in small dim * font. Each display is associated with a VFO and a memory * channel. The mode, duplex direction and tone configuration * can be set separately for each VFO. Both VFOs and related * data can be saved in a memory channel. Ordinarily, updates * from the panel controls and this program go to the main VFO. * A "split sub" command switches updates to the sub VFO, while * a "split main" command switches back to the main VFO. Note * that the updated VFO is highlighted in bright font. A "vfo * equal" command copies the contents of the main VFO to the sub * VFO, while a "vfo swap" command interchanges the contents of * the two VFOs. The "vfo watch" and "vfo nowatch" turn the * dual-watch function on and off. Note that in dual-watch the * sub VFO is highlihted in large font. * * vfo [ ] (V_SVFO 0x07 command) * * Execute one of the subcommands on the help menu. */ case C_VFO: rval = setswitch(rp, vfo, V_SVFO); if (rval < 0) break; pflags |= P_DSPCH; break; /* * swap (V_SVFO 0x07 command) * * Swap the contents of VFO A and VFO B and make the swapped VFO * active to enter frequency and mode. This is the same function * as the "vfo swap" command useful in keypad mode to monitor * the transmit frequency. */ case C_SWAP: rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; pflags |= P_DSPCH; break; /* * split [ cmd ] (V_SPLIT 0x0f command) * * Use VFO A for receive and VFO B for transmit. * * Ordinarily, ICOM transceivers transmit and receive with VFO * on VFO A. A "split on" command transmits with VFO B, while a * "split off" restores the normal behavior. The 7000 can do * "split dup+", "split dup-" and "split simplex" as well. * * In addition to the split commands on the help menu, this * command can be used to set the transmit offset in kHz if the * argument is preceeded by a + or - or to an arbitrary value in * MHz if an unsigned value. */ case C_SPLIT: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) == 1) { if (freq > 1000) freq /= 1000; readvfo(rp); if (argv[argi][0] == '+' || argv[argi][0] == '-') { freq /= 1000.; freq += cp->freq; } cp->split = freq; if (cp->split == 0) { cmdsplit[1] = 0x00; rval = setcmda(rp->ident, cmdsplit, rsp); pflags |= P_DSPCH; break; } rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; rval = loadfreq(rp, freq); if (rval < 0) break; rval = loadmode(rp->ident, cp->mode); if (rval < 0) break; setcmda(rp->ident, cmdvfoa, rsp); cmdsplit[1] = 0x01; setcmda(rp->ident, cmdswap, rsp); pflags |= P_DSPCH; break; } argi--; } rval = setswitch(rp, split, V_SPLIT); if (rval < 0) break; pflags |= P_DSPCH; break; /* * mvfo (V_VFOM 0x0a command) * * Read memory channel and transfer to VFO. This works for the * 756 and 7000. The radio does this his in memory channel mode, * so this program does it in VFO mode. In principle, this * command should never be necessary, but is included for test * and exploration. */ case C_VFOM: if (argn - argi < 2) rval = argchan(rp, cp, NULL); else rval = argchan(rp, cp, argv[++argi]); if (rval < 0) break; rval = readchan(rp); if (rval < 0) break; rval = setcmda(rp->ident, cmdvfom, rsp); break; /* * duplex [ duplex ] * * Set transmit offset for FM duplex. This works with the 706G * and 7000, which have four duplex registers, one for each of * the HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read * and write these registers, the frequency must be first set * within the correct band. */ case C_DUPLEX: if (argn - argi < 2) { rval = readoffset(rp->ident, &freq); if (rval < 0) break; printf("duplex %.1f\n", freq); break; } if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rval = loadoffset(rp->ident, freq); break; /* * scan [ ] (V_SCAN 0x0e command) * * Perform awesome scans, both memory an channel. Some * radios have simply awesome scanning modes; others are * mostly bare. Need some volunteer experimentors here. */ case C_SCAN: return (setswitch(rp, scan, V_SCAN)); /* *************************************************************** * * * Tuning step and rate commands. The step and rate commands * * should work for all radios, as they do not use the radio * * tuning-step functions. The dial command works with the * * radio tuning-step functions, so is model dependent. * * * *************************************************************** */ /* * rate [ ] * * Set tuning rate. The values of from 0 through 20 * select the rate values in a 1-2.5-5-10 sequence. Warning: if * the frequency resolution (minimum tuning step) is 10, 100, * 1000 Hz, etc., the nexxt step up would be 25, 250, 2500, * etc., which is not a multiple of the minimum tuning step. In * such cases the step is rounded to 20, 200, 2000, etc. */ case C_RATE: if (argn - argi > 1) { if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (temp > 20) temp = 20; else if (temp < rp->minstep) temp = rp->minstep; rp->rate = temp; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; } pflags |= P_DSPST; break; /* * rate up (keypad) * * Set tuning rate up one notch. */ case C_RUP: if (rp->rate < 20) rp->rate++; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * rate down (keypad) * * Set tuning rate down one notch. */ case C_RDOWN: if (rp->rate > rp->minstep) rp->rate--; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * Tuning step commands. The step command sets the tuning step * directly to an arbitrary value. The up and down commands * shift the frequency up or down by the value of the tuning * step. * * step [ ] * * Set tuning step directly in Hz. This is useful when scanning * odd channel spacings, such as aviation and marine radio * channels. Note that the tuning rate is set to minimum here, * since otherwise the rounding process would violate the * principle of least astonishment. */ case C_STEP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &dtemp) != 1) return (R_FMT); if (dtemp < logtab[rp->minstep]) dtemp = logtab[rp->minstep]; rp->step = dtemp; rp->rate = rp->minstep; } pflags |= P_DSPST; break; /* * up (keypad) * * Tune up one step. */ case C_UP: freq = cp->freq + rp->step / 1e6; if (freq >= rp->ustep) freq = rp->lstep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * down (keypad) * * Tune down one step. */ case C_DOWN: freq = cp->freq - rp->step / 1e6; if (freq < rp->lstep) freq = rp->ustep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * band [ ] [ ] * * Set band scan limits. An up or down via keypad beyond the * upper limit wraps to the lower limit and vice-versa. */ case C_BAND: if (argn - argi < 2) { printf("band %s\n", capdescr("band", rp->cap)); break; } if (argn - argi < 3) return (R_ARG); if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); if (sscanf(argv[++argi], "%lf", &step) != 1) return (R_FMT); if (freq > step) { dtemp = freq; freq = step; step = dtemp; } if (freq < rp->lband) freq = rp->lband; rp->lstep = freq; if (step > rp->uband) step = rp->uband; rp->ustep = step; break; /* *************************************************************** * * * Control commands. These are used to set switches, twirl * * controls and read meters. Various radios implement none or * * a subset of the defined functions. * * * *************************************************************** */ /* * ctl [ name ] [ value ] (V_WRCTL 0x14 command) * * The ctl subcommand reads or writes internal registers * associated with a front panel control. The 756 and 7000 can * read and write them. The 706G can read these registers but * cannot write them. The R8500 can write them but not read * them. Most radios implement only a subset of the defined * subcommands. */ case C_CTRL: if (argn - argi < 2) { for (i = 0; ctlc[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, ctlc[i].ident, rsp); if (temp < 0) continue; printf("%10s %s\n", ctlc[i].name, rsp); } break; } temp = capkey(argv[++argi], rp->ctrl); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn < 3) { cmdctl[2] = FI; rval = readmeter(rp, ctlc, temp, s1); if (rval < 0) break; printf("%s\n", s1); } else { if (sscanf(argv[++argi], "%d", &sw) != 1) return (R_FMT); sw = (sw * 255) / 100; if (temp >> 16 == F) sw += 128; sprintf(s1, "%04d", sw); ptr = s1; cmdctl[2] = (*ptr++ & 0xf) * 16; cmdctl[2] += *ptr++ & 0xf; cmdctl[3] = (*ptr++ & 0xf) * 16; cmdctl[3] += *ptr++ & 0xf; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * meter [ name ] [ value ] (V_RMTR 0x15 command) * * The meter subcommands report current meter indications. Note * that the S meter is reported in S units and dB above S9. The * squelch condition is reported as open (signal) or closed * (silent). * * The 706G can read the signal and sql meters. */ case C_METER: if (argn - argi < 2) { for (i = 0; meter[i].name[0] != '\0'; i++) { temp = readmeter(rp, meter, meter[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", meter[i].name, s1); } break; } temp = capkey(argv[++argi], meter); if (temp < 0) return (temp); rval = readmeter(rp, meter, temp, s1); if (rval == R_OK) printf("%s\n", s1); break; /* * set [ name ] [ value ] (V_TOGL 0x16 command) * * The switch subcommands read or write internal switches. */ case C_SWTCH: if (argn - argi < 2) { for (i = 0; switches[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, switches[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", switches[i].name, s1); } break; } temp = capkey(argv[++argi], switches); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn - argi < 2) { cmdctl[2] = FI; rval = readmeter(rp, switches, temp, s1); break; } else { temp >>= 16; if (temp == A) { temp = capkey(argv[++argi], agc); } else if (temp == B) { temp = capkey(argv[++argi], fmtb); } else if (temp == W) { temp = capkey(argv[++argi], fmtw); } else { sscanf(argv[++argi], "%d", &temp); sprintf(s1, "%02d", temp); ptr = s1; temp = (*ptr++ & 0xf) * 16; temp += *ptr++ & 0xf; } if (temp < 0) return (temp); cmdctl[2] = temp; cmdctl[3] = FI; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * dial [ ] (V_DIAL 0x10 command) * * Set dial tuning step. This command works with all radios, * including the 775 and R8500; however, the allowable arguments * are different. Note that in the R8500 the allowable steps are * constrained to multiples of 0.5 kHz. */ case C_DIAL: if (argn - argi < 2) { temp = cp->aux.step; if (temp != 0x13) printf("dial %s kHz\n", capname(temp, rp->dialtab)); else printf("dial %.1f kHz\n", freqdouble(cp->aux.pstep, 2) / 10); break; } /* * Construct V_DIAL command for tuning step. */ ptr = s1; *ptr++ = V_DIAL; dtemp = 0; temp = capkey(argv[++argi], rp->dialtab); if (temp < 0) return (temp); if (temp == 0x13) { if (sscanf(argv[argi], "%lf", &dtemp) != 1) return (R_FMT); } *ptr++ = temp; *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) break; /* * Save step and programmed step for later. */ cp->aux.step = temp; doublefreq(dtemp * 10, s1, 2); memcpy(cp->aux.pstep, s1, 2); break; /* *************************************************************** * * * CTSS and DTCS commands. These commands turn on and off and * * program the repeater tone (tone), tone squelch (tsql) and * * digital tone squelch (dtcs) functions. * * * *************************************************************** * * The syntax for all three commands is the same; * * tone reports the status and frequency/code * tone off turns off the function * tone on turns on the function * tone turns on the function and programs the * frequency/code * tone ? reports a list of valid CTSS/DTCS code * tsql ? values. The must be identical to * an item in the list. * * dtcs ? reports a list of valid DTCS code values. The * must be identical to an item on the list. * The polarity codes "-pp" are appended, where pp * are N (upright) or N (inverted). * * The three commands are mutually exlusive; setting one of them * on turns off the others. */ /* * tone [ args ] (V_TONE 0x1b command) * * Set the repeator tone CTSS frequency. This works for the 756 * and 7000. */ case C_TONE: return (setswitch3(rp, tone, 0x00, 0x42)); /* * tsql [ args ] (V_TONE 0x1b command) * * Set the tone squelch CTSS frequency. This works for the 756 * and 7000. */ case C_TSQL: return (setswitch3(rp, tone, 0x01, 0x43)); /* * dtcs [ args ] (V_TONE 0x1b command) * * Set the digital tone squelch DTCS code. This works only for * the 7000. */ case C_DTCS: return (setswitch3(rp, dtcs, 0x02, 0x4b)); /* *************************************************************** * * * Utility commands. Select the antenna, attenuator, preamp, * * agc and and break-in options. * * * *************************************************************** */ /* * The duplex, preamp and attenuator commands can be set for * each band segment. There are four duplex offset registers, * one each fot HF, 6 m, 2 m and 70 cm bands. The preamp and * attentuator settings are stored by band segment as follows: * * 703g 756 7000 * .3-1.6 .3-1.6 .03-1.6 * 1.6-2 1.6-2 1.6-2 160 m * 2-5 2-6 2-6 80 m * 5-8 6-8 6-8 40 m * 8-11 8-11 8-11 30 m * 11-20 11-20 20, 17 m * 11-15 20 m * 15-20 17 m * 20-22 20-22 20-22 15 m * 22-26 22-26 22-26 12 m * 26-40 26-45 26-30 10 m * 40-60 45-60 45-129 6 m * 129-144 * 60-148 144-148 2 m * 148-200 * 400-470 400-470 70 sm */ /* * ant [ 1 | 1R | 2 | 2R ] (V_SANT 0x12 command) * * Select antenna. Transceivers like the 756 have two antennas * (1, 2) for transmit/receive and a third (R) for receive only. * For instance, option 1R selects antenna 1 for transmit and R * for receive. */ case C_ANT: argv[argi] = capname(sw, cmd); return (setswitch(rp, ant, V_SANT)); /* * atten [ ] (V_ATTEN 0x11 command) * * Set attenuator options. The options include all known * attentuator options in dB. Following are the known values for * a few modern radios. * * 706G 20 dB * 756, 7000 6, 12, 18 dB * R8500 10, 20, 30 dB */ case C_ATTEN: argv[argi] = capname(sw, cmd); return (setswitch(rp, atten, V_ATTEN)); /* * preamp [ off | 1 | 2 ] * * Set preamp options. Some radios have none, one or two preamp * settings. * * 706G, 7000 1 * 756 2 * R8500 none */ case C_PAMP: argv[argi] = capname(sw, cmd); return (setswitch2(rp, preamp, (V_TOGL << 8) | 0x02)); /* * agc [ slow | medium | fast ] * * Set AGC options. Some radios have none or a subset of these * options. * * 706G medium, fast * 756, 7000 slow, medium, fast * R8500 slow (agcslow), fast (agcfast) */ case C_AGC: argv[argi] = capname(sw, cmd); return (setswitch2(rp, agc, (V_TOGL << 8) | 0x12)); /* * break [ off | semi | full ] * * Set break options. This works on the 706G, 756 and 7000. */ case C_BREAK: argv[argi] = capname(sw, cmd); return (setswitch2(rp, fmtb, (V_TOGL << 8) | 0x47)); /* *************************************************************** * * * Power and voice commands. These commands control the power * * to the radio, turn the transmitter on and off and report * * the status by voice. * * * *************************************************************** */ /* * power [ off | on ] (V_POWER 0x18 command) * * Set power on/off. The radio will be powered off after the * sleep interval, but it will still listen for a power on * command. This works only on the R8500. */ case C_POWER: return (setswitch(rp, power, V_POWER)); /* * ptt (V_PTT 0x1c command) * * Display transmit condition; turn transmitter on and off. */ case C_PTT: return (setswitch2(rp, tx, V_TX << 8 | 0x00)); /* * rx (V_TX 0x1c command). Turn transmitter off. */ case C_RX: return (setcmda(rp->ident, cmdrx, rsp)); /* * tx (V_TX 0x1c command). Turn transmitter on. */ case C_TX: return (setcmda(rp->ident, cmdtx, rsp)); /* * say [ all | freq | mode ] (V_ANNC 0x13 command) * * Set announce control off/on. This requires the UT-102 Voice * Synthesizer Unit, which is standard in the 7000. */ case C_ANNC: return (setswitch(rp, say, V_ANNC)); /* *************************************************************** * * * Mongrels. These commands are used for testing and just * * playing around. * * * *************************************************************** */ /* * name * * Set channel name. Enclose in quotes if contains * spaces. */ case C_NAME: if (argn - argi < 2) printf("%s\n", cp->name); else strlcpy(cp->name, argv[++argi], sizeof(cp->name)); break; /* * key (V_SETW 0x1a command) * * Program memory keyer (756 and 7000). Each of four memory * keyer channels can hold 55 characters. */ case C_KEY: if (argn - argi < 2) { rval = R_ARG; break; } /* * Get memory keyer ID (1-4) */ ptr = s1; *ptr++ = V_SETW; *ptr++ = 0x02; if (sscanf(argv[++argi], "%d", &temp) != 1) { rval = R_FMT; break; } *ptr++ = temp; /* * If no argument string, read from radio. Remove * trailing spaces from the radio string. */ if (argn - argi < 2) { *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) return (rval); for (i = rval - 2; i > 2; i--) { if (rsp[i] == ' ') rsp[i] = '\0'; else break; } temp = rsp[2]; printf("%d (%d) %s\n", temp, i - 2, &rsp[3]); break; } /* * Concatenate remaining strings and send to radio. */ *ptr = '\0'; temp = 55; while (argn - argi > 1 && temp > 0) { strncat(s1, argv[++argi], temp); strcat(s1, " "); temp -= strlen(argv[argi]) + 1; } s1[strlen(s1) - 1] = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * Miscellaneous control (S_CTRL) subcommands. */ case C_MISC: return (setswitch2(rp, misc, V_TOGL)); /* * test BCD * * Send CI-V test message */ case C_TEST: if (argn - argi < 2) break; ptr = s1; for (i = 1; i < argn; i++) { sscanf(argv[++argi], "%x", &temp); *ptr++ = temp; } *ptr = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * step (r8500) */ C_XSTEP: if (sscanf(argv[++argi], "%x", &temp) != 1) { rval = R_FMT; break; } cp->aux.step = temp; break; /* * pstep (r8500) */ C_PSTEP: break; } return (rval); } /* * capname(ident, table) - returns capability name given key */ char * /* capability name, "" (not found) */ capname( int ident, /* capability key */ struct cmdtable *table /* capability table */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (table[i].ident == ident) return (table[i].name); } return (""); } /* * capkey(name, table) - returns capability key given name */ int /* capability key, -1 (not found) */ capkey( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i, temp; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (R_NOP); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0 || *table[i].name == '*') break; } if (table[i].ident == R_NOP) printf("*** %s\n", table[i].descr); return (table[i].ident); } /* * capdescr(name, table) - returns capability description given name */ char * /* capability string, "" (not found") */ capdescr( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (""); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) break; } return (table[i].descr); } /* * setcap(name, table, string) - insert capability string */ void setcap( char *name, /* capability name */ struct cmdtable *table, /* capability table */ char *string /* capability string */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) { strcpy(table[i].descr, string); return; } } strcpy(table[i].name, name); strcpy(table[i].descr, string); table[i + 1].name[0] = '\0'; table[i + 1].ident = R_NOP; table[i + 1].descr[0] = '\0'; } /* * setswitch(radio, name, op) - V_VFO, V_SPLIT, V_SCAN, V_SANT, V_ATTEN, * V_POWER, V_TX, V_ANNC. * * Commands with a single character command and one argument, with the * single exception of the V_SANT, which can have one or two arguments * depending on the radio type. Only the V_SANT and V_ATTEN can */ static int setswitch( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { struct chan *cp; struct vfo7000 *vp; u_char cmd[BMAX], rsp[BMAX]; int temp, rval; cmd[0] = op; cmd[1] = FI; if (argn - argi < 2) { /* * Read data from radio. Only the V_SANT and V_ATTEN * return unambigous data. The V_SANT returns one or two * octets depending on the transceiver model. The R8500 * can't return anything. */ switch (op) { case V_SANT: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; if (rsp[2] != FI) temp |= rsp[2] << 8; printf("%s %s\n", argv[argi], capname(temp, cmmd)); break; case V_ATTEN: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; printf("%s %s dB\n", argv[argi], capname(temp, cmmd)); break; case V_ANNC: cmd[1] = 0x00; cmd[2] = FI; rval = setcmda(rp->ident, cmd, rsp); pflags |= P_DISP; break; default: rval = R_ARG; } } else { /* * Write data to the radio. First, decode argument. */ temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = FI; /* * For the ant command, find out if one or two * subcommand bytes follow. */ if (op == V_SANT) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); if (rsp[2] != FI) { cmd[2] = temp >> 8; cmd[3] = FI; } } cmd[1] = temp; rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); /* * For the attenuator command, copy attenuator code for * R8500. */ if (op == V_ATTEN) { cp = &rp->chan; cp->aux.atten = temp; /* * For the split duplex subcommands, edit mode2. */ } else if (op == V_SPLIT) { cp = &rp->chan; vp = &cp->vfo; switch (temp) { case 0x10: /* simplex */ vp->mode2 = (vp->mode2 & 0x0f) | 0x00; break; case 0x11: /* dup- */ vp->mode2 = (vp->mode2 & 0x0f) | 0x10; break; case 0x12: /* dup+ */ vp->mode2 = (vp->mode2 & 0x0f) | 0x20; break; } } } return (rval); } /* * setswitch2(radio, name, op) - V_PAMP, V_AGC, V_BREAK, V_PTT and * V_MISC. * * Commands with a two-octet command and one argument. */ static int setswitch2( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { u_char cmd[BMAX], rsp[BMAX]; int temp, rval, i; rval = R_OK; cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; if (argn - argi < 2) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident & 0xff) == rsp[2]) { printf("%s %s\n", argv[argi], cmmd[i].name); break; } } } else { temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = temp; cmd[3] = FI; rval = setcmda(rp->ident, cmd, rsp); } return (rval); } /* * setswitch3(radio, name, op, sw) - V_TONE, etc. * * This routine is used with the tone, tsql and dtcs commands, which * turn on and off and program CTSS tones and DTCS codes. */ static int setswitch3( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op, /* command code */ int sw /* switch code */ ) { struct chan *cp; struct vfo7000 *vp; u_char rsp[BMAX]; int temp, rval, i; u_char cmdctl[] = {V_TONE, 0, 0, 0, 0, FI}; u_char cmdswt[] = {V_TOGL, 0, 0, FI}; char *token; cmdctl[1] = op; cmdctl[2] = FI; cmdswt[1] = sw; cmdswt[2] = FI; if (argn - argi < 2) { /* * Read switch code */ rval = setcmda(rp->ident, cmdswt, rsp); if (rval < 0) return (rval); temp = rsp[2]; token = capname(temp, toneon); /* * Read frequency/code */ rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); temp = rsp[3] << 8 | rsp[4]; for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident) == temp) { if (cmdctl[1] == 0x02) { temp = rsp[2]; printf("%s %s (%s-%s)\n", argv[argi], token, cmmd[i].name, capname(temp, polar)); } else { printf("%s %s (%s Hz)\n", argv[argi], token, cmmd[i].name); } } } } else { /* * Set frequency/code. Repeater tone and tone squelch * frequencies are in nn.n Hz and tenths. Digital tone * squelch codes are in nn-pp code polarity. */ token = strtok(argv[++argi], "-"); temp = capkey(token, cmmd); if (temp < 0) return (temp); cp = &rp->chan; vp = &cp->vfo; if (temp > 0x01) { cmdctl[3] = temp >> 8; cmdctl[4] = temp; token = strtok(NULL, "-"); if (token == NULL) { cmdctl[2] = 0; } else { temp = capkey(token, polar); if (temp < 0) return (temp); cmdctl[2] = temp; } rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); /* * Update VFO tones */ switch (op) { case 0: memcpy(&vp->tone, &cmdctl[2], 3); break; case 1: memcpy(&vp->tsql, &cmdctl[2], 3); break; case 2: memcpy(&vp->dtcs, &cmdctl[2], 3); break; } temp = 0x01; } /* * Set switch code */ vp->mode2 &= 0xf0; if (temp == 0x01) vp->mode2 += op + 1; cmdswt[2] = temp; rval = setcmda(rp->ident, cmdswt, rsp); } return (rval); } /* * readmeter(radio, optab, op, pstring) - V_METER, V_TOGL */ static int readmeter( struct icom *rp, /* radio structure */ struct cmdtable *optab, /* command table */ int op, /* operation code */ char *s2 /* result string */ ) { u_char cmd[] = {0, 0, 0, 0, FI}; char rsp[BMAX], *ptr; int temp, i; /* * Read register or switch */ cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; temp = setcmda(rp->ident, cmd, rsp); if (temp < 0) return (temp); if (temp < 5) temp = ((rsp[2] >> 4) & 0xf) * 10 + (rsp[2] & 0xf); else temp = ((rsp[2] >> 4) & 0xf) * 1000 + (rsp[2] & 0xf) * 100 + ((rsp[3] >> 4) & 0xf) * 10 + (rsp[3] & 0xf); ptr = capname(op, optab); /* * Format as required */ switch (op >> 16) { case A: /* agc */ if (temp == 1) strcpy(s2, "fast"); else if (temp == 2) strcpy(s2, "mid"); else if (temp == 3) strcpy(s2, "slow"); break; case B: /* breakin */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "semi"); else if (temp == 2) strcpy(s2, "full"); break; case F: /* signed control */ sprintf(s2, "%d", ((temp - 128) * 100) / 256); break; case G: /* unsigned control */ sprintf(s2, "%d", (temp * 100) / 256); break; case P: /* preamp */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "1"); else if (temp == 2) strcpy(s2, "2"); break; case Q: /* squelch */ if (temp == 1) strcpy(s2, "open"); else strcpy(s2, "closed"); break; case S: /* S meter */ for (i = 0; temp > mtab[i].smeter; i++); strcpy(s2, mtab[i].pip); break; case W: /* miscellaneous switch */ if (temp == 0) strcpy(s2, "off"); else strcpy(s2, "on"); break; } return (R_OK); } /* * banner - format and print banner */ void banner( struct icom *rp /* radio structure pointer */ ) { printf("radio %s (%02x) %g-%g MHz chan %d bank %d baud %s\n", capdescr(rp->name, identab), rp->ident, rp->lband, rp->uband, rp->maxch - rp->minch + 1, rp->maxbk - rp->minbk + 1, capname(rp->baud, baud)); rptr = rp; } /* * printch - format and print channel data */ static void printch( struct icom *rp, /* radio structure pointer */ char *s1 /* prettyprint string */ ) { struct chan *cp; struct vfo7000 *vp; char s2[LINMAX]; char *s3; int temp; double dtemp; /* * Reveal frequency and mode */ cp = &rp->chan; vp = &cp->vfo; readvfo(rp); if (cp->freq == 0) { if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d empty", cp->bank, cp->mchan); else sprintf(s1, "%2d empty", cp->mchan); return; } if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d %.*f MHz %s", cp->bank, cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); else sprintf(s1, "%2d %.*f MHz %s", cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); if (pflags & P_DSPST) { sprintf(s2, " rate %d step %.0f Hz", rp->rate, rp->step); strcat(s1, s2); } if (!(pflags & P_DSPCH)) return; if (flags & (F_7000 | F_756)) { /* * Reveal split */ if (cp->split != 0) { sprintf(s2, " split %.*f MHz", sigtab[rp->rate], cp->split); strcat(s1, s2); } /* * Reveal duplex direction */ temp = vp->mode2 & 0xf0; switch(temp) { case 0x10: strcat(s1, " split dup-"); break; case 0x20: strcat(s1, " split dup+"); break; } /* * Reveal tone squelch info */ temp = vp->mode2 & 0xf; switch (temp) { case 1: temp = (vp->tone[1] << 8) | vp->tone[2]; sprintf(s2, " tone %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 2: temp = (vp->tsql[1] << 8) | vp->tsql[2]; sprintf(s2, " tsql %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 3: temp = (vp->dtcs[1] << 8) | vp->dtcs[2]; sprintf(s2, " dtcs %s-", capname(temp, dtcs)); strcat(s1, s2); temp = vp->dtcs[0] & 0x3; sprintf(s2, "%s", capname(temp, polar)); strcat(s1, s2); } } else if (flags & F_8500){ /* * Reveal tuning step. */ if (cp->aux.step != 0) { temp = cp->aux.step; if (temp != 0x13) sprintf(s2, " dial %s kHz", capname(temp, rp->dialtab)); else sprintf(s2, " dial %.1f kHz", freqdouble(cp->aux.pstep, 2) / 10); strcat(s1, s2); } /* * Reveal attentuator setting. */ if (cp->aux.atten != 0) { sprintf(s2, " atten %x dB", cp->aux.atten); strcat(s1, s2); } } /* * Reveal channel name enclosed in quotes ". */ if (cp->name[0] != '\0') { sprintf(s2, " name \"%s\"", cp->name); strcat(s1, s2); } } /* * Print error comment */ static void perr( int temp /* error code */ ) { switch (temp) { case R_CMD: printf("*** unknown command\n"); break; case R_ARG: printf("*** unknown or missing command argument\n"); break; case R_FMT: printf("*** invalid argument format\n"); break; case R_RAD: printf("*** unknown radio\n"); break; case R_NOR: printf("*** no radios found\n"); break; case R_DEF: printf("*** radio not defined\n"); break; case R_ERR: printf("*** radio can't do that\n"); break; case R_IO: printf("*** file open error\n"); break; } } /* * Getline(str) - process input line and extract tokens * * Blank lines and comments beginning with '#' are ignored and the * string converted to lower case. The resulting tokens are saved in the * *argv[] array. The number of tokens found is returned to the caller. */ static int /* number of tokens */ getline( char *str /* pointer to input string */ ) { char *ptr; char xbreak[] = " ,\t\n\0"; char sbreak[] = "\"\n\0"; int i, temp; /* * Trim trailing \r and comments */ ptr = strchr(str, '\r'); if (ptr != NULL) *ptr = '\0'; ptr = strchr(str, '#'); if (ptr != NULL) *ptr = '\0'; /* * Scan for tokens delimited by space, comma, tab, newline or * null. Arbitrary strings begin with quote " and end with * quote, newline or null. Quotes are not included in the token. */ ptr = str; for (i = 0; i < ARGMAX;) { temp = strspn(ptr, xbreak); ptr += temp; if (*ptr == '\0') break; if (*ptr == '"') { argv[i++] = ++ptr; temp = strcspn(ptr, sbreak); } else { argv[i++] = ptr; temp = strcspn(ptr, xbreak); } ptr += temp; if (*ptr == '\0') break; *ptr++ = '\0'; } argn = i; return (i); } /* * argchan(radio, chan, sptr) - decode channel argument * * NULL current bank/channel * $ all channels, current bank * b:$ all channels, bank b * $:$ all channels, all banks * + current bank/channel plus 1 with wrap * - current bank/channel minus 1 with wrap * c channel c, current bank * b.c channel c, bank b * c1:c2 channel range c1-c2, current bank with wrap * b1.c1:b2.c2 channel range b1.c1-b2.c2 with wrap * * returns 0 if single, 1 if multiple, 2 if reversed, 3 if end of range, * R_NOP if error */ static int /* > 0 (ok), < 0 (error) */ argchan( struct icom *rp, /* radio structure */ struct chan *cp, /* channel structure */ char *sptr /* ascii argument pointer */ ) { int rval, bank, mchan, topbk, topch; /* * null: current channel only */ if (cp->bank == rp->topbk && cp->mchan == rp->topch) rval = 3; else rval = 0; if (sptr == NULL) return (0); /* * '?': format help */ if (*sptr == '?') { capkey(sptr, argch); return (R_NOP); } /* * " ": end of range */ if (*sptr == ' ') return (3); /* * "+": next higher channel, current bank with wrap */ if (*sptr == '+') { cp->mchan++; if (cp->mchan > rp->maxch) { cp->mchan = rp->minch; cp->bank++; if (cp->bank > rp->maxbk) cp->bank = rp->minbk; } return (rval); } /* * "-" next lower channel, current bank with wrap */ if (*sptr == '-') { cp->mchan--; if (cp->mchan < rp->minch) { cp->mchan = rp->maxch; cp->bank--; if (cp->bank < rp->minbk) cp->bank = rp->maxbk; } return (rval); } /* * "$" all channels, current bank */ if (strcmp(sptr, "$") == 0) { rp->topbk = cp->bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "$:$" all banks, all channels */ if (strcmp(sptr, "$:$") == 0) { cp->bank = rp->minbk; rp->topbk = rp->maxbk; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b.$" bank b, all channels */ if (strstr(sptr, ".$") != NULL && sscanf(sptr, "%d", &bank) == 1) { cp->bank = bank; rp->topbk = bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b1.c1:b2.c2:": channel range b1.c1-b2.c2 */ if (sscanf(sptr, "%d.%d:%d.%d", &bank, &mchan, &topbk, &topch) == 4) { cp->bank = bank; rp->topbk = topbk; cp->mchan = mchan; rp->topch = topch; if (cp->bank > rp->topbk || (cp->bank == rp->topbk && cp->mchan > rp->topch)) return (2); else return (1); } /* * "c1:c2": channel range c1-c2 current bank */ if (sscanf(sptr, "%d:%d", &mchan, &topch) == 2) { rp->topbk = cp->bank; cp->mchan = mchan; rp->topch = topch; if (cp->mchan > rp->topch) return (2); else return (1); } /* * "c.b": channel c, bank b only */ if (sscanf(sptr, "%d.%d", &bank, &mchan) == 2) { cp->bank = rp->topbk = bank; cp->mchan = rp->topch = mchan; return (0); } /* * "c": channel c, current bank */ if (sscanf(sptr, "%d", &mchan) == 1) { rp->topbk = cp->bank; cp->mchan = rp->topch = mchan; return (0); } printf("*** bad channel format %s\n", sptr); return (R_NOP); } /* * sw_keypad() - switch to keypad mode */ static int /* 0 (ok), < 0 (system error) */ sw_keypad() { fd = open("/dev/tty", O_RDONLY); if (fd < 0) return (R_IO); if (tcgetattr(fd, &terma) < 0) return (R_IO); tcgetattr(fd, &termb); termb.c_lflag &= ~(ICANON | ECHO); termb.c_cc[VMIN] = 1; termb.c_cc[VTIME] = 0; if (tcsetattr(fd, TCSADRAIN, &termb) < 0) return (R_IO); return (R_OK); } /* * sw_keybd() - switch to keyboard mode */ static int /* 0 (ok), < 0 (system error) */ sw_keybd() { if (tcsetattr(fd, TCSADRAIN, &terma) < 0) return (R_IO); return (R_OK); } /* end program */ icom-20120228/qsy/0000755000175000017500000000000012417523355012520 5ustar colincolinicom-20120228/qsy/qsy.sh0000755000175000017500000000101506223236515013665 0ustar colincolin#!/bin/csh date set ssn = 79 set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -m $month -d $day -h $hour -s $ssn -o 4 chu.dat dipole.dat` echo -n chu $str "tuned " icom -r r72 -m usb -g $str[5] -d set str = `minimuf -m $month -d $day -h $hour -s $ssn -o 4 cfh.dat dipole.dat` echo -n cfh $str "tuned " icom -r r71 -m rtty -g $str[5] -d set str = `minimuf -m $month -d $day -h $hour -s $ssn -o 4 w1aw-rtty.dat dipole.dat` echo -n w1aw $str "tuned " icom -r 761 -m rtty -g $str[5] -d icom-20120228/qsy/antenna.dat0000644000175000017500000000260205775542152014643 0ustar colincolin 3.5 7.0 14.0 21.0 28.0 -30.0 -30.0 -30.0 -30.0 -30.0 -19.6 -16.4 -6.8 -3.6 -1.3 -13.6 -10.4 -1.0 2.1 4.1 -10.1 -7.0 2.2 5.0 6.6 -7.7 -4.6 4.3 6.6 7.6 -5.8 -2.8 5.7 7.4 7.5 -4.3 -1.3 6.6 7.6 6.4 -3.0 -0.1 7.2 7.2 3.9 -2.0 0.8 7.5 6.2 -0.8 -1.0 1.7 7.5 4.5 -12.1 -0.2 2.4 7.2 1.9 -4.3 0.5 3.0 6.7 -2.5 1.7 1.2 3.6 6.0 -10.4 4.5 1.8 4.0 4.9 -8.2 5.8 2.3 4.4 3.6 -1.9 6.1 2.8 4.8 1.8 1.4 5.6 3.2 5.1 -0.4 3.3 4.3 3.6 5.3 -3.4 4.5 2.0 3.9 5.5 -7.5 5.0 -1.7 4.3 5.7 -11.5 5.1 -7.7 4.6 5.8 -9.9 4.9 -8.8 4.9 6.0 -6.3 4.2 -3.4 5.1 6.0 -3.6 3.3 -0.2 5.3 6.1 -1.8 1.9 1.6 5.5 6.1 -0.5 0.2 2.6 5.7 6.2 0.3 -2.0 2.9 5.9 6.2 0.9 -4.7 2.8 6.1 6.2 1.2 -7.9 2.3 6.2 6.2 1.4 -10.8 1.4 6.4 6.1 1.4 -10.9 0.1 6.5 6.1 1.3 -9.0 -1.4 6.6 6.0 1.1 -7.2 -3.3 6.7 6.0 0.7 -5.8 -5.5 6.8 5.9 0.3 -4.9 -8.1 6.9 5.9 -0.2 -4.4 -10.7 6.9 5.8 -0.8 -4.2 -12.8 7.0 5.8 -1.4 -4.1 -13.5 7.0 5.7 -2.1 -4.3 -13.2 7.1 5.7 -2.8 -4.5 -12.6 7.1 5.6 -3.6 -5.0 -12.1 7.2 5.6 -4.4 -5.5 -11.9 7.2 5.5 -5.3 -6.2 -11.9 7.2 5.5 -6.2 -6.9 -12.2 7.2 5.5 -7.1 -7.7 -12.8 7.2 5.5 -8.1 -8.6 -13.5 7.2 5.5 -9.0 -9.5 -14.4 icom-20120228/qsy/voa.awk0000755000175000017500000000066106224016156014012 0ustar colincolinBEGIN { } { nf = NF if ($3 == "SSN" && $1 != month) { month = $1 } if ($nf == "FREQ") { hour = $1 for (i = 3; i < nf; i++) f[i - 1] = $i } if ($nf == "PRB") { for (i = 2; i < nf; i++) prob[i] = $i } max = -1e10 if ($nf == "SNRxx") { for (i = 1; i < nf; i++) { snr[i] = $i if (snr[i] >= 20 && prob[i] >= .5) printf("%4s %3d %4s %4s %5s %s\n", month, hour, snr[i], prob[i], f[i], FILENAME) } } } icom-20120228/qsy/wom.sh0000755000175000017500000000042206223236606013655 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -f 14 -m $month -d $day -h $hour -s $SRF -o 4 wom.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp wom $str "tuned " icom -r r72 -m lsb -o 2.19 -g $str[5] -d icom-20120228/qsy/cfh-rtty.dat0000644000175000017500000000014405775542152014756 0ustar colincolin1 6 1 80 20 4 4.271 6.496 10.536 13.510 39.68005 -75.75085 UDel Evans Hall 63.98 -44.97 CFH Halifax icom-20120228/qsy/kmi.dat0000644000175000017500000000021405775542152013774 0ustar colincolin1 6 1 80 20 6 8.4315 12.630 16.870 19.6895 22.4245 26.1085 39.68005 -75.75085 UDel Evans Hall 38.40972 -121.44936 KMI Dixon (San Fransisco) icom-20120228/qsy/chu.dat0000644000175000017500000000013710551762554013775 0ustar colincolin3 1 8 70 20 3 3.330 7.335 14.670 39.68005 -75.75085 UDel Evans Hall 45.30 -75.75 CHU Ottawa icom-20120228/qsy/wom.dat0000644000175000017500000000017505775542153014025 0ustar colincolin1 6 1 80 20 5 4.2155 6.3275 8.4325 12.631 22.4255 39.68005 -75.75085 UDel Evans Hall 25.87333 -80.48306 WOM Pennsuco (Miami) icom-20120228/qsy/info.txt0000644000175000017500000003010205775542152014215 0ustar colincolin_HI_ IS STATION KMI. TRAY_RADS__)3/ ?49-$:-5 34=8:3 049=8$3 WEATHER FOR ALL MARITIME AND AERONAUTICAL STATIONS. OUR TRANSMITTER_Y__ W__ LOCATED NEAR DIXON, CALIFO_NIA. AT+T HIGH SEAS RADIOTELEX BRO_DCLS___REQUENCIES ARE AS _OLLOWS:__ ++++++++++++_)9++++++++++++++++++++++++++++++__++_+ ITU CIA_ T COAST-__/ -5+T STATINB _ __+ _AA_AAAA _ -------- K__OAAAAAAA__A + + 405 421_5 WOO __0_ + 412 4__.5 _WOM + +C__ _RQY_N _ 4217.5 _KMI + + _ B ____ + __ 626 _ 6326.5 __U_ __U _ _+ + 628 6327.5 WOM + + 629 6328___ _ W_O + +__ _ T _ _ _ + + 831__ ___ 8431.5 KMI + + 833 _ 84(__5__ __ _ 29. + + 834 8433.0 _ NT_M___ + + _ _ __ _ _ +:_/9_1._.__&4____5+__1)_________ CQ CQ CQ DE WOM WOM WOM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIS IS STATION WOM. THIS RADIOTELEX BROADCAST SERVICE PROVIDES UP TO THE MINUTE RADIOTELEPHONE TRAFFIC LIST INFORMATION AND WEATHER FOR ALL MARITIME AND AERONAUTICAL STATIONS. OUR TRANSMITTERS ARE LOCATED NEAR 25:52:24N 80:28:59W. AT+T HIGH SEAS RADIOTELEX BROADCAST FREQUENCIES ARE AS FOLLOWS: +++++++++++++++++++++++++++++++++++++++++++++++++ + ITU CHAN COAST-TX AT+T STATION + + -------- -------- ------------ + + 405 4212.5 WOO + + 412 4215.5 WOM + + + + 628 6327.5 WOM + + 629 6328.0 WOO + + + + 831 8431.5 KMI + + 833 8432.5 WOM + + 834 8433.0 WOO + + + + 1303 12630.0 KMI + + 1305 12631.0 WOM + + 1307 12632.0 WOO + + + + 1728 16870.0 KMI + + + + 1818 19689.5 KMI + + + + 2297 22424.5 KMI + + 2299 22425.5 WOM + + 2516 26108.5 KMI + +++++++++++++++++++++++++++++++++++++++++++++++++ THESE RADIOTELEX BROADCASTS CAN BE USED TO ACTIVATE AN ALERTING SELCAL DEVICE WHEN A TELEPHONE CALL IS WAITING FOR SOMEONE ON BOARD THE VESSEL SHOWN IN THE TRAFFPC LIST. SPECIAL RECEIVING EQUIPMENT IS REQUIRED ON BOARD THE VESSEL FOR THIS FUNCTION. FOR THE LATEST INFORMATION ABOUT AT+T SELCAL SYSTEMS, CALL COLLECT VIA AT+T TO 1-201-644-8046. TRAFFIC LISTS ARE SENT CONTINUOUSLY. WX AND HIGH SEAS INFORMATION SCHEDULED BRAODCASTS ARE AS FOLLOWS: STATION WX INFORMATION ------- ------------ -------------- KMI ODD UTC HR+20 EVEN UTC HR+20 WOM EVEN UTC HR+40 ODD UTC HR+40 WOO EVEN UTC HR+20 ODD UTC HR+20 WOM SSB RADIOTELEPHONE FREQUENCIES ARE AS FOLLOWS: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + CHAN COAST-TX SHIP-TX CHAN COAST-TX SHIP-TX + + ---- -------- ------- ---- -------- ------- + + 209 2490.0 2031.5 1206 13092.0 12245.0 + + 221 2514.0 2118.0 1208 13098.0 12251.0 + + 245 2566.0 2390.0 1209 13101.0 12254.0 + + 247 2442.0 2406.0 1215 13119.0 12272.0 + + 1223 13143.0 12296.0 + + 403 4363.0 4071.0 1230 13164.0 12317.0 + + 412 4390.0 4098.0 + + 417 4405.0 4113.0 1601 17242.0 16360.0 + + 423 4423.0 4131.0 1609 17266.0 16384.0 + + 1610 17269.0 16387.0 + + 802 8722.0 8198.0 1611 17272.0 16390.0 + + 805 8731.0 8207.0 1616 17287.0 16405.0 + + 810 8746.0 8222.0 + + 814 8758.0 8234.0 2215 22738.0 22042.0 + + 825 8791.0 8267.0 2216 22741.0 22045.0 + + 831 8809.0 8285.0 2222 22759.0 22063.0 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ FOR ADDITIONAL INFORMATION ABOUT ANY OF OUR SERVICES OR A FREE BROUCHURE ABOUT AT+T HIGH SEAS AND STATIONS KMI WOM AND WOO PLEASE CONTACT US VIA RADIO, LETTER, OR TELEPHONE AT: AT+T STATION WOM 1340 N.W. 40TH AVENUE FORT LAUDERDALE, FL 33313 COLLECT VIA AT+T 1-305-587-0910 THANKS FOR YOUR INTEREST AND SUPPORT. -AR- WOO AT+T RADIOTELEX BROADCAST FREQUENCIES ARE AS FOLLOWS: +++++++++++++++++++++++++++++++++++++++++++++++++ + ITU CHAN COAST-TX AT+T STATION + + -------- -------- ------------ + + 405 4212.5 WOO + + 62, 6328.0 WOO + + 834 8433.0 WOO + + 1307 12632.0 WOO + +++++++++++++++++++++++++++++++++++++++++++++++++ THESE RADIOTELEX BROADCASTS CAN BE USED TO ACTIVATE AN ALERTING SELCAL DEVICE WHEN A TELEPHONE CALL IS WAITING FOR SOMEONE ON BOARD THE VESSEL SHOWN IN THE TRAFFIC LIST. SPECIAL RECEIVING EQUIPMENT IS REQUIRED ON BOARD THE VESSEL FOR THIS FUNCTION. FOR THE LATEST INFORMATION ABOUT AT+T SELCAL SYSTEMS, CALL COLLECT VIA AT+T TO 1-201-644-8046. TRAFFIC LISTS ARE SENT CONTINUOUSLY. WX AND HIGH SEAS INFORMATION SCHEDULED BRAODCASTS ARE AS FOLLOWS: STATION WX INFORMATION ------- ------------ -------------- KMI ODD UTC HR+20 EVEN UTC HR+20 WOM EVEN UTC HR+40 ODD UTC HR+40 WOO EVEN UTC HR+20 ODD UTC HR+20 FOR ADDITIONAL INFORMATION ABOUT ANY OF OUR SERVICESOR A FREE BROCHURE ABOUT AT+T HIGH SEAS AND STATIONS KMI WOM AND WOO PLEASE CONTACT US VIA RADIO, LETTER, OR TELEPHONE AT: AT+T STATION WOO COLLECT VIA AT+T 1-609-597-2201 P.O. BOX 550 FAX 1-609-597-6294 MANAHAWKIN, NJ 08050 -AR- CQ CQ DE WLO WLO INFOMT 04/06/95 WLO RADIO MOBILE MARINE RADIO INC 7700 RINLA AVENUE MOBILE ALABAMA 36619 USA PHONE: 205 666 9042 TELEX: 50 5444 (KEY CTRL G TO GET OPR) =================================== S H I P T E L E X S E R V I C E HOURS OF SERVICE: HH 24 CONTINUOUS FEC RADIO TFC LISTS/WX: HH PLUS 35 (SEE TSB FREQUENCIES) WLO FULL TIME NBDP ARQ CENTER FREQUENCIES ------------------------------------------------------------- ITU SHIP SHIP : ITU SHIP SHIP CHANNEL TRANSMIT RECEIVE : CHANNEL TRANSMIT RECEIVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 4175.0 4213.0 KHZ 1605 16685.5 16809.0 KHZ 410 4177.0 4215.0 1611 16688.5 16812.0 415 4179.5 4217.0 1615 16690.5 16814.0 417 4180.5 4218.0 1625 16695.5 16818.5 1629 16697.5 16820.5 606 6265.5 6317.0 1640 16703.0 16826.0 610 6267.5 6319.0 1644 16705.0 16828.0 615 6270.0 6321.0 1650 16708.0 16831.0 619 6272.0 6323.0 1654 16710.0 16833.0 624 6274.5 6325.5 1661 16713.5 16836.5 806 8379.0 8419.0 1810 18875.0 19685.5 810 8381.0 8421.0 815 8383.5 8423.5 2210 22289.0 22381.0 829 8390.5 8430.5 2215 22291.5 22383.5 832 8392.0 8432.0 2254 22311.0 22403.0 836 8394.0 8434.0 2256 22312.0 22404.0 2260 22314.0 22406.0 1205 12479.0 12581.5 2262 22315.0 22407.0 1211 12482.0 12584.5 2272 22320.0 22412.0 1215 12484.0 12586.5 2284 22326.0 22418.0 1225 12489.0 12591.5 1229 12491.0 12593.5 2510 25177.5 26105.5 1234 12493.5 12596.0 1240 12496.5 12599.0 1251 12502.0 12604.5 1254 12503.5 12606.0 1261 12507.0 12609.5 TIME SLOT BROADCAST (TSB) FREQUENCIES: FEC: 1995 HURRICANE SEASON 06/01/95 THRU 11/30/95 4250.0 6344.0 8534.0 12992.0 16997.6 22688.0 KHZ CW & FEC: NON-HURRICANE SEASON 12/01/94 THRU 05/31/95 4343.0 6416.0 8514.0 12886.5 17022.5 22487.0 KHZ TIME SLOT BROADCASTS (TSB) SCHEDULE: ------------------------------------------------------------------- MORSE CODE 31 WPM NON-PAIRED NBDP CW MODE - TOT UTC PRODUCT FEC MODE - TOT UTC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0000 0600 1200 1800 QTC N ATL HIGH SEAS 0035 0635 1235 1835 ---- ---- ---- ---- N ATL TWO FEC ONLY 0100 0700 1300 1900 QTC N PAC HIGH SEAS 0125 0735 1335 1935 ---- ---- ---- ---- N PAC TWO FEC ONLY 0200 0800 ---- 2000 QTC WLO FULL INFO PLUS+ 0235 0835 ---- 2035 ---- ---- 1400 ---- QTC RPT GOM/CAR SEA ---- ---- 1435 ---- 0300 0900 1500 2100 QTC W CENT N ATL 0335 0935 1535 2135 0400 1000 1600 2200 QTC GULF OF MEXICO 0435 1035 1635 2235 ---- ---- ---- ---- GULF LOOP FEC ONLY 0500 1100 1700 2300 QTC CARIB SEA/SW NA 0535 1135 1735 2335 ---- ---- ---- ---- GULF STREAM FEC ONLY ------------------------------------------------------------------- WLO FULL INFO BROADCASTS FEC ON TSB FREQUENCIES DAILY AT 0235 0835 2035 UTC AFTER FEC TRAFFIC LIST SAT+SUN ONLY FREE ARA PRESS SERVICE ------------------------------------------------------------------- 10CM SOLAR RADIO FLUX (SRF) INFO PRECEDES TFC LISTS SRF UPDATES 1700 UTC K-INDEX EVERY 3 HR A-INDEX ONCE DAILY ------------------------------------------------------------------- INFOSSB 04/06/95 WLO RADIO MOBILE MARINE RADIO INC 7700 RINLA AVENUE MOBILE ALABAMA 36619 USA =================================== S H I P P H O N E S E R V I C E SSB TELEPHONE OPE: 205 666 3555 TFC LIST TIME: HH + 00 WEATHER: 0000 0600 1200 1800 LT WEATHER FREQ: SEE A BELOW FIRST CALLING: SEE B BELOW WLO RADIO SSB RADIOTELEPHONE SUPPRESSED CARRIER FREQUENCIES ----------------------------------------------------------------- ITU SHIP SHIP : ITU SHIP SHIP CHNL TRANSMIT RECEIVE : CHNL TRANSMIT RECEIVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AB 201 2430.0 2572.0 KHZ 1607 16378.0 17260.0 KHZ B 1641 16480.0 17362.0 A 405 4077.0 4369.0 1643 16486.0 17368.0 B 414 4104.0 4396.0 A 1647 16498.0 17380.0 419 4119.0 4411.0 428 4060.0 4351.0 B 607 6218.0 6519.0 B 1807 18798.0 19773.0 B 824 8264.0 8788.0 B 2237 22108.0 22804.0 829 8279.0 8803.0 830 8282.0 8806.0 2242 22123.0 22819.0 A 836 8113.0 8713.0 A 2246 22135.0 22831.0 B 1212 12263.0 13110.0 B 2503 25076.0 26151.0 1225 12302.0 13149.0 1226 12305.0 13152.0 1233 12326.0 13173.0 A 1235 12332.0 13179.0 END DE WLO AR NNNN (SUNDAY ARA NEWS) CQ DE WLO HELLO CW USERS: ARA 0200 0800/2000 Z ARA2 RERUN AFTER 0400 1000 1600 2200 Z ARA3 RERUN 0500 1100 1700 2300 Z QRG: 4343.0 6416.0 8514.0 12886.5 17022.5 22487.0 KHZ CW WILL CUT OFF AFTER ONE HOUR TO MEET REGULAR SCHEDULE. FEC USERS: ARQ ACCESS _TO _N FILES IS FREE WLO SELCALL 1090 START WLO EXCHANGE ABS AT GA"? TYPE: INF"? FOLLOW THE INSTRUCTIONS THANKS WLO TEK NNNN ARA1 (INF11) JULY 2,1995 QTR CW 0200 0800 0200Z QRG CW 4343 6416 8514 12886.6 17022.5 22487 KHZ QTR FEC: 0235 0835 1435 2035Z QRG FEC: 4250.0 6344.0 8534.0 12992.0 16997.6 22688.0 KHZ icom-20120228/qsy/cron0000644000175000017500000000375406223240135013403 0ustar colincolin20 00 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 00 * * * cd ~mills/qsy; wlo.sh >>qsy.log 15 01 * * * cd ~mills/qsy; w1aw.sh >>qsy.log 40 01 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 02 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 02 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 03 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 03 * * * cd ~mills/qsy; wom.sh >>qsy.log 15 04 * * * cd ~mills/qsy; w1aw.sh >>qsy.log 20 05 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 05 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 06 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 06 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 07 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 07 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 08 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 08 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 09 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 09 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 10 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 10 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 11 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 11 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 12 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 12 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 13 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 13 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 14 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 14 * * * cd ~mills/qsy; wlo.sh >>qsy.log 15 15 * * * cd ~mills/qsy; w1aw.sh >>qsy.log 40 15 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 16 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 16 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 17 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 17 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 18 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 18 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 19 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 19 * * * cd ~mills/qsy; wom.sh >>qsy.log 20 20 * * * cd ~mills/qsy; kmi.sh >>qsy.log 35 20 * * * cd ~mills/qsy; wlo.sh >>qsy.log 20 21 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 21 * * * cd ~mills/qsy; wom.sh >>qsy.log 15 22 * * * cd ~mills/qsy; w1aw.sh >>qsy.log 20 23 * * * cd ~mills/qsy; woo.sh >>qsy.log 40 23 * * * cd ~mills/qsy; wom.sh >>qsy.log icom-20120228/qsy/dipole.dat0000644000175000017500000000252305775542152014475 0ustar colincolin 3.5 7.0 14.0 21.0 28.0 -30.0-30.0 -30.0 -30.0 -30.0 -19.6-19.6 -16.4 -16.4 -16.4 -13.6-13.6 -10.4 -10.4 -10.4 -10.1-10.1 -7.0 -7.0 -7.0 -7.7 -7.7 -4.6 -4.6 -4.6 -5.8 -5.8 -2.8 -2.8 -2.8 -4.3 -4.3 -1.3 -1.3 -1.3 -3.0 -3.0 -0.1 -0.1 -0.1 -2.0 -2.0 0.8 0.8 0.8 -1.0 -1.0 1.7 1.7 1.7 -0.2 -0.2 2.4 2.4 2.4 0.5 0.5 3.0 3.0 3.0 1.2 1.2 3.6 3.6 3.6 1.8 1.8 4.0 4.0 4.0 2.3 2.3 4.4 4.4 4.4 2.8 2.8 4.8 4.8 4.8 3.2 3.2 5.1 5.1 5.1 3.6 3.6 5.3 5.3 5.3 3.9 3.9 5.5 5.5 5.5 4.3 4.3 5.7 5.7 5.7 4.6 4.6 5.8 5.8 5.8 4.9 4.9 6.0 6.0 6.0 5.1 5.1 6.0 6.0 6.0 5.3 5.3 6.1 6.1 6.1 5.5 5.5 6.1 6.1 6.1 5.7 5.7 6.2 6.2 6.2 5.9 5.9 6.2 6.2 6.2 6.1 6.1 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.4 6.4 6.1 6.1 6.1 6.5 6.5 6.1 6.1 6.1 6.6 6.6 6.0 6.0 6.0 6.7 6.7 6.0 6.0 6.0 6.8 6.8 5.9 5.9 5.9 6.9 6.9 5.9 5.9 5.9 6.9 6.9 5.8 5.8 5.8 7.0 7.0 5.8 5.8 5.8 7.0 7.0 5.7 5.7 5.7 7.1 7.1 5.7 5.7 5.7 7.1 7.1 5.6 5.6 5.6 7.2 7.2 5.6 5.6 5.6 7.2 7.2 5.5 5.5 5.5 7.2 7.2 5.5 5.5 5.5 7.2 7.2 5.5 5.5 5.5 7.2 7.2 5.5 5.5 5.5 7.2 7.2 5.5 5.5 5.5 icom-20120228/qsy/cfh.sh0000755000175000017500000000042206223236415013611 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -m $month -d $day -h $hour -s $SRF -o 4 cfh-rtty.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp cfh $str "tuned " icom -r r72 -m usb -o -1.75 -g $str[5] -d icom-20120228/qsy/qth.dat0000644000175000017500000001125605775542153014021 0ustar colincolin1 3 5 47 20 8 2.5 5 10 15 20 25 30 35 39.68 -75.75 UDel Evans Hall 45.30 -75.75 CHU Ottawa 63.98 -44.97 CFH Halifax 33.98 -118.44 ISI Marina del Rey 42.36 -71.09 MIT LCS Cambridge 40.68 -105.04 WWV Fort Collins 21.99 -159.76 WWVH Hawaii 50.17 9.00 DCF77 Mainflingen 52.37 -1.18 MSF Rugby 51.87 -176.63 NOX Adak -21.20 -159.82 ZKR Rarotonga 21.27 -157.78 NMO Honolulu 1.98 -157.48 Christmas I -17.50 -149.48 FJA Mahina 49.17 -123.12 VAI Vancouver 37.90 -122.70 KPH San Fransisco 48.03 -122.18 KLB Seattle 37.45 -122.12 KFS San Fransisco 33.90 -118.15 KOK Los Angeles 69.12 -105.02 VFC Cambridge Bay 16.83 -99.92 XFA Acapulco 19.20 -96.13 XFU Veracruz 29.40 -95.13 KLC Galveston 74.75 -94.97 VFR Resolute 29.83 -93.97 WPA Port Arthur 58.77 -93.95 VAP Churchill 30.70 -88.03 WLO Mobile 10.00 -83.00 TIM Limon 23.17 -82.32 CLA Habana 25.98 -80.20 WAX Ojus 26.55 -80.10 WOE Lantana -2.22 -79.88 HCG Guayaquil 8.37 -79.35 NBA Balboa 25.08 -77.37 VPN Nassau 3.90 -77.08 HKC Buenaventura 10.95 -74.77 HKB Barranquilla 41.00 -72.05 WSL Amagansett 41.67 -70.03 WCC Chatham 18.47 -69.88 HIA S Domingo 12.13 -68.92 PJC Curacao -53.78 -67.75 LPA Tierra del Fuego 18.42 -66.02 NMR San Juan 45.25 -66.00 VAR St Johns 44.47 -63.62 VCS Halifax 14.63 -60.98 FFP Ft de France -34.45 -58.62 LPD General Pacheco -51.70 -57.85 VPC Port Stanley 64.17 -51.75 OXI Godthaab -22.98 -43.18 PPR Rio de Janeiro 38.53 -28.63 CTH Horta 37.73 -25.67 CTD Ponta Delgada 37.75 -25.65 CUG St Miguel 16.88 -24.98 CQA St Vicente 14.92 -23.50 CQD St Tiago 64.13 -21.95 TFA Rejkjavik 14.75 -17.28 6VA Dakar 20.90 -17.05 5TA Nouadhibou 32.62 -16.85 CUB Madeira 13.27 -16.83 VSH Banjui 13.45 -16.58 VSH Bathurst 28.35 -16.28 EAT Tenerife 28.10 -15.42 EAL Las Palmas -7.93 -14.42 ZBI Ascension 6.30 -10.80 ELC Monrovia 38.73 -9.18 CTV Lisboa 33.62 -7.63 CNP Casablanca 62.02 -6.78 OXJ Torshavn 36.48 -6.27 EAC Cadiz 5.37 -3.97 TUA Abidjan 40.03 -3.68 EAD Aranjuez 51.48 -2.80 GKB Portishead 43.42 1.40 FFL St Lys 6.37 2.47 TYA Cotonou 39.53 2.72 EAO Palma de Majorca 6.62 3.52 5OW Lagos 58.65 5.60 LGW Rogaland 52.17 5.83 PCH Scheveningen 70.95 8.67 LMJ Jan Mayen 4.33 9.40 TJC Douala 53.78 9.67 DAN Norddeich 55.83 11.42 OXZ Lyngby -4.78 11.87 TNA Pointe-Noire 57.47 11.93 SAG Goteborg 41.80 12.52 IAR Roma 32.90 13.18 5AT Mahattet -8.80 13.27 CQW Luanda 54.58 13.62 DHS Rugen 78.07 13.63 LML Isfjord 35.92 14.48 9HD Malta -22.95 14.52 ZSV Walvis Bay -34.15 18.32 ZSC Cape Town 54.55 18.53 SPH Gdynia 37.97 24.00 SVA Athenai 31.20 29.87 SUH Alexandria -25.95 32.47 CRL Lourenco Marques 35.17 33.43 5BA Cyprus -19.83 34.87 CRS Beira 32.80 35.00 4XO Haifa 33.80 35.48 ODR Beyrouth 15.18 38.88 ETC2 Asmara -3.97 39.73 5ZF Mombasa 13.02 42.75 ETC Assab 11.58 43.12 TXZ Djibouti 12.78 45.30 FJN Dzaoudzi -25.02 46.98 5RD Ft Dauphin 29.52 47.68 9KK Kuwait -12.28 49.28 5RL Diego Saurez -18.13 49.40 5RS Tamatave 26.30 50.12 HZY Ras Tanura -20.30 57.48 3BA Mauritius 23.62 58.50 A4M Muscat 24.85 67.05 ASK Karachi 19.08 72.83 VWB Bombay -37.83 77.73 FJY St Paul & Amsterdam 6.92 79.88 4PB Colombo 5.37 100.30 9MG Penang 13.73 100.50 HSA Bangkok 10.63 103.50 XUK Kompong Som-Ville 1.33 103.70 9VG Singapore -10.43 105.68 VIY Christmas 10.78 106.67 XVS Saigon -6.10 106.87 PKI Djakarta 23.08 113.53 XSQ Kwangchow 22.20 113.55 XXG Macao -24.87 113.65 VIC Carnarvon 22.22 114.25 VPS Hong Kong -28.78 114.60 VIN Geraldton -32.03 115.82 VIP Perth 24.47 118.08 XSM Amoy 14.60 121.03 DZG Manila 31.12 121.55 XSG Shanghai 23.97 121.62 XS4 Hwalien -33.88 121.90 VIE Esperance 32.80 130.15 JOS Nagasaki -12.80 130.83 VID Darwin 35.75 140.75 JCS Chosi -10.58 142.22 VII Thursday 13.48 144.78 NRV Guam -38.47 144.92 VIM Melbourne -19.20 146.82 VIT Townsville -9.47 147.18 VIG Port Moresby -42.87 147.32 VIH Hobart -23.40 150.50 VIR Rockhampton -33.80 150.87 VIS Sydney -4.20 152.18 VJZ Rabaul -27.07 153.05 VIB Brisbane -22.27 166.47 FJP Noumea -29.05 167.93 VJU Norfolk -46.50 168.37 ZLB Awarua -17.73 168.55 YJM Port-Vila 0.00 169.58 VQK Ocean I 7.08 171.38 KUP65 Majuro 1.35 172.92 VSZ Tarawa -41.27 174.77 ZLW Wellington -36.88 174.92 ZLO Auckland -18.15 178.45 VRP Suva -8.52 179.22 Funafuti I icom-20120228/qsy/woo.sh0000755000175000017500000000042206223236631013655 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -f 14 -m $month -d $day -h $hour -s $SRF -o 4 woo.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp woo $str "tuned " icom -r r72 -m lsb -o 2.19 -g $str[5] -d icom-20120228/qsy/woo.dat0000644000175000017500000000017005775542153014022 0ustar colincolin1 6 1 80 20 4 4.2125 6.328 8.433 12.632 39.68005 -75.75085 UDel Evans Hall 35.92778 -74.11111 WOO Ocean Gate (New York) icom-20120228/qsy/wlo.sh0000755000175000017500000000042206221100157013641 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -f 14 -m $month -d $day -h $hour -s $SRF -o 4 wlo.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp wlo $str "tuned " icom -r r72 -m lsb -o 2.19 -g $str[5] -d icom-20120228/qsy/w1aw.sh0000755000175000017500000000042306223236537013736 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -m $month -d $day -h $hour -s $SRF -o 4 w1aw-rtty.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp w1aw $str "tuned " icom -r r72 -m lsb -o 2.12 -g $str[5] -d icom-20120228/qsy/w1aw-cw.dat0000644000175000017500000000020105775542153014477 0ustar colincolin1 6 1 80 30 7 1.818 3.5815 7.0475 14.0475 18.0975 21.0675 28.0675 39.68005 -75.75085 UDel Evans Hall 41.42 -72.43 W1AW Newington icom-20120228/qsy/gain.dat0000644000175000017500000000432005775542152014134 0ustar colincolin 3.5 7.0 10.0 14.0 18.0 21.0 24.0 28.0 -30.0 -30.0 -30.0 -30.0 -30.0 -30.0 -30.0 -30.0 -19.6 -16.4 -16.4 -6.8 -6.8 -3.6 -3.6 -1.3 -13.6 -10.4 -10.4 -1.0 -1.0 2.1 2.1 4.1 -10.1 -7.0 -7.0 2.2 2.2 5.0 5.0 6.6 -7.7 -4.6 -4.6 4.3 4.3 6.6 6.6 7.6 -5.8 -2.8 -2.8 5.7 5.7 7.4 7.4 7.5 -4.3 -1.3 -1.3 6.6 6.6 7.6 7.6 6.4 -3.0 -0.1 -0.1 7.2 7.2 7.2 7.2 3.9 -2.0 0.8 0.8 7.5 7.5 6.2 6.2 -0.8 -1.0 1.7 1.7 7.5 7.5 4.5 4.5 -12.1 -0.2 2.4 2.4 7.2 7.2 1.9 1.9 -4.3 0.5 3.0 3.0 6.7 6.7 -2.5 -2.5 1.7 1.2 3.6 3.6 6.0 6.0 -10.4 -10.4 4.5 1.8 4.0 4.0 4.9 4.9 -8.2 -8.2 5.8 2.3 4.4 4.4 3.6 3.6 -1.9 -1.9 6.1 2.8 4.8 4.8 1.8 1.8 1.4 1.4 5.6 3.2 5.1 5.1 -0.4 -0.4 3.3 3.3 4.3 3.6 5.3 5.3 -3.4 -3.4 4.5 4.5 2.0 3.9 5.5 5.5 -7.5 -7.5 5.0 5.0 -1.7 4.3 5.7 5.7 -11.5 -11.5 5.1 5.1 -7.7 4.6 5.8 5.8 -9.9 -9.9 4.9 4.9 -8.8 4.9 6.0 6.0 -6.3 -6.3 4.2 4.2 -3.4 5.1 6.0 6.0 -3.6 -3.6 3.3 3.3 -0.2 5.3 6.1 6.1 -1.8 -1.8 1.9 1.9 1.6 5.5 6.1 6.1 -0.5 -0.5 0.2 0.2 2.6 5.7 6.2 6.2 0.3 0.3 -2.0 -2.0 2.9 5.9 6.2 6.2 0.9 0.9 -4.7 -4.7 2.8 6.1 6.2 6.2 1.2 1.2 -7.9 -7.9 2.3 6.2 6.2 6.2 1.4 1.4 -10.8 -10.8 1.4 6.4 6.1 6.1 1.4 1.4 -10.9 -10.9 0.1 6.5 6.1 6.1 1.3 1.3 -9.0 -9.0 -1.4 6.6 6.0 6.0 1.1 1.1 -7.2 -7.2 -3.3 6.7 6.0 6.0 0.7 0.7 -5.8 -5.8 -5.5 6.8 5.9 5.9 0.3 0.3 -4.9 -4.9 -8.1 6.9 5.9 5.9 -0.2 -0.2 -4.4 -4.4 -10.7 6.9 5.8 5.8 -0.8 -0.8 -4.2 -4.2 -12.8 7.0 5.8 5.8 -1.4 -1.4 -4.1 -4.1 -13.5 7.0 5.7 5.7 -2.1 -2.1 -4.3 -4.3 -13.2 7.1 5.7 5.7 -2.8 -2.8 -4.5 -4.5 -12.6 7.1 5.6 5.6 -3.6 -3.6 -5.0 -5.0 -12.1 7.2 5.6 5.6 -4.4 -4.4 -5.5 -5.5 -11.9 7.2 5.5 5.5 -5.3 -5.3 -6.2 -6.2 -11.9 7.2 5.5 5.5 -6.2 -6.2 -6.9 -6.9 -12.2 7.2 5.5 5.5 -7.1 -7.1 -7.7 -7.7 -12.8 7.2 5.5 5.5 -8.1 -8.1 -8.6 -8.6 -13.5 7.2 5.5 5.5 -9.0 -9.0 -9.5 -9.5 -14.4 icom-20120228/qsy/wwv.dat0000644000175000017500000000014310550563757014041 0ustar colincolin3 1 8 70 20 5 2.5 5 10 15 20 39.68005 -75.75085 UDel Evans Hall 40.6803 -105.0408 WWV Fort Collins icom-20120228/qsy/bbc.sh0000755000175000017500000000025306224606664013611 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set stamp = `date '+%h %d %T '` echo -n $stamp bbc "tuned " icom -r r71 -m lsb -g $1 -d icom-20120228/qsy/w1aw-rtty.dat0000644000175000017500000000016605775542153015102 0ustar colincolin1 6 1 80 30 6 3.625 7.095 14.095 18.1025 21.095 28.095 39.68005 -75.75085 UDel Evans Hall 41.42 -72.43 W1AW Newington icom-20120228/qsy/wlo.dat0000644000175000017500000000017406223777164014024 0ustar colincolin1 6 1 80 20 6 4.2500 6.3440 8.5340 12.9920 16.9976 22.6880 39.68005 -75.75085 UDel Evans Hall 30.70 -88.04 WLO Mobile icom-20120228/qsy/kmi.sh0000755000175000017500000000042206223236464013635 0ustar colincolin#!/bin/csh set month = `date '+%m'` set day = `date '+%d'` set hour = `date '+%H'` set str = `minimuf -f 14 -m $month -d $day -h $hour -s $SRF -o 4 kmi.dat dipole.dat` set stamp = `date '+%h %d %T '` echo -n $stamp kmi $str "tuned " icom -r r72 -m lsb -o 2.19 -g $str[5] -d icom-20120228/qsy/cfh.dat0000644000175000017500000000015410550531262013742 0ustar colincolin1 6 1 70 20 4 4.27263 6.49793 10.53765 13.51168 39.68005 -75.75085 UDel Evans Hall 63.98 -44.97 CHF Halifax icom-20120228/r8500_msc0000644000175000017500000000075310424305504013242 0ustar colincolin# Program Scan 0.53 AM # P1 AM broadcast 1.70 # P2 10 kHz 88.0 WFM # P1 FM broadcast 108. # P2 200 kHz 30.0 FM # P1 Public Safety 48.0 # P2 20 kHz 150.0 FM # P1 Public Safety 156.0 # P2 15 kHz 156.0 FM # P1 Maritime Mobile 158.0 # P2 25 kHz 158.0 FM # P1 Public Safety 160.0 # P2 15 kHz 160.0 FM # P1 Maritime Mobile 162.0 # P2 25 kHz 162.0 FM # P1 ? 169.0 # P2 15 kHz 169.0 FM # P1 Public Safety 172.0 # P2 25 kHz 450.0 FM # P1 land fixed/mobile 470.0 # P2 25 kHz icom-20120228/TAB.BAK0000744000175000017500000007107010453532634012635 0ustar colincolin/* * Program to control ICOM radios * * Tables and chairs */ #include "icom.h" #include #include /* * Commands */ #define ARG2(y, x) (((y) << 8) | (x)) #define ARG3(z, y, x) (((z) << 16) | ((y) << 8) | (x)) #define M_CTL(z, x) ARG3((z), V_WRCTL, (x)) #define M_MTR(z, x) ARG3((z), V_RMTR, (x)) #define M_TOG(z, x) ARG3((z), V_TOGL, (x)) #define M_SET(z, x) ARG2((z), (x)) /* * Keyboard mode commands */ struct cmdtable cmd[] = { {"agc", C_AGC, "AGC fast/medium/slow"}, {"ant", C_ANT, "select antenna"}, {"atten", C_ATTEN, "select attenuator"}, {"band", C_BAND, "set band limits"}, {"bank", C_BANK, "read/write bank/name"}, {"bfocomp", C_BCOMP, "set BFO compensation"}, {"break", C_BREAK, "break off/semi/full"}, {"chan", C_READ, "read channels"}, {"ctl", C_CTRL, "control commands"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set dial tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"dump", C_DUMP, "dump VFO (debug)"}, {"duplex", C_DUPLEX, "set transmit duplex"}, {"empty", C_EMPTY, "empty channel"}, {"include", C_INCLD, "include file"}, {"key", C_KEY, "send CW message"}, {"meter", C_METER, "read meters and squelch"}, {"misc", C_MISC, "miscellaneous control"}, {"mode", C_MODE, "set mode"}, {"mvfo", C_VFOM, "memory -> VFO"}, {"name", C_NAME, "set channel name"}, {"pad", C_KEYPAD, "switch to keypad mode"}, {"power", C_POWER, "power on/off"}, {"preamp", C_PAMP, "preamp off/1/2f"}, {"ptt", C_PTT, "push to talk"}, {"quit", C_QUIT, "exit program"}, {"radio", C_RADIO, "select radio"}, {"rate", C_RATE, "set tuning rate"}, {"restore", C_RESTORE, "restore channels"}, {"rx", C_RX, "receive"}, {"save", C_SAVE, "save channels"}, {"say", C_ANNC, "announce control"}, {"scan", C_SCAN, "scan control"}, {"set", C_SWTCH, "set/clear switches"}, {"split", C_SPLIT, "split/duplex commands"}, {"step", C_STEP, "set tuning step"}, {"swap", C_SWAP, "VFO A <-> VFO B"}, {"test", C_TEST, "send CI-V test message"}, {"tone", C_TONE, "set repeater tone frequency"}, {"trace", C_DEBUG, "trace CI-V messages"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"tx", C_TX, "transmit"}, {"utc", C_TIME, "set/display date and time"}, {"verbose", C_VERB, "set verbose"}, {"vfo", C_VFO, "vfo commands"}, {"vfocomp", C_VCOMP, "set VFO compensation"}, {"write", C_WRITE, "write channels"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Keypad mode commands */ struct cmdtable key[] = { {{KILL, '\0'}, C_ERASE, "erase input"}, {"[11", C_ANT, "F1 ant status"}, {"[12", C_AGC, "F2 agc status"}, {"[13", C_ATTEN, "F3 atten status"}, {"[14", C_PAMP, "F4 preamp status"}, {"[15", C_BREAK, "F5 break status"}, {"[17", C_ANNC, "F6 say status"}, {"[18", C_METER, "F7 display meters"}, {"[19", C_SWTCH, "F8 display switches"}, {"[20", C_CTRL, "F9 display controls"}, {"[a", C_UP, "UP step up"}, {"[b", C_DOWN, "DOWN step down"}, {"[c", C_RUP, "RIGHT tuning rate up"}, {"[d", C_RDOWN, "LEFT tuning rate down"}, {"c", C_READ, "read channel"}, {"e", C_EMPTY, "empty channel"}, {"q", C_KEYBD, "switch to keyboard mode"}, {"r", C_RX, "receive"}, {"s", C_SPLIT, "split mode with offset"}, {"t", C_TX, "transmit"}, {"u", C_TIME, "display date and time"}, {"w", C_WRITE, "write channel"}, {"x", C_SWAP, "VFO A <-> VFO B"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * dummy argument */ struct cmdtable dummy[] = { {"\0", R_NOP, "invalid command"} }; /* * channel/bank arguments */ struct cmdtable argch[] = { {"[empty]", 0x00, "current bank/chan"}, {"$", 0x00, "current bank, all chans"}, {"b.$", 0x00, "bank b, all chans"}, {"$:$", 0x00, "all banks, all chans"}, {"+", 0x00, "current bank/chan plus 1"}, {"-", 0x00, "current bank/chan minus 1"}, {"c", 0x00, "current bank, chan c"}, {"b.c", 0x00, "bank b, chan c"}, {"c1:c2", 0x00, "current bank, block c1-c2"}, {"b1.c1:b2.c2", 0x00, "block b1.c1-b2.c2"}, {"\0", R_NOP, "invalid argument"} }; /* * "verbose" arguments */ struct cmdtable verbx[] = { {"off", 0, "terse"}, {"on", P_VERB, "verbose"}, {"\0", R_NOP, "invalid argument"} }; /* * "trace" arguments */ struct cmdtable dbx[] = { {"all", P_TRACE|P_ERMSG, "trace bus, errors"}, {"bus", P_TRACE, "trace bus"}, {"off", 0, "trace none"}, {"packet", P_ERMSG, "trace errors"}, {"\0", R_NOP, "invalid argument"} }; /* * "vfo" subcommands (V_SVFO 0x07 command) */ struct cmdtable vfo[] = { {"a", 0x00, "select VFO A"}, {"b", 0x01, "select VFO B"}, {"btoa", 0xa0, "VFO B -> VFO A"}, {"equal", 0xb1, "main VFO -> sub VFO"}, {"main", 0xd0, "select main VFO"}, {"nowatch", 0xc0, "dual-watch off"}, {"sub", 0xd1, "select sub VFO"}, {"swap", 0xb0, "VFO A <-> VFO B"}, {"watch", 0xc1, "dual-watch on"}, {"\0", R_NOP, "invalid argument"} }; /* * "split" subcommands (V_SPLIT 0x0f command) */ struct cmdtable split[] = { {"dup+", 0x12, "duplex up"}, {"dup-", 0x11, "duplex down"}, {"off", 0x00, "split off"}, {"on", 0x01, "split on"}, {"simplex", 0x10, "simplex"}, {"\0", R_NOP, "invalid argument"} }; /* * "atten" subcommands (V_ATTEN 0x11 command) */ struct cmdtable atten[] = { {"0", 0x00, "off"}, {"6", 0x06, "6 dB"}, {"10", 0x10, "10 dB"}, {"12", 0x12, "12 dB"}, {"18", 0x18, "18 dB"}, {"20", 0x20, "20 dB"}, {"30", 0x30, "30 dB"}, {"\0", R_NOP, "invalid argument"} }; /* * "ant" subcommands (V_SANT 0x12 command) */ struct cmdtable ant[] = { {"1", ARG2(0x00,0x00), "xmt/rec antenna 1"}, {"1R", ARG2(0x01,0x00), "xmt antenna 1/rec antenna R"}, {"2", ARG2(0x00,0x01), "xmt/rec antenna 2"}, {"2R", ARG2(0x01,0x01), "xmt antenna 2/rec antenna R"}, {"\0", R_NOP, "invalid argument"} }; /* * "say" subcommands (V_ANNC 0x13 command) */ struct cmdtable say[] = { {"all", 0x00, "all data"}, {"freq", 0x01, "S meter, frequency and mode"}, {"mode", 0x02, "receive mode"}, {"\0", R_NOP, "invalid argument"} }; /* * "ctl" subcommands (V_WRCTL 0x14 command) */ struct cmdtable ctlc[] = { {"af", M_CTL(G,0x01), "af gain"}, {"antivox", M_CTL(G,0x17), "anti-vox gain"}, {"balance", M_CTL(G,0x10), "balance"}, {"blank", M_CTL(G,0x12), "noise blanker threshold"}, {"bright", M_CTL(G,0x19), "LCD brightness"}, {"comp", M_CTL(G,0x0e), "speech compressor gain"}, {"contrast", M_CTL(G,0x18), "LCD contrast"}, {"delay", M_CTL(G,0x0f), "break delay"}, {"mic", M_CTL(G,0x0b), "microphone gain"}, {"monitor", M_CTL(G,0x15), "monitor gain"}, {"nf1", M_CTL(F,0x0d), "manual notch nf1 frequency"}, {"nf2", M_CTL(F,0x1a), "manual notch nf2 frequency"}, {"nr", M_CTL(G,0x06), "noise reduction"}, {"pbti", M_CTL(F,0x07), "passband tuning (inner"}, {"pbto", M_CTL(F,0x08), "passband tuning (outer"}, {"pitch", M_CTL(F,0x09), "cw pitch"}, {"power", M_CTL(G,0x0a), "rf power"}, {"rf", M_CTL(G,0x02), "rf gain"}, {"speed", M_CTL(G,0x0c), "key speed"}, {"sql", M_CTL(G,0x03), "squelch threshold"}, {"vox", M_CTL(G,0x16), "vox gain"}, {"\0", R_NOP, "invalid argument"} }; /* * "meter" subcommands (V_RMTR 0x15 command) */ struct cmdtable meter[] = { {"alc", M_MTR(G,0x13), "read ALC meter"}, {"comp", M_MTR(G,0x14), "read COMP meter"}, {"power", M_MTR(G,0x11), "read RF power meter"}, {"signal", M_MTR(S,0x02), "read S meter"}, {"sql", M_MTR(Q,0x01), "read squelch condition"}, {"swr", M_MTR(G,0x12), "read SWR meter"}, {"\0", R_NOP, "invalid argument"} }; /* * "set" subcommands (V_TOGL 0x16 command) */ struct cmdtable switches[] = { {"agc", M_TOG(A,0x12), "agc fast/mid/slow"}, {"agcfast", M_TOG(P,0x11), "agc fast (R8500)"}, {"agcslow", M_TOG(P,0x10), "agc slow (R8500)"}, {"an", M_TOG(W,0x41), "auto notch"}, {"apfoff", M_TOG(W,0x30), "auto peak filter off (R8500)"}, {"apfon", M_TOG(W,0x31), "auto peak filter on (R8500)"}, {"break", M_TOG(B,0x47), "break off/semi/full"}, {"comp", M_TOG(W,0x44), "speech compressor"}, {"dcts", M_TOG(W,0x4b), "digital tone squelch"}, {"lock", M_TOG(W,0x50), "dial lock"}, {"monitor", M_TOG(W,0x45), "monitor"}, {"nb", M_TOG(W,0x22), "noise blanker"}, {"nboff", M_TOG(P,0x20), "noise blanker off (R8500)"}, {"nbon", M_TOG(P,0x21), "noise blanker on(R8500)"}, {"nf1", M_TOG(W,0x48), "manual notch nf1"}, {"nf2", M_TOG(W,0x51), "manual notch nf2"}, {"nr", M_TOG(W,0x40), "noise reduction"}, {"peak", M_TOG(W,0x4f), "twin peak filter"}, {"preamp", M_TOG(P,0x02), "preamp off/1/2"}, {"rtty", M_TOG(W,0x49), "RTTY filter"}, {"tone", M_TOG(W,0x42), "repeater tone"}, {"tsql", M_TOG(W,0x43), "tone squelch"}, {"vcs", M_TOG(W,0x4c), "voice squelch"}, {"vox", M_TOG(W,0x46), "voice break"}, {"\0", R_NOP, "invalid argument"}, }; struct cmdtable fmtw[] = { {"off", M_SET(W,0x00), "switch off"}, {"on", M_SET(W,0x01), "switch on"}, {"\0", R_NOP, "invalid argument"}, }; /* * "power" subcommands (V_POWER 0x18 command) */ struct cmdtable power[] = { {"off", 0x00, "power off at sleep timeout"}, {"on", 0x01, "power on"}, {"\0", R_NOP, "invalid argument"} }; /* * "tone" and "tsql" subcommands (V_TONE 0x1b command) * * The CTSS tone frequency is in tenths of a Hertz. The vollowing * frequencies are valid for both the repeater tone (tone command) and * tone squelch (tsql command) functions. */ struct cmdtable tone[] = { {"off", 0x00, "CTSS off)"}, {"on", 0x01, "CTSS on)"}, {"67.0", 0x0670, "XZ (67.0 Hz)"}, {"69.3", 0x0693, "WZ (69.3 Hz)"}, {"71.9", 0x0719, "XA (71.9 Hz)"}, {"74.4", 0x0744, "WA (74.4 Hz)"}, {"77.0", 0x0770, "XB (77.0 Hz)"}, {"79.7", 0x0797, "WB (79.7 Hz)"}, {"82.5", 0x0825, "YZ (82.5 Hz)"}, {"85.4", 0x0854, "YA (85.4 Hz)"}, {"88.5", 0x0885, "YB (88.5 Hz)"}, {"91.5", 0x0915, "ZZ (91.5 Hz)"}, {"94.8", 0x0948, "ZA (94.8 Hz)"}, {"97.4", 0x0974, "ZB (97.4 Hz)"}, {"100.0", 0x1000, "1Z (100.0 Hz)"}, {"103.5", 0x1035, "1A (103.5 Hz)"}, {"107.2", 0x1072, "1B (107.2 Hz)"}, {"110.9", 0x1109, "2Z (110.9 Hz)"}, {"114.8", 0x1148, "2A (114.8 Hz)"}, {"118.8", 0x1188, "2B (118.8 Hz)"}, {"123.0", 0x1230, "3Z (123.0 Hz)"}, {"127.3", 0x1273, "3A (127.3 Hz)"}, {"131.8", 0x1318, "3B (131.8 Hz)"}, {"136.5", 0x1365, "4Z (136.5 Hz)"}, {"141.3", 0x1413, "4A (141.3 Hz)"}, {"146.2", 0x1462, "4B (146.2 Hz)"}, {"151.4", 0x1514, "5Z (151.4 Hz)"}, {"156.7", 0x1567, "5A (156.7 Hz)"}, {"159.8", 0x1598, "-- (159.8 Hz)"}, {"162.2", 0x1622, "5B (162.2 Hz)"}, {"165.5", 0x1655, "-- (165.5 Hz)"}, {"167.9", 0x1679, "6Z (167.9 Hz)"}, {"171.3", 0x1713, "-- (171.3 Hz)"}, {"173.8", 0x1738, "6A (173.8 Hz)"}, {"177.3", 0x1773, "-- (177.3 Hz)"}, {"179.9", 0x1799, "6B (179.9 Hz)"}, {"183.5", 0x1835, "-- (183.5 Hz)"}, {"186.2", 0x1862, "7Z (186.2 Hz)"}, {"189.9", 0x1899, "-- (189.9 Hz)"}, {"192.8", 0x1928, "7A (192.8 Hz)"}, {"196.6", 0x1968, "-- (196.6 Hz)"}, {"199.5", 0x1995, "-- (199.5 Hz)"}, {"203.5", 0x2035, "M1 (203.5 Hz)"}, {"206.5", 0x2065, "-- (206.5 Hz)"}, {"210.7", 0x2107, "M2 (210.7 Hz)"}, {"218.1", 0x2181, "M3 (218.1 Hz)"}, {"225.7", 0x2257, "M4 (225.7 Hz)"}, {"229.1", 0x2291, "9Z (229.1 Hz)"}, {"233.6", 0x2336, "M5 (233.6 Hz)"}, {"241.8", 0x2418, "M6 (241.8 Hz)"}, {"250.3", 0x2503, "M7 (250.3 Hz)"}, {"254.1", 0x2541, "0Z (254.1 Hz)"}, {"\0", R_NOP, "invalid argument"} }; /* * tone command on/off */ struct cmdtable toneon[] = { {"off", 0x00, "tone off"}, {"on", 0x01, "tone on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dtcs" subcommands (V_TONE 0x1b command) * * Thd DTCS code is nnn-pq, where nnn is 3 decimal digits, p is the * transmit polarity and q is the receive polarity. Polarity is N for * normal and R for reversed. The following codes are valid for the * digital tone squelch function (dtcs command). */ struct cmdtable dtcs[] = { {"off", 0x00, "DTCS off)"}, {"on", 0x01, "DTCS on)"}, {"023", 0x0023, "DTCS 023"}, {"025", 0x0025, "DTCS 025"}, {"026", 0x0026, "DTCS 026"}, {"031", 0x0031, "DTCS 031"}, {"032", 0x0032, "DTCS 032"}, {"036", 0x0036, "DTCS 036"}, {"043", 0x0043, "DTCS 043"}, {"047", 0x0047, "DTCS 047"}, {"051", 0x0051, "DTCS 051"}, {"053", 0x0053, "DTCS 054"}, {"054", 0x0054, "DTCS 055"}, {"055", 0x0055, "DTCS 071"}, {"071", 0x0071, "DTCS 071"}, {"072", 0x0072, "DTCS 072"}, {"073", 0x0073, "DTCS 073"}, {"074", 0x0074, "DTCS 074"}, {"114", 0x0114, "DTCS 114"}, {"115", 0x0115, "DTCS 115"}, {"116", 0x0116, "DTCS 116"}, {"122", 0x0122, "DTCS 122"}, {"125", 0x0125, "DTCS 125"}, {"131", 0x0131, "DTCS 131"}, {"132", 0x0132, "DTCS 132"}, {"134", 0x0134, "DTCS 134"}, {"143", 0x0143, "DTCS 143"}, {"145", 0x0145, "DTCS 145"}, {"152", 0x0152, "DTCS 152"}, {"155", 0x0155, "DTCS 155"}, {"156", 0x0156, "DTCS 156"}, {"162", 0x0162, "DTCS 162"}, {"165", 0x0165, "DTCS 165"}, {"172", 0x0172, "DTCS 172"}, {"174", 0x0174, "DTCS 174"}, {"205", 0x0205, "DTCS 205"}, {"212", 0x0212, "DTCS 212"}, {"223", 0x0223, "DTCS 223"}, {"225", 0x0225, "DTCS 225"}, {"226", 0x0226, "DTCS 226"}, {"243", 0x0243, "DTCS 243"}, {"244", 0x0244, "DTCS 244"}, {"245", 0x0245, "DTCS 245"}, {"246", 0x0246, "DTCS 246"}, {"251", 0x0251, "DTCS 251"}, {"252", 0x0252, "DTCS 252"}, {"255", 0x0255, "DTCS 255"}, {"261", 0x0261, "DTCS 261"}, {"263", 0x0263, "DTCS 263"}, {"265", 0x0265, "DTCS 265"}, {"266", 0x0266, "DTCS 266"}, {"271", 0x0271, "DTCS 271"}, {"274", 0x0274, "DTCS 274"}, {"306", 0x0306, "DTCS 306"}, {"311", 0x0311, "DTCS 311"}, {"315", 0x0315, "DTCS 315"}, {"325", 0x0325, "DTCS 325"}, {"331", 0x0331, "DTCS 331"}, {"332", 0x0332, "DTCS 332"}, {"343", 0x0343, "DTCS 343"}, {"346", 0x0346, "DTCS 346"}, {"351", 0x0351, "DTCS 351"}, {"356", 0x0356, "DTCS 356"}, {"364", 0x0364, "DTCS 364"}, {"365", 0x0365, "DTCS 365"}, {"371", 0x0371, "DTCS 371"}, {"411", 0x0411, "DTCS 411"}, {"412", 0x0412, "DTCS 412"}, {"413", 0x0413, "DTCS 413"}, {"423", 0x0423, "DTCS 423"}, {"431", 0x0431, "DTCS 431"}, {"432", 0x0432, "DTCS 432"}, {"445", 0x0445, "DTCS 445"}, {"446", 0x0446, "DTCS 446"}, {"452", 0x0452, "DTCS 452"}, {"454", 0x0454, "DTCS 454"}, {"455", 0x0455, "DTCS 455"}, {"462", 0x0462, "DTCS 462"}, {"464", 0x0464, "DTCS 464"}, {"465", 0x0465, "DTCS 465"}, {"466", 0x0466, "DTCS 466"}, {"503", 0x0503, "DTCS 503"}, {"506", 0x0506, "DTCS 506"}, {"516", 0x0516, "DTCS 516"}, {"523", 0x0523, "DTCS 523"}, {"526", 0x0526, "DTCS 526"}, {"532", 0x0532, "DTCS 532"}, {"546", 0x0546, "DTCS 546"}, {"565", 0x0565, "DTCS 565"}, {"606", 0x0606, "DTCS 606"}, {"612", 0x0612, "DTCS 612"}, {"624", 0x0624, "DTCS 624"}, {"627", 0x0627, "DTCS 627"}, {"631", 0x0631, "DTCS 631"}, {"632", 0x0632, "DTCS 632"}, {"654", 0x0654, "DTCS 654"}, {"662", 0x0662, "DTCS 662"}, {"664", 0x0664, "DTCS 664"}, {"703", 0x0703, "DTCS 703"}, {"712", 0x0712, "DTCS 712"}, {"723", 0x0723, "DTCS 723"}, {"731", 0x0731, "DTCS 731"}, {"732", 0x0732, "DTCS 732"}, {"734", 0x0734, "DTCS 734"}, {"743", 0x0743, "DTCS 743"}, {"754", 0x0754, "DTCS 754"}, {"\0", R_NOP, "invalid argument"} }; /* * DTCS polarity codes * * These codes are used with the DTCS codes given above. An "N" codes * for normal polarity, "R" reversed. */ struct cmdtable polar[] = { {"NN", 0x00, "+ transmit, + receive"}, {"NR", 0x01, "+ transmit, - receive"}, {"RN", 0x10, "- transmit, + receive"}, {"RR", 0x11, "- transmit, - receive"}, {"\0", R_NOP, "invalid argument"} }; /* * "tx" subcommands (V_TX 0x1c command) */ struct cmdtable tx[] = { {"off", 0x00, "receive"}, {"on", 0x01, "transmit"}, {"\0", R_NOP, "invalid argument"} }; /* * "misc" subcommands (775) */ struct cmdtable misc[] = { {"ctss", 0x06, "read CTSS"}, {"dcs", 0x07, "read DCS"}, {"dtmf", 0x08, "read DTMF"}, {"id", 0x09, "read ID"}, {"local", 0x01, "local control"}, {"next", 0x0e, "next frequency"}, {"nosearch", 0x10, "disable search"}, {"nospeaker", 0x0b, "mute speaker"}, {"notape", 0x04, "disable tape recorder"}, {"nowindow", 0x0d, "disable search window"}, {"opto", 0x05, "read OPTO"}, {"remote", 0x02, "remote control"}, {"search", 0x0f, "enable search"}, {"speaker", 0x0a, "unmute speaker"}, {"tape", 0x03, "enable tape recorder"}, {"window", 0x0c, "enable search window"}, {"\0", R_NOP, "invalid argument"} }; /* * "agc" subcommands */ struct cmdtable agc[] = { {"fast", M_SET(A,0x01), "agc fast"}, {"medium", M_SET(A,0x02), "agc mid"}, {"slow", M_SET(A,0x03), "agc slow"}, {"\0", R_NOP, "invalid argument"} }; /* * "preamp" subcommands */ struct cmdtable preamp[] = { {"off", 0x00, "preamp off"}, {"1", 0x01, "preamp 1"}, {"2", 0x02, "preamp 2"}, {"\0", R_NOP, "invalid argument"} }; /* * "break" subcommands */ struct cmdtable fmtb[] = { {"full", M_SET(B,0x02), "break full"}, {"off", M_SET(B,0x00), "break off"}, {"semi", M_SET(B,0x01), "break semi"}, {"\0", R_NOP, "invalid argument"}, }; /* * "scan" subcommands */ struct cmdtable scan[] = { {"10", 0xa3, "delta-f 10 kHz"}, {"2.5", 0xa1, "delta-f 2.5 kHz"}, {"20", 0xa4, "delta-f 20 kHz"}, {"5", 0xa2, "delta-f 5 kHz"}, {"50", 0xa5, "delta-f 50 kHz"}, {"autowrite", 0x04, "auto write scan"}, {"deltaf", 0x03, "delta-f scan"}, {"finedeltaf", 0x13, "fine delta-f scan start"}, {"fineprog", 0x12, "fine program scan start"}, {"fix", 0xaa, "fix center frequency"}, {"mem", 0x22, "memory scan start"}, {"memchan", 0xb2, "memory channel scan number"}, {"memnum", 0x23, "select memory scan start"}, {"nofix", 0xa0, "unfix center frequency"}, {"noresume", 0xd1, "scan resume off"}, {"noskip", 0xb1, "select memory channel"}, {"noresume", 0xd0, "scan resume never"}, {"novsc", 0xc0, "VSC off"}, {"priority", 0x42, "priority scan"}, {"prog", 0x02, "program scan"}, {"resume", 0xd3, "scan resume after delay"}, {"resumeb", 0xd2, "scan resume b"}, {"select", 0x24, "selected mode memory scan"}, {"skip", 0xb0, "deselect memory channel"}, {"start", 0x01, "scan start"}, {"stop", 0x00, "scan stop"}, {"vsc", 0xc1, "VSC on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dial" subcommands */ struct cmdtable diala[] = { /* R8500 */ {".01", 0x00, "10 Hz"}, {".05", 0x01, "50 Hz"}, {".1", 0x02, "100 Hz"}, {"1", 0x03, "1 kHz"}, {"2.5", 0x04, "2.5 kHz"}, {"5", 0x05, "5 kHz"}, {"9", 0x06, "9 kHz"}, {"10", 0x07, "10 kHz"}, {"12.5", 0x08, "12.5 kHz"}, {"20", 0x09, "20 kHz"}, {"25", 0x10, "25 kHz"}, {"100", 0x11, "100 kHz"}, {"1000", 0x12, "1 MHz"}, {"*", 0x13, "* kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialb[] = { /* 775 */ {".01", 0x00, "10 Hz"}, {"1", 0x01, "1 kHz"}, {"2", 0x02, "2 kHz"}, {"3", 0x03, "3 kHz"}, {"4", 0x04, "4 kHz"}, {"5", 0x05, "5 kHz"}, {"6", 0x06, "6 kHz"}, {"7", 0x07, "7 kHz"}, {"8", 0x08, "8 kHz"}, {"9", 0x09, "9 kHz"}, {"10", 0x10, "10 kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialc[] = { /* 706G, 756, 7000 */ {".01", 0x00, "10 Hz"}, {".1", 0x01, "100 Hz"}, {"1", 0x02, "1 kHz"}, {"5", 0x03, "5 kHz"}, {"9", 0x04, "9 kHz"}, {"10", 0x05, "10 kHz"}, {"12.5", 0x06, "12.5 kHz"}, {"20", 0x07, "20 kHz"}, {"25", 0x08, "25 kHz"}, {"100", 0x09, "100 kHz"}, {"\0", R_NOP, "invalid argument"} }; /* * bank, restore and save subcommands */ struct cmdtable loadtab[] = { {"atten", C_ATTEN, "set attenuator"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"name", C_NAME, "set channel name"}, {"set", C_SWTCH, "set commands"}, {"split", C_SPLIT, "split/duplex commands"}, {"tone", C_TONE, "set repeater tone frequency"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Radio identifier decode */ struct cmdtable identab[] = { {"1271", 0x24, "1271 UHF Transceiver"}, {"1275", 0x18, "1275 UHF Transceiver"}, {"271", 0x20, "271 VHF Transceiver"}, {"275", 0x10, "275 VHF Transceiver"}, {"375", 0x12, "375 VHF Transceiver"}, {"471", 0x22, "471 UHF Transceiver"}, {"475", 0x14, "475 UHF Transceiver"}, {"575", 0x16, "575 VHF Transceiver"}, {"575", 0x28, "725 HF Transceiver"}, {"706", 0x4e, "706 HF Transceiver"}, {"706G", 0x58, "706MKIIG HF Transceiver"}, {"726", 0x30, "726 HF Transceiver"}, {"735", 0x04, "735 HF Transceiver"}, {"746", 0x66, "746 HF Transceiver"}, {"751", 0x1c, "751 HF Transceiver"}, {"756", 0x64, "756 HF Transceiver"}, {"761", 0x1e, "761 HF Transceiver"}, {"765", 0x2c, "765 HF Transceiver"}, {"775", 0x46, "775 HF Transceiver"}, {"781", 0x26, "781 HF Transceiver"}, {"970", 0x2e, "970 HF Transceiver"}, {"7000", 0x70, "7000 HF/VHF/UHF Transceiver"}, {"7800", 0x6a, "7800 HF/VHF/UHF Transceiver"}, {"R7000", 0x08, "R7000 VHF/UHF Receiver"}, {"R71", 0x1A, "R71 HF Receiver"}, {"R7100", 0x34, "R7100 VHF/UHF Receiver"}, {"R72", 0x32, "R72 HF Receiver"}, {"R75", 0x5a, "R75 HF Receiver"}, {"R8500", 0x4a, "R8500 HF/VHF/UHF Receiver"}, {"R9000", 0x2a, "R9000 VHF/UHF Receiver"}, {"probe", 0x00, "Probe all radios"}, {"\0", R_NOP, "unknown radio"} }; /* * Broadband HF/VHF/UHF receiver mode decode (R7000) * * Note that panel FM mode is really wideband FM and panel FMn mode is * really FM mode on other radios. Emptying a channel changes the mode * to 0xff, but does not change the frequency. Reactivate the channel * by loading valid mode. */ static struct cmdtable mode2[] = { {"AM", 0x0002, "AM"}, {"a", 0x0002, "AM (keypad)"}, {"FMn", 0x8205, "FM"}, {"WFM", 0x0005, "WFM"}, {"f", 0x8205, "FM (keypad)"}, {"SSB", 0x8005, "SSB"}, {"s", 0x8005, "SSB (keypad)"}, {"\0", R_NOP, "invalid command"} }; /* * Broadband MF/HF/VHF/UHF receiver mode decode (R8500/R9000) */ static struct cmdtable mode3[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0103, "CW"}, {"k", 0x0103, "CW (keypad)"}, {"CWn", 0x0203, "CW narrow"}, {"FM", 0x0105, "FM"}, {"f", 0x0105, "FM (keypad)"}, {"FMn", 0x0205, "FM narrow"}, {"LSB", 0x0100, "LSB"}, {"l", 0x0100, "LSB (keypad)"}, {"USB", 0x0101, "USB"}, {"u", 0x0101, "USB (keypad)"}, {"WFM", 0x0106, "WFM"}, {"\0", R_NOP, "invalid command"} }; /* * Narrowband MF/HF/VHF/UHF transceiver and receiver mode decode * * The 7000 can do all of these, the 756 all but WFM, the 706g most * except the -R (reverse) modes. */ static struct cmdtable mode1[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM (keypad)"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0203, "CW"}, {"k", 0x0203, "CW (keypad)"}, {"CW-R", 0x0207, "CW reverse"}, {"CW-Rn", 0x0307, "CW reverse narrow"}, {"CW-Rw", 0x0107, "CW reverse wide"}, {"CWn", 0x0303, "CW narrow"}, {"CWw", 0x0103, "CW wide"}, {"FM", 0x0205, "FM"}, {"f", 0x0205, "FM (keypad)"}, {"FMn", 0x0305, "FM narrow"}, {"FMw", 0x0105, "FM wide"}, {"LSB", 0x0200, "LSB"}, {"l", 0x0200, "LSB (keypad)"}, {"LSBn", 0x0300, "LSB narrow"}, {"LSBw", 0x0100, "LSB wide"}, {"RTTY", 0x0204, "RTTY"}, {"RTTY-R", 0x0208, "RTTY reverse"}, {"RTTY-Rn", 0x0308, "RTTY reverse narrow"}, {"RTTY-Rw", 0x0108, "RTTY reverse wide"}, {"RTTYn", 0x0304, "RTTY narrow"}, {"RTTYw", 0x0104, "RTTY wide"}, {"USB", 0x0201, "USB"}, {"u", 0x0201, "USB (keypad)"}, {"USBn", 0x0301, "USB narrow"}, {"USBw", 0x0101, "USB wide"}, {"WFM", 0x0106, "wideband FM"}, {"\0", R_NOP, "invalid command"} }; /* * IC 7000 MF/HF/VHF/UHF transceiver and receiver mode decode */ static struct cmdtable mode4[] = { {"AM", 0x0202, "AM 6.0"}, {"a", 0x0202, "AM 6.0 (keypad)"}, {"AMn", 0x0302, "AM 3.0"}, {"AMw", 0x0102, "AM 9.0"}, {"CW", 0x0203, "CW 500"}, {"k", 0x0203, "CW 500 (keypad)"}, {"CW-R", 0x0207, "CW-R 500"}, {"CW-Rn", 0x0307, "CW-R 250"}, {"CW-Rw", 0x0107, "CW-R 1.2"}, {"CWn", 0x0303, "CW 250"}, {"CWw", 0x0103, "CW 1.2"}, {"FM", 0x0205, "FM 10.0"}, {"f", 0x0205, "FM 10.0 (keypad)"}, {"FMn", 0x0305, "FM 7.0"}, {"FMw", 0x0105, "FM 15.0"}, {"LSB", 0x0200, "LSB 2.4"}, {"l", 0x0200, "LSB 2.4 (keypad)"}, {"LSBn", 0x0100, "LSB 1.8"}, {"LSBw", 0x0300, "LSB 3.0"}, {"RTTY", 0x0204, "RTTY 500"}, {"RTTY-R", 0x0208, "RTTY-R 500"}, {"RTTY-Rn", 0x0308, "RTTY-R 250"}, {"RTTY-Rw", 0x0108, "RTTY-R 2.4"}, {"RTTYn", 0x0304, "RTTY 250"}, {"RTTYw", 0x0104, "RTTY 2.4"}, {"USB", 0x0201, "USB 2.4"}, {"u", 0x0201, "USB 2.4 (keypad)"}, {"USBn", 0x0301, "USB 1.8"}, {"USBw", 0x0101, "USB 3.0"}, {"WFM", 0x0106, "WFM 280.0"}, {"\0", R_NOP, "invalid command"} }; /* * CI-V bit rate control */ struct cmdtable baud[] = { {"300", B300, "300 b/s"}, {"600", B600, "600 b/s"}, {"1200", B1200, "1200 b/s"}, {"2400", B2400, "2400 b/s"}, {"4800", B4800, "4800 b/s"}, {"9600", B9600, "9600 b/s"}, {"19200", B19200, "19200 b/s"}, {"38400", B38400, "38400 b/s"}, {"\0", R_NOP, "invalid argument"} }; /* * Radio control initialization * * model ident ch bk init mode step flag ptr */ struct namestruct name[] = { {"1271", 0x24, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"1275", 0x18, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"271", 0x20, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"275", 0x10, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"375", 0x12, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"471", 0x22, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"475", 0x14, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"575", 0x16, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"706", 0x4e, B9600, 10, 0, dummy, mode1, dummy, 0, NULL}, {"706G", 0x58, B19200,99, 0, dummy, mode1, dialc, 0, NULL}, {"725", 0x28, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"726", 0x30, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"735", 0x04, B1200, 12, 0, dummy, mode1, dummy, F_735, NULL}, {"746", 0x66, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"751", 0x1c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"756", 0x64, B19200,99, 0, ctlc, mode1, dialc, F_756, NULL}, {"761", 0x1e, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"765", 0x2c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"775", 0x46, B1200, 99, 0, dummy, mode1, dialb, 0, NULL}, {"781", 0x26, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"970", 0x2e, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"7000", 0x70, B19200,99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"7800", 0x6a, B1200, 99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"R7000", 0x08, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R71", 0x1A, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"R7100", 0x34, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R72", 0x32, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"R75", 0x5a, B19200,99, 0, dummy, mode1, dummy, 0, NULL}, {"R8500", 0x4a, B19200,39, 19, ctlc, mode3, diala, F_8500, NULL}, {"R9000", 0x2a, B1200, 99, 0, dummy, mode3, diala, F_8500, NULL}, {"\0", 0x0, 0, 0, 0, 0, 0, NULL, 0, NULL} }; double logtab[] = { /* tuning rate table */ 1., 2., 5., /* 0.000000 */ 10., 25., 50., /* 0.00000 */ 1e2, 2.5e2, 5e2, /* 0.0000 */ 1e3, 2.5e3, 5e3, /* 0.000 */ 1e4, 2.5e4, 5e4, /* 0.00 */ 1e5, 2.5e5, 5e5, /* 0.0 */ 1e6, 2.5e6, 5e6 /* 0. */ }; int sigtab[] = { /* significant digits table */ 6, 6, 6, /* 0.000000 */ 5, 6, 5, /* 0.00000 */ 4, 5, 4, /* 0.0000 */ 3, 4, 3, /* 0.000 */ 2, 3, 2, /* 0.00 */ 1, 2, 1, /* 0.0 */ 0, 0, 0 /* 0. */ }; struct metertab mtab[] = { {0, "S0"}, /* 0.4-1.3 uv */ {12, "S1"}, {32, "S2"}, {46, "S3"}, /* 0.79-2.0 uV */ {64, "S4"}, {78, "S5"}, /* 3.2 uV */ {94, "S6"}, {110, "S7"}, /* 13 uV */ {126, "S8"}, {140, "S9"}, /* 50 uV */ {156, "S9+10"}, {174, "S9+20"}, /* 0.5 mv */ {190, "S9+30"}, {208, "S9+40"}, /* 5 mv */ {230, "S9+50"}, {999, "S9+60"} /* 50 mV */ }; icom-20120228/freq.txt0000644000175000017500000034435210376731213013411 0ustar colincolin10-14 Radionavigation 10.2 Omega 14-19.9 Fixed 15.1 FUO/HWU Toulon 15.3 NLK Jim Creek 16 GBR Rugby 16.4 JXZ/J33DS Helgeland 16.8 FUB Paris 17.1 RCI Bolchoi 17.3 NAA Cutler 18.6 NBA Balboa 19 MHW/GQD Anthorn 19.6 GBZ Rugby 19.9-20.1 Standard Frequency 20 JGZAR Tokyo, WWVL Ft Collins 20.1-59 Fixed 20.8 ICV Tavolara 21.4 NSS Annapolis 22.5 CFH-NAWS Halifax 24 NBA Balboa 25 RWF Piatigorsk 26.1 NPM Honolulu 44 VHP Belconnen, VIX2/3/4/5/6/7 Sydney 45.8 CFH Halifax 46.3 DCF46 Mainflingen 46.9 GYC/GLO20 London/Onger 50 CFH Halifax, OMA Vinohrady 52 GYN1/2 London 54.1 NBA Balboa (A7J) 54.7 LCH Tryvasshoegda 56.4 GLP20 Ongar 57.7 LBJ/2/3/4/5/6/7 Harstad 59-61 Standard Frequency 60 MSF, WWVB Ft Collins 61-70 Fixed 64.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead 65.9 NST/GXH/AOK/... 67 SLZ/1 70-90 Fixed, Radiolocation 73.6 CFH Halifax (F1) 75 HBG Prangins, WCC Chatham 77.5 DCF77 Mainflingen 78.2 GYA2/3/4/5 London 80.3 GYC/GLO20 London/Onger 81 GYN1/2 London 81.7 NBA Balboa (F1) 86.6 SMA3/7/SAW 88 NSS Annapolis 90-110 Radionavigation 91.2 FTH42/FTA91 Paris/Lyon 100 LORAN-C, RES Moscow 110-130 Fixed, Maritime Mobile, Radiolocation 112.9 North Atlantic, WSL Amagansett 115 NPG San Fransisco 115.3 CFH-L Halifax 122 NSS Annapolis (F1) 122.5 OUA23/32 Fredrikshaven 123 NST/GXH/AOK/... 123.3 CFH-L Halifax 124.1 North Atlantic 125 WCC Chatham 126.2 Central Pacific, KPH Bolinas 128.3 NBL (A7J) 130-160 Fixed, Maritime Mobile 130.4 North Atlantic, WCC Chatham 131.1 NPM Honolulu 131.8 FYA31 Lyon (A4) 132.1 North Atlantic 133.2 CFH Halifax (A4) 134.1 WCC Chatham 134.5 NSS Annapolis 134.6 North Atlantic 136.5 FYA31 Lyon (A4) 137 North Atlantic 137.7 South Atlantic 138 FUC Chebourg 139 DCF39 Mainflingen (A4), TBA2/3/4 Ankara 141.4 OUA23/32 Fredrikshaven 143 Calling 146.8 North Atlantic 147.3 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 147.5 North Atlantic, WCC Chatham 147.9 Central Pacific, KPH Bolinas, NBA Balboa 149.6 Alaska (ACS) 152 Ship Working 153 Gulf of Mexico, Puerto Rico, Ship Working 154 Ship Working 155 Ship Working 156 Ship Working 157 Ship Working 158 Ship Working 160-190 Broadcasting (Region 1 only), Fixed 164 Allouis (BC) 185 NSS Annapolis 190-275 Aeronautical Radionavigation, Broadcasting (Region 1 only) 192 CONSOLAN SFI San Fransisco 194 CONSOLAN TUK Nantucket 266 CONSOLAN Bushmills 275-285 Aeronautical Radionavigation, Broadcasting (Region 1 only), Maritime Radionavigation 285-325 Maritime Radionavigation 303 CONSOLAN LUGO Oteroad Rey 311 CONSOLAN Seville 319 CONSOLAN Stavanger 325-405 Aeronautical Radionavigation 405-415 Maritime Radionavigation 410 Gulf of Mexico, Radio Direction Finding 415-435 Aeronautical Radionavigation, Maritime Mobile 416 KEA Alaska, KUB Alaska, WPA Port Arthur 418 CMB Havana, CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, GNF North Foreland, North Atlantic, South Pacific, WSL Amagansett, ZRY/2/4/5/6/7 420 FUO Toulon, Gulf of Mexico, NMC San Fransisco, WPD Tampa 421 PCH Scheveningen 422 USCG 425 Ship Working 426 Central Pacific, OST/3/32/5/52/6/62 Ostende 428 Central Atlantic, NMG New Orleans, WMH Baltimore 429 OXB 430 NMV Jacksonville, VAR St Johns 431 WAX Miami 432 DHS Ruegen 433 CLQ Havana 434 Gulf of Mexico, South Atlantic 435 OST/3/32/5/52/6/62 Ostende, PPR Rio de Janeiro 435-490 Maritime Mobile 436 Central Pacific, North Atlantic, WCC Chatham 438 CFH-L Halifax, GLD Lands End, Gulf of Mexico, WLO Mobile 440 NMA Miami, NMO Honolulu, NMW West Port 441 CNP Casablanca, GCC Cullercoats, ZSC Presse 442 North Atlantic 444 CUB Funchal, DAN Norddeich, FUE Brest, Ship/Government working 445 EAO Palma Mallorca 447 CFH Halifax, GLV Anglesey 449 ONT 450 FFB Boulogne, SAG Goeteborg 451 XFU Vera Cruz 454 Ship Working 455 GRY Wooferton? 456 NOY Galveston 457 Aeronautical Mobile (sea outside USA) 458 GND Stonehaven 460 Central Pacific, KPH Bolinas, North Atlantic, WSC Tuckerton 461 PCH Scheveningen 464 GNI Niton, KOK Los Angeles, NOQ Mobile, OXP, South Atlantic, South Pacific 466 NMJ Ketchikan, NMN Portsmouth, NMR San Juan, NRV 468 Ship Working 470 NBA Balboa 472 EAR La Coruna, NMF Boston, NMQ Long Beach, North Atlantic, South Atlantic, UJO, WOE Lantana 474 DAM Norddeich, DAN Norddeich 476 CLA Havana, Central Pacific, EAP C de Palos, KFS San Fransisco, LGZ Farsunde, North Atlantic, UJY Iman, ZBM 478 Gulf of Mexico, WNU Slidell 480 Ship Working 482 Great Lakes, KJQ North Pacific, North Atlantic, North Pacific, South Pacific 484 GKZ Humber, Gulf of Mexico, Hawaii, KHK Kahuku, KLC Galveston, NPN Guam, URD Leningrad, VCS Halifax 486 FFU Le Conquet, NMY New York, Puerto Rico, WPR Puerto Rico 487 UKB, UNF 488 North Pacific, South Atlantic, WAX Miami 489 GMH 490 OBC Callao 490-510 Distress and Calling 500 CLA Havana, CLM Santiago, CNP Casablanca, CTH/33/38 Horta, CTV, CUB Funchal, CUL Lisbon, DAN Norddeich, DAO Kiel, DHS Ruegen, Distress and Calling, EAC/2 Cadiz, EAF/2/3 Vigo, EAO Palma Mallorca, EAP C de Palos, EAR La Coruna, EAS C Mayor, EJM Malin Head, FAP, FFB Boulogne, FFC Cayenne, FFM Marseille, FFU Le Conquet, GCC Cullercoats, GIL Infracombe, GKR Wick, GKZ Humber, GLD Lands End, GLV Anglesey, GND Stonehaven, GNF North Foreland, GNG, GNI Niton, GNK, GPK Portpatrick, GXH Thurso, GXP, IAR Rome, KLC Galveston, KOK Los Angeles, KPH Bolinas, LGA Alesund, LGZ Farsunde, NBA Balboa, NMA Miami, NMF Boston, NMG New Orleans, NMN Portsmouth, NMR San Juan, NMV Jacksonville, NMY New York, NOQ Mobile, NOW, NOY Galveston, NPG San Fransisco, OST/3/32/5/52/6/62 Ostende, OXB, PCH Scheveningen, SAG Goeteborg, SPE, UDB/URD Leningrad, VAI Vancouver, VAR St Johns, VCC, VCF, VCK, VCS Halifax, VFN, VPN Nassau, VRT Bermuda, WAX Miami, WCC Chatham, WLO Mobile, WMH Baltimore, WNU Slidell, WOE Lantana, WPA Port Arthur, WSC Tuckerton, WSL Amagansett, XFU Vera Cruz, ZBM, ZDK 510-535 Aeronautical Radionavigation, Maritime Mobile 512 Alternate Calling/Working 519 GIL Infracombe 522 RUVE/URB2/UDO2/RWWM Klaipeda 535-1605 Broadcasting 1605-1715 Aeronautical Radionavigation, Fixed, Land Mobile, Radiolocation 1606 Remote Pickup (BC) 1610 Police 1614 Industrial (Petroleum) 1618 Police 1622 Remote Pickup (BC) 1626 Police 1628 Industrial (Motion Picture), Industrial (Petroleum) 1630 Fire 1634 Police 1638 Radionavigation 1642 Police 1646 Remote Pickup (BC) 1650 Police 1652 Industrial (Motion Picture), Industrial (Petroleum) 1658 Police 1666 Police 1674 Police 1676 Industrial (Forest Products), Industrial (Petroleum) 1680 DHJ58 Flensberg 1682 Police 1690 Police 1696 FRS (F1) 1698 Police 1700 Industrial (Forest Products), Industrial (Petroleum) 1706 Police 1708 Radionavigation 1714 Police, UMV 1715-1800 Fixed, Land Mobile, Radiolocation 1720 DHS Ruegen 1722 Police 1730 Police 1750.5 Disaster (A1) 1751.5 Disaster (A1) 1752.5 Disaster (A1) 1753.5 Disaster (A1) 1754.5 Disaster (A1) 1755.5 Disaster (A1) 1756.5 Disaster (A1) 1757.5 Disaster (A1) 1761.5 Disaster scene 1768.5 Disaster (A3) 1775.5 Disaster (A3) 1782.5 Disaster (A3) 1789.5 Disaster (A3) 1792 Carribou Isl 1796.5 Disaster (A3) 1800-2000 Amateur, Radionavigation 1830 DHJ59 Wilhelmshaven 1869 Humber R 2000-2035 Maritime Mobile 2003 Intership (Great Lakes 2035-2065 Maritime Mobile (coast) 2036 North Atlantic, WCC Chatham 2037.5 Central Pacific, KFS San Fransisco 2039 South Atlantic 2040.5 North Atlantic 2042 Gulf of Mexico 2043.5 South Atlantic 2045 Central Pacific, KPH Bolinas 2046.5 North Atlantic 2048 Gulf of Mexico, WNU Slidell 2049.5 Gulf of Mexico, South Pacific 2051 North Atlantic, South Atlantic 2052.5 Alaska (calling), Gulf of Mexico, Hawaii, Puerto Rico 2054 North Atlantic 2055.5 Gulf of Mexico, South Pacific 2057 South Atlantic 2058.5 North Pacific 2060 North Atlantic 2061.5 Central Pacific, KFS San Fransisco 2063 Central Atlantic, Gulf of Mexico, North Pacific 2065 Limited coast 2065-2068.5 Maritime Mobile (telephony) 2068.5-2078.5 Maritime Mobile (ship) 2071 TTY/FAX Special Systems 2076 TTY/FAX Special Systems 2078.5-2089.5 Maritime Mobile (telephony) 2079 Limited coast 2082.5 Intership 2086 Louisville (simplex), Memphis (simplex), Pittsburgh (simplex), St Louis (simplex) 2089.5-2092.5 Maritime Mobile (ship calling) 2091 Calling (Region 2) 2092.5-2107 Maritime Mobile 2096.5 Limited coast 2107-2170 Fixed, Land Mobile, Maritime Mobile 2142 Intership (Pacific) 2170-2194 Distress and Calling 2182 Distress and Calling 2194-2300 Fixed, Land Mobile, Maritime Mobile 2203 Intership (Gulf of Mexico) 2212 Forest Conservation 2226 Forest Conservation 2236 Forest Conservation 2244 Forest Conservation 2292 Industrial (Motion Picture), Industrial (Petroleum), Industrial (Power), Industrial (Special Industrial) 2300-2495 Broadcasting (tropical), Fixed, Land Mobile, Maritime Mobile 2326 Police 2358 OUA23/32 Fredrikshaven 2366 Police 2371 Civil Air Patrol 2374 Civil Air Patrol 2382 Police 2390 Police 2398 Industrial (Forest Products), Industrial (Motion Picture), Industrial (Petroleum), Industrial (Power), Industrial (Special Industrial) 2400 Baltimore (simplex) 2406 Police 2411 LIF Floroe 2414 Police 2422 Police 2430 Police 2432.5 MTN Portsmouth 2442 Astoria, Miami, Police 2450 Boston, Galveston, Lake Allatoona-Lake Sidney Lanier, Norfolk-Quantico, Police, San Fransisco-Eureka, WOU Marshfield 2458 Police 2466 Los Angeles-San Diego, Police, Tampa, WFA Madeira Beach 2474 Police 2482 New Orleans, New York, Police, Seattle, WOX New York 2490 Miami, Police 2495-2505 Radio Astronomy, Standard Frequency 2500 FFH Paris, JJY Tokyo, MSF, OMA Vinohrady, RAT Moscow, RCH Tashkent, WWV Ft Collins, WWVH Kihei Maui, ZLFS Lower Hutt 2505-2850 Fixed, Land Mobile, Maritime Mobile 2506 Agana, Boston, Delcambre, San Fransisco-Eureka, St Thomas 2514 Great Lakes, Miami 2522 Los Angeles-San Diego, New York, Seattle, WOX New York 2530 Galveston, Kahuku, Palmyra Island, San Juan 2538 Corpus Christi, Norfolk-Quantico, WGB Virginia Beach 2550 Great Lakes, Miami, Tampa, WGB Virginia Beach 2558 New Orleans, New York, WAQ Ocean Gate, WEH Newcastle, Wilmington-Baltimore 2559 DER Bonn 2566 Boston, Charleston-Jacksonville, Coos Bay, Los Angeles- San Diego, WJO Sullivan I, WNJ Jacksonville 2572 Mobile, WOO Ocean Gate 2573 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 2576 PBC32/34/36/38/312/317/322 Goeree 2581 PBC32/34/36/38/312/317/322 Goeree 2582 Great Lakes, Hilo 2585 Ponce 2586 OYE Roenne 2589.5 NST/GXH/AOK/... 2590 New York, WOX New York 2598 Astoria-Portland, Los Angeles-San Diego, New Orleans, WAK New Orleans 2614 DAM Norddeich, DAN Norddeich 2626.5 CLA Havana 2638 Intership 2666 DHS Ruegen 2670 Coast Guard, NMK Cape May, NMN Portsmouth, NMV Jacksonville, NMX, USCG 2678 Georgetown, LBJ/2/3/4/5/6/7 Harstad 2680 4XZ Haifa 2686 Coast Guard 2718 DHJ58 Flensberg 2726 Special Emergency 2738 Intership, Lake Dallas-Lake Texhoma (simplex), Oban R 2740 SPE/SPB Szczecin 2770 EBA Madrid 2775 DAM Norddeich, DAO Kiel 2782 Lake Mead (simplex), Louisville (simplex), Memphis (simplex), Pittsburgh (simplex), St Louis (simplex) 2784 The Dalles-Umatilla (simplex) 2789 FUE Brest 2792 LBG Bergen 2795 EBD Cartegena 2803 IDR Rome 2804 Police Zone and Interzone 2808 CCS Santiago, Police Zone and Interzone 2809 PEB50 2810 PEB50 2812 Police Zone and Interzone 2830 Intership (Gulf of Mexico) 2850-3025 Aeronautical Mobile (R) 2851 Barnaul NCA-2, Flight Test, Irkutsk NCA-2, Khanty Mansiysk NCA-2, Kirensk NCA-2 2854 Brasilia SAT-2, Dakar SAT-2, Recife SAT-2 2860 Antanarivo VOLMET-AFI, Brazzaville VOLMET-AFI, Johannesburg VOLMET-AFI, Nairobi VOLMET-AFI 2861 Melanesia Common 2863 Auckland VOLMET-PAC, Hong Kong VOLMET-PAC, Honolulu VOLMET-PAC, Tokyo VOLMET-PAC 2866 Alaska 2869 Honolulu CEP-5, San Fransisco CEP-5, VOLMET-Russian 2875 Alaska C/SE 2878 Accra AFI-4, Johannesburg AFI-4, Kano AFI-4 2881 Brasilia VOLMET-SAM, Buenos Aires VOLMET-SAM, Lima VOLMET-SAM 2887 Caracas CAR-A, Merida CAR-A, Miami CAR-A, New York CAR- A, Panama City CAR-A, San Juan CAR-A 2899 Gander NAT-B/C, New York NAT-B/C, Reykjavik NAT-B/C, Santa Maria NAT-B/C, Shannon NAT-B/C 2911 Alaska Aleutian, Alaska C/SE 2932 Anchorage NP-3/4, Beijing NP-3, Cold Bay NP-3/4, Khabarovsk NP-3, Pyongyang NP-3/4, Seoul NP-3, Shanghai NP-3, Tokyo NP-3 2944 Alma Ata MID-3, Antofagasta SW-SAM, Asuncion SW-SAM, Bogota NW-SAM, Buenos Aires SW-SAM, Dushanbe MID-3, Easter Island SW-SAM, Kuybyshev MID-3, La Paz SW-SAM, Lima NW/SW-SAM, Montevideo SW-SAM, Moscow MID-3, Panama City NW-SAM, Punta Arenas SW-SAM, Quito NW-SAM, Santiago SW-SAM 2950 Merida VOLMET-CAR, Miami VOLMET-CAR, Port of Spain VOLMET-CAR 2956 Alaska Aleutian, Baghdad VOLMET-MID, Bahrain VOLMET-MID, Basrah VOLMET-MID, Beirut VOLMET-MID, Cairo VOLMET-MID, Istanbul VOLMET-MID, Tehran VOLMET-MID 2965 Bangkok VOLMET-SEA, Bombay VOLMET-SEA, Calcutta VOLMET- SEA, Karachi VOLMET-SEA, Singapore VOLMET-SEA, Sydney VOLMET-SEA 2971 Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Frobisher NAT-D, Gander NAT-D, Reykjavik NAT-D, Shannon NAT-D, Sondrestrom NAT-D 2992 Ankara MID-1, Baghdad MID-1, Bahrain MID-1, Cairo MID-1, Jeddah MID-1, Odessa MID-1, Tehran MID-1 2998 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Prague VOLMET-EUR, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tel Aviv VOLMET-EUR, Tokyo CWP-1/2, Wake Island CWP-2 3004 Chulmani NCA-3, Flight Test, Irkutsk NCA-3, Khabarovsk NCA-3, Kirensk NCA-3, Pyongyang NCA-3, Ulan Bator NCA-3 3007 Bangkok (Thai Airways), Havana (Cubana), Seoul (KAL), Sidney (Qantas) 3008 SW Pacific Islands 3010 Amsterdam (KLM), Athens (Olympic), Bogota (Avianca), Brussels (Sabena), Buenos Aires (Aerolineas Argentinas), Frankfurt (Lufthansa), Paris (Air France), Rio de Janeiro (Varig), Tel Aviv (El Al) 3013 San Fransisco/Honolulu LDOC 3016 Beijing EA-1, Canton EA-1, Gander NAT-A, Irkutsk EA-1, Kumming EA-1, Lanchau EA-1, Lisbon NAT-A, New York NAT- A, Pyongyang EA-1, San Juan NAT-A, Santa Maria NAT-A, Seoul EA-1, Shanghai EA-1, Shannon NAT-A, Ulan Bator EA- 1, Urumchi EA-1 3019 Khanty Mansiysk NCA-1, Moscow NCA-1 3025-3155 Aeronautical Mobile (OR) 3039 IDR Rome 3045 Air Force MARS 3046 Canadian Military 3060 Cartwheel, Cemetary, Eagle Farm, Gangbuster 3067 Krauton AFB, McClellan AFB 3070 HOT Tocumen 3078 Andrews AFB, Lajes AFB, Loring AFB 3081 Lajes AFB 3085 Cyprus Combine 3093.5 FDC Dijon 3095 RAF Rescue 3102 Luqa RAFB, Upavon RAFB 3116 VOLMET-Russian 3144 Andrews AFB 3155-3200 Fixed, Land Mobile, Maritime Mobile 3170 OLB5 Prague 3185 FDC Dijon, KWN90 Washington 3189 YND3 Managua 3195 SMA3/7/SAW 3200-3400 Broadcasting (tropical), Fixed, Land Mobile, Maritime Mobile 3201 Special Emergency 3205 Air Force MARS 3210 UBN/UDC/UBC Jdanov 3225 GKX Portishead, GYU3 Gibralter 3228 MTN Portsmouth 3230 OVK Aarhus 3241 NAS Traverse City 3258 0A 3268 NPG-FC/FM San Fransisco 3281 Flight Test, Lighter-than air craft 3287 CFH-NAWS Halifax (calling), CKN Vancouver 3299 Air Force MARS 3300 YWU 3310 KRH50 Washington 3315 Air Force MARS 3330 CHU Ottowa 3370 TEN2 Las Palmas (F1) 3400 DHJ49 Bonn 3400-3500 Aeronautical Mobile (R) 3407 VOLMET-Russian 3413 Honolulu CEP-5, San Fransisco CEP-5, Shannon VOLMET-EUR 3419 Algiers AFI-2, Kano AFI-2 3443 Flight Test 3449 Alaska Common 3452 Abidjan AFI-1, Brasilia SAT-1, Casablanca AFI-1, Dakar AFI-1, Dakar SAT-1, Lisbon AFI-1, Recife SAT-1 3460 SW Pacific Islands 3461 Khabaraovsk VOLMET-NCA, Kiev VOLMET-NCA, Moscow VOLMET- NCA, Novosibirsk VOLMET-NCA, Tashkent VOLMET-NCA, Vnukovo VOLMET-NCA 3467 Abadan MID-2, Addis Ababa AFI-3, Alma Ata MID-2, Auckland SP-6, Bahrain MID-2, Bombay AFI-3, Bombay MID- 2, Cairo AFI-3, Delhi MID-2, Dushanbe MID-2, Easter Island SP-7, Honolulu SP-7, Jeddah AFI-3, Karachi MID-2, Nadi SP-6/7, Nairobi AFI-3, Sydney SP-6, Tahiti SP-7, Tehran MID-2, Tripoli AFI-3, Urumchi MID-2 3470 Alaska C/SE, Bangkok SEA-1, Calcutta SEA-1, Canton SEA- 1, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA-3, Kumming SEA-1, Madras SEA-1, Manila SEA- 3, Perth SEA-3, Singapore SEA-1, Singapore SEA-3, Sydney SEA-3 3476 Bombay INO-1, Cocos Island INO-1, Johannesburg INO-1, Nairobi INO-1, Perth INO-1, Salisbury INO-1 3479 Asuncion SE-SAM, Belem NE/C-SAM, Bogota C-SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Caracas NE-SAM, La Paz SE- SAM, Leningrad EUR-A, Montevideo SE-SAM, Moscow EUR-A, Murmansk EUR-A, Odessa EUR-A 3485 Bangkok SEA-2, Gander VOLMET-NAT, Hong Kong SEA-2, Irkutsk EA-2, Manila SEA-2, New York VOLMET-NAT, Pyongyang EA-2, Singapore SEA-2, Ulan Bator EA-2 3494 New York/San Juan LDOC 3497 London (British Airways) 3500-4000 Amateur 3540 URD Leningrad 3620 CTD/7 Ponta Delgado, UJY Iman 3690 JWT Stavanger 3778 Humber R 3822.5 IMA24/25 Rome 3827.5 KWN90 Washington 3828 KWS78 Washington 3830 0A, RSL2 3832 GYN1/2 London 3833 FDY 3837.5 CTO22/23 Ponta Delgada 3910 MQY Chatham 3920 KRL 3929 MKL 3930 MQD Plymouth 3970 UU21/31/41/51 3996 Cemetary, Gangbuster 4000-4063 Fixed 4008.5 MARS (LSB) 4010 NPG San Fransisco 4013 MARS (LSB) 4017 MARS (LSB) 4020 MARS (LSB), OVG4/8/12 Fredrikshaven 4022.5 TEL5 Las Palmas (F1) 4025 MARS (LSB) 4035 MARS (A1), MARS (LSB) 4040 MARS (LSB) 4050 FDY 4055 JWT Stavanger 4063 WCM Pittsburgh 4063-4146.6 Maritime Mobile (ship telephony) 4067.8 WJG Memphis 4069.2 Louisville (simplex) 4088.4 Memphis (simplex) 4110.1 KOM Hawaii 4115.7 WFN Louisville 4125 Limited coast 4136.3 Simplex 4139.5 Simplex 4143.6 Limited coast 4146.6-4170 Maritime Mobile (special systems) 4170-4179.8 Maritime Mobile (ship SITOR) 4175 0A 4179.8-4188 Maritime Mobile (ship calling) 4187.6 SELCAL ship SITOR 4188-4219.4 Maritime Mobile (ship working) 4219.4-4349.4 Maritime Mobile (coast working) 4228 Central Pacific 4232 6WW Dakar, FUF Ft de France, FUG La Regine, FUM Papeete, HWN 4233 DHS Ruegen 4234 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, GXO Mauritius 4235 ICB Genova, VAI Vancouver 4236 UDH/UKB Riga 4238 4XO Haifa, BFM, MTN Portsmouth, North Atlantic, South Pacific, WCC Chatham 4239 SVA Athens 4241 4XZ Haifa, LF-/LG- Rogoland 4242 DAL Norddeich, ZSD Durban 4242.5 DHS Ruegen, PPR Rio de Janeiro 4244 IDR Rome, PPR Rio de Janeiro, Puerto Rico 4245 EBB Ferrol Caudill, UFN Novosibirsk, VTP3/4/5/6 Vizagotapam 4246 PPA25, ZRH/2/3/4/5/6 Simonstown 4247 Central Pacific, KPH Bolinas, ZRH/2/3/4/5/6 Simonstown 4249 CCM Maga 4250 PCH Scheveningen, South Atlantic, XFL, XFU Vera Cruz, ZLP2/4/5/6 Wellington 4252 TAH Istanbul 4253 OXZ Lyngby, UXN/UGE Arkhangelsk 4255 CCM Maga 4256 CCM Maga, Gulf of Mexico 4259 HEB Berne 4260 TBA2/3/4 Ankara, ZLO 4261 ZSC Presse 4262 SAB/SAG Goeteborg 4263 FFP2/3/7 Ft de France 4264 BCY Taipei 4265 CCS Santiago, DAM Norddeich 4266.5 DHS Ruegen 4267.9 GKG Portishead 4268 LPD Gral Pacheco, North Atlantic 4269 UFN Novosibirsk 4270 FDC Dijon 4271 CCV Valpariso, CFH Halifax, IDR Rome, OFJ Helsinki 4274 Central Pacific, GKB Portishead, GKH Portishead, Gulf of Mexico 4275 AJU (USA) 4277 AJU (USA), UJO, VRT Bermuda 4278 CTP Palhais 4279 DHJ59 Wilhelmshaven, GYR2/3/4/5 Malta, LPD Gral Pacheco 4280 GBY20/MHU2/3/4/5/6 Rugby/Portishead, IDQ/2/3/6 Rome, VHP Belconnen 4283 4XZ Haifa, CFH Halifax, KOK Los Angeles, South Pacific, UQK Riga 4286 GKA Portishead, VCS Halifax 4289 PWZ Rio de Janeiro 4292 CUL Lisbon, GZO Hong Kong, IAR Rome, South Atlantic 4294 WAX Miami 4295 6VA Dakar, FUF Ft de France, GZC/2/3/4/5 Mauritius, Hawaii, South Atlantic 4297 EBC Cadiz 4303 OXZ Lyngby 4305 6WW Dakar 4306 SPE/SPB Szczecin 4307 CKN Vancouver 4308 DAN Norddeich 4310 Gulf of Mexico, UPW2, WNU Slidell 4311 EBA Madrid 4312 6WW Dakar 4313 9VG Singapore, DHS Ruegen, UDB/URD Leningrad 4316 GKM/GKW/GKN/GKF Portishead, Great Lakes 4317 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, EBD Cartegena, ZSC/6/9/21/33 Cape Town 4319 GYR2/3/4/5 Malta, OXZ Lyngby 4320 IAR Rome 4321 GYA2/3/4/5 London 4322 Gulf of Mexico, WPA Port Arthur 4325 FUB Paris, LF-/LG- Rogoland, URD Leningrad 4328 FFL St Lys 4331 North Atlantic, WCC Chatham, WSC Tuckerton 4332.5 UNM 4334 GYS3/4/5/6 Singapore, PJC Curacao, UDH/UKB Riga 4336 GKK/GKA4 Portishead 4337 NMF Boston, SPA/SPH Gdynia 4338 FUB Paris 4340 CTP Palhais, XSQ Canton 4341 CCS Santiago 4343 North Atlantic, OSN26/28/212/44 Ostende, SVA Athens, WSL Amagansett, XXV/2/3/28/W31 Luanda 4344.5 GKS Portishead 4345 OSN26/28/212/44 Ostende 4346 CWA Cerrito, Central Atlantic, NMC San Fransisco, North Atlantic, WMH Baltimore 4347 5BA Nocosia 4349 EAD/2/EDZ4 Aranjuez, North Pacific 4349.4-4357.4 Maritime Mobile (coast SITOR) 4351 GKE 4352 NBA Balboa, YVG La Guaira, ZRQ/2/3/4/5 4353 ZRY/2/4/5/6/7 4354 NBA Balboa 4355 CLA Havana, XFM 4356.5 CFH-L Halifax 4357 SELCAL coast SITOR 4357.4 KMI Dixon 4357.4-4438 Maritime Mobile (coast telephony) 4358 KFS San Fransisco 4360 PBC32/34/36/38/312/317/322 Goeree 4363.8 WOM Ojus 4366.7 KGN Delcambre 4367.8 St Louis (simplex) 4369.8 WAK New Orleans 4371 Miami, San Fransisco-Eureka 4382.2 WBL Buffalo, WLC Rogers City, WMI Lorain 4383.8 Alaska (ACS), Alaska Common 4385.3 WOO Ocean Gate 4387 Pittsburgh (simplex) 4388.4 WOO Ocean Gate 4390.2 New York, San Fransisco-Eureka 4391.5 WOM Ojus 4392 CUB Funchal 4393.4 NMC San Fransisco (SSB) 4397.7 WLO Mobile (SSB) 4399.8 Mobile, San Fransisco-Eureka 4400.5 BC relay (VOA) 4403 Alaska, New York 4403.2 Miami 4403.9 KMI Dixon, WOO Ocean Gate 4407 KMI Dixon, WOM Ojus 4410.1 WBL Buffalo, WGK St Louis, WLC Rogers City, WMI Lorain 4412.6 Delcambre, Mobile 4413.2 WLO Mobile (SSB) 4415.8 Great Lakes, Kahuku 4419 New Orleans, Tampa 4419.4 Limited coast 4420 CMR/CBY Havana/Pascual 4422.2 Miami, New York 4422.5 WOO Ocean Gate 4425.4 Corpus Christi, Galveston 4425.6 WOM Ojus 4428.6 Alaska, Great Lakes, New York 4428.7 AMVER, USCG WX 4434.9 Simplex 4438-4650 Fixed, Mobile 4451 YWU 4455 FUB Paris 4460 GYN1/2 London 4462.5 GYN1/2 London 4464.5 Civil Air Patrol 4465 SXA Athens 4467.5 Civil Air Patrol 4478 VIX2/3/4/5/6/7 Sydney 4480 VIX2/3/4/5/6/7 Sydney 4495 Bernadine 4497.5 Cemetary, Eagle Farm, Gangbuster 4500 VNG Melbourne 4504.5 Civil Air Patrol 4505 YNA2 Managua (F1) 4507.5 Civil Air Patrol 4515 NKA Asmara 4516 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 4525 DIZ Nauen, Democrat, MKE Akrotiri, NPM Honolulu 4545 Cemetary, Gangbuster 4548.5 NBA Balboa 4560 Cemetary, Eagle Farm, Gangbuster 4563 JWT Stavanger 4565 BC relay (RFE) 4582 Civil Air Patrol 4585 Civil Air Patrol, NST/GXH/AOK/... 4587 KRH50 Washington 4590 FUJ/4/6/8/9 Noumea 4596.5 Air Force MARS, Civil Air Patrol 4599.5 Civil Air Patrol 4602.5 Civil Air Patrol 4613 Cemetary, Gangbuster 4615 Cemetary, Gangbuster, IDR Rome 4623 NST/GXH/AOK/... 4626 KRH50 Washington 4627 Civil Air Patrol 4630 Civil Air Patrol 4637.5 Industrial (Motion Picture), Industrial (Petroleum), Industrial (Power), Industrial (Special Industrial) 4650-4700 Aeronautical Mobile (R) 4654 Berne (Swissair) 4663 Khabaraovsk VOLMET-NCA, Kiev VOLMET-NCA, Moscow VOLMET- NCA, Novosibirsk VOLMET-NCA, Tashkent VOLMET-NCA, Vnukovo VOLMET-NCA 4666 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP- 1/2, Wake Island CWP-2 4669 Alma Ata MID-3, Antofagasta SW-SAM, Asuncion SW-SAM, Bogota NW-SAM, Buenos Aires SW-SAM, Dushanbe MID-3, Easter Island SW-SAM, Kuybyshev MID-3, La Paz SW-SAM, Lima NW/SW-SAM, Montevideo SW-SAM, Moscow MID-3, Panama City NW-SAM, Punta Arenas SW-SAM, Quito NW-SAM, Santiago SW-SAM 4675 Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Frobisher NAT-D, Gander NAT-D, Reykjavik NAT-D, Shannon NAT-D, Sondrestrom NAT-D 4678 Barnaul NCA-2, Irkutsk NCA-2, Khanty Mansiysk NCA-2, Kirensk NCA-2 4687 Amsterdam (KLM), Bangkok (Thai Airways), Rome (Alitalia) 4700-4750 Aeronautical Mobile (OR) 4721 FDY 4722 Westraden R 4725 Migraine, Outway, Retail 4730 Cyprus Combine 4733 IEA20 Rome 4742 Cyprus Combine, Gibralter RAFB, Luqa RAFB, Scott AFB, Upavon RAFB 4744 Outway, San Pablo AFB 4745 0A 4746 Canadian Military, Elmendorf AFB, Lajes AFB, McClellan AFB, McDill AFB 4750 FDY 4750-4995 Broadcasting (tropical), Fixed 4880 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 4955 FDC Dijon, NPN Guam 4985 WKA23 New Orleans (F1) 4995-5005 Standard Frequency 4996 Novosibirsk 5000 BPV Shanghai, IAM Rome, IBF Turin, JJY Tokyo, LOL Buenos Aires, MSF, RAT Moscow, RWM Moscow, WWV Ft Collins, WWVH Kihei Maui, ZUO Johannesburg 5004 RID Irkutsk 5005-5060 Broadcasting (tropical), Fixed 5015 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 5025 FDY 5052 NST/GXH/AOK/... 5060-5450 Fixed 5075 UU21/31/41/51 5085 Telco New York (AT&T) 5097 CFH-NAWS Halifax 5110 KKN44 Washington, Telco New York (AT&T) 5135 Police Zone and Interzone 5140 Police Zone and Interzone 5167 NST/GXH/AOK/... 5244 HMF15/HMN56/HMF32/HML36 Pyongyang 5320 KWN90 Washington 5390 BC relay (RFE), DHJ59 Wilhelmshaven 5399 Telco Tel Aviv 5415 LVO Corrientes 5426 KRH50 Washington 5430 BPV Shanghai, CTO22/23 Ponta Delgada 5448.5 NBA Balboa 5450-5680 Aeronautical Mobile (R) 5451 Flight Test 5469 Flight Test 5472 Alaska Common 5484 Alaska C/SE 5490 Alaska Common 5493 Accra AFI-4, Johannesburg AFI-4, Kano AFI-4 5496 Alaska Aleutian 5498 Melanesia Common 5499 Antanarivo VOLMET-AFI, Brazzaville VOLMET-AFI, Johannesburg VOLMET-AFI, Nairobi VOLMET-AFI 5526 Asuncion SE-SAM, Belem NE/C-SAM, Bogota C-SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Caracas NE-SAM, La Paz SE- SAM, Montevideo SE-SAM 5529 Brussels (Sabena), Houston (Universal Aviation), Houston LDOC, Madrid/Las Palmas (Iberia), Moscow (Aeroflot) 5532 Amsterdam (KLM), Johannesburg (SAA), Rome (Alitalia) 5535 London (British Airways) 5538 Bahrain (Gulf Air), Beirut (MEA) 5541 Rio de Janeiro (Varig), Stockholm (SAS) 5544 Havana (Cubana), Jeddah (Saudia) 5547 Honolulu CEP-5, San Fransisco CEP-5 5550 Caracas CAR-A, Merida CAR-A, Miami CAR-A, New York CAR- A, Panama City CAR-A, San Juan CAR-A 5565 Brasilia SAT-2, Dakar SAT-2, Recife SAT-2 5568 Central America Common 5571 Flight Test 5574 Honolulu CEP-5, San Fransisco CEP-5 5580 Merida VOLMET-CAR, Miami VOLMET-CAR, Port of Spain VOLMET-CAR 5589 Baghdad VOLMET-MID, Bahrain VOLMET-MID, Basrah VOLMET- MID, Beirut VOLMET-MID, Cairo VOLMET-MID, Istanbul VOLMET-MID, Tehran VOLMET-MID 5598 Gander NAT-A, Lisbon NAT-A, New York NAT-A, San Juan NAT-A, Santa Maria NAT-A, Shannon NAT-A 5601 Brasilia VOLMET-SAM, Buenos Aires VOLMET-SAM, Lima VOLMET-SAM 5616 Gander NAT-B/C, New York NAT-B/C, Reykjavik NAT-B/C, Santa Maria NAT-B/C, Shannon NAT-B/C 5628 Anchorage NP-3/4, Beijing NP-3, Cold Bay NP-3/4, Khabarovsk NP-3, Pyongyang NP-3/4, Seoul NP-3, Shanghai NP-3, Tokyo NP-3 5631 Alaska 5634 Bombay INO-1, Cocos Island INO-1, Johannesburg INO-1, Nairobi INO-1, Perth INO-1, Salisbury INO-1 5640 Shannon VOLMET-EUR 5643 Auckland SP-6, Easter Island SP-7, Honolulu SP-7, Nadi SP-6/7, Sydney SP-6, Tahiti SP-7 5646 Khanty Mansiysk NCA-1, Moscow NCA-1 5649 Bangkok SEA-2, Hong Kong SEA-2, Irkutsk EA-2, Manila SEA-2, Pyongyang EA-2, Singapore SEA-2, Ulan Bator EA-2 5652 Algiers AFI-2, Kano AFI-2 5655 Bangkok SEA-2, Hong Kong SEA-2, Irkutsk EA-2, Manila SEA-2, Pyongyang EA-2, Singapore SEA-2, Ulan Bator EA-2 5658 Abadan MID-2, Addis Ababa AFI-3, Alma Ata MID-2, Bahrain MID-2, Bombay AFI-3, Bombay MID-2, Cairo AFI-3, Delhi MID-2, Dushanbe MID-2, Jeddah AFI-3, Karachi MID-2, Nairobi AFI-3, Tehran MID-2, Tripoli AFI-3, Urumchi MID- 2 5661 Leningrad EUR-A, Moscow EUR-A, Murmansk EUR-A, Odessa EUR-A 5664 Chulmani NCA-3, Irkutsk NCA-3, Khabarovsk NCA-3, Kirensk NCA-3, Pyongyang NCA-3, Ulan Bator NCA-3 5666 Melanesia Common 5667 Ankara MID-1, Baghdad MID-1, Bahrain MID-1, Cairo MID-1, Jeddah MID-1, Odessa MID-1, Tehran MID-1 5676 Khabaraovsk VOLMET-NCA, Kiev VOLMET-NCA, Moscow VOLMET- NCA, Novosibirsk VOLMET-NCA, Tashkent VOLMET-NCA, Vnukovo VOLMET-NCA 5680-5730 Aeronautical Mobile (OR) 5688 MQD Plymouth, McDill AFB 5690 Lahr Military 5692 NAS Brooklyn 5695.5 RAF Rescue 5696 NAS Elizabeth City, NAS San Diego, NAS Traverse City 5700 Air Force One, Andrews AFB, Looking Glass, McClellan AFB, Migraine, Retail 5703 Krauton AFB, Silver Dollar 5705 FDY 5710 MEM, McClellan AFB 5714 MRB Malta 5722 Missionary, Overwork 5730-5950 Fixed 5738 ONQ27 (A!) 5745 AEZ7 Asmara, BC relay (VOA) 5750 SOF 5765 Telco St Georges Bermuda (C&W) 5775 Telco Abidjan 5785 NAU Puerto Rico 5790 BC relay (RFE) 5792 GFT26/27/29 Bracknell 5811 JWT Stavanger, LBJ/2/3/4/5/6/7 Harstad 5828 Telco Dakar 5830 PEB50 5833 NAU Puerto Rico 5845 BC relay (RFE) 5870 NAM Norfolk, NSS Annapolis 5872 BC relay (BBC) 5876 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 5905 BC relay (VOA) 5910 Andrews AFB 5915 ZLZ22/20/ZLX22/31/37 5916.5 NST/GXH/AOK/... 5920 SXA Athens 5950-6200 Broadcasting 6147.5 St Louis (simplex) 6200-6224.6 Maritime Mobile (ship telephony) 6200.8 Memphis (simplex) 6209.3 WJG Memphis 6210.4 Simplex 6212.4 WGK St Louis 6213.5 Simplex 6218.6 Limited coast 6221.6 Limited coast 6224.6-6256 Maritime Mobile (special systems) 6256-6269.8 Maritime Mobile (ship SITOR) 6269.8-6282 Maritime Mobile (ship calling) 6272.5 SAB/SAG Goeteborg 6281.4 SELCAL ship SITOR 6282-6325.4 Maritime Mobile (ship working) 6325.4-6493.9 Maritime Mobile (coast working) 6333.5 North Atlantic 6337 North Atlantic 6344 North Atlantic 6345.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead 6348 Central Pacific, FUE Brest, FUF Ft de France, FUM Papeete, HWN, KFS/B San Fransisco 6350 UJY Iman 6351.5 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, GZC/2/3/4/5 Mauritius, North Atlantic, VAI Vancouver 6354 PZN4 Paramaribo, UDB/URD Leningrad, URD Leningrad 6355 OFJ Helsinki, South Pacific 6361 FUB Paris 6362 6XS Diego Saurez, GYA2/3/4/5 London 6365.5 Central Pacific, FUB Paris, IRM Rome, KFS/A San Fransisco, USZ Dikson 6369 GKA Portishead, GKM/GKW/GKN/GKF Portishead, Gulf of Mexico, PPA25 6371 VPS25 CD Aguilar 6374 TBO2/3 6376 IQH Naples, North Atlantic, WCC Chatham 6377.5 EBA Madrid 6379.5 8PO Barbados, GKB Portishead, GKV Portishead, ZSC/6/9/21/33 Cape Town 6382 TBA2/3/4 Ankara 6383 6VA Dakar, EAD/2/EDZ4 Aranjuez, NMC San Fransisco 6385 CKN Vancouver 6386 UJY Iman 6386.5 AQP2/3/4 Karachi, CFH Halifax, GYX Malta, HKC Buenaventura 6389.6 WAX Miami 6389.7 South Atlantic 6390 CTP Palhais, IDQ/2/3/6 Rome 6393.5 CUB Funchal, CUG Ponta Delgada, CUL Lisbon 6395 CFH-L Halifax, TBA2/3/4 Ankara 6396 CCS Santiago, EBD Cartegena 6397 OSN46/412/416 6399 EBD Cartegena 6400.5 EAD/2/EDZ4 Aranjuez, UMV 6401.5 EAD/2/EDZ4 Aranjuez 6404 PCH Scheveningen 6407 IAR Rome 6407.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead, Hawaii, South Atlantic, UXN/UGE Arkhangelsk 6410 IAR Rome, UDH/UKB Riga 6411 9LL Freetown, KLB Seattle, North Pacific, OST/3/32/5/52/6/62 Ostende, SVA Athens, South Atlantic, WOE Lantana 6414.5 North Atlantic 6416 URL 6418 IAR12/67 Rome, IQX Trieste, North Atlantic, OSN26/28/212/44 Ostende 6419 CCS Santiago 6420 OSN26/28/212/44 Ostende, UJQ, VTP3/4/5/6 Vizagotapam 6421.5 FFL St Lys 6428.5 NPG San Fransisco, NPM Honolulu, VHP Belconnen, VIX2/3/4/5/6/7 Sydney 6432 LF-/LG- Rogoland 6435 CLQ Havana 6435.5 DAN Norddeich, GBY20/MHU2/3/4/5/6 Rugby/Portishead, Gulf of Mexico, PWZ Rio de Janeiro, WPA Port Arthur 6439 OXZ Lyngby, UFN Novosibirsk 6441 DZG Manila 6445 CKN Vancouver 6446 Gulf of Mexico, OXZ Lyngby, WLO Mobile 6448 XXU23/26/33 Mindelo Cape Verde 6449.5 CFH-L Halifax, IDR Rome 6451.8 Pittsburgh (simplex) 6455 Louisville (simplex) 6456.5 DAL Norddeich 6460 SPE/SPB Szczecin 6463.5 KOK Los Angeles, South Pacific 6465 VIS26/5/6/42 Sydney 6467 JCS/JCU Chosi, LF-/LG- Rogoland, ZSC/6/9/21/33 Cape Town 6470 UXN/UGE Arkhangelsk 6470.5 GYI London 6472.5 GKY2/3/4/5 Portishead 6474 Great Lakes 6475.5 DAM Norddeich 6477.5 CFH-NAWS Halifax, CLS La Fe Prince, Central Pacific, KPH Bolinas 6478 CLQ Havana, ZSC Presse 6478.5 EBK Las Palmas, SVA Athens 6481 CCS Santiago, GYS3/4/5/6 Singapore 6483 PWZ Rio de Janeiro, UFB Odessa 6484.5 Central Atlantic 6485.5 JCS/JCU Chosi 6487 NST/GXH/AOK/..., XXV/2/3/28/W31 Luanda 6488 Central Pacific, KPH Bolinas, VRT Bermuda 6491.5 PJC Curacao, VCS Halifax 6493.9-6506.4 Maritime Mobile (coast SITOR) 6494 ZRH/2/3/4/5/6 Simonstown 6495 GYR2/3/4/5 Malta, Gulf of Mexico, WNU Slidell 6496.5 OST/3/32/5/52/6/62 Ostende 6498.5 CFH-NAWS Halifax, EAF/2/3 Vigo, EAT2 Tenerife 6500.5 CLA Havana 6502 CRX21/23/28/26 Laurenco Marques, GZX2/3/4/5/6 Mauritius, WSC Tuckerton 6504 OSN26/28/212/44 Ostende, OSN46/412/416 6505 Cemetary, Eagle Farm, Gangbuster 6505.5 CLA Havana, EAC/2 Cadiz, ZRQ/2/3/4/5 6506 SELCAL coast SITOR 6506.4 AMVER, USCG WX 6506.4-6525 Maritime Mobile (coast telephony) 6509 9VG Singapore, XXU23/26/33 Mindelo Cape Verde 6510 GKK/GKA4 Portishead, UFH 6512.5 SVA Athens, TFA Reykjavik 6515.7 WCM Pittsburgh 6516 KFS San Fransisco 6518.6 Simplex 6518.8 WFN Louisville 6519.5 WMH Baltimore 6521.8 NMC San Fransisco (SSB) 6521.9 Limited coast 6522.5 SXA Athens, SXV/8 6525-6685 Aeronautical Mobile (R) 6526 New York (test), Red Cross AX 6532 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP- 1/2, Wake Island CWP-2 6535 Abidjan AFI-1, Brasilia SAT-1, Casablanca AFI-1, Dakar AFI-1, Dakar SAT-1, Lisbon AFI-1, PWZ Rio de Janeiro, Recife SAT-1 6536 NPM Honolulu 6545 IDC Cagliari 6550 Flight Test 6556 Bangkok SEA-1, Calcutta SEA-1, Canton SEA-1, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA- 3, Kumming SEA-1, Madras SEA-1, Manila SEA-3, Perth SEA- 3, Singapore SEA-1, Singapore SEA-3, Sydney SEA-3 6562 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP- 1/2, Wake Island CWP-2 6571 Beijing EA-1, Canton EA-1, Irkutsk EA-1, Kumming EA-1, Lanchau EA-1, Pyongyang EA-1, Seoul EA-1, Shanghai EA-1, Ulan Bator EA-1, Urumchi EA-1 6575 Algiers VOLMET-AFI, Dakar VOLMET-AFI, Kano VOLMET-AFI, Khartoum VOLMET-AFI, SW Pacific Islands 6577 Caracas CAR-A, Merida CAR-A, Miami CAR-A, New York CAR- A, Panama City CAR-A, San Juan CAR-A 6580 Alaska Aleutian, Alaska C/SE, Prague VOLMET-EUR, Tel Aviv VOLMET-EUR 6586 Wellbeing 6592 Barnaul NCA-2, Irkutsk NCA-2, Khanty Mansiysk NCA-2, Kirensk NCA-2 6598 Leningrad EUR-A, Moscow EUR-A, Murmansk EUR-A, Odessa EUR-A 6604 Alaska C/SE, Gander VOLMET-NAT, New York VOLMET-NAT 6617 VOLMET-Russian 6631 Alma Ata MID-3, Dushanbe MID-3, Kuybyshev MID-3, Moscow MID-3 6637 Athens (Olympic), Frankfurt (Lufthansa), Paris (Air France), Sidney (Qantas), Tel Aviv (El Al), Tokyo (JAL) 6638 VOLMET-Russian 6640 New York/San Juan LDOC, San Fransisco/Honolulu LDOC 6643 Berne (Swissair), Buenos Aires (Aerolineas Argentinas) 6649 Antofagasta SW-SAM, Asuncion SW-SAM, Bogota NW-SAM, Buenos Aires SW-SAM, Easter Island SW-SAM, La Paz SW- SAM, Lima NW/SW-SAM, Montevideo SW-SAM, Panama City NW- SAM, Punta Arenas SW-SAM, Quito NW-SAM, Santiago SW-SAM 6676 Bangkok VOLMET-SEA, Bombay VOLMET-SEA, Calcutta VOLMET- SEA, Karachi VOLMET-SEA, Singapore VOLMET-SEA, Sydney VOLMET-SEA 6679 Auckland VOLMET-PAC, Hong Kong VOLMET-PAC, Honolulu VOLMET-PAC, Tokyo VOLMET-PAC 6685-6765 Aeronautical Mobile (OR) 6686 Crest, Oasis 6690 MSF, Upavon RAFB 6692 Cheese Bobcat (JPN combine), Houston 6693 VOLMET-Russian 6697 Ivanhoe, MQY Chatham (USB), Missionary 6700.5 Rasberry (Bermuda, Miramar, Jacksonville, Cecil) 6705 Canadian Military 6706 XXU23/26/33 Mindelo Cape Verde 6708 Cyprus Combine 6715 Andrews AFB, Loring AFB 6716 Woodbridge Rescue 6720 Belmont, Caveman, Derail, Fanfare, Fastcharger, Hexagon, Ivanhoe, Overlord, Overwork, YVG La Guaira 6723 Rasberry (Bermuda, Miramar, Jacksonville, Cecil) 6725 Rasberry (Bermuda, Miramar, Jacksonville, Cecil) 6727 Charleston, Gladhand, McClellan AFB, Scott AFB 6728 MQY Chatham 6730 VOLMET-Russian 6731 Krauton AFB, San Pablo AFB, Seabell 6734 Cheese Bobcat (JPN combine) 6737 LBJ/2/3/4/5/6/7 Harstad 6738 Elmendorf AFB, Lajes AFB, McClellan AFB 6742 Caveman, Coral Hills (Keflavik?) 6745 Miharik Combine (Bahrein, Ceylon, Kuwait) 6750 Krauton AFB, Lajes AFB, McDill AFB 6753 Canadian Military, Fireside, Looking Glass, Rasputin 6756 Andrews AFB, Liberty, NASA Houston (Apollo 14) 6757 MKL 6761 Bread, Democrat, Migraine, Outway, Retail 6765-7000 Fixed 6765.4 USCG WX 6785 WKA36 6789 KRH50 Washington 6817 MEM 6818 CWE94/CWO4/9CWD40 Cerrito 6820 OLW2 Prague 6825 Telco Teheran 6830 PGL 6839 CBY Pascua 6851 CBY Pascua 6854 CMR/CBY Havana/Pascual 6855 Telco Georgetown Guyana (C&W) 6862 GYN1/2 London 6863 Telco St Georges Bermuda (C&W) 6866 Cheese Bobcat (JPN combine) 6867.5 IDR Rome 6874 BC relay (VOA) 6890 BC relay (RFE) 6895 PBC32/34/36/38/312/317/322 Goeree 6896 AFA Camp Springs (Aerospace Comm Co) (SSB) 6913 DHJ59 Wilhelmshaven 6925 KKN50 Washington 6945 HBX76/HBO88 Geneve 6953 Silver Dollar 6955 0A 6960 IDR Rome 6975 BC relay (DW) 6982 Range1/2 6995 BC relay (RFE) 6997 McClellan AFB 7000-7100 Amateur 7094.5 FDY 7100-7300 Amateur, Broadcasting (Region 1 only) 7300-8195 Fixed 7316 Air Force MARS 7329 Air Force MARS 7335 CHU Ottowa 7350 Telco Mexico City 7351 CTH/33/38 Horta 7353 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 7404 Telco Warszawa 7428 FTH42/FTA91 Paris/Lyon 7441 NCI Naples 7480 Police Zone and Interzone 7485 Telco New York (AT&T) 7494 DGE/DFG Elmshorn/Bonames 7497.5 EAY22/49 Basile 7500 VNG Melbourne 7504 NST/GXH/AOK/... 7519 FDY 7540 Telco Moscow 7558.5 Telco New York (AT&T) 7565 Telco New York (AT&T) 7566 Telco New York (AT&T) 7570 DRU5, KRH50 Washington 7575 Telco Ft Lauderdale (AT&T) 7580 Telco Monrovia 7600 RMQ4, YNA2 Managua (F1), ZLZ22/20/ZLX22/31/37 7610 IMA24/25 Rome 7634.5 Telco Paris 7646 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 7651 BC relay (VOA) 7655 FIT75 Paris 7660 UU21/31/41/51 7661 9RS77 Kisangani 7662 FDY 7705 NST/GXH/AOK/... 7726 FDY 7727 KRH50 Washington 7741 Telco Amsterdam 7766.5 BC relay (VOA) 7773 BC relay (VOA) 7792 GXO Mauritius 7805 Police Zone and Interzone 7828 FDY 7830 KKN44 Washington 7935 Police Zone and Interzone 7936.5 Telco Havana 7955 Andrews AFB 7960 OMZ 7978 Telco New York (AT&T) 7987 AEZ Asmara (LSB) 7987.5 JWT Stavanger, LBJ/2/3/4/5/6/7 Harstad 7991 BC relay (BBC) 7997 FDY 8000 FDY, FUB Paris 8060 VKS3/5/49/74/93/VKH70 8061.5 CCS Santiago 8068 BC relay (DW) 8075 Telco Paris 8080 RCI/RCC 8090 NAM Norfolk, NSS Annapolis 8115 WHZ Balboa 8125 BC relay (Tirana) 8148 OVG4/8/12 Fredrikshaven 8150 NPN Guam 8152 EAY22/49 Basile 8177.5 SDO/SAB/SAG Varberg/Goeteborg 8195-8297.3 Maritime Mobile (ship telephony) 8201.2 WJG Memphis 8207.6 Pittsburgh (simplex) 8210.8 St Louis (simplex) 8213.6 WCM Pittsburgh 8246 Memphis (simplex) 8249.2 Great Lakes 8281.2 Simplex 8284.2 Simplex 8291.1 Limited coast 8294.2 Limited coast 8297.3-8300 Maritime Mobile (ship SITOR) 8300-8343.5 Maritime Mobile (special systems) 8343.5-8357.8 Maritime Mobile (ship SITOR) 8357.8-8359.8 Maritime Mobile (ship working) 8359.8-8376 Maritime Mobile (ship calling) 8364 Lifeboats 8375.2 SELCAL ship SITOR 8376-8435.4 Maritime Mobile (ship working) 8435.4-8704.4 Maritime Mobile (coast working) 8445 Central Pacific, Gulf of Mexico 8453 Gulf of Mexico, South Atlantic 8457 Puerto Rico 8459 LZW Varna 8461 CUB Funchal, ZRY/2/4/5/6/7 8462 CUB Funchal, SXV/8 8463 CKN Vancouver 8464 OSN26/28/212/44 Ostende 8465 5BA Nocosia, NMN Portsmouth, NRV 8466 EAF/2/3 Vigo, NMF Boston, NMR San Juan, UJY Iman 8469 CUG Ponta Delgada, CUL Lisbon, EAF/2/3 Vigo, GKR Wick 8470 NMA Miami, ZRQ/2/3/4/5 8471 NMR San Juan, UAX, UXN/UGE Arkhangelsk 8473 Gulf of Mexico 8474 EAT2 Tenerife 8476 PPE2 Rio de Janeiro, UAH/UNS Tallin, VTP3/4/5/6 Vizagotapam 8477 CLQ Havana, UAH/UNS Tallin 8478 OST/3/32/5/52/6/62 Ostende, TIM Limon, VHP Belconnen, VIX2/3/4/5/6/7 Sydney 8479 HZY Dhahran 8480 CLQ Havana 8481 VIS26/5/6/42 Sydney 8482 SPA/SPH Gdynia 8483 DAN Norddeich 8485 UBN/UDC/UBC Jdanov 8486 IDQ/2/3/6 Rome, South Atlantic, WOE Lantana 8490 AQP2/3/4 Karachi, CUL Lisbon, XSQ Canton 8492 DHJ59 Wilhelmshaven, PPA25 8494 GYA2/3/4/5 London 8498 SAB/SAG Goeteborg 8501 GBY20/MHU2/3/4/5/6 Rugby/Portishead 8502 Central Atlantic, North Atlantic, XSG Shanghai, ZSL/2/3/4/5/6/7 Simonstown 8503.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead 8504 ZLP Awarua 8506 NPN Guam 8510 FFL St Lys, FFS6/8 St Lys 8512 DAL Norddeich, VHP Belconnen 8513 XSQ Canton 8514 North Atlantic, PBC32/34/36/38/312/317/322 Goeree, WSL Amagansett 8515 UMV 8516 CLS La Fe Prince, GKC Portishead 8518 4XZ Haifa 8521 VIS26/5/6/42 Sydney 8522 FFL St Lys, FFS6/8 St Lys 8525 South Atlantic, WAX Miami 8526 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, FFP2/3/7 Ft de France 8528 LF-/LG- Rogoland 8530 IAR Rome, NSS Annapolis, SVA Athens, UFR2, UXN/UGE Arkhangelsk 8531 XVG4 Vietnam 8534 GZO Hong Kong, Great Lakes 8535 UFW, UTA 8537 SVA Athens 8541 RUVE/URB2/UDO2/RWWM Klaipeda 8542 Hawaii, KHK Kahuku, PKI Djakarta 8545 UQK Riga 8546 GKA Portishead, KLB Seattle 8550 6XS Diego Saurez, FFS6/8 St Lys, Gulf of Mexico, PWZ Rio de Janeiro, WPA Port Arthur 8551 AJU (USA) 8552 CTP Palhais, GKK/GKA4 Portishead 8554 FUF Ft de France 8556 UJY Iman 8557 SPE/SPB Szczecin 8558 CCV Valpariso, Central Pacific, GKB Portishead, GKL Portishead, IDR Rome, KFS/A San Fransisco 8562 PCH Scheveningen 8564 LZL Bourgas 8565 CQW2 Luanda 8566 CFH Halifax, GYU3 Gibralter, UQK Riga 8568 DZR Manila 8570 CFH-L Halifax, Gulf of Mexico, IDR Rome, WAX Miami, WNU Slidell 8571 UOP 8573 CLA Havana 8574 HKC Buenaventura, LF-/LG- Rogoland, NMC San Fransisco 8575 UDB/URD Leningrad, URD Leningrad 8576 IDR Rome 8577 ZSD Durban 8578 NGR Kato Soli, SUH Alexandria 8580 UDK2 Murmansk 8581 XSW Kaohsiung 8581.6 GKK/GKA4 Portishead, GKM/GKW/GKN/GKF Portishead 8582 North Pacific, XSW Kaohsiung 8583 ZRH/2/3/4/5/6 Simonstown, ZRQ/2/3/4/5 8586 North Atlantic, UJO, WCC Chatham 8588 DZG Manila 8590 KOK Los Angeles, South Pacific 8591 GKY2/3/4/5 Portishead 8594 GYR2/3/4/5 Malta 8597 VIP4/3 8598 OXZ Lyngby, ZLO 8602 HEB Berne 8604 NBA Balboa, ZRH/2/3/4/5/6 Simonstown 8606 JOS Nagasaki, South Pacific 8608 LZL Bourgas, LZW Varna 8610 6WW Dakar, CCM Maga, North Atlantic, UXN/UGE Arkhangelsk, WSC Tuckerton 8614 CKN Vancouver, NBA Balboa, VWB2/3/4/5/6/7/8/0 Bombay 8615 UDH/UKB Riga 8618 Central Pacific, EAD/2/EDZ4 Aranjuez, KPH Bolinas 8620 UBN/UDC/UBC Jdanov 8622 EAD/2/EDZ4 Aranjuez, PCH Scheveningen 8626 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, GXO Mauritius 8630 6WW Dakar, GYS3/4/5/6 Singapore, North Atlantic, WCC Chatham 8634 PPR Rio de Janeiro, VTG3/4/5/6/7 Bombay 8638.5 DAM Norddeich 8641 GYA2/3/4/5 London 8642 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, Central Pacific, EAD/2/EDZ4 Aranjuez, KPH Bolinas, South Pacific, VTP3/4/5/6 Vizagotapam, XXV/2/3/28/W31 Luanda 8644 VTP3/4/5/6 Vizagotapam 8646 GZW Gibralter, LPD Gral Pacheco, SAB/SAG Goeteborg 8647 JDC Chosi Siishib 8648 DHJ59 Wilhelmshaven 8650 ICB Genova, NMO Honolulu 8652 CTP Palhais, OST/3/32/5/52/6/62 Ostende 8652.5 PZN4 Paramaribo 8654 JCS/JCU Chosi, PCH Scheveningen 8656 IQH Naples 8657 UJQ 8658 North Atlantic, North Pacific, WSL Amagansett 8659 SXA Athens 8660 DHS Ruegen, UDH/UKB Riga 8662 CFH-L Halifax, TAH Istanbul 8664 IQH Naples 8666 6WW Dakar, Gulf of Mexico, HKB Barranquilla, KLC Galveston, SPA/SPH Gdynia 8670 IAR Rome 8673 DAF Norddeich 8674 GYA2/3/4/5 London 8675 FFP2/3/7 Ft de France 8678 LF-/LG- Rogoland, ZLP2/4/5/6 Wellington 8679 IQX Trieste 8682 EAD/2/EDZ4 Aranjuez, NMC San Fransisco, TXZ8 Djibouti 8684 IRM Rome 8685 UFB Odessa 8686 CNP Casablanca, North Atlantic, South Atlantic, WMH Baltimore, ZSC/6/9/21/33 Cape Town 8687 SVA Athens, URD Leningrad 8688 9VG Singapore 8690 3DP3 Fiji, 6VA Dakar, CLQ Havana, TFA Reykjavik, UMV 8692 SVA Athens 8694 4XO Haifa, PJC Curacao 8698 FJP8 Noumea, UDK2 Murmansk 8700 YUZ Rijeka 8702 CLA Havana, ODR Beirut, OSN46/412/416 8703 UXN/UGE Arkhangelsk 8704 CKN Vancouver, SVA Athens, YVG La Guaira 8704.4-8718.9 Maritime Mobile (coast SITOR) 8706 4XZ Haifa 8709 UAT Moskow, VCS Halifax 8710 9YL Trinidad and Tobago, GNV Bahrein, NMG New Orleans, NMR San Juan, VPN Nassau 8712 DHS Ruegen, YUZ Rijeka 8713.5 KFS/B San Fransisco 8715 UQK Riga 8716 EBA Madrid 8718 8PO Barbados, 9VG Singapore, VRT Bermuda, ZSC Presse 8718.5 SELCAL coast SITOR 8718.9-8815 Maritime Mobile (coast telephony) 8720 UBF2 Aian Khabarov 8721 PPE2 Rio de Janeiro 8722 6WW Dakar, FUG La Regine, UFN Novosibirsk, UJY Iman, VAI Vancouver, WLO Mobile, WOM Ojus, ZLW4/5/6 Wellington 8725.1 WFN Louisville 8726 CPD Potosi, GZC/2/3/4/5 Mauritius, NOK, OFJ Helsinki, UFN Novosibirsk 8728 NIK Argentia, NMF Boston, NMF/NIK Boston/Argentia, NMQ Long Beach 8728.2 KMI Dixon 8730 XSQ Canton 8731 YVG La Guaira 8731.3 WOM Ojus 8737.5 WGK St Louis 8738 VPS25 CD Aguilar 8740.6 KOM Hawaii, WOO Ocean Gate 8743.7 KMI Dixon 8746.8 WOM Ojus 8749.9 WOO Ocean Gate 8759.2 KMI Dixon 8760.8 NMC San Fransisco (SSB) 8762.3 WOO Ocean Gate 8764 Coast Guard (WX) 8765.4 AMVER 8770.4 Halifax 8780 Louisville (simplex) 8783.2 Great Lakes 8784 KMI Dixon 8790.2 WLO Mobile (SSB) 8793.3 WOM Ojus 8796.4 WBL Buffalo, WLC Rogers City, WMI Lorain, WOO Ocean Gate 8805.7 WLO Mobile (SSB) 8808.8 WLO Mobile (SSB) 8811.9 WOM Ojus 8812 Santa Maria 8815-8965 Aeronautical Mobile (R) 8819 VOLMET-Russian 8822 Flight Test 8825 Gander NAT-A, Lisbon NAT-A, New York NAT-A, San Juan NAT-A, Santa Maria NAT-A, Shannon NAT-A 8828 Auckland VOLMET-PAC, Hong Kong VOLMET-PAC, Honolulu VOLMET-PAC, Tokyo VOLMET-PAC 8843 Honolulu CEP-5, San Fransisco CEP-5 8855 Alaska Aleutian, Asuncion SE-SAM, Belem NE/C-SAM, Bogota C-SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Caracas NE- SAM, La Paz SE-SAM, Montevideo SE-SAM 8861 Abidjan AFI-1, Brasilia SAT-1, Casablanca AFI-1, Dakar AFI-1, Dakar SAT-1, Lisbon AFI-1, Recife SAT-1 8864 Gander NAT-B/C, New York NAT-B/C, Reykjavik NAT-B/C, Santa Maria NAT-B/C, Shannon NAT-B/C 8867 Auckland SP-6, Easter Island SP-7, Honolulu SP-7, Nadi SP-6/7, Sydney SP-6, Tahiti SP-7 8876 Alaska C/SE 8879 Bombay INO-1, Cocos Island INO-1, Johannesburg INO-1, Nairobi INO-1, Perth INO-1, Salisbury INO-1 8888 VOLMET-Russian 8891 Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Frobisher NAT-D, Gander NAT-D, Reykjavik NAT-D, Shannon NAT-D, Sondrestrom NAT-D 8894 Algiers AFI-2, Kano AFI-2 8896 Algiers VOLMET-AFI, Dakar VOLMET-AFI, Kano VOLMET-AFI, Khartoum VOLMET-AFI 8897 Beijing EA-1, Canton EA-1, Irkutsk EA-1, Kumming EA-1, Lanchau EA-1, Pyongyang EA-1, Seoul EA-1, Shanghai EA-1, Ulan Bator EA-1, Urumchi EA-1 8903 Accra AFI-4, Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP-2, Johannesburg AFI-4, Kano AFI-4, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP-1/2, Wake Island CWP-2 8917 Melanesia Common 8918 Ankara MID-1, Baghdad MID-1, Bahrain MID-1, Cairo MID-1, Caracas CAR-A, Jeddah MID-1, Merida CAR-A, Miami CAR-A, New York CAR-A, Odessa MID-1, Panama City CAR-A, San Juan CAR-A, Tehran MID-1 8921 Dusseldorf (LTU), London (British Airways), Sidney (Qantas) 8924 Amsterdam (KLM), Brussels (Sabena), Moscow (Aeroflot), Rio de Janeiro (Varig), SW Pacific Islands, Tel Aviv (El Al) 8927 Bangkok (Thai Airways), Havana (Cubana), Jeddah (Saudia) 8930 Stockholm (SAS) 8933 Johannesburg (SAA) 8936 Berne (Swissair) 8939 VOLMET-Russian 8942 Bangkok SEA-2, Hong Kong SEA-2, Irkutsk EA-2, Manila SEA-2, Pyongyang EA-2, Singapore SEA-2, Ulan Bator EA-2 8945 Baghdad VOLMET-MID, Bahrain VOLMET-MID, Basrah VOLMET- MID, Beirut VOLMET-MID, Cairo VOLMET-MID, Istanbul VOLMET-MID, Tehran VOLMET-MID 8951 Alma Ata MID-3, Dushanbe MID-3, Kuybyshev MID-3, Moscow MID-3 8957 Shannon VOLMET-EUR 8964 Looking Glass, Old Smokey, Rasputin, San Pablo AFB, Scott AFB, Silver Dollar 8965-9040 Aeronautical Mobile (OR) 8967 Andrews AFB, Argentina, Cheese Bobcat (JPN combine), Gan Area Combine, Lajes AFB, Thule AFB 8972 Beergarden, Caveman, Hurricane, Jargon, Neckware, Spangle, Spanish Point, Spittle, Stockholm (SAS), Wafer 8976 Argentina, Ivanhoe, Jehovah, Neckware, Utah Rig 8980 Cheese Bobcat (JPN combine), Hawkins, Lantern Chief (Apollo 14), McCord AFB, Neckware, St Pierre 8982 Missionary 8984 Berlin (Interflug), Calvary, NAS Elizabeth City, NAS San Fransisco, Puerto Rico (USCG) 8985 Cyprus Combine 8987 FDY 8989 Elmendorf AFB, Loring AFB, McClellan AFB, McDill AFB, San Pablo AFB 8990 Cheese Bobcat (JPN combine), VOLMET-Russian 8992 Drainage 8993 Coral Hills (Keflavik?), McDill AFB 8996 Lahr Military 8997 Coral Hills (Keflavik?), Hurricane, Spanish Point, Woodpecker 9002 Belmont, Fanfare, Fastcharger, River, Seabell 9006 Cape radio ckt 2 (Apollo 14), Hawkins, Lantern Chief (Apollo 14), Stevenville 9014 Charleston, Gull, Scott AFB 9018 Air Force One, Andrews AFB 9023 Peterson 9024 Andrews AFB 9025 Bingle Court, Darby Scortch, Dockyard, Golden Gate, June Bug, Luqa RAFB, MKE Akrotiri, MQY Chatham 9027 Democrat, Looking Glass, Migraine, Outway, Retail 9031 Krauton AFB 9032 Gibralter RAFB, Luqa RAFB, Upavon RAFB 9036 MQY Chatham (USB) 9040 MQD Plymouth 9040-9500 Fixed 9050 NPG-FC/FM San Fransisco, NPM Honolulu 9055 CUA43/47/48/69/90 Alfragide 9060 NKA Asmara 9061.5 PDC 9062 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 9077.5 Havana (ATC-LDOC) 9080 Telco Addis Ababa 9090 BC relay (RFE) 9111.5 AEZ7 Asmara 9153 Telco Paris 9160 ACA Panama (LSB) 9210 BC relay (DW) 9258 CUA43/47/48/69/90 Alfragide 9277.5 NPG San Fransisco 9290 Telco Athens 9297.6 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 9318 NST/GXH/AOK/... 9351 BPV Shanghai 9375 Telco Rome 9419 CUA43/47/48/69/90 Alfragide 9440 HMF15/HMN56/HMF32/HML36 Pyongyang 9500-9775 Broadcasting 9717 BC relay (BBC) 9775-9995 Fixed 9850 Telco Rome 9854 Telco Abidjan 9875 HMF15/HMN56/HMF32/HML36 Pyongyang 9980 Telco New York (AT&T) 9995-10005 Radio Astronomy, Standard Frequency 9996 Novosibirsk, RTA 10000 ATA New Delhi, BPV Shanghai, JJY Tokyo, LOL Buenos Aires, MSF, RNM Moscow, RWM Moscow, WWV Ft Collins, WWVH Kihei Maui, ZUO Johannesburg 10004 RID Irkutsk 10005-10100 Aeronautical Mobile (R) 10017 Central America Common 10018 Abadan MID-2, Addis Ababa AFI-3, Alma Ata MID-2, Bahrain MID-2, Bombay AFI-3, Bombay MID-2, Cairo AFI-3, Delhi MID-2, Dushanbe MID-2, Jeddah AFI-3, Karachi MID-2, Nairobi AFI-3, Tehran MID-2, Tripoli AFI-3, Urumchi MID- 2 10024 Antofagasta SW-SAM, Asuncion SW-SAM, Bogota NW-SAM, Buenos Aires SW-SAM, Easter Island SW-SAM, La Paz SW- SAM, Lima NW/SW-SAM, Montevideo SW-SAM, Panama City NW- SAM, Punta Arenas SW-SAM, Quito NW-SAM, Santiago SW-SAM 10027 Madrid/Las Palmas (Iberia), Rome (Alitalia) 10030 Buenos Aires (Aerolineas Argentinas), Moscow (Aeroflot) 10039 Chulmani NCA-3, Irkutsk NCA-3, Khabarovsk NCA-3, Kirensk NCA-3, Pyongyang NCA-3, Ulan Bator NCA-3 10042 Beijing EA-1, Canton EA-1, Irkutsk EA-1, Kumming EA-1, Lanchau EA-1, Pyongyang EA-1, Seoul EA-1, Shanghai EA-1, Ulan Bator EA-1, Urumchi EA-1 10045 Flight Test 10048 Anchorage NP-3/4, Beijing NP-3, Cold Bay NP-3/4, Khabarovsk NP-3, Pyongyang NP-3/4, Seoul NP-3, Shanghai NP-3, Tokyo NP-3 10051 Gander VOLMET-NAT, New York VOLMET-NAT 10057 Antanarivo VOLMET-AFI, Brazzaville VOLMET-AFI, Johannesburg VOLMET-AFI, Nairobi VOLMET-AFI 10066 Alaska Aleutian, Bangkok SEA-1, Calcutta SEA-1, Canton SEA-1, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA-3, Kumming SEA-1, Madras SEA-1, Manila SEA- 3, Perth SEA-3, Singapore SEA-1, Singapore SEA-3, Sydney SEA-3 10069 Berne (Swissair), Rio de Janeiro (Varig) 10072 London (British Airways), Seoul (KAL) 10075 Beirut (MEA), Houston (Universal Aviation), Houston LDOC 10078 Athens (Olympic), Brussels (Sabena), Frankfurt (Lufthansa), Sidney (Qantas) 10084 Leningrad EUR-A, Moscow EUR-A, Murmansk EUR-A, Odessa EUR-A 10087 Brasilia VOLMET-SAM, Buenos Aires VOLMET-SAM, Lima VOLMET-SAM 10090 Khabaraovsk VOLMET-NCA, Kiev VOLMET-NCA, Moscow VOLMET- NCA, Novosibirsk VOLMET-NCA, Tashkent VOLMET-NCA, Vnukovo VOLMET-NCA 10093 New York (test) 10096 Asuncion SE-SAM, Barnaul NCA-2, Belem NE/C-SAM, Bogota C-SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Caracas NE- SAM, Irkutsk NCA-2, Khanty Mansiysk NCA-2, Kirensk NCA- 2, La Paz SE-SAM, Montevideo SE-SAM 10100 Telco San Juan 10100-11175 Fixed 10135 Telco Rome 10153 Andrews AFB 10190 BC relay (RFE) 10225 KWN90 Washington 10230 Telco Paris 10250 Telco Havana 10295 Telco New York (AT&T), Telco Paris 10308 OLD/OLG4 Prague 10455 BC relay (VOA), Telco Jeddah 10468 PGL 10479 Belmont, Cemetary, Eagle Farm, Gangbuster, Seabell 10488 Telco Tel Aviv 10540 Telco New York (AT&T) 10550 Telco New York (AT&T) 10563 FTK56A Paris 10605 Telco Hamilton Barbados (C&W) 10620 BC relay (DW) 10635 Telco St Georges Bermuda (C&W) 10635.5 Telco Amsterdam 10637.5 KKN50 Washington 10680 KRH50 Washington 10690 AFA Camp Springs (Aerospace Comm Co) (SSB) 10696 AFA Camp Springs (Aerospace Comm Co) (SSB) 10714 AEZ Asmara (LSB) 10730 Telco Monrovia 10775 FTK77 Paris 10870 BC relay (VOA) 10885 Telco New York (AT&T) 10945 AEZ7 Asmara, CFH-NAWS Halifax 11000 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 11004 Telco Paris 11009 CNO96/97/98 Casablanca 11015 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 11031 NBA Balboa 11039 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 11045 Telco New York (AT&T) 11052 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 11075 BC relay (RFE) 11080 NBA Balboa 11118 Andrews AFB 11130 ZLZ22/20/ZLX22/31/37 11135 PBC32/34/36/38/312/317/322 Goeree 11175-11275 Aeronautical Mobile (OR) 11176 McClellan AFB 11179 McDill AFB 11180 MQY Chatham 11182 MQY Chatham (USB), Scott AFB 11185 Cheese Bobcat (JPN combine) 11195 Cyprus Combine 11200 Westraden R 11204 Cheese Bobcat (JPN combine) 11209 Canadian Military 11215 Lima (EA) 11220 Outway, Retail 11222 Stockholm (SAS) 11226 Andrews AFB 11228 McDill AFB 11229 Innsbruck AFB, Keflavik AFB, Krauton AFB, San Pablo AFB, Seabell 11230 HMF15/HMN56/HMF32/HML36 Pyongyang 11233 Scott AFB 11234 Cyprus Combine, Gan Area Combine, Gibralter RAFB, Upavon RAFB 11236 Elmendorf AFB, Loring AFB, McClellan AFB 11237 Cyprus Combine, Johannes Combine, Miharik Combine (Bahrein, Ceylon, Kuwait) 11239 Migraine 11240 German Military 11243 Bernadine, Civilian, Gibson, Hackberry, Location, Looking Glass, Nugget, Parkway, Seabell 11246 McDill AFB 11249 Canadian Military 11255 Belmont, Fanfare, Hexagon 11263 Belmont, Derail, Fanfare, Fastcharger, Tophand 11265 Canadian Military, Lahr Military 11266 German Military 11267 Ivanhoe 11271 Lajes AFB 11272 Upavon RAFB 11275-11400 Aeronautical Mobile (R) 11279 Algiers VOLMET-AFI, Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Dakar VOLMET-AFI, Frobisher NAT-D, Gander NAT-D, Kano VOLMET-AFI, Khartoum VOLMET-AFI, Reykjavik NAT-D, Shannon NAT-D, Sondrestrom NAT-D, VOLMET-Russian 11282 Honolulu CEP-5, San Fransisco CEP-5 11288 Flight Test 11291 Brasilia SAT-2, Dakar SAT-2, Recife SAT-2 11300 Abadan MID-2, Addis Ababa AFI-3, Alma Ata MID-2, Bahrain MID-2, Bombay AFI-3, Bombay MID-2, Cairo AFI-3, Delhi MID-2, Dushanbe MID-2, Jeddah AFI-3, Karachi MID-2, Nairobi AFI-3, Tehran MID-2, Tripoli AFI-3, Urumchi MID- 2 11306 Flight Test 11315 Merida VOLMET-CAR, Miami VOLMET-CAR, Port of Spain VOLMET-CAR 11319 SW Pacific Islands, VOLMET-Russian 11342 New York/San Juan LDOC 11345 Bogota (Avianca), Stockholm (SAS) 11348 San Fransisco/Honolulu LDOC 11351 Paris (Air France) 11354 Bahrain (Gulf Air), Johannesburg (SAA) 11357 Alaska C/SE 11360 Antofagasta SW-SAM, Asuncion SW-SAM, Bogota NW-SAM, Buenos Aires SW-SAM, Easter Island SW-SAM, La Paz SW- SAM, Lima NW/SW-SAM, Montevideo SW-SAM, Panama City NW- SAM, Punta Arenas SW-SAM, Quito NW-SAM, Santiago SW-SAM 11363 Alaska Aleutian 11375 Alma Ata MID-3, Dushanbe MID-3, Kuybyshev MID-3, Moscow MID-3 11378 Prague VOLMET-EUR, Tel Aviv VOLMET-EUR 11384 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP- 1/2, Wake Island CWP-2 11387 Bangkok VOLMET-SEA, Bombay VOLMET-SEA, Calcutta VOLMET- SEA, Karachi VOLMET-SEA, Singapore VOLMET-SEA, Sydney VOLMET-SEA 11396 Bangkok SEA-1, Bangkok SEA-2, Calcutta SEA-1, Canton SEA-1, Caracas CAR-A, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA-3, Hong Kong SEA-2, Irkutsk EA-2, Kumming SEA-1, Madras SEA-1, Manila SEA-2, Manila SEA-3, Merida CAR-A, Miami CAR-A, New York CAR-A, Panama City CAR-A, Perth SEA-3, Pyongyang EA-2, San Juan CAR-A, Singapore SEA-1, Singapore SEA-2, Singapore SEA-3, Sydney SEA-3, Ulan Bator EA-2 11400-11700 Fixed 11402 HBX76/HBO88 Geneve 11472 Telco St Georges Bermuda (C&W) 11515 Telco Hamilton Barbados (C&W) 11662.5 MLU Gibralter 11700-11975 Broadcasting 11770 Alpha Sierra (NC), Fairbanks, Morgantown, Schoolboy, Yellocab 11802 NBA Balboa 11975-12330 Fixed 11991.5 CCS Santiago 11995 KKN44 Washington 11999 Telco Gothaab 12000 VNG Melbourne 12022.5 KKN50 Washington 12076 BC relay (BBC) 12135 NSS Annapolis 12250 RCG77/RSU31 12307 OBC Callao 12329 OVG4/8/12 Fredrikshaven 12330-12439.5 Maritime Mobile (ship telephony) 12333.1 WCM Pittsburgh, WJG Memphis 12379 Memphis (simplex), Pittsburgh (simplex) 12421 Simplex 12424.5 Simplex 12428 Simplex 12429.2 Limited coast 12432.3 Limited coast 12435.4 Limited coast 12439.5-12491 Maritime Mobile (special systems) 12491-12526.8 Maritime Mobile (ship SITOR) 12526.8-12539.6 Maritime Mobile (ship working) 12539.6-12564 Maritime Mobile (ship calling) 12562.3 SELCAL ship SITOR 12562.8 SELCAL ship SITOR 12564-12652.3 Maritime Mobile (ship working) 12652.3-13070.8 Maritime Mobile (coast working) 12660 Gulf of Mexico, South Atlantic 12691 6XS Diego Saurez, NST/GXH/AOK/..., South Pacific 12693 URD Leningrad 12695.5 KFS/B San Fransisco 12700 NMR San Juan, Puerto Rico, ZSC/6/9/21/33 Cape Town 12701 FUJ/4/6/8/9 Noumea 12702 CKN Vancouver, DHS Ruegen 12704.5 Gulf of Mexico, WLO Mobile, XXV/2/3/28/W31 Luanda 12706 UQK Riga, UYK 12707 9VG Singapore 12708.5 FJP8 Noumea 12709 8PO Barbados, GKR Wick, LSA4/5 Press, VRT Bermuda, ZSC Presse 12712 OSN26/28/212/44 Ostende 12713.5 GKK/GKA4 Portishead, UXN/UGE Arkhangelsk 12714 GKM/GKW/GKN/GKF Portishead 12717 EBA Madrid 12718 NMN Portsmouth, ZLO 12718.5 NMR San Juan, NMY New York, ZPJ25 12721 SPA/SPH Gdynia 12723 SPA/SPH Gdynia 12724 ZRY/2/4/5/6/7 12725 6XS Diego Saurez 12727.5 LF-/LG- Rogoland 12730 NMC San Fransisco, UMV 12732 HKB Barranquilla, TAH Istanbul, UBN/UDC/UBC Jdanov, UXN/UGE Arkhangelsk 12738 PPA25 12740 ZLP Awarua 12741 ZRH/2/3/4/5/6 Simonstown, ZRQ/2/3/4/5 12743 NMC San Fransisco, NOR San Diego, PPM28 12745.5 North Atlantic 12746 NRV 12748 CLQ Havana 12750 CWA Cerrito, VHP Belconnen 12753 GXM Singapore 12753.5 OXZ Lyngby 12754 UJO 12754.5 PWZ Rio de Janeiro 12755 SAB/SAG Goeteborg 12760 IRM Rome 12763.5 DAM Norddeich, DAN Norddeich 12765 CCS Santiago 12768 PCH Scheveningen 12772.5 XFU Vera Cruz, ZSL/2/3/4/5/6/7 Simonstown 12781.5 GYS3/4/5/6 Singapore, HKB Barranquilla, YUZ Rijeka 12782 OST/3/32/5/52/6/62 Ostende 12790.5 GKG Portishead 12795 UXN/UGE Arkhangelsk 12799.5 PCH Scheveningen 12808 KPH Bolinas, VTG3/4/5/6/7 Bombay 12808.5 Central Pacific 12810 HZY Dhahran 12815 RUVE/URB2/UDO2/RWWM Klaipeda 12817.5 SAB/SAG Goeteborg 12822 GKA Portishead 12823 CTP Palhais 12826.5 Gulf of Mexico, JCS/JCU Chosi, WNU Slidell 12829 CTP Palhais 12831 FFP2/3/7 Ft de France 12832 HKB Barranquilla 12833.5 SVA Athens 12835.5 GKB Portishead 12838 CCS Santiago 12840 Gulf of Mexico, VTP3/4/5/6 Vizagotapam, WPA Port Arthur 12841.5 EAD/2/EDZ4 Aranjuez 12843 FFL St Lys 12843.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead 12844 UOP 12844.5 Central Pacific, KFS/A San Fransisco 12852 DZR Manila 12853.5 GKG Portishead, HKC Buenaventura, PCH Scheveningen 12861 DHS Ruegen 12862.5 NBA Balboa 12864 6WW Dakar 12867 NGP 12868 XSG Shanghai, XSM 12870 XSG Shanghai 12871.5 GRL/GKA2/GKB4/GKC4/5 Portishead 12874.5 VCS Halifax 12876 LF-/LG- Rogoland, VAI Vancouver 12877 UJY Iman, XSQ Canton 12878.5 CLQ Havana, JCS/JCU Chosi 12880.5 SAB/SAG Goeteborg 12882 DZG Manila 12883 NBA Balboa 12884 IAR Rome 12885 Central Atlantic, UJY Iman 12886 DZK Manila 12888 EAD/2/EDZ4 Aranjuez 12889 NMH Washington 12889.5 IDQ/2/3/6 Rome 12894 6WW Dakar, NBA Balboa 12895 UDH/UKB Riga 12898.5 DAN Norddeich 12906 UMV 12907.5 GBY20/MHU2/3/4/5/6 Rugby/Portishead, KLB Seattle, North Pacific, VHP Belconnen, VIX2/3/4/5/6/7 Sydney 12912 FFL St Lys, SAB/SAG Goeteborg, South Pacific 12914 CFH-L Halifax 12916.5 North Pacific, OXZ Lyngby 12919 CLS La Fe Prince, UFN Novosibirsk 12921 CKN Vancouver, GYA2/3/4/5 London, GZC/2/3/4/5 Mauritius, GZX2/3/4/5/6 Mauritius 12925.5 6WW Dakar, North Atlantic, WCC Chatham 12930 UAT Moskow 12934.5 EAD/2/EDZ4 Aranjuez, NMF Boston 12939 SPE/SPB Szczecin 12942.5 SVA Athens 12943.5 CUG Ponta Delgada, CUL Lisbon, LOL Buenos Aires, ZLP2/4/5/6 Wellington 12945 GYS3/4/5/6 Singapore 12947 ZRH/2/3/4/5/6 Simonstown 12948 North Atlantic, WSC Tuckerton 12950 UFB Odessa 12952.5 South Atlantic, VIS26/5/6/42 Sydney, WMH Baltimore 12960 CCV Valpariso 12961.5 LF-/LG- Rogoland, North Atlantic 12962.5 ZRH/2/3/4/5/6 Simonstown, ZRQ/2/3/4/5 12965.5 Central Pacific 12966 NPG San Fransisco, NPG-FC/FM San Fransisco, NPM Honolulu, NSS Annapolis, PCH Scheveningen 12970.5 SUH Alexandria, South Atlantic, WOE Lantana 12974 OSN26/28/212/44 Ostende 12975 IQX Trieste 12978 ICB Genova 12984 4XZ Haifa, CFH-L Halifax 12988.5 GZC/2/3/4/5 Mauritius, LPD Gral Pacheco, YIR Basrah 12993 KOK Los Angeles, South Pacific 12994 VIP4/3 12995 IQH Naples, ROT Moscow 12996 IAR12/67 Rome 12997.5 North Atlantic, WSL Amagansett 13001 IAR Rome 13002 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, Central Pacific, KPH Bolinas 13005 DHS Ruegen 13006.5 GKH Portishead, GKK/GKA4 Portishead, JOR Nagasaki 13011 AQP2/3/4 Karachi, IAR Rome, South Atlantic, WAX Miami 13015.5 IAR Rome, URD Leningrad 13020 GKC Portishead, GKT5/6 Portishead, North Atlantic 13024.5 HEB Berne, North Atlantic, WSL Amagansett 13027 DAF Norddeich, DAL Norddeich 13028 ZSD Durban 13029 GXO Mauritius, Hawaii, KHK Kahuku, SVA Athens, ZRH/2/3/4/5/6 Simonstown 13030 UDB/URD Leningrad, URD Leningrad 13033.5 GXO Mauritius, GZV Mauritius, North Atlantic, South Pacific, WCC Chatham 13038 Gulf of Mexico, KLC Galveston 13040 UDK2 Murmansk 13042.5 CRX21/23/28/26 Laurenco Marques, PJC Curacao 13045 JDC Chosi Siishib 13046 PZN4 Paramaribo 13047 SVA Athens 13051.5 4XO Haifa, Gulf of Mexico, WPD Tampa 13052.5 EBA Madrid 13055 UJQ 13056 ZLW4/5/6 Wellington 13059 GFC 13060.5 North Atlantic 13062.5 CLA Havana, DHS Ruegen 13066 EAD/2/EDZ4 Aranjuez 13067.5 OST/3/32/5/52/6/62 Ostende 13069.5 JOS Nagasaki, TFA Reykjavik 13070 UDH/UKB Riga 13070.8-13100.8 Maritime Mobile (coast SITOR) 13074 PJK34/38/312, UMV 13075 6VA Dakar 13078.5 LZW Varna, WSL Amagansett 13085 5BA Nocosia, HWN 13087.5 HKB Barranquilla, OFJ Helsinki 13092 CLA Havana, JOU Nagasaki 13093 EAT2 Tenerife 13096.5 FFS6/8 St Lys 13100 SELCAL coast SITOR, TIM Limon 13100.5 SELCAL coast SITOR 13100.8 KMI Dixon 13100.8-13200 Maritime Mobile (coast telephony) 13101 DHS Ruegen, JWT Stavanger, LOL Buenos Aires, ODR Beirut 13103.9 KMI Dixon, WFN Louisville, WGK St Louis 13105.5 GYR2/3/4/5 Malta, GYX Malta, JCT Chosi, OFJ Helsinki, PPR Rio de Janeiro 13107 KMI Dixon, WOO Ocean Gate 13110 RCI/RCC 13113.2 AMVER, USCG WX 13114.5 KFS San Fransisco 13116.3 WOM Ojus 13122.5 WOM Ojus 13125.6 WOM Ojus 13128.7 WOO Ocean Gate 13131.8 WOO Ocean Gate 13134.9 WLO Mobile (SSB) 13144.2 WOM Ojus 13158 Louisville (simplex), St Louis (simplex) 13165 Wellington (A3) 13165.9 KOM Hawaii 13169 WOM Ojus 13175.2 WLO Mobile (SSB) 13178.3 WLO Mobile (SSB) 13184.5 WOO Ocean Gate 13187.6 KMI Dixon 13190.7 KMI Dixon, WOO Ocean Gate 13200-13260 Aeronautical Mobile (OR) 13201 Elmendorf AFB, Loring AFB, McClellan AFB 13204 Fireside, Rasputin 13205 Berne (Swissair), Gibralter RAFB, Luqa RAFB, Upavon RAFB 13214 Krauton AFB, San Pablo AFB, Seabell 13215 Air Force One, Andrews AFB 13221 JAX Control 13230 NRY (A2) 13231 Lahr Military 13241 Migraine, Retail 13244 Gladhand, McDill AFB 13247 Andrews AFB 13260-13360 Aeronautical Mobile (R) 13261 Antanarivo VOLMET-AFI, Brazzaville VOLMET-AFI, Honolulu CEP-5, Johannesburg VOLMET-AFI, Nairobi VOLMET-AFI, San Fransisco CEP-5 13264 Shannon VOLMET-EUR 13266 Red Cross AX 13270 Gander VOLMET-NAT, New York VOLMET-NAT 13273 Algiers AFI-2, Auckland SP-6, Easter Island SP-7, Honolulu SP-7, Kano AFI-2, Nadi SP-6/7, Sydney SP-6, Tahiti SP-7 13279 Brasilia VOLMET-SAM, Buenos Aires VOLMET-SAM, Khabaraovsk VOLMET-NCA, Kiev VOLMET-NCA, Lima VOLMET- SAM, Moscow VOLMET-NCA, Novosibirsk VOLMET-NCA, Tashkent VOLMET-NCA, Vnukovo VOLMET-NCA 13282 Auckland VOLMET-PAC, Hong Kong VOLMET-PAC, Honolulu VOLMET-PAC, Tokyo VOLMET-PAC 13288 Abadan MID-2, Addis Ababa AFI-3, Alma Ata MID-2, Bahrain MID-2, Bombay AFI-3, Bombay MID-2, Cairo AFI-3, Delhi MID-2, Dushanbe MID-2, Jeddah AFI-3, Karachi MID-2, Leningrad EUR-A, Moscow EUR-A, Murmansk EUR-A, Nairobi AFI-3, Odessa EUR-A, Tehran MID-2, Tripoli AFI-3, Urumchi MID-2 13291 Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Frobisher NAT-D, Gander NAT-B/C, Gander NAT-D, New York NAT-B/C, Reykjavik NAT-B/C, Reykjavik NAT-D, Santa Maria NAT-B/C, Shannon NAT-B/C, Shannon NAT-D, Sondrestrom NAT-D 13294 Accra AFI-4, Anchorage NP-3/4, Beijing NP-3, Cold Bay NP-3/4, Johannesburg AFI-4, Kano AFI-4, Khabarovsk NP-3, Pyongyang NP-3/4, Seoul NP-3, Shanghai NP-3, Tokyo NP-3 13297 Asuncion SE-SAM, Beijing EA-1, Belem NE/C-SAM, Bogota C- SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Canton EA-1, Caracas CAR-A, Caracas NE-SAM, Irkutsk EA-1, Kumming EA- 1, La Paz SE-SAM, Lanchau EA-1, Merida CAR-A, Miami CAR- A, Montevideo SE-SAM, New York CAR-A, Panama City CAR-A, Pyongyang EA-1, San Juan CAR-A, Seoul EA-1, Shanghai EA- 1, Ulan Bator EA-1, Urumchi EA-1 13300 Biak CWP-1/2, Guam CWP-2, Hong Kong CWP-1, Honolulu CWP- 2, Manila CWP-1, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP-1, Seoul CWP-1, Shanghai CWP-1, Tokyo CWP- 1/2, Wake Island CWP-2 13303 Chulmani NCA-3, Irkutsk NCA-3, Khabarovsk NCA-3, Kirensk NCA-3, Pyongyang NCA-3, Ulan Bator NCA-3 13306 Bombay INO-1, Cocos Island INO-1, Gander NAT-A, Johannesburg INO-1, Lisbon NAT-A, Nairobi INO-1, New York NAT-A, Perth INO-1, Salisbury INO-1, San Juan NAT- A, Santa Maria NAT-A, Shannon NAT-A 13309 Bangkok SEA-2, Hong Kong SEA-2, Irkutsk EA-2, Manila SEA-2, Pyongyang EA-2, Singapore SEA-2, Ulan Bator EA-2 13312 Ankara MID-1, Baghdad MID-1, Bahrain MID-1, Cairo MID-1, Flight Test, Jeddah MID-1, Odessa MID-1, Tehran MID-1 13315 Brasilia SAT-2, Dakar SAT-2, Khanty Mansiysk NCA-1, Moscow NCA-1, Recife SAT-2 13318 Bangkok SEA-1, Calcutta SEA-1, Canton SEA-1, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA- 3, Kumming SEA-1, Madras SEA-1, Manila SEA-3, Perth SEA- 3, Singapore SEA-1, Singapore SEA-3, Sydney SEA-3 13324 Berne (Swissair), Dusseldorf (LTU), Tokyo (JAL) 13327 Athens (Olympic), Buenos Aires (Aerolineas Argentinas), Frankfurt (Lufthansa) 13330 Houston LDOC, New York/San Juan LDOC 13333 London (British Airways), Seoul (KAL) 13336 Amsterdam (KLM), Bogota (Avianca), Rome (Alitalia) 13339 Bahrain (Gulf Air), Havana (Cubana), Jeddah (Saudia) 13342 Jeddah (Saudia), Stockholm (SAS) 13345 Moscow (Aeroflot) 13348 San Fransisco/Honolulu LDOC 13351 Brussels (Sabena), Paris (Air France), Tel Aviv (El Al) 13354 Honolulu CEP-5, San Fransisco CEP-5 13355 Telco Berlin DDR 13356 New York (test) 13357 Abidjan AFI-1, Brasilia SAT-1, Casablanca AFI-1, Dakar AFI-1, Dakar SAT-1, Lisbon AFI-1, Recife SAT-1 13358 OLI4/OLH9 (intruder) 13360-14000 Fixed 13370 CWE94/CWO4/9CWD40 Cerrito, Telco Oakland (AT&T) 13372 CWE94/CWO4/9CWD40 Cerrito, Telco Rome 13375 Telco Berlin DDR 13376 Telco Ft Lauderdale (AT&T) 13380 NPN Guam, NPO/NDT 13390 Telco Oakland (AT&T) 13400 Telco New York (AT&T) 13428 Telco Oakland (AT&T) 13440 Telco Berlin DDR 13491 RCG77/RSU31 13498 IDR Rome 13530 NPN Guam 13538 OLI4/OLH9 (intruder) 13560 Industrial Scientific and Medical Equipment 13561 FDY 13563.5 IDR Rome 13568 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 13585 YAY4 13655 NPG-FC/FM San Fransisco, NPM Honolulu 13750 Telco Guantanamo Bay Cuba (AAC&R) 13873 FTN87 Pontoise 13893 YVR Caracas 13900 5YC Nairobi 13905 Telco Paris 13910 PPS74 13921.1 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 13945 FDY 13950 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 13980 LCO/LFT/LHK Jeloey 14000-14350 Amateur 14350-14990 Fixed 14357 HBL 14360 AEZ Asmara (LSB), KWN90 Washington, KWS78 Washington, Telco St Georges Bermuda (C&W) 14364 Telco New York (AT&T) 14365 Telco Oakland (AT&T) 14367 AEZ Asmara (LSB) 14410 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 14420 CBY Pascua 14448 Telco Gothaab 14454 Telco Gothaab 14458 DDH21/47/DDJ9/DFH23H1/DDN2/DGO46/L3 Pinneborg 14460 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 14462 HBX76/HBO88 Geneve 14470 HBL 14517 NAU Puerto Rico 14524 AEZ Asmara (LSB) 14527 BC relay (VOA) 14530 AEZ Asmara (LSB) 14540 Telco New York (AT&T) 14670 CHU Ottowa 14748 Telco New York (AT&T) 14806 AEZ Asmara (LSB) 14808 Telco Dakar 14830 WEO/WER/WES/WEU New York 14850 ZLZ/ZLX (A1) 14905 AEA Rhein Main (LSB) 14950 ZLZ22/20/ZLX22/31/37 14960 Telco Moscow 14990-15010 Radio Astronomy, Standard Frequency 14996 Novosibirsk, RTA 15000 BPV Shanghai, JJY Tokyo, LOL Buenos Aires, RNM Moscow, RWM Moscow, WWV Ft Collins, WWVH Kihei Maui 15004 RID Irkutsk 15010-15100 Aeronautical Mobile (OR) 15015 Air Force One, Andrews AFB, McDill AFB 15025 COL Havana, MQY Chatham 15031 McClellan AFB 15035 Canadian Military, Looking Glass, Retail 15036 Miharik Combine (Bahrein, Ceylon, Kuwait) 15041 Democrat, Migraine, Outway, Retail 15046 Cyprus Combine 15048 Andrews AFB 15054 Overwork 15095 Loring AFB 15100-15450 Broadcasting 15283 Louisville (simplex) 15450-16460 Fixed 15500 AEA Rhein Main (LSB) 15526 AEZ Asmara (LSB) 15540 ACA Panama (A1), KKN50 Washington, Telco Moscow 15656 RCC4 15704 CUA43/47/48/69/90 Alfragide 15710 Telco Tel Aviv 15752 BC relay (VOA) 15770 SPE/SPB Szczecin 15772 SNN23 15775 BC relay (RFE) 15786 Pauline (LSB) 15793 Telco New York (AT&T) 15798 Telco New York (AT&T) 15833 Telco Tuolon 15852 BC relay (BBC) 15907 BC relay (BBC) 15917 AEZ7 Asmara, KKN44 Washington 15920 CFH-NAWS Halifax 15925 NPN Guam 15987 WEO/WER/WES/WEU New York 16003 UDK2 Murmansk 16018.8 Gulf of Mexico 16065 BC relay (RFE) 16130 GXO Mauritius 16150 KRH50 Washington 16157 Telco Havana 16162 KKN44 Washington 16180 NSS Annapolis 16237 Pauline (LSB) 16270 Telco New York (AT&T) 16294 Telco Monrovia 16317 CQF57 Bissau 16358 DES/DEU Koenigswustern 16415 Telco Paris 16457.5 NPG-FC/FM San Fransisco, NPM Honolulu 16460-16596.4 Maritime Mobile (ship telephony) 16488 Memphis (simplex), Pittsburgh (simplex) 16518.9 WCM Pittsburgh, WJG Memphis 16565 Simplex 16568.5 Simplex 16572 Simplex 16587.1 Limited coast 16590.2 Limited coast 16593.3 Limited coast 16596.4-16660 Maritime Mobile (special systems) 16660-16705.8 Maritime Mobile (ship SITOR) 16705.8-16719.8 Maritime Mobile (ship working) 16719.8-16748.8 Maritime Mobile (ship calling) 16748.8-16859.4 Maritime Mobile (ship working) 16749.9 SELCAL ship SITOR 16750.4 SELCAL ship SITOR 16847.3 Central Pacific 16859.4-17196.9 Maritime Mobile (coast working) 16861.7 South Atlantic 16871.3 Gulf of Mexico 16880.9 South Pacific 16904.9 North Atlantic 16918.8 GBY20/MHU2/3/4/5/6 Rugby/Portishead, South Atlantic, VHP Belconnen, VIX2/3/4/5/6/7 Sydney 16920.8 CLS La Fe Prince, OXZ Lyngby 16924 OFJ Helsinki 16928 LF-/LG- Rogoland 16928.4 GYS3/4/5/6 Singapore 16933.2 WCC Chatham 16942.5 YUZ Rijeka 16944.8 CFH-L Halifax 16945.5 EAT2 Tenerife 16947.5 6VA Dakar, 8PO Barbados, VIP4/3, VRT Bermuda 16947.8 TUA9 Abidjan 16948.4 VCS Halifax 16950 NPG-FC/FM San Fransisco 16952 LCO/LFT/LHK Jeloey, LF-/LG- Rogoland, PPE2 Rio de Janeiro 16954.4 GKC Portishead, GKT5/6 Portishead 16956 AQR2/3/5 Chittagong 16956.5 HZY Dhahran, URD Leningrad 16957.5 FUF Ft de France 16960 CUL Lisbon, UMV 16960.4 CLQ Havana, JOU Nagasaki, PWZ Rio de Janeiro 16964 SPA/SPH Gdynia, ZRH/2/3/4/5/6 Simonstown 16964.4 ZRQ/2/3/4/5 16965 DHS Ruegen 16966 SVA Athens 16968.8 North Atlantic, WCC Chatham 16973.6 North Atlantic, WCC Chatham 16974 SPE/SPB Szczecin 16978.4 FUF Ft de France, GZC/2/3/4/5 Mauritius, Hawaii, KHK Kahuku 16980 DAM Norddeich 16983.2 PPA25, URD Leningrad 16987 ZRH/2/3/4/5/6 Simonstown 16988 GYR2/3/4/5 Malta, ZRQ/2/3/4/5 16990 USR2 16992.8 UAT Moskow 16997 UDH/UKB Riga 16997.6 North Atlantic, WSL Amagansett 17001.5 XSQ Canton 17002 XSG Shanghai 17002.4 HKB Barranquilla, NMR San Juan, NMT, NMY New York 17004 URD Leningrad, ZRH/2/3/4/5/6 Simonstown 17005 UJY Iman 17006 XSQ Canton 17007.2 KLB Seattle, North Pacific, PCH Scheveningen 17011 NST/GXH/AOK/... 17012.5 ZLO 17015 UJQ 17016.8 Central Pacific, KPH Bolinas, OST/3/32/5/52/6/62 Ostende 17018 ZRY/2/4/5/6/7 17020 FFS6/8 St Lys, UDK2 Murmansk 17021.6 North Atlantic, WSL Amagansett 17022 TAH Istanbul 17026 Central Pacific, KFS/A San Fransisco 17027 FFL St Lys 17030 GZV Mauritius 17030.5 GXB, GXO Mauritius 17040 UFB Odessa 17040.8 FFL St Lys, FFS6/8 St Lys 17043.2 JCS/JCU Chosi 17045.6 LPD Gral Pacheco 17047.2 PBC32/34/36/38/312/317/322 Goeree 17048 DAF Norddeich 17053.6 GYA2/3/4/5 London 17055 UFB Odessa 17055.2 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon, GZX2/3/4/5/6 Mauritius 17064 UFW 17064.8 6XS Diego Saurez, EAD/2/EDZ4 Aranjuez, KOK Los Angeles, South Pacific 17066 UAT Moskow 17068 OXZ Lyngby 17069.6 SPE/SPB Szczecin 17072 GKG Portishead, GKK/GKA4 Portishead 17074.4 LF-/LG- Rogoland 17079.2 SAB/SAG Goeteborg 17084 IQX Trieste 17085 UBN/UDC/UBC Jdanov 17088 CRX21/23/28/26 Laurenco Marques, KPH Bolinas 17088.8 Central Pacific, South Pacific 17093.6 North Atlantic, South Atlantic 17094 SVA Athens 17098 UXN/UGE Arkhangelsk 17098.4 GKA Portishead, GKM/GKW/GKN/GKF Portishead 17100 DHS Ruegen, UFN Novosibirsk 17103.2 PCH Scheveningen 17105 IRM Rome, WWD Point Loma 17107 XSG Shanghai 17108 FUF Ft de France 17112.8 GKB Portishead, JCS/JCU Chosi 17117.6 Gulf of Mexico, WNU Slidell 17119 PRS5 17127.2 ZLP2/4/5/6 Wellington 17134 UMV 17136 DZR Manila 17136.8 GKM/GKW/GKN/GKF Portishead, NBA Balboa 17137 RUVE/URB2/UDO2/RWWM Klaipeda 17141.6 UBN/UDC/UBC Jdanov 17143.5 DAN Norddeich 17146.4 4XO Haifa, CLA Havana 17147.2 NRV 17148 HKB Barranquilla 17150 GXM Singapore 17151 NMN Portsmouth 17151.2 NMC San Fransisco 17155 6WW Dakar 17159 PWZ Rio de Janeiro 17160 IAR Rome, URL 17160.8 IAR Rome, IAR12/67 Rome, PWZ Rio de Janeiro, South Atlantic, WOE Lantana 17161.4 VIS26/5/6/42 Sydney 17164 SPA/SPH Gdynia 17165 ZRY/2/4/5/6/7 17165.6 CLA Havana, LF-/LG- Rogoland 17170 UDK2 Murmansk 17170.4 Gulf of Mexico, PJC Curacao, South Atlantic, ZLW4/5/6 Wellington 17172.4 Gulf of Mexico, IAR Rome, UOP, WLO Mobile 17173.2 EAC/2 Cadiz 17175.2 VAI Vancouver 17176 DZG Manila, JCT Chosi 17177.5 DAL Norddeich 17180 6XS Diego Saurez, FUG La Regine, LOL Buenos Aires 17181 UDH/UKB Riga 17184.4 EAD/2/EDZ4 Aranjuez 17184.8 KFS/B San Fransisco 17185.5 EAX4 Parets Valles 17187 OST/3/32/5/52/6/62 Ostende 17189 SVA Athens 17189.6 CLQ Havana, XXV/2/3/28/W31 Luanda 17190 CTN7 Apulia 17194 SVA Athens 17194.4 PPR Rio de Janeiro 17196 6WW Dakar 17196.9-17232.9 Maritime Mobile (coast SITOR) 17197 HEB Berne 17199.2 PKI Djakarta, WAX Miami 17206 6WW Dakar 17208.8 CWA Cerrito, KLC Galveston 17210 UXN/UGE Arkhangelsk 17215 6WW Dakar, LZW Varna 17217 ICB Genova 17218 XSQ Canton 17218.4 CFH-L Halifax 17220 UXN/UGE Arkhangelsk 17225 SPA/SPH Gdynia 17228 CKN Vancouver 17230 6WW Dakar, DHS Ruegen 17230.5 UMN Adler, UMV 17232 SELCAL coast SITOR 17232.5 SELCAL coast SITOR 17232.8 IAR Rome 17232.9 KOM Hawaii, WOM Ojus 17232.9-17360 Maritime Mobile (coast telephony) 17236 KMI Dixon 17237.6 PCH Scheveningen 17239.1 KMI Dixon 17241 UAT Moskow 17242.4 WSC Tuckerton 17245.3 WOO Ocean Gate 17246.5 UDH/UKB Riga 17247.2 NMC San Fransisco, NMG New Orleans 17251.5 WLO Mobile (SSB) 17253 OSN46/412/416 17257.7 WOM Ojus 17260.8 WOM Ojus 17279.4 KMI Dixon 17283 St Louis (simplex) 17283.9 WOM Ojus 17288 NPG San Fransisco 17291.8 WFN Louisville, WGK St Louis, WOO Ocean Gate 17304.2 KMI Dixon 17307.3 AMVER, USCG WX 17310.4 WOO Ocean Gate 17325.9 WOO Ocean Gate 17329 WLO Mobile (SSB) 17356.9 WLO Mobile (SSB) 17360-17700 Fixed 17370 UFB Odessa 17375 URD Leningrad 17390 VKS3/5/49/74/93/VKH70 17445 BC relay (DW), BC relay (RFE) 17505 RCI/RCC 17530 NPN Guam 17590 NBA Balboa 17605 CLQ Havana 17640 Telco Oakland (AT&T) 17666 Telco Gothaab 17669 YVR Caracas 17672 Telco Gothaab 17697.5 NBA Balboa 17700-17900 Broadcasting 17900-17970 Aeronautical Mobile (R) 17904 Anchorage NP-3/4, Auckland SP-6, Beijing NP-3, Biak CWP- 1/2, Cold Bay NP-3/4, Easter Island SP-7, Guam CWP-2, Hong Kong CWP-1, Honolulu CEP-5, Honolulu CWP-2, Honolulu SP-7, Khabarovsk NP-3, Manila CWP-1, Nadi SP- 6/7, Naha CWP-1/2, Port Moresby CWP-1/2, Pyongyang CWP- 1, Pyongyang NP-3/4, San Fransisco CEP-5, Seoul CWP-1, Seoul NP-3, Shanghai CWP-1, Shanghai NP-3, Sydney SP-6, Tahiti SP-7, Tokyo CWP-1/2, Tokyo NP-3, Wake Island CWP- 2 17907 Antofagasta SW-SAM, Asuncion SE-SAM, Asuncion SW-SAM, Bangkok SEA-1, Bangkok SEA-2, Belem NE/C-SAM, Bogota C- SAM, Bogota NW-SAM, Brasilia C-SAM, Buenos Aires SE-SAM, Buenos Aires SW-SAM, Calcutta SEA-1, Canton SEA-1, Caracas CAR-A, Caracas NE-SAM, Cocos Island SEA-1, Colombo SEA-1, Darwin SEA-3, Djakarta SEA-3, Easter Island SW-SAM, Hong Kong SEA-2, Irkutsk EA-2, Kumming SEA-1, La Paz SE-SAM, La Paz SW-SAM, Lima NW/SW-SAM, Madras SEA-1, Manila SEA-2, Manila SEA-3, Merida CAR-A, Miami CAR-A, Montevideo SE-SAM, Montevideo SW-SAM, New York CAR-A, Panama City CAR-A, Panama City NW-SAM, Perth SEA-3, Punta Arenas SW-SAM, Pyongyang EA-2, Quito NW- SAM, San Juan CAR-A, Santiago SW-SAM, Singapore SEA-1, Singapore SEA-2, Singapore SEA-3, Sydney SEA-3, Ulan Bator EA-2 17916 Athens (Olympic), Paris (Air France), Seoul (KAL), Stockholm (SAS) 17919 Buenos Aires (Aerolineas Argentinas), Rio de Janeiro (Varig) 17922 London (British Airways), Sidney (Qantas) 17925 Houston LDOC, New York/San Juan LDOC, San Fransisco/Honolulu LDOC 17928 Bogota (Avianca), Buenos Aires (Aerolineas Argentinas) 17931 Bahrain (Gulf Air), Berne (Swissair), Frankfurt (Lufthansa) 17934 Havana (Cubana) 17940 Amsterdam (KLM), Brussels (Sabena), Houston (Universal Aviation), Madrid/Las Palmas (Iberia), Moscow (Aeroflot), Rome (Alitalia), Tel Aviv (El Al) 17946 Bodo NAT-D, Cambridge NAT-D, Churchill NAT-D, Frobisher NAT-D, Gander NAT-A, Gander NAT-B/C, Gander NAT-D, Lisbon NAT-A, New York NAT-A, New York NAT-B/C, Reykjavik NAT-B/C, Reykjavik NAT-D, San Juan NAT-A, Santa Maria NAT-A, Santa Maria NAT-B/C, Shannon NAT-A, Shannon NAT-B/C, Shannon NAT-D, Sondrestrom NAT-D 17955 Abidjan AFI-1, Brasilia SAT-1, Brasilia SAT-2, Casablanca AFI-1, Dakar AFI-1, Dakar SAT-1, Dakar SAT-2, Lisbon AFI-1, Recife SAT-1, Recife SAT-2 17958 Barnaul NCA-2, Chulmani NCA-3, Irkutsk NCA-2, Irkutsk NCA-3, Khabarovsk NCA-3, Khanty Mansiysk NCA-1, Khanty Mansiysk NCA-2, Kirensk NCA-2, Kirensk NCA-3, Moscow NCA-1, Pyongyang NCA-3, Ulan Bator NCA-3 17961 Abadan MID-2, Accra AFI-4, Addis Ababa AFI-3, Algiers AFI-2, Alma Ata MID-2, Alma Ata MID-3, Bahrain MID-2, Bombay AFI-3, Bombay INO-1, Bombay MID-2, Cairo AFI-3, Cocos Island INO-1, Delhi MID-2, Dushanbe MID-2, Dushanbe MID-3, Jeddah AFI-3, Johannesburg AFI-4, Johannesburg INO-1, Kano AFI-2, Kano AFI-4, Karachi MID- 2, Kuybyshev MID-3, Leningrad EUR-A, Moscow EUR-A, Moscow MID-3, Murmansk EUR-A, Nairobi AFI-3, Nairobi INO-1, Odessa EUR-A, Perth INO-1, Salisbury INO-1, Tehran MID-2, Tripoli AFI-3, Urumchi MID-2 17964 Flight Test 17970-18030 Aeronautical Mobile (OR) 17975 Retail 17988 GZO Hong Kong 17993 Andrews AFB 17995 Canadian Military 18009 JAX Control 18019 Rasputin, San Pablo AFB 18023 Berne (Swissair), Red Cross AX 18030-19990 Fixed 18033 NDT Totsuka, NPN Guam 18036.5 CCS Santiago 18104 SOT26 Warszawa 18175 Telco Stockholm 18275 BC relay (VOA) 18303 OLD/OLG4 Prague 18330 Telco Paris 18359 KWN90 Washington 18386 OMZ 18468 KKN50 Washington, Telco Karachi 18496 SNN2 18614 Telco Gothaab 18619 Telco Amsterdam 18620 Telco Gothaab 18624 Telco Rome 18626 Telco Gothaab 18631 Telco Rome 18632 Telco Rome 18637 Telco Rome 18640 Telco Kabul 18700 DGS70/DAM Elmshorn/Norddeich 18805 Telco Paris 18840 Telco Havana 18924 Telco New York (AT&T) 18933.2 North Atlantic 19080 Telco New York (AT&T) 19240 DBT/DBU/3/DBV/DBW/DBX/DBZ/3 Koenigwustern 19262.5 BC relay (VOA) 19298 Telco New York (AT&T) 19330 Telco Rome 19435 Telco Rome 19520 Telco Rome 19592 Telco Rome 19678 Telco Rome 19723.5 BC relay (VOA) 19796 CUC8/9 Alfragide 19810 CUC8/9 Alfragide 19820 Telco New York (AT&T) 19881 EAV988 Aranjuez 19933 Telco Rome 19934 Telco Rome 19990-20010 Radio Astronomy, Standard Frequency 20000 RNM Moscow, WWV Ft Collins, WWVH Kihei Maui 20010-21000 Fixed 20020 Telco Kampala 20053 Telco Addis Ababa 20122 KKN44 Washington 20147 AEZ Asmara (LSB) 20202 EAY22/49 Basile 20215 BC relay (RFE) 20225 NSS Annapolis 20235 Telco Jeddah 20250 Pauline (LSB) 20290 Telco Cairo 20300 GYA2/3/4/5 London 20575 NPM Honolulu 20624 Pauline (LSB) 20630 LCO/LFT/LHK Jeloey 20640 Andrews AFB 20708 Telco New York (AT&T) 20710 BC relay (RFE) 20827 Telco Tel Aviv 20900 Telco Paris 20920 Telco New York (AT&T) 21000-21450 Amateur 21450-21750 Broadcasting 21750-21850 Fixed 21760 NPN Guam 21796 CUA43/47/48/69/90 Alfragide 21850-21870 Radio Astronomy 21870-22000 Aeronautical Mobile (R) 21931 Flight Test 21940 Paris (Air France) 21943 Bahrain (Gulf Air), Beirut (MEA), Johannesburg (SAA) 21945 Havana (Cubana) 21946 London (British Airways) 21949 Seoul (KAL) 21952 Rome (Alitalia), Tel Aviv (El Al) 21955 Buenos Aires (Aerolineas Argentinas), Rio de Janeiro (Varig) 21958 Moscow (Aeroflot) 21964 Houston LDOC, New York/San Juan LDOC, San Fransisco/Honolulu LDOC 21967 Madrid/Las Palmas (Iberia) 21970 Seoul (KAL), Sidney (Qantas) 21973 Amsterdam (KLM) 21979 Athens (Olympic), Frankfurt (Lufthansa) 21988 Berne (Swissair) 21991 Rio de Janeiro (Varig) 21994 Jeddah (Saudia) 21997 Stockholm (SAS) 22000-22139.5 Maritime Mobile (ship telephony) 22094.5 Simplex 22098 Simplex 22101.5 Simplex 22105 Simplex 22108.5 Simplex 22124 Limited coast 22127.1 Limited coast 22130.2 Limited coast 22133.3 Limited coast 22136.4 Limited coast 22139.5-22192 Maritime Mobile (special systems) 22192-22227 Maritime Mobile (ship SITOR) 22227-22250 Maritime Mobile (ship calling) 22248 SELCAL ship SITOR 22248.5 SELCAL ship SITOR 22250-22310.5 Maritime Mobile (ship working) 22310.5-22561 Maritime Mobile (coast working) 22318.5 Gulf of Mexico, South Atlantic 22348.5 North Atlantic 22366.5 North Atlantic 22377 IAR Rome 22383 GBY20/MHU2/3/4/5/6 Rugby/Portishead 22387 VCS Halifax 22393 ZRQ/2/3/4/5 22395 CLA Havana, OFJ Helsinki 22399 SPA/SPH Gdynia 22400 ZRH/2/3/4/5/6 Simonstown 22401 NDT Totsuka 22403 UJY Iman 22404 OXZ Lyngby 22407 GKC Portishead, North Atlantic, ZRH/2/3/4/5/6 Simonstown 22411 SVA Athens 22413 KOK Los Angeles, SAB/SAG Goeteborg, South Pacific 22417 SVA Athens 22418 GKC Portishead, OXZ Lyngby 22419 LPD Gral Pacheco 22420 PPA25, URL 22422 GYR2/3/4/5 Malta 22423 UAT Moskow 22425 Central Pacific, KFS/A San Fransisco, LF-/LG- Rogoland 22426 AQP2/3/4 Karachi 22431 Gulf of Mexico, South Atlantic, WNU Slidell 22441 8PO Barbados 22446 EAD/2/EDZ4 Aranjuez 22448 FUF Ft de France 22449 CKN Vancouver, GKB Portishead 22450 ROT Moscow 22455 ZSL/2/3/4/5/6/7 Simonstown 22458 GKG Portishead, OXZ Lyngby, RUVE/URB2/UDO2/RWWM Klaipeda, WAX Miami 22467 GKA Portishead, South Pacific 22471 EBA Madrid 22472 LF-/LG- Rogoland, SVA Athens 22473 VIS26/5/6/42 Sydney 22476 DAM Norddeich, DAN Norddeich, NRV 22479 CUL Lisbon, Central Pacific, GZX2/3/4/5/6 Mauritius, KPH Bolinas 22480 DHS Ruegen 22481 DHS Ruegen 22485 North Atlantic, VIX2/3/4/5/6/7 Sydney, WSL Amagansett 22487 Gulf of Mexico 22487.5 NMF Boston 22488 VHP Belconnen 22491 4XO Haifa 22495 SPA/SPH Gdynia 22503 GKG Portishead, North Atlantic, South Atlantic 22505 PRS5, SPE/SPB Szczecin 22509 FFL St Lys, FFS6/8 St Lys, Hawaii 22512 UAT Moskow, UJA 22515 Central Pacific, DAN Norddeich, KFS/B San Fransisco 22521 GYS3/4/5/6 Singapore, WCC Chatham 22523 FUB Paris 22525 IRM Rome 22526 GKH Portishead 22528.5 GKI Portishead 22530 PWZ Rio de Janeiro 22533 GZC/2/3/4/5 Mauritius, OST/3/32/5/52/6/62 Ostende, ZLP Awarua 22539 North Pacific, PCH Scheveningen 22545 GKM/GKW/GKN/GKF Portishead 22550 DHS Ruegen 22551 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 22556 GYA2/3/4/5 London 22557 Central Pacific, KPH Bolinas 22561-22596 Maritime Mobile (coast SITOR) 22563 6XS Diego Saurez 22566 CTU2/CTV/2/7/CTU8 Monsanto/Lisbon 22569 FFL St Lys, FFS6/8 St Lys 22575 PCH Scheveningen 22581 4XZ Haifa 22587 CFH-L Halifax, GZC/2/3/4/5 Mauritius 22589 URD Leningrad 22591 DAL Norddeich 22593 6WW Dakar, NPG-FC/FM San Fransisco, NPM Honolulu 22595 HEB Berne, SELCAL coast SITOR 22595.5 SELCAL coast SITOR 22596 LZS, WOO Ocean Gate 22596-22720 Maritime Mobile (coast telephony) 22598 ZSC/6/9/21/33 Cape Town 22599 WCC Chatham 22600 UOP 22602 OST/3/32/5/52/6/62 Ostende 22607 SAB/SAG Goeteborg 22608.4 WOO Ocean Gate 22611 CCS Santiago 22615 UDK2 Murmansk 22616 GZV Mauritius, UBN/UDC/UBC Jdanov 22617 GXO Mauritius 22623 IAR Rome 22623.9 WOO Ocean Gate 22635 NPG San Fransisco 22636.3 KMI Dixon 22639.4 WOM Ojus 22642.5 WOM Ojus 22661.1 WOM Ojus 22664.2 KMI Dixon 22670 ZUD Telco 22676.6 WLO Mobile (SSB) 22689 WLO Mobile (SSB) 22697.7 KMI Dixon 22704.5 KMI Dixon, WOO Ocean Gate 22707.6 WLO Mobile (SSB) 22720-23200 Fixed 22754 GXM Singapore 22760 NKA Asmara 22764 NAA Cutler 22805 Pauline (LSB) 22845 VHP Belconnen 22919 NST/GXH/AOK/... 23200-23350 Aeronautical Mobile (OR) 23285 Berne (Swissair) 23350-24990 Fixed 23464 Telco New York (AT&T) 23821.5 Telco Rome 23891 URD Leningrad 23975 KKN50 Washington 24020 BC relay (BBC) 24450 Pauline (LSB) 24990-25010 Radio Astronomy, Standard Frequency 25000 RNM Moscow, WWV Ft Collins 25010-25070 Land Mobile (industrial) 25011 SVA Athens 25020 Industrial (Petroleum) 25040 Industrial (Petroleum) 25060 Industrial (Petroleum) 25065 OFJ Helsinki 25070-25076 Maritime Mobile (ship calling) 25076-25090.1 Maritime Mobile (ship SITOR) 25080 Industrial (Petroleum) 25090.1-25110 Maritime Mobile (ship working) 25100 Industrial (Petroleum) 25110-25330 Land Mobile (industrial) 25120 Industrial (Petroleum) 25135 OST/3/32/5/52/6/62 Ostende 25140 Industrial (Petroleum) 25160 Industrial (Petroleum) 25180 Industrial (Petroleum) 25189 Telco Paris 25200 Industrial (Petroleum) 25202 BC relay (VOA) 25210 Telco Brazzaville 25220 Industrial (Petroleum) 25240 Industrial (Petroleum) 25250 ZUD Telco 25255 ZUD Telco 25260 Industrial (Petroleum) 25262 OXZ Lyngby 25280 Industrial (Petroleum) 25300 Industrial (Petroleum) 25308 LF-/LG- Rogoland 25320 Industrial (Petroleum) 25329 ZUD Telco 25330-25600 Government 25383 LF-/LG- Rogoland 25387 URD Leningrad 25401 SVA Athens 25416 URD Leningrad 25434 TIM Limon 25460 UMV 25461 SAB/SAG Goeteborg 25545 UMV 25562 HKB Barranquilla 25570 UXN/UGE Arkhangelsk 25590 NSS Annapolis 25596 UFB Odessa 25600-26100 Broadcasting 25725 URD Leningrad 25726 CLQ Havana 25801 BC relay (VOA) 25860 UAT Moskow, UBN/UDC/UBC Jdanov 25900 UFB Odessa 26000 BC relay (VOA) 26030 IAR Rome 26055 UFB Odessa 26062.5 URD Leningrad 26070 6VA Dakar 26100-26480 Land Mobile (remote pickup) 26103.5 4XO Haifa 26110 BC relay (DSB), UJQ 26129 UAT Moskow 26150 UJQ 26445 BC relay (LSB) 26480-26950 Government (civil air patrol) 26620 Civil Air Patrol 26950-26960 Fixed 26955 International Fixed Public 26960-27410 Personal 27120 Industrial Scientific and Medical Equipment 27235 Industrial 27245 Industrial 27255 Industrial 27265 Industrial 27275 Industrial 27290 Industrial (Special Industrial) 27310 Industrial (Special Industrial) 27330 Industrial (Special Industrial) 27350 Industrial (Special Industrial) 27370 Industrial (Special Industrial) 27390 Industrial (Business Radio) 27410 Industrial (Business Radio) 27410-27540 Land Mobile 27430 Industrial (Business Radio) 27450 Industrial (Business Radio) 27470 Industrial (Business Radio) 27490 Industrial (Business Radio) 27510 Industrial (Business Radio) 27530 Industrial (Business Radio) 27540-28000 Government 28000-29700 Amateur 29700-29800 Land Mobile 29710 Industrial (Forest Products) 29730 Industrial (Forest Products) 29750 Industrial (Forest Products) 29770 Industrial (Forest Products) 29790 Industrial (Forest Products) 29800-29890 Fixed 29890-29910 Government 29910-30000 Fixed 29916 icom-20120228/8500.MCH0000644000175000017500000000627310376731213012635 0ustar colincolin[REV] ID=1.0.0 APP=IC-PCR1000 Revision 2.0 [BANK00] BANKNAME= ACTIVECH=0 00=CAR-A,,2.887,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=CAR-A,,5.550,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=CAR-A,,6.577,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=CAR-A,,8.918,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=CAR-A,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=CAR-A,,13.297,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=CAR-A,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=CAR-B,,3.455,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=CAR-B,,5.520,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=CAR-B,,6.586,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=CAR-B,,8.846,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=CAR-B,,11.330,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=CAR-B,,11.387,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=CAR-B,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK01] BANKNAME= ACTIVECH=0 00=NAT-A,,3.016,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=NAT-A,,5.598,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=NAT-A,,8.906,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=NAT-A,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=NAT-A,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=NAT-B,,2.899,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=NAT-B,,5.616,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=NAT-B,,8.864,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=NAT-B,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=NAT-B,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=NAT-C,,2.862,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=NAT-C,,5.649,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=NAT-C,,8.879,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=NAT-C,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=NAT-C,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=NAT-D,,2.971,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=NAT-D,,4.675,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=NAT-D,,8.891,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NAT-D,,11.279,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NAT-D,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NAT-D,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NAT-E,,2.962,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NAT-E,,6.628,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NAT-E,,8.825,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NAT-E,,11.309,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NAT-E,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NAT-F,,3.476,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NAT-F,,6.622,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=NAT-F,,8.831,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK02] BANKNAME= ACTIVECH=0 00=VOLMET-NAT,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=VOLMET-NAT,,6.604,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=VOLMET-NAT,,10.051,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=VOLMET-NAT,,13.270,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=VOLMET-EU,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=VOLMET-EU,,5.505,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=VOLMET-EU,,8.957,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=VOLMET-EU,,13.264,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=VOLMET-PAC,,2.863,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=VOLMET-PAC,,6.679,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=VOLMET-PAC,,8.828,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=VOLMET-PAC,,13.282,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK03] BANKNAME= ACTIVECH=0 [BANK04] BANKNAME= ACTIVECH=0 [BANK05] BANKNAME= ACTIVECH=0 [BANK06] BANKNAME= ACTIVECH=0 [BANK07] BANKNAME= ACTIVECH=0 [BANK08] BANKNAME= ACTIVECH=0 [BANK09] BANKNAME= ACTIVECH=0 [BANK10] BANKNAME= ACTIVECH=0 [BANK11] BANKNAME= ACTIVECH=0 [BANK12] BANKNAME= ACTIVECH=0 [BANK13] BANKNAME= ACTIVECH=0 [BANK14] BANKNAME= ACTIVECH=0 [BANK15] BANKNAME= ACTIVECH=0 [BANK16] BANKNAME= ACTIVECH=0 [BANK17] BANKNAME= ACTIVECH=0 [BANK18] BANKNAME= ACTIVECH=0 [BANK19] BANKNAME= ACTIVECH=0 icom-20120228/icom.h.c0000644000175000017500000004565410422561061013231 0ustar colincolin/*********************************************************************** * * * Copyright (c) David L. Mills 1994-2003 * * * * Permission to use, copy, modify, and distribute this software and * * its documentation for any purpose and without fee is hereby * * granted, provided that the above copyright notice appears in all * * copies that both the copyright notice and this permission * * notice appear in supporting documentation, and that the name * * University of Delaware not be used in advertising or publicity * * pertaining to distribution of the software without specific, * * written prior permission. The University of Delaware makes no * * representations about the suitability this software for any * * purpose. It is provided "as is" without express or implied * * warranty. * * * *********************************************************************** */ /* * Program to control ICOM radios * * Common header files */ #include #include #include #include #include /* * Common definitions */ #define TRUE 1 /* veracibty */ #define FALSE 0 /* tenacity */ #define BMAX 80 /* max packet buffer size */ #define NAMMAX 30 /* max capability name string size */ #define VALMAX 80 /* max capability value string size */ #define CMDMAX 30 /* max radio command string size */ #define BNKMAX 100 /* max channel bank members */ #define MODES 6 /* number of modes in ICOM radios */ #define RETRY 3 /* max packet retries */ #define COMPMAX 100e-6 /* max frequency compensation */ #define ESC 0x1b /* ANSI escape character */ #define KILL 0x7f /* line delete character */ #define R_OK 0 /* return success */ #define R_ERR -1 /* return error */ #define AUDIO /* define for Sun audio device */ /* * Program flags (pflags) */ #define P_VERB 0x0001 /* verbose switch */ #define P_RADIO 0x0002 /* display radio */ #define P_DSPCH 0x0004 /* display chan */ #define P_DISP 0x0008 /* display freq, mode, split */ #define P_KEYP 0x0010 /* keypad command non-null */ #define P_EXIT 0x0020 /* exit after command line */ #define P_PAD 0x0040 /* keypad mode */ #define P_ESC 0x0080 /* escape sequence in progress */ #define P_TRACE 0x0100 /* trace packets */ #define P_ERMSG 0x0200 /* print bus error messages */ /* * CI-V frame codes */ #define PR 0xfe /* preamble */ #define TX 0xe0 /* controller address */ #define FI 0xfd /* end of message */ #define ACK 0xfb /* controller normal reply */ #define NAK 0xfa /* controller error reply */ #define PAD 0xff /* transmit padding */ /* * CI-V controller commands */ #define V_FREQT 0x00 /* freq set (transceive) */ #define V_MODET 0x01 /* set mode (transceive) */ #define V_RBAND 0x02 /* read band edge */ #define V_RFREQ 0x03 /* read frequency */ #define V_RMODE 0x04 /* read mode */ #define V_SFREQ 0x05 /* set frequency */ #define V_SMODE 0x06 /* set mode */ #define V_SVFO 0x07 /* select vfo */ #define V_SMEM 0x08 /* select channel/bank */ #define V_WRITE 0x09 /* write channel */ #define V_VFOM 0x0a /* memory -> vfo */ #define V_CLEAR 0x0b /* clear channel */ #define V_ROFFS 0x0c /* read tx offset */ #define V_SOFFS 0x0d /* write tx offset */ #define V_SCAN 0x0e /* scan control */ #define V_SPLIT 0x0f /* split control */ #define V_DIAL 0x10 /* set dial tuning step */ #define V_ATTEN 0x11 /* set attenuator */ #define V_SANT 0x12 /* select antenna */ #define V_ANNC 0x13 /* announce control */ #define V_WRCTL 0x14 /* read/write controls */ #define V_RMTR 0x15 /* read meters */ #define V_TOGL 0x16 /* read/write switches */ #define V_ASCII 0x17 /* send CW message */ #define V_POWER 0x18 /* power control */ #define V_RDID 0x19 /* read model ID */ #define V_SETW 0x1a /* read/write channel/bank data */ #define V_CTRL 0x7f /* miscellaneous control */ #define M_LSB 0x00 /* LSB mode number (for probe) */ #define M_USB 0x01 /* USB mode number (for probe) */ /* * Set vfo (V_SVFO) subcommands (775 b0, b1, c0, c1) */ #define S_VFOA 0x00 /* select vfo a */ #define S_VFOB 0x01 /* select vfo b */ #define S_BTOA 0xa0 /* vfo a <- vfo b */ #define S_XCHNG 0xb0 /* main <-> sub */ #define S_EQUAL 0xb1 /* main -> sub */ #define S_DWOFF 0xc0 /* dual watch off */ #define S_DWON 0xc1 /* dual watch on */ #define S_MBAND 0xd0 /* access main band */ #define S_SBAND 0xd1 /* access sub band */ /* * Scan control (V_SCAN) subcommands (775 00, 01) */ #define S_OFF 0x00 /* stop scan */ #define S_START 0x01 /* scan */ #define S_PSST 0x02 /* program scan */ #define S_DFST 0x03 /* delta-f scan */ #define S_AMST 0x04 /* auto write scan */ #define S_FPST 0x12 /* fine program scan */ #define S_FDST 0x13 /* fine delta-f scan */ #define S_MSST 0x22 /* memory scan */ #define S_SNST 0x23 /* memory scan number */ #define S_SMST 0x24 /* selected mode memory scan */ #define S_PXST 0x42 /* priority scan */ #define S_UNFIX 0xa0 /* unfix center frequency */ #define S_FIX 0xaa /* fix center frequency */ #define S_DF2 0xa1 /* delta-f 2.5 kHz */ #define S_DF5 0xa2 /* delta-f 5 kHz */ #define S_DF10 0xa3 /* delta-f 10 kHz */ #define S_DF20 0xa4 /* delta-f 20 kHz */ #define S_DF50 0xa5 /* delta-f 50 kHz */ #define S_DSBM 0xb0 /* disable memory channel */ #define S_ENBM 0xb1 /* enable memory channel */ #define S_MEMN 0xb2 /* memory channel scan number */ #define S_VSOFF 0xc0 /* VSC off */ #define S_VSON 0xc1 /* VSC on */ #define S_SRNOT 0xd0 /* scan resume never */ #define S_SROFF 0xd1 /* scan resume off */ #define S_SRB 0xd2 /* scan resume b */ #define S_SRA 0xd3 /* scan resume a (delay) */ /* * Split control (V_SPLIT) subcommands */ #define S_OFF 0x00 /* split off */ #define S_ON 0x01 /* split on */ #define S_DUPOF 0x10 /* cancel duplex */ #define S_DUPM 0x11 /* select -duplex */ #define S_DUPP 0x12 /* select +duplex */ /* * Set attenuator (V_ATTN) subcommands */ #define S_AT00 0x00 /* off */ #define S_AT06 0x06 /* 6 dB */ #define S_AT10 0x10 /* 10 dB */ #define S_AT12 0x12 /* 12 dB */ #define S_AT18 0x18 /* 18 dB */ #define S_AT20 0x20 /* 20 dB */ #define S_AT30 0x30 /* 30 dB */ /* * Select antenna (V_SANT) subcommands */ #define S_ANT1 0x00 /* antenna 1 */ #define S_ANT2 0x01 /* antenna 2 */ /* * Announce control (V_ANNC) subcommands */ #define S_SAY0 0x00 /* announce off */ #define S_SAY1 0x01 /* announce freq */ /* * Read controls (V_RDCTL) subcommands */ #define S_RDAF 0x01 /* read AF gain */ #define S_RDSQ 0x01 /* read squelch */ #define S_RDSG 0x02 /* read S meter */ #define S_RDSH 0x04 /* read IF shift */ #define S_RDAP 0x05 /* read APF */ /* * Write controls (V_WRCTL) subcommands */ #define S_WRAF 0x01 /* set AF gain */ #define S_WRSQ 0x03 /* set squelch */ #define S_WRSH 0x04 /* set IF shift */ #define S_WRAP 0x05 /* set APF */ /* * Set switches (V_TOGL) subcommands */ #define S_PA0 0x8002 /* preamp off */ #define S_PA1 0x8102 /* preamp on */ #define S_AGC0 0x10 /* AGC slow (R8500) */ #define S_AGC1 0x11 /* AGC fast (R8500) */ #define S_AGC3 0x8112 /* AGC fast */ #define S_AGC2 0x8212 /* AGC slow */ #define S_NB0 0x20 /* NB off (R8500) */ #define S_NB1 0x21 /* NB on (R8500) */ #define S_NB2 0x8022 /* NB off */ #define S_NB3 0x8122 /* NB on */ #define S_APF0 0x30 /* APF off */ #define S_APF1 0x31 /* APF on */ #define S_TONE0 0x8042 /* tone off */ #define S_TONE1 0x8142 /* tone on */ #define S_TSQ0 0x8043 /* tone squelch off */ #define S_TSQ1 0x8143 /* tone squelch on */ #define S_COMP0 0x8044 /* speech compressor off*/ #define S_COMP1 0x8144 /* speech compressor on */ #define S_VOX0 0x8046 /* VOX off */ #define S_VOX1 0x8146 /* VOX on */ #define S_QSK0 0x8047 /* QSK off */ #define S_QSK1 0x8147 /* QSK on */ /* * Power control (V_POWER) subcommands */ #define S_OFF 0x00 /* power off */ #define S_ON 0x01 /* power on */ /* * Read/write bank/channel data (V_SETW) subcommands */ #define S_WCHN 0x00 /* write channel data */ #define S_RCHN 0x01 /* read channel data */ #define S_WBNK 0x02 /* write bank data */ #define S_RBNK 0x03 /* read bank data */ /* * Miscellaneous control (S_CTRL) subcommands */ #define S_LCL 0x01 /* select local control */ #define S_RMT 0x02 /* select remote control */ #define S_TPON 0x03 /* enable tape recorder */ #define S_TPOFF 0x04 /* disable tape recorder */ #define S_OPTO 0x05 /* read OPTO */ #define S_CTSS 0x06 /* read CTSS */ #define S_DCS 0x07 /* read DCS */ #define S_DTMF 0x08 /* read DTMF */ #define S_RDID 0x09 /* read ID */ #define S_SPON 0x0a /* enable speaker audio */ #define S_SPOFF 0x0b /* disable speaker audio */ #define S_5ON 0x0c /* enable 5 kHz search window */ #define S_5OFF 0x0d /* disable 5 kHz search window */ #define S_NXFM 0x0e /* next frequency */ #define S_SMON 0x0f /* enable search */ #define S_SMOFF 0x10 /* disable search */ /* * Load subcommands */ #define D_NAME 0 /* set name */ #define D_MODE 1 /* set mode */ #define D_DIAL 2 /* set dial tuning step */ #define D_ATTEN 3 /* set attenuator */ #define D_DUPLEX 4 /* set transmit offset */ #define D_STEP 5 /* set tuning step */ /* * Command decode */ #define C_ANT 1 /* select antenna */ #define C_READ 2 /* read channel */ #define C_CLEAR 3 /* clear channel */ #define C_DEBUG 4 /* trace CI-V messages */ #define C_DOWN 5 /* step down */ #define C_DUPLEX 6 /* set transmit duplex */ #define C_ANNC 7 /* announce control */ #define C_ERASE 8 /* erase input */ #define C_FREQ 9 /* set frequency */ #define C_KEY 10 /* send CW message */ #define C_KEYBD 11 /* switch to keyboard mode */ #define C_KEYPAD 12 /* switch to keypad mode */ #define C_MODE 13 /* set mode/BFO compensation */ #define C_OFFSET 14 /* set VFO offset */ #define C_QUIT 15 /* exit program */ #define C_RADIO 16 /* select radio */ #define C_RESTORE 17 /* restore channels */ #define C_SAVE 18 /* save channels */ #define C_SPLIT 19 /* toggle split mode with offset */ #define C_STEP 20 /* set tuning step */ #define C_SCAN 21 /* scan control */ #define C_UP 22 /* step up */ #define C_VFO 23 /* vfo commands */ #define C_WRITE 24 /* write channel */ #define C_ATTEN 25 /* set attenuator */ #define C_DIAL 26 /* set dial tuning step */ #define C_MISC 27 /* miscellaneous control */ #define C_METER 28 /* read S meter */ #define C_PROBE 29 /* probe configuration */ #define C_MODEG 30 /* set mode */ #define C_VCOMP 31 /* set vfo compensation */ #define C_FREQX 32 /* set vfo frequency */ #define C_RATE 33 /* set tuning rate */ #define C_RUP 34 /* rate up */ #define C_RDOWN 35 /* rate down */ #define C_VERB 36 /* set verbose */ #define C_SMPLX 37 /* receive on transmit frequency */ #define C_BAND 38 /* set band limits */ #define C_BANK 39 /* read/write bank and name */ #define C_LOAD 40 /* read/write channel and name */ #define C_POWER 41 /* power on/off */ #define C_VOLUME 42 /* volume control */ #define C_SQUELCH 43 /* squelch control */ #define C_SHIFT 44 /* shift control */ #define C_APFC 45 /* APF control */ #define C_AGC 46 /* AGC fast/slow */ #define C_NB 47 /* NB on/off */ #define C_APF 48 /* APF on/off */ #define C_CHANGE 49 /* swap main and sub VFOs */ #define C_PAMP 50 /* preamp off/on */ #define C_TONE 51 /* repeater tone off/on */ #define C_TSQL 52 /* tone squelch off/on */ #define C_COMP 53 /* speech compressor off/on */ #define C_QSK 54 /* QSK breakin off/on */ #define C_VOX 55 /* VOX control off/on */ #define C_CTRL 56 /* control commands */ #define C_SWTCH 57 /* set/clear switches */ #ifdef AUDIO #define C_GAIN 61 /* adjust output level */ #define C_MUTE 62 /* mute output (toggle) */ #define C_PORT 60 /* select input port */ #endif /* AUDIO */ /* * Radio control flags */ #define F_VFO 0x0100 /* radio has mem -> vfo */ #define F_OFFSET 0x0200 /* radio has duplex offset */ #define F_RELD 0x0400 /* reload after mode change */ #define F_735 0x0800 /* 4 octets frequency (IC-735) */ #define F_SPLIT 0x1000 /* radio has split mode */ #define F_SMPLX 0x2000 /* receive on transmit frequency */ #define F_DIAL 0x4000 /* radio has 1-kHz dial step table */ #define F_BANK 0x8000 /* radio has memory banks */ #define F_8500 0x10000 /* radio is a R8500 or R9000 */ /* * Capability structure */ struct cmdtable { char name[NAMMAX]; /* name */ int ident; /* capability key */ char descr[VALMAX]; /* value */ }; /* * Radio command vector */ struct cmdvec { char name[NAMMAX]; /* command/mode name */ u_char cmd[CMDMAX]; /* radio command */ char descr[VALMAX]; /* description */ }; /* * Radio name decode structure */ struct namestruct { char name[NAMMAX]; /* radio name */ int ident; /* bus address */ int maxch; /* max channel number */ int maxbk; /* max bank number */ struct cmdtable *ctrl; /* control table */ struct cmdtable *modetab; /* mode table */ struct cmdtable *dialtab; /* dial tuning step table */ int flags; /* flag bits */ struct icom *radio; /* radio structure pointer */ }; /* * Channel data structure */ struct chan { int bank; /* bank number */ int mchan; /* channel number */ double freq; /* frequency (MHz) */ double duplex; /* transmit offset (kHz) */ int mode; /* mode */ int step; /* tuning step code */ double pstep; /* programmed tuning step (kHz) */ int atten; /* attenuator code */ int scan; /* scan code */ char name[9]; /* channel name */ }; /* * Radio control structure */ struct icom { char name[NAMMAX]; /* radio name */ int ident; /* bus address */ int minch; /* min channel */ int maxch; /* max channel */ int topch; /* top channel */ int minbk; /* min bank */ int maxbk; /* max bank */ int topbk; /* top bank */ int flags; /* flag bits */ int rate; /* VFO tuning rate */ int minstep; /* min tuning rate */ struct chan chan; /* memory channel */ struct cmdtable *ctrl; /* control table */ struct cmdtable *modetab; /* mode decode table */ struct cmdtable *dialtab; /* dial tuning step table */ struct cmdtable cap[BNKMAX]; /* capability vector */ double uband; /* upper radio band edge (MHz) */ double lband; /* lower radio band edge (MHz) */ double ustep; /* upper step band edge (MHz) */ double lstep; /* lower step band edge (MHz) */ double sub; /* sub vfo frequency (MHz) */ double oldplex; /* simplex offset (kHz) */ double offset; /* frequency offset (kHz) */ double pstep; /* dial tuning step */ double step; /* tuning step (Hz) */ double bfo[MODES]; /* BFO calibration offsets (Hz) */ double freq_comp; /* VFO calibration offset (PPM) */ }; /* * Command/response message format */ struct cmd1msg { u_char cmd; /* command/response */ u_char fd; /* end delimiter (0xfd) */ }; /* * Command-2 message format */ struct cmd2msg { u_char cmd; /* command */ u_char subcmd; /* subcommand */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read band reply message format */ struct readbandmsg { u_char cmd; /* command */ u_char lband[5]; /* lower band edge */ u_char pad; /* unknown function */ u_char uband[5]; /* upper band edge */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write frequency message format */ struct freqmsg { u_char cmd; /* command (V_RFREQ/V_SFREQ) */ u_char freq[5]; /* frequency */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write mode message format */ struct modemsg { u_char cmd; /* command (V_RMODE/V_SMODE) */ u_char mode[2]; /* mode */ u_char fd; /* end delimiter (0xfd) */ }; /* * Set dial tuning step message format */ struct dialmsg { u_char cmd; /* command (V_DIAL) */ u_char step; /* dial tuning step code */ u_char pstep[2]; /* dial programmed tuning step */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write offset message format */ struct offsetmsg { u_char cmd; /* command (V_ROFFS, V_SOFFS) */ u_char offset[3]; /* offset */ u_char fd; /* end delimiter (0xfd) */ }; /* * Set bank message */ struct setbankmsg { u_char cmd; /* command (V_SMEM) */ u_char subcmd; /* subcommand (0xa0) */ u_char bank; /* bank number */ u_char fd; /* end delimiter (0xfd) */ }; /* * Set channel message */ struct setchanmsg { u_char cmd; /* command (V_SMEM) */ u_char mchan[2]; /* channel number */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read channel request message */ struct chanrqmsg { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_RCHN) */ u_char bank; /* bank number */ u_char mchan[2]; /* channel number */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read model ID data message */ struct modelmsg { u_char cmd; /* command (V_RDID) */ u_char subcmd; /* subcommand (S_RCHN) */ u_char id; /* model ID */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write bank data message format */ struct bankmsg { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WBNK, S_RBNK) */ u_char bank; /* bank number */ u_char name[5]; /* name */ u_char fd; /* end delimiter (0xfd) */ }; /* * Read/write channel data message format */ struct chanmsg { u_char cmd; /* command (V_SETW) */ u_char subcmd; /* subcommand (S_WCHN, S_RCHN) */ u_char bank; /* bank number */ u_char mchan[2]; /* channel number */ u_char freq[5]; /* frequency */ u_char mode[2]; /* mode */ u_char step; /* dial tuning step code */ u_char pstep[2]; /* programmed dial tuning step */ u_char atten; /* attenuator */ u_char scan; /* scan */ u_char name[8]; /* name */ u_char fd; /* end delimiter (0xfd) */ }; /* * Exported by icom.c */ extern int flags; extern int pflags; extern double logtab[]; extern char *modetoa(int, struct cmdtable *); extern char *getcap(char *, struct cmdtable *); extern void setcap(char *, struct cmdtable *, char *); /* * Exported by radio.c */ extern int loadfreq(int, double); extern int loadmode(int, int); extern int loadoffset(int, double); extern int loaddial(int, int, double); extern int readfreq(int, double *); extern int readchan(int, struct chan *); extern int sendcw(int, char *); extern int setchan(int, int, int); extern int setbank(int, int); extern int setcmd(int, int, int); extern int setcmda(int, u_char *, u_char *); extern int read_chan(int, struct chan *); extern int write_chan(int, struct chan *); extern int clear_chan(int, struct chan *); extern int loadbank(int, int, char *); extern int readbank(int, int, char *); extern struct icom *select_radio(int); /* * Exported by packet.c */ extern int retry; extern void initpkt(); extern int sndpkt(int, u_char *, u_char *); /* * Exported by tables.c */ extern struct namestruct name[]; extern struct cmdtable dbx[], cmd[], identab[], misc[], split[], agc[]; extern struct cmdtable agc1[], nb[], nb1[], atten[], ant[], annc[]; extern struct cmdtable meter[], power[], verbx[], key[], vfo[], scan[]; extern struct cmdtable split[], apf[], diala[], dialb[], dialc[]; extern struct cmdtable loadtab[], preamp[], tone[], comp[], vox[]; extern struct cmdtable qsk[], ctlc[], switches[]; extern struct cmdvec probe[]; icom-20120228/pcr.sh0000755000175000017500000000006210376731213013021 0ustar colincolin#!/bin/csh dos2unix pcr.csv x awk -f pcr.awk x >y icom-20120228/r720000644000175000017500000000277010376731213012243 0ustar colincolin1 5.000000 USBw 2 10.000000 USBw 3 15.000000 USBw 4 20.000000 USBw 5 3.330000 USBw 6 7.335000 USBw 7 14.670000 USBw 8 2.872000 USBw 9 3.016000 USBw 10 5.598000 USBw 11 5.616000 USBw 12 5.649000 USBw 13 8.846000 USBw 14 8.906000 USBw 15 11.330000 USBw 17 11.309000 USBw 18 8.825000 USBw 20 13.291000 USBw 21 13.306000 USBw 22 4.272630 LSBw 23 6.497900 LSBw 24 10.537720 LSBw 25 13.511560 LSBw 26 9.515000 LSBw 27 7.405000 LSBw 28 6.035000 LSBw 29 6.628000 USBw 30 6.873000 LSBw 31 7.651000 USBw 32 19.379000 LSBw 33 7.325000 LSBw 34 9.410000 LSBw 35 12.095000 LSBw 36 15.070000 LSBw 37 5.975000 LSBw 38 9.515000 LSBw 39 11.396000 USBw 40 11.309000 USBw 41 8.846000 USBw 42 2.182000 USBw 43 5.696000 USBw 44 8.984000 USBw 45 11.201000 USBw 46 3.485000 USBw 47 6.604000 USBw 48 10.051000 USBw 49 6.577000 USBw 50 5.550000 USBw 51 2.887000 USBw 52 6.586000 USBw 53 3.494000 USBw 54 6.640000 USBw 55 13.330000 USBw 56 8.933000 USBw 57 13.291000 USBw 58 13.306000 USBw 59 13.282000 USBw 50 13.264000 USBw 51 11.396000 USBw 52 8.906000 USBw 53 1.550000 AMw 54 1.510000 AMw 55 1.260000 AMw 56 1.450000 AMw 57 1.230000 AMw 58 1.240000 AMw 59 1.210000 AMw 60 1.410000 AMw 61 9.515000 LSBw 62 15.260000 LSBw 63 9.915000 LSBw 64 21.660000 LSBw 65 1.550000 AMw 66 1.510000 AMw 67 1.260000 AMw + 1.450000 AMw + 1.230000 AMw + 1.240000 AMw + 1.210000 AMw + 1.410000 AMw + 9.515000 LSBw + 15.260000 LSBw + 9.915000 LSBw + 21.660000 LSBw + 3.627180 LSBw + 1.290000 AMw + 1.260000 AMw + 1.450000 AMw + 1.150000 AMw + 5.000000 USBw + 1.600000 AMw icom-20120228/Makefile0000644000175000017500000000107510376731213013343 0ustar colincolin# # Makefile for icom # PROGRAM= icom COMPILER= gcc COPTS= -g -O BINDIR= /usr/local/bin INSTALL= install DEFS= # INCL= -I../include CFLAGS= $(COPTS) $(DEFS) $(INCL) CC= $(COMPILER) LIB= /lib/libm.so # SOURCE= icom.c radio.c packet.c tables.c OBJS= icom.o radio.o packet.o tables.o EXEC= icom all: $(PROGRAM) icom: $(OBJS) $(CC) $(COPTS) -o $@ $(OBJS) $(LIB) install: $(BINDIR)/$(PROGRAM) $(BINDIR)/$(PROGRAM): $(PROGRAM) $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) tags: ctags *.c *.h depend: mkdep $(CFLAGS) $(SOURCE) clean: -@rm -f $(PROGRAM) $(EXEC) $(OBJS) icom-20120228/706g_arinc0000644000175000017500000000422410424305013013451 0ustar colincolin# MWARA Memory channels 756 and 706g # # Carribean/South America + 2887 USB name "CAR A" # CAR-A + 3455 USB name "CAR B" # CAR-B + 5520 USB name "CAR B" # CAR-B + 5550 USB name "CAR A" # CAR-A + 6577 USB name "CAR A" # CAR-A + 6586 USB name "CAR B" # CAR-B + 8846 USB name "CAR B" # CAR-B + 8918 USB name "CAR A" # CAR-A + 11330 USB name "CAR B" # CAR-B + 11387 USB name "CAR B" # CAR-B + 11396 USB name "CAR A" # CAR-A + 13297 USB name "CAR A" # CAR-A + 17907 USB name "CAR A/B" # CAR-A # VOLMET + 3485 USB name "VOLM NAT" # VOLMET-NAT + 6604 USB name "VOLM NAT" # VOLMET-NAT + 10051 USB name "VOLM NAT" # VOLMET-NAT + 13270 USB name "VOLM NAT" # VOLMET-NAT + 3413 USB name "VOLM EU" # VOLMET-EU + 5505 USB name "VOLM EU" # VOLMET-EU + 8957 USB name "VOLM EU" # VOLMET-EU + 13264 USB name "VOLM EU" # VOLMET-EU + 2863 USB name "VOLM PAC" # VOLMET-PAC + 6679 USB name "VOLM PAC" # VOLMET-PAC + 8828 USB name "VOLM PAC" # VOLMET-PAC + 13282 USB name "VOLM PAC" # VOLMET-PAC + 5450 USB name "VOLM ME" # VOLMET-ME # North Atlantic + 3016 USB name "NAT A" # NAT-A + 5598 USB name "NAT A" # NAT-A + 8906 USB name "NAT A" # NAT-A + 13306 USB name "NAT A" # NAT-A + 17946 USB name "NAT A" # NAT-A + 2899 USB name "NAT B" # NAT-B + 5616 USB name "NAT B" # NAT-B + 8864 USB name "NAT B" # NAT-B + 13291 USB name "NAT B" # NAT-B + 17946 USB name "NAT B" # NAT-B + 2862 USB name "NAT C" # NAT-C + 5649 USB name "NAT C" # NAT-C + 8879 USB name "NAT C" # NAT-C + 13306 USB name "NAT C" # NAT-C + 17946 USB name "NAT C" # NAT-C + 2971 USB name "NAT D" # NAT-D + 4675 USB name "NAT D" # NAT-D + 8891 USB name "NAT D" # NAT-D + 11279 USB name "NAT D" # NAT-D + 13291 USB name "NAT D" # NAT-D + 17946 USB name "NAT D" # NAT-D + 2962 USB name "NAT E" # NAT-E + 6628 USB name "NAT E" # NAT-E + 8825 USB name "NAT E" # NAT-E + 11309 USB name "NAT E" # NAT-E + 13354 USB name "NAT E" # NAT-E + 3476 USB name "NAT F" # NAT-F + 6622 USB name "NAT F" # NAT-F + 8831 USB name "NAT F" # NAT-F # Santa Maria RTTY # 5474 RTTY # Santa Maria # 9994.2 RTTY # Santa Maria # 10539.1 RTTY # Santa Maria # 12323 RTTY # Santa Maria # 14497.5 RTTY # Santa Maria icom-20120228/IC.C0000744000175000017500000020310010453603156012274 0ustar colincolin/* * Program to control ICOM radios * * Main program */ #include "icom.h" #include #ifndef MSDOS /* include for Unix */ #include #include #include #include #endif /* MSDOS */ /* * Module definitions */ #define ARGMAX 20 /* maximum number of command args */ #define DICOM "/dev/icom" /* CI-V serial port device */ /* * External functions */ extern FILE *fopen(); extern char *strtok(), *strcpy(); extern char *optarg; extern int optind, opterr; extern double freqdouble(u_char *, int); /* * Local function prototypes */ static int getline(char *); static int argchan(struct icom *, struct chan *, char *); static int argbank(struct icom *, struct chan *, char *); static int setswitch(struct icom *, struct cmdtable *, int); static int setswitch2(struct icom *, struct cmdtable *, int); static int setswitch3(struct icom *, struct cmdtable *, int, int); static int sw_keypad(void); static int sw_keybd(void); char *capname(int, struct cmdtable *); static char *capdescr(char *, struct cmdtable *); int capkey(char *, struct cmdtable *); double fabs(double); static void printch(struct icom *, char *); static int readmeter(struct icom *, struct cmdtable *, int, char *); static void perr(int); static int qqsv(struct icom *, struct cmdtable *); static void banner(struct icom *); /* * Global variables */ int fd_icom; /* CI-V device */ struct icom *rptr = NULL; /* radio structure pointer */ int flags; /* radio flags */ int pflags; /* program flags */ static char defarg[LINMAX]; /* default arguments */ static char args[LINMAX]; /* command line */ static char *argv[ARGMAX]; /* command line args */ static int argn; /* number of command line args */ static int argi; /* command args index */ static FILE *fp_cmd[FPMAX] = {NULL}; /* include file stack */ static int fp = 0; /* include file statck index */ static char *updown = " +- "; /* channel dinkle */ #ifndef MSDOS static int fd; /* terminal control file descriptor */ static struct termios terma, termb; /* Unix terminal interface */ extern int errno; #endif /* MSDOS */ /* * Main program */ int main( int argc, /* number of arguments */ char **argcv /* vector of argument pointers */ ) { char chr; /* char temp */ char *ptr; /* fiddles */ int i, temp; /* int temps */ double freq; /* double temp */ struct icom *rp; /* radio structure pointer */ struct chan *cp; /* memory channel pointer */ char s1[LINMAX]; /* string buffer */ FILE *fp_temp; /* * Initialize */ flags = pflags = 0; *defarg = '\0'; rptr = NULL; #ifndef MSDOS /* * Process command-line arguments */ if ((fd_icom = open(DICOM, O_RDWR, 0777)) < 0) { printf("*** Unable to open serial port %s\n", DICOM); exit(1); } while ((temp = getopt(argc, argcv, "c:df:g:km:o:r:")) != -1) { switch (temp) { /* * -d - debug trace */ case 'd': pflags |= P_TRACE | P_ERMSG; continue; /* * -f - open command file */ case 'f': if ((fp_temp = fopen(optarg, "r")) == NULL) { perr(R_IO); exit(R_IO); } fp++; fp_cmd[fp] = fp_temp; continue; /* * -k - select keypad mode */ case 'k': pflags |= P_PAD; continue; /* * -r - select radio. Use default bit rate. */ case 'r': temp = capkey(optarg, identab); if (temp < 0) { perr(temp); exit(temp); } rptr = select_radio(temp, 0); if (rptr == NULL) { perr(R_RAD); exit(R_RAD); } continue; } /* * The remaining options are valid only after a radio * has been selected. If any are selected, the program * exits after executing the command line options. */ if (rptr == NULL) { perr(R_DEF); exit(R_DEF); } rp = rptr; cp = &rp->chan; switch (temp) { /* * -c - set bank, channel * * This is the same as the chan keyboard command. */ case 'c': pflags |= P_EXIT; temp = argchan(rp, cp, optarg); if (temp < 0) { perr(temp); continue; } temp = readchan(rp); if (temp < 0) perr(temp); continue; /* * -g - set frequency * * This is the same as the default frequency keyboard * command. */ case 'g': pflags |= P_EXIT; if (sscanf(optarg, "%lf", &freq) != 1) { perr(R_FMT); continue; } if (freq > 1000) freq /= 1000; temp = loadfreq(rp, freq); if (temp < 0) perr(temp); continue; /* * -m - set mode * * This is the same as the mode keybard command. Note, * this option must precede the -g option for older * radios. */ case 'm': pflags |= P_EXIT; temp = capkey(optarg, rp->modetab); if (temp < 0) { perr(temp); continue; } temp = loadmode(rp->ident, temp); if (temp < 0) perr(temp); continue; } } /* * If a radio was found, initialize it. If its settings were * changed and a command file is not open, assume this is run * from a script and nothing more needs to be done. */ if (pflags & P_EXIT) exit(0); if (pflags & P_PAD) { if (sw_keypad()) pflags &= ~P_PAD; } #endif /* MSDOS */ /* * Main loop */ while (1) { flags &= ~F_CACHE; pflags &= ~(P_DISP | P_DSPCH | P_DSPST | P_KEYP | P_ESC); if (pflags & P_PAD) { /* * Keypad mode. Keypad commands begin with a * sequence of digits and special characters and * end with a single letter, ANSI escape * sequence or '\n', which specifies the * function. Escape sequences consist of ESC * followed by '[' and either a letter or * sequence of digits followed by '~', which is * not part of the command. Help '?' displays a * list of command names and descriptions. */ printf(">"); ptr = s1; *ptr = *args = '\0'; while (1) { chr = (char)getchar(); if (chr == KILL) { printf(" XXX\n>"); ptr = s1; *ptr = *args = '\0'; continue; } if (chr == ESC) { pflags |= P_ESC; *ptr = '\0'; ptr = args; continue; } if (pflags & P_ESC) { if (chr == '~' || chr == '\n') break; *ptr++ = chr; if (isalpha(chr)) break; continue; } if (!isalpha(chr) && !iscntrl(chr) && chr != '?' && chr != ' ') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); continue; } *ptr = '\0'; ptr = args; if (chr != '\n') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); } if (pflags & P_KEYP) putchar('\n'); break; } /* * Rewrite the line with the command letter * first followed by the argument, then pretend * it a keyboard command. */ *ptr = '\0'; strcat(args, " "); strcat(args, s1); argn = getline(args); argi = 0; temp = command(rptr, key); } else { /* * Keyboard mode. Get the next command line and * parse the tokens separated by whitespace. * Ignore '#' and the rest of the line. This is * handy for command script annotations. */ if (fp_cmd[fp] != NULL) { if (fgets(args, LINMAX, fp_cmd[fp]) == NULL) { close(fp_cmd[fp]); fp--; continue; } else { printf("%s", args); } } else { printf("icom>"); if (gets(args) == NULL) exit(0); } if (*args == '#') continue; argn = getline(args); argi = 0; temp = command(rptr, cmd); } perr(temp); if (rptr == NULL) continue; /* * Update chan, freq, mode. */ rp = rptr; cp = &rp->chan; if (pflags & (P_DISP | P_DSPCH | P_DSPST)) { printch(rp, s1); printf("%s\n", s1); } } } /* * Process each command in the line in turn. */ int command( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { int rval; rval = R_OK; if (argn == 0) { pflags |= P_DISP; return (rval); } while (argn - argi > 0) { rval = qqsv(rptr, cmdop); if (rval < 0) break; argi++; } return (rval); } /* * Execute command * * This routine executes a command consisting of a single line beginning * with a command token followed by argument tokens. Some commands cause * this routine to be invoked recursively. In each case the recursive * call points to a command token. */ int qqsv( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { FILE *fp_in; /* data input file */ FILE *fp_out; /* data output file */ char s1[LINMAX]; /* string buffer */ char s2[LINMAX]; /* string buffer */ u_char rsp[BMAX]; /* radio response */ u_char *ptr; /* fiddles */ int i, temp, sw, rval; /* int temps */ FILE *fp_temp; double freq, step, dtemp; /* double temps */ struct chan *cp; /* memory channel pointer */ u_char cmdempty[] = {V_EMPTY, FI}; u_char cmdctl[] = {0, 0, 0, 0, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char cmdwrite[] = {V_WRITE, FI}; u_char cmdtx[] = {V_TX, 0x00, 0x01, FI}; u_char cmdrx[] = {V_TX, 0x00, 0x00, FI}; u_char cmdvfoa[] = {V_SVFO, 0x00, FI}; u_char cmdvfob[] = {V_SVFO, 0x01, FI}; u_char cmdsplit[] = {V_SPLIT, 0x00, FI}; u_char cmdswap[] = {V_SVFO, 0xb0, FI}; struct timeval tv; struct tm *tm; /* * For the 756, 7000 and 7800 time comands */ u_char year7000[] = {V_SETW, 0x05, 0x00, 0x39, FI, 0x00, FI}; u_char date7000[] = {V_SETW, 0x05, 0x00, 0x40, FI, 0x00, FI}; u_char time7000[] = {V_SETW, 0x05, 0x00, 0x41, FI, 0x00, FI}; u_char date7800[] = {V_SETW, 0x05, 0x00, 0x59, FI, 0x00, 0x00, 0x00, FI}; u_char time7800[] = {V_SETW, 0x05, 0x00, 0x60, FI, 0x00, FI}; u_char time756[] = {V_SETW, 0x05, 0x16, FI, 0x00, FI}; /* * Ignore selected noise strings. */ rval = R_OK; if (strcmp(argv[argi], "MHz") == 0 || strcmp(argv[argi], "kHz") == 0 || strcmp(argv[argi], "dB") == 0) return(rval); sw = capkey(argv[argi], cmdop); switch (sw) { /* * radio [ [ ]] * * Select the radio and CI-V bit rate for further * commands and display its description and band limits. If * is missing, use the default from tables. If is * missing and the radio has not been previously defined, the * bus is probed for all known radios, which takes some time. If * previously defined, its description and band limits of are * displayed. */ case C_RADIO: if (argn - argi < 2) { if (rp != NULL) { banner(rp); break; } temp = R_NOR;; for (i = 0; name[i].name[0] != '\0'; i++) { rp = select_radio(name[i].ident, 0); if (rp != NULL) banner(rp); } } else { temp = capkey(argv[++argi], identab); if (temp < 0) return (temp); if (argn - argi < 2) i = 0; else i = capkey(argv[++argi], baud); if (i < 0) return(i); rp = select_radio(temp, i); if (rp != NULL) banner(rp); } if (rptr == NULL) return (R_RAD); pflags |= P_DSPCH; break; /* * include * * include command file. */ case C_INCLD: if (argn - argi < 2) { rval = R_ARG; break; } if ((fp_temp = fopen(argv[++argi], "r")) == NULL) { rval = (R_IO); break; } fp++; fp_cmd[fp] = fp_temp; break; /* * quit * * Quit the dance */ case C_QUIT: exit(0); /* * verbose off | on * * Set verbose mode */ case C_VERB: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], verbx); if (temp < 0) rval = temp; else pflags = (pflags & ~P_VERB) | temp; return (rval); /* * trace [ all | none | bus | pkt ] * * Set debug flags */ case C_DEBUG: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], dbx); if (temp < 0) rval = temp; else pflags = (pflags & ~(P_TRACE | P_ERMSG)) | temp; return (rval); /* * pad * * Switch to keypad mode. */ case C_KEYPAD: if (!sw_keypad()) pflags |= P_PAD; return (rval); /* * / (keypad mode) * * Erase input */ case R_ERR: case C_ERASE: return (rval); /* * q (keypad mode) * * Switch to keyboard mode. */ case C_KEYBD: if (!sw_keybd()) pflags &= ~P_PAD; return (rval); } /* * The remaining commands are valid only after a radio has been * selected. */ if (rp == NULL) return (R_DEF); cp = &rp->chan; switch (sw) { /* * dump vfo (debug) */ case C_DUMP: printf("flags %x pflags %x vfo", flags, pflags); ptr = (u_char *)&cp->vfo; for (i = 0; i < sizeof(struct vfo7000); i++) printf(" %02x", *ptr++ & 0xff); printf("\nsplit %f step %02x pstep %02x %02x atten %02x scan %02x\n", cp->split, cp->aux.step, cp->aux.pstep[0], cp->aux.pstep[1], cp->aux.atten, cp->aux.scan); break; /* * default * * Concatenate remaining tokens as default string for restore. */ case C_DEFLT: if (argn - argi < 2) { printf("default:%s\n", defarg); break; } *defarg = '\0'; while (argn - argi > 1) { strcat(defarg, " "); strcat(defarg, argv[++argi]); } break; /* * time [ set ] * * Set date and time and display for readback. This works for * the 7000 and 756 and maybe works for the 7800. */ case C_TIME: gettimeofday(&tv, NULL); tm = gmtime((time_t *)&tv.tv_sec); /* * 7000 yyyy mm/dd hhmm */ if (rp->ident == 0x70) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &year7000[4]); rval = setcmda(rp->ident, year7000, rsp); if (rval < 0) break; dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7000[4]); setcmda(rp->ident, date7000, rsp); dtohex(tm->tm_hour * 100 + tm->tm_min, &time7000[4]); setcmda(rp->ident, time7000, rsp); } year7000[4] = FI; setcmda(rp->ident, year7000, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); date7000[4] = FI; setcmda(rp->ident, date7000, rsp); sprintf(s2, "%x/%x ", rsp[4], rsp[5]); strcat(s1, s2); time7000[4] = FI; setcmda(rp->ident, time7000, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 7800 yyyy mm/dd hhmm */ } else if (rp->ident == 0x6a) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &date7800[4]); dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7800[6]); rval = setcmda(rp->ident, date7800, rsp); if (rval < 0) break; dtohex(tm->tm_hour * 100 + tm->tm_min, &time7800[4]); setcmda(rp->ident, time7800, rsp); } date7800[4] = FI; setcmda(rp->ident, date7800, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); sprintf(s2, "%x/%x ", rsp[6], rsp[7]); strcat(s1, s2); time7800[4] = FI; setcmda(rp->ident, time7800, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 756 hhmm */ } else { if (argn - argi > 1) { ++argi; dtohex(tm->tm_hour * 100 + tm->tm_min, &time756[3]); rval = setcmda(rp->ident, time756, rsp); if (rval < 0) break; } time756[3] = FI; setcmda(rp->ident, time756, rsp); sprintf(s1, "%02x%02x UTC", rsp[3], rsp[4]); } printf("%s\n", s1); break; /* * (command not found) * * We get here if the token matches no valid command name. If it * has valid floating-point format, set the frequency as given. * If it is a valid mode name, then set the mode as given. * Otherwise, declare an error. */ case C_FREQX: if (sscanf(argv[argi], "%lf", &freq) == 1) { if (freq > 1000.) freq /= 1000; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DISP; break; } temp = capkey(argv[argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* * mode * * The only reason this command is here is to provide help with * the valid mode combinations. The following radios support the * mode variants listed (1 narrow, 2 medium, 3 wide). * * usb/lsb cw/rtty am fm wfm * 706g 2, 3 1, 2, 3 2, 3 2, 3 1 * 756 1, 2, 3 1, 2, 3 1, 2, 3 2, 3 no * 7000 1, 2, 3 1, 2, 3 1, 2, 3 1, 2, 3 1 * R8500 1, 2, 3 1, 2, 3 1, 2, 3 1, 2 1 */ case C_MODE: if (argn - argi < 2) { pflags |= P_DISP; break; } temp = capkey(argv[++argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* *************************************************************** * * * These commands are the bread and butter for most operators. * * They can be used to enter and display frequency and mode * * data and, when available, filter configuration. Note the * * difference between the freq and chan commands; the freq * * command operates directly on the VFO, while the chan * * command retrieves the entire channel contents, including in * * the 7000 both VFOs and channel name. * * * *************************************************************** */ /* *************************************************************** * * * The save and restore commands are used to save a single * * channel or block of channels to a file and restore them * * from a file. They can also be used to clone data between * * compatible radios. The read, write and empty commands * * operate on a single channel or block of channels. * * * *************************************************************** * * The arguments to these commands specify a single bank/chanel * number or a range of bank/channel numbers. See argchan() for * syntax */ /* * save [ chan ] [ file ] * * Save a block of memory channels to a file. */ case C_SAVE: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp);; if ((fp_out = fopen(argv[++argi], "w")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (cp->freq != 0) fprintf(fp_out, "%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } fclose(fp_out); pflags &= ~P_DSPCH; break; /* * restore [ chan ] [ file ] * * Restore a block of memory channels from a file. If the * argument is '*', restore each file line to the same memory * channel it came from. If not, restore the block specified, * from the first channel to the lase. */ case C_RESTORE: if (argn < 3) return (R_ARG); if (*argv[++argi] == '*') temp = 4; else temp = argchan(rp, cp, argv[argi]); if (temp < 0) return (temp); if ((fp_in = fopen(argv[++argi], "r")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { /* * Get next line from file. Ignore empty lines. */ if (fgets(s1, LINMAX, fp_in) == NULL) break; if (*defarg != '\0') { strcpy(s2, defarg); argn = getline(s2); argi = 0; if (argn == 0) continue; rval = command(rp, loadtab); if (rval < 0) break; } argn = getline(s1); argi = 0; if (argn == 0) continue; /* * If '*' argument, copy the data to the channel * specified on the file line. If not, copy the * data to the channel specified in the * argument. */ emptyvfo(cp); if (temp == 4) { rval = argchan(rp, cp, argv[argi++]); if (rval < 0) break; if (argn == 1) continue; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; } else { if (argn == 1) continue; argi++; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } } close(fp_in); pflags &= ~(P_DISP | P_DSPCH); break; /* * read [ chan ] * * Read frequency, mode and other data from a memory channel. * While it seems silly, specifying a block of channels reads * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_READ: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) { if (temp == R_NOP) capkey("?", loadtab); return (temp); } pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } pflags &= ~P_DSPCH; break; /* * write [ chan ] * * Write the current frequency, mode and other data to a memory * channel. Various radios interpret other data in various ways. * For the 7000, this includes both VFOs with their current * mode, filter setting, duplex and CTSS/DTCS configuration. * While it seems silly, specifying a block of channels writes * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_WRITE: if (argn < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } break; /* * empty [ chan ] [ chan ] * * Empty memory channel or block of memory channels. */ case C_EMPTY: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = emptychan(rp->ident, cp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } cp->freq = 0; break; /* * bank [ bank ] [ name ] [...] * * Read/write bank name. This works for the R8500 and maybe * R9000, but not for known transceivers, which don't have a * bank name. */ case C_BANK: if (argn - argi < 2) temp = cp->bank; else if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (argn > 2) loadbank(rp->ident, temp, cp->name); rval = readbank(rp->ident, temp, s1); if (rval < 0) break; cp->bank = temp; printf("bank %d %s\n", temp, s1); break; /* *************************************************************** * * * The following commands can provide software compensation * * for VFO or BFO frequency errors. Some radios generate BFO * * frequencies using a VCXO for each mode. The BFO * * compensation command corrects for the intrinsic frequency * * error (Hz) in each mode. Other radios generate all LO and * * BFO frequencies from a single VFO synthesizer. The VFO * * compensation corrects for the intrinsic frequency error * * (PPM). As each radio is different, these commands should * * probably live in a batch file. * * * *************************************************************** */ /* * vfocomp [ ] * * Set the VFO frequency compensation (PPM). */ case C_VCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->freq_comp = freq; } printf("frequency %f VFO offset %.2f PPM\n", cp->freq, rp->freq_comp); break; /* * bfocomp [ ] * * Set the BFO frequency compensation (Hz). */ case C_BCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->bfo[cp->mode & 0x0f] = freq; } freq = rp->bfo[cp->mode & 0x0f]; printf("mode %s BFO offset %.0lf Hz\n", capname(cp->mode, rp->modetab), freq); break; /* *************************************************************** * * * Radio commands that read and write internal registers, * * including VFO options, scan options, and duplex/simplex * * options. * * * *************************************************************** */ /* * Modern transceivers have two VFOs, called A and B, * alternatively main and sub, and two frequency/mode displays. * Each VFO is associated with mode and memory channel. The * functions of the vfo commands differ in funky ways on the * various transceivers. * * On the 7000 a "vfo a" command shows VFO A on the main display * and VFO B on the sub display. A "vfo b" command shows VFO B * on the main display and VFO A on the sub display. A "vfo * btoa" command copies the contents of VFO B to VFO A. A "vfo * swap" command interchanges the contents of VFO A and VFO B. * The 7000 can't do any of the other vfo commands. * * On the 756 the main display is at the top in large bright * font, while the sub display is at the bottom in small dim * font. Each display is associated with a VFO and a memory * channel. The mode, duplex direction and tone configuration * can be set separately for each VFO. Both VFOs and related * data can be saved in a memory channel. Ordinarily, updates * from the panel controls and this program go to the main VFO. * A "split sub" command switches updates to the sub VFO, while * a "split main" command switches back to the main VFO. Note * that the updated VFO is highlighted in bright font. A "vfo * equal" command copies the contents of the main VFO to the sub * VFO, while a "vfo swap" command interchanges the contents of * the two VFOs. The "vfo watch" and "vfo nowatch" turn the * dual-watch function on and off. Note that in dual-watch the * sub VFO is highlihted in large font. * * vfo [ ] (V_SVFO 0x07 command) * * Execute one of the subcommands on the help menu. */ case C_VFO: rval = setswitch(rp, vfo, V_SVFO); if (rval < 0) break; pflags |= P_DSPCH; break; /* * swap (V_SVFO 0x07 command) * * Swap the contents of VFO A and VFO B and make the swapped VFO * active to enter frequency and mode. This is the same function * as the "vfo swap" command useful in keypad mode to monitor * the transmit frequency. */ case C_SWAP: rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; pflags |= P_DSPCH; break; /* * split [ cmd ] (V_SPLIT 0x0f command) * * Use VFO A for receive and VFO B for transmit. * * Ordinarily, ICOM transceivers transmit and receive with VFO * on VFO A. A "split on" command transmits with VFO B, while a * "split off" restores the normal behavior. The 7000 can do * "split dup+", "split dup-" and "split simplex" as well. * * In addition to the split commands on the help menu, this * command can be used to set the transmit offset in kHz if the * argument is preceeded by a + or - or to an arbitrary value in * MHz if an unsigned value. */ case C_SPLIT: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) == 1) { if (freq > 1000) freq /= 1000; readvfo(rp); if (argv[argi][0] == '+' || argv[argi][0] == '-') { freq /= 1000.; freq += cp->freq; } cp->split = freq; if (cp->split == 0) { cmdsplit[1] = 0x00; rval = setcmda(rp->ident, cmdsplit, rsp); pflags |= P_DSPCH; break; } rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; rval = loadfreq(rp, freq); if (rval < 0) break; rval = loadmode(rp->ident, cp->mode); if (rval < 0) break; setcmda(rp->ident, cmdvfoa, rsp); cmdsplit[1] = 0x01; setcmda(rp->ident, cmdswap, rsp); pflags |= P_DSPCH; break; } argi--; } rval = setswitch(rp, split, V_SPLIT); if (rval < 0) break; pflags |= P_DSPCH; break; /* * mvfo (V_VFOM 0x0a command) * * Read memory channel and transfer to VFO. This works for the * 756 and 7000. The radio does this his in memory channel mode, * so this program does it in VFO mode. In principle, this * command should never be necessary, but is included for test * and exploration. */ case C_VFOM: if (argn - argi < 2) rval = argchan(rp, cp, NULL); else rval = argchan(rp, cp, argv[++argi]); if (rval < 0) break; rval = readchan(rp); if (rval < 0) break; rval = setcmda(rp->ident, cmdvfom, rsp); break; /* * duplex [ duplex ] * * Set transmit offset for FM duplex. This works with the 706G * and 7000, which have four duplex registers, one for each of * the HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read * and write these registers, the frequency must be first set * within the correct band. */ case C_DUPLEX: if (argn - argi < 2) { rval = readoffset(rp->ident, &freq); if (rval < 0) break; printf("duplex %.1f\n", freq); break; } if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rval = loadoffset(rp->ident, freq); break; /* * scan [ ] (V_SCAN 0x0e command) * * Perform awesome scans, both memory an channel. Some * radios have simply awesome scanning modes; others are * mostly bare. Need some volunteer experimentors here. */ case C_SCAN: return (setswitch(rp, scan, V_SCAN)); /* *************************************************************** * * * Tuning step and rate commands. The step and rate commands * * should work for all radios, as they do not use the radio * * tuning-step functions. The dial command works with the * * radio tuning-step functions, so is model dependent. * * * *************************************************************** */ /* * rate [ ] * * Set tuning rate. The values of from 0 through 20 * select the rate values in a 1-2.5-5-10 sequence. Warning: if * the frequency resolution (minimum tuning step) is 10, 100, * 1000 Hz, etc., the nexxt step up would be 25, 250, 2500, * etc., which is not a multiple of the minimum tuning step. In * such cases the step is rounded to 20, 200, 2000, etc. */ case C_RATE: if (argn - argi > 1) { if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (temp > 20) temp = 20; else if (temp < rp->minstep) temp = rp->minstep; rp->rate = temp; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; } pflags |= P_DSPST; break; /* * rate up (keypad) * * Set tuning rate up one notch. */ case C_RUP: if (rp->rate < 20) rp->rate++; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * rate down (keypad) * * Set tuning rate down one notch. */ case C_RDOWN: if (rp->rate > rp->minstep) rp->rate--; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * Tuning step commands. The step command sets the tuning step * directly to an arbitrary value. The up and down commands * shift the frequency up or down by the value of the tuning * step. * * step [ ] * * Set tuning step directly in Hz. This is useful when scanning * odd channel spacings, such as aviation and marine radio * channels. Note that the tuning rate is set to minimum here, * since otherwise the rounding process would violate the * principle of least astonishment. */ case C_STEP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &dtemp) != 1) return (R_FMT); if (dtemp < logtab[rp->minstep]) dtemp = logtab[rp->minstep]; rp->step = dtemp; rp->rate = rp->minstep; } pflags |= P_DSPST; break; /* * up (keypad) * * Tune up one step. */ case C_UP: freq = cp->freq + rp->step / 1e6; if (freq >= rp->ustep) freq = rp->lstep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * down (keypad) * * Tune down one step. */ case C_DOWN: freq = cp->freq - rp->step / 1e6; if (freq < rp->lstep) freq = rp->ustep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * band [ ] [ ] * * Set band scan limits. An up or down via keypad beyond the * upper limit wraps to the lower limit and vice-versa. */ case C_BAND: if (argn - argi < 2) { printf("band %s\n", capdescr("band", rp->cap)); break; } if (argn - argi < 3) return (R_ARG); if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); if (sscanf(argv[++argi], "%lf", &step) != 1) return (R_FMT); if (freq > step) { dtemp = freq; freq = step; step = dtemp; } if (freq < rp->lband) freq = rp->lband; rp->lstep = freq; if (step > rp->uband) step = rp->uband; rp->ustep = step; break; /* *************************************************************** * * * Control commands. These are used to set switches, twirl * * controls and read meters. Various radios implement none or * * a subset of the defined functions. * * * *************************************************************** */ /* * ctl [ name ] [ value ] (V_WRCTL 0x14 command) * * The ctl subcommand reads or writes internal registers * associated with a front panel control. The 756 and 7000 can * read and write them. The 706G can read these registers but * cannot write them. The R8500 can write them but not read * them. Most radios implement only a subset of the defined * subcommands. */ case C_CTRL: if (argn - argi < 2) { for (i = 0; ctlc[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, ctlc[i].ident, rsp); if (temp < 0) continue; printf("%10s %s\n", ctlc[i].name, rsp); } break; } temp = capkey(argv[++argi], rp->ctrl); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn < 3) { cmdctl[2] = FI; rval = readmeter(rp, ctlc, temp, s1); if (rval < 0) break; printf("%s\n", s1); } else { if (sscanf(argv[++argi], "%d", &sw) != 1) return (R_FMT); sw = (sw * 255) / 100; if (temp >> 16 == F) sw += 128; sprintf(s1, "%04d", sw); ptr = s1; cmdctl[2] = (*ptr++ & 0xf) * 16; cmdctl[2] += *ptr++ & 0xf; cmdctl[3] = (*ptr++ & 0xf) * 16; cmdctl[3] += *ptr++ & 0xf; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * meter [ name ] [ value ] (V_RMTR 0x15 command) * * The meter subcommands report current meter indications. Note * that the S meter is reported in S units and dB above S9. The * squelch condition is reported as open (signal) or closed * (silent). * * The 706G can read the signal and sql meters. */ case C_METER: if (argn - argi < 2) { for (i = 0; meter[i].name[0] != '\0'; i++) { temp = readmeter(rp, meter, meter[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", meter[i].name, s1); } break; } temp = capkey(argv[++argi], meter); if (temp < 0) return (temp); rval = readmeter(rp, meter, temp, s1); if (rval == R_OK) printf("%s\n", s1); break; /* * set [ name ] [ value ] (V_TOGL 0x16 command) * * The switch subcommands read or write internal switches. */ case C_SWTCH: if (argn - argi < 2) { for (i = 0; switches[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, switches[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", switches[i].name, s1); } break; } temp = capkey(argv[++argi], switches); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn - argi < 2) { cmdctl[2] = FI; rval = readmeter(rp, switches, temp, s1); break; } else { temp >>= 16; if (temp == A) { temp = capkey(argv[++argi], agc); } else if (temp == B) { temp = capkey(argv[++argi], fmtb); } else if (temp == W) { temp = capkey(argv[++argi], fmtw); } else { sscanf(argv[++argi], "%d", &temp); sprintf(s1, "%02d", temp); ptr = s1; temp = (*ptr++ & 0xf) * 16; temp += *ptr++ & 0xf; } if (temp < 0) return (temp); cmdctl[2] = temp; cmdctl[3] = FI; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * dial [ ] (V_DIAL 0x10 command) * * Set dial tuning step. This command works with all radios, * including the 775 and R8500; however, the allowable arguments * are different. Note that in the R8500 the allowable steps are * constrained to multiples of 0.5 kHz. */ case C_DIAL: if (argn - argi < 2) { temp = cp->aux.step; if (temp != 0x13) printf("dial %s kHz\n", capname(temp, rp->dialtab)); else printf("dial %.1f kHz\n", freqdouble(cp->aux.pstep, 2) / 10); break; } /* * Construct V_DIAL command for tuning step. */ ptr = s1; *ptr++ = V_DIAL; dtemp = 0; temp = capkey(argv[++argi], rp->dialtab); if (temp < 0) return (temp); if (temp == 0x13) { if (sscanf(argv[argi], "%lf", &dtemp) != 1) return (R_FMT); } *ptr++ = temp; *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) break; /* * Save step and programmed step for later. */ cp->aux.step = temp; doublefreq(dtemp * 10, s1, 2); memcpy(cp->aux.pstep, s1, 2); break; /* *************************************************************** * * * CTSS and DTCS commands. These commands turn on and off and * * program the repeater tone (tone), tone squelch (tsql) and * * digital tone squelch (dtcs) functions. * * * *************************************************************** * * The syntax for all three commands is the same; * * tone reports the status and frequency/code * tone off turns off the function * tone on turns on the function * tone turns on the function and programs the * frequency/code * tone ? reports a list of valid CTSS/DTCS code * tsql ? values. The must be identical to * an item in the list. * * dtcs ? reports a list of valid DTCS code values. The * must be identical to an item on the list. * The polarity codes "-pp" are appended, where pp * are N (upright) or N (inverted). * * The three commands are mutually exlusive; setting one of them * on turns off the others. */ /* * tone [ args ] (V_TONE 0x1b command) * * Set the repeator tone CTSS frequency. This works for the 756 * and 7000. */ case C_TONE: return (setswitch3(rp, tone, 0x00, 0x42)); /* * tsql [ args ] (V_TONE 0x1b command) * * Set the tone squelch CTSS frequency. This works for the 756 * and 7000. */ case C_TSQL: return (setswitch3(rp, tone, 0x01, 0x43)); /* * dtcs [ args ] (V_TONE 0x1b command) * * Set the digital tone squelch DTCS code. This works only for * the 7000. */ case C_DTCS: return (setswitch3(rp, dtcs, 0x02, 0x4b)); /* *************************************************************** * * * Utility commands. Select the antenna, attenuator, preamp, * * agc and and break-in options. * * * *************************************************************** */ /* * The duplex, preamp and attenuator commands can be set for * each band segment. There are four duplex offset registers, * one each fot HF, 6 m, 2 m and 70 cm bands. The preamp and * attentuator settings are stored by band segment as follows: * * 703g 756 7000 * .3-1.6 .3-1.6 .03-1.6 * 1.6-2 1.6-2 1.6-2 160 m * 2-5 2-6 2-6 80 m * 5-8 6-8 6-8 40 m * 8-11 8-11 8-11 30 m * 11-20 11-20 20, 17 m * 11-15 20 m * 15-20 17 m * 20-22 20-22 20-22 15 m * 22-26 22-26 22-26 12 m * 26-40 26-45 26-30 10 m * 40-60 45-60 45-129 6 m * 129-144 * 60-148 144-148 2 m * 148-200 * 400-470 400-470 70 sm */ /* * ant [ 1 | 1R | 2 | 2R ] (V_SANT 0x12 command) * * Select antenna. Transceivers like the 756 have two antennas * (1, 2) for transmit/receive and a third (R) for receive only. * For instance, option 1R selects antenna 1 for transmit and R * for receive. */ case C_ANT: argv[argi] = capname(sw, cmd); return (setswitch(rp, ant, V_SANT)); /* * atten [ ] (V_ATTEN 0x11 command) * * Set attenuator options. The options include all known * attentuator options in dB. Following are the known values for * a few modern radios. * * 706G 20 dB * 756, 7000 6, 12, 18 dB * R8500 10, 20, 30 dB */ case C_ATTEN: argv[argi] = capname(sw, cmd); return (setswitch(rp, atten, V_ATTEN)); /* * preamp [ off | 1 | 2 ] * * Set preamp options. Some radios have none, one or two preamp * settings. * * 706G, 7000 1 * 756 2 * R8500 none */ case C_PAMP: argv[argi] = capname(sw, cmd); return (setswitch2(rp, preamp, (V_TOGL << 8) | 0x02)); /* * agc [ slow | medium | fast ] * * Set AGC options. Some radios have none or a subset of these * options. * * 706G medium, fast * 756, 7000 slow, medium, fast * R8500 slow (agcslow), fast (agcfast) */ case C_AGC: argv[argi] = capname(sw, cmd); return (setswitch2(rp, agc, (V_TOGL << 8) | 0x12)); /* * break [ off | semi | full ] * * Set break options. This works on the 706G, 756 and 7000. */ case C_BREAK: argv[argi] = capname(sw, cmd); return (setswitch2(rp, fmtb, (V_TOGL << 8) | 0x47)); /* *************************************************************** * * * Power and voice commands. These commands control the power * * to the radio, turn the transmitter on and off and report * * the status by voice. * * * *************************************************************** */ /* * power [ off | on ] (V_POWER 0x18 command) * * Set power on/off. The radio will be powered off after the * sleep interval, but it will still listen for a power on * command. This works only on the R8500. */ case C_POWER: return (setswitch(rp, power, V_POWER)); /* * ptt (V_PTT 0x1c command) * * Display transmit condition; turn transmitter on and off. */ case C_PTT: return (setswitch2(rp, tx, V_TX << 8 | 0x00)); /* * rx (V_TX 0x1c command). Turn transmitter off. */ case C_RX: return (setcmda(rp->ident, cmdrx, rsp)); /* * tx (V_TX 0x1c command). Turn transmitter on. */ case C_TX: return (setcmda(rp->ident, cmdtx, rsp)); /* * say [ all | freq | mode ] (V_ANNC 0x13 command) * * Set announce control off/on. This requires the UT-102 Voice * Synthesizer Unit, which is standard in the 7000. */ case C_ANNC: return (setswitch(rp, say, V_ANNC)); /* *************************************************************** * * * Mongrels. These commands are used for testing and just * * playing around. * * * *************************************************************** */ /* * name * * Set channel name. Enclose in quotes if contains * spaces. */ case C_NAME: if (argn - argi < 2) printf("%s\n", cp->name); else strlcpy(cp->name, argv[++argi], sizeof(cp->name)); break; /* * key (V_SETW 0x1a command) * * Program memory keyer (756 and 7000). Each of four memory * keyer channels can hold 55 characters. */ case C_KEY: if (argn - argi < 2) { rval = R_ARG; break; } /* * Get memory keyer ID (1-4) */ ptr = s1; *ptr++ = V_SETW; *ptr++ = 0x02; if (sscanf(argv[++argi], "%d", &temp) != 1) { rval = R_FMT; break; } *ptr++ = temp; /* * If no argument string, read from radio. Remove * trailing spaces from the radio string. */ if (argn - argi < 2) { *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) return (rval); for (i = rval - 2; i > 2; i--) { if (rsp[i] == ' ') rsp[i] = '\0'; else break; } temp = rsp[2]; printf("%d (%d) %s\n", temp, i - 2, &rsp[3]); break; } /* * Concatenate remaining strings and send to radio. */ *ptr = '\0'; temp = 55; while (argn - argi > 1 && temp > 0) { strncat(s1, argv[++argi], temp); strcat(s1, " "); temp -= strlen(argv[argi]) + 1; } s1[strlen(s1) - 1] = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * Miscellaneous control (S_CTRL) subcommands. */ case C_MISC: return (setswitch2(rp, misc, V_TOGL)); /* * test BCD * * Send CI-V test message */ case C_TEST: if (argn - argi < 2) break; ptr = s1; for (i = 1; i < argn; i++) { sscanf(argv[++argi], "%x", &temp); *ptr++ = temp; } *ptr = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * step (r8500) */ C_XSTEP: if (sscanf(argv[++argi], "%x", &temp) != 1) { rval = R_FMT; break; } cp->aux.step = temp; break; /* * pstep (r8500) */ C_PSTEP: break; } return (rval); } /* * capname(ident, table) - returns capability name given key */ char * /* capability name, "" (not found) */ capname( int ident, /* capability key */ struct cmdtable *table /* capability table */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (table[i].ident == ident) return (table[i].name); } return (""); } /* * capkey(name, table) - returns capability key given name */ int /* capability key, -1 (not found) */ capkey( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i, temp; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (R_NOP); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0 || *table[i].name == '*') break; } if (table[i].ident == R_NOP) printf("*** %s\n", table[i].descr); return (table[i].ident); } /* * capdescr(name, table) - returns capability description given name */ char * /* capability string, "" (not found") */ capdescr( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (""); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) break; } return (table[i].descr); } /* * setcap(name, table, string) - insert capability string */ void setcap( char *name, /* capability name */ struct cmdtable *table, /* capability table */ char *string /* capability string */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) { strcpy(table[i].descr, string); return; } } strcpy(table[i].name, name); strcpy(table[i].descr, string); table[i + 1].name[0] = '\0'; table[i + 1].ident = R_NOP; table[i + 1].descr[0] = '\0'; } /* * setswitch(radio, name, op) - V_VFO, V_SPLIT, V_SCAN, V_SANT, V_ATTEN, * V_POWER, V_TX, V_ANNC. * * Commands with a single character command and one argument, with the * single exception of the V_SANT, which can have one or two arguments * depending on the radio type. Only the V_SANT and V_ATTEN can */ static int setswitch( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { struct chan *cp; struct vfo7000 *vp; u_char cmd[BMAX], rsp[BMAX]; int temp, rval; cmd[0] = op; cmd[1] = FI; if (argn - argi < 2) { /* * Read data from radio. Only the V_SANT and V_ATTEN * return unambigous data. The V_SANT returns one or two * octets depending on the transceiver model. The R8500 * can't return anything. */ switch (op) { case V_SANT: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; if (rsp[2] != FI) temp |= rsp[2] << 8; printf("%s %s\n", argv[argi], capname(temp, cmmd)); break; case V_ATTEN: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; printf("%s %s dB\n", argv[argi], capname(temp, cmmd)); break; case V_ANNC: cmd[1] = 0x00; cmd[2] = FI; rval = setcmda(rp->ident, cmd, rsp); pflags |= P_DISP; break; default: rval = R_ARG; } } else { /* * Write data to the radio. First, decode argument. */ temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = FI; /* * For the ant command, find out if one or two * subcommand bytes follow. */ if (op == V_SANT) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); if (rsp[2] != FI) { cmd[2] = temp >> 8; cmd[3] = FI; } } cmd[1] = temp; rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); /* * For the attenuator command, copy attenuator code for * R8500. */ if (op == V_ATTEN) { cp = &rp->chan; cp->aux.atten = temp; /* * For the split duplex subcommands, edit mode2. */ } else if (op == V_SPLIT) { cp = &rp->chan; vp = &cp->vfo; switch (temp) { case 0x10: /* simplex */ vp->mode2 = (vp->mode2 & 0x0f) | 0x00; break; case 0x11: /* dup- */ vp->mode2 = (vp->mode2 & 0x0f) | 0x10; break; case 0x12: /* dup+ */ vp->mode2 = (vp->mode2 & 0x0f) | 0x20; break; } } } return (rval); } /* * setswitch2(radio, name, op) - V_PAMP, V_AGC, V_BREAK, V_PTT and * V_MISC. * * Commands with a two-octet command and one argument. */ static int setswitch2( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { u_char cmd[BMAX], rsp[BMAX]; int temp, rval, i; rval = R_OK; cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; if (argn - argi < 2) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident & 0xff) == rsp[2]) { printf("%s %s\n", argv[argi], cmmd[i].name); break; } } } else { temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = temp; cmd[3] = FI; rval = setcmda(rp->ident, cmd, rsp); } return (rval); } /* * setswitch3(radio, name, op, sw) - V_TONE, etc. * * This routine is used with the tone, tsql and dtcs commands, which * turn on and off and program CTSS tones and DTCS codes. */ static int setswitch3( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op, /* command code */ int sw /* switch code */ ) { struct chan *cp; struct vfo7000 *vp; u_char rsp[BMAX]; int temp, rval, i; u_char cmdctl[] = {V_TONE, 0, 0, 0, 0, FI}; u_char cmdswt[] = {V_TOGL, 0, 0, FI}; char *token; cmdctl[1] = op; cmdctl[2] = FI; cmdswt[1] = sw; cmdswt[2] = FI; if (argn - argi < 2) { /* * Read switch code */ rval = setcmda(rp->ident, cmdswt, rsp); if (rval < 0) return (rval); temp = rsp[2]; token = capname(temp, toneon); /* * Read frequency/code */ rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); temp = rsp[3] << 8 | rsp[4]; for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident) == temp) { if (cmdctl[1] == 0x02) { temp = rsp[2]; printf("%s %s (%s-%s)\n", argv[argi], token, cmmd[i].name, capname(temp, polar)); } else { printf("%s %s (%s Hz)\n", argv[argi], token, cmmd[i].name); } } } } else { /* * Set frequency/code. Repeater tone and tone squelch * frequencies are in nn.n Hz and tenths. Digital tone * squelch codes are in nn-pp code polarity. */ token = strtok(argv[++argi], "-"); temp = capkey(token, cmmd); if (temp < 0) return (temp); cp = &rp->chan; vp = &cp->vfo; if (temp > 0x01) { cmdctl[3] = temp >> 8; cmdctl[4] = temp; token = strtok(NULL, "-"); if (token == NULL) { cmdctl[2] = 0; } else { temp = capkey(token, polar); if (temp < 0) return (temp); cmdctl[2] = temp; } rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); /* * Update VFO tones */ switch (op) { case 0: memcpy(&vp->tone, &cmdctl[2], 3); break; case 1: memcpy(&vp->tsql, &cmdctl[2], 3); break; case 2: memcpy(&vp->dtcs, &cmdctl[2], 3); break; } temp = 0x01; } /* * Set switch code */ vp->mode2 &= 0xf0; if (temp == 0x01) vp->mode2 += op + 1; cmdswt[2] = temp; rval = setcmda(rp->ident, cmdswt, rsp); } return (rval); } /* * readmeter(radio, optab, op, pstring) - V_METER, V_TOGL */ static int readmeter( struct icom *rp, /* radio structure */ struct cmdtable *optab, /* command table */ int op, /* operation code */ char *s2 /* result string */ ) { u_char cmd[] = {0, 0, 0, 0, FI}; char rsp[BMAX], *ptr; int temp, i; /* * Read register or switch */ cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; temp = setcmda(rp->ident, cmd, rsp); if (temp < 0) return (temp); if (temp < 5) temp = ((rsp[2] >> 4) & 0xf) * 10 + (rsp[2] & 0xf); else temp = ((rsp[2] >> 4) & 0xf) * 1000 + (rsp[2] & 0xf) * 100 + ((rsp[3] >> 4) & 0xf) * 10 + (rsp[3] & 0xf); ptr = capname(op, optab); /* * Format as required */ switch (op >> 16) { case A: /* agc */ if (temp == 1) strcpy(s2, "fast"); else if (temp == 2) strcpy(s2, "mid"); else if (temp == 3) strcpy(s2, "slow"); break; case B: /* breakin */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "semi"); else if (temp == 2) strcpy(s2, "full"); break; case F: /* signed control */ sprintf(s2, "%d", ((temp - 128) * 100) / 256); break; case G: /* unsigned control */ sprintf(s2, "%d", (temp * 100) / 256); break; case P: /* preamp */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "1"); else if (temp == 2) strcpy(s2, "2"); break; case Q: /* squelch */ if (temp == 1) strcpy(s2, "open"); else strcpy(s2, "closed"); break; case S: /* S meter */ for (i = 0; temp > mtab[i].smeter; i++); strcpy(s2, mtab[i].pip); break; case W: /* miscellaneous switch */ if (temp == 0) strcpy(s2, "off"); else strcpy(s2, "on"); break; } return (R_OK); } /* * banner - format and print banner */ void banner( struct icom *rp /* radio structure pointer */ ) { printf("radio %s (%02x) %g-%g MHz chan %d bank %d baud %s\n", capdescr(rp->name, identab), rp->ident, rp->lband, rp->uband, rp->maxch - rp->minch + 1, rp->maxbk - rp->minbk + 1, capname(rp->baud, baud)); rptr = rp; } /* * printch - format and print channel data */ static void printch( struct icom *rp, /* radio structure pointer */ char *s1 /* prettyprint string */ ) { struct chan *cp; struct vfo7000 *vp; char s2[LINMAX]; char *s3; int temp; double dtemp; /* * Reveal frequency and mode */ cp = &rp->chan; vp = &cp->vfo; readvfo(rp); if (cp->freq == 0) { if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d empty", cp->bank, cp->mchan); else sprintf(s1, "%2d empty", cp->mchan); return; } if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d %.*f MHz %s", cp->bank, cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); else sprintf(s1, "%2d %.*f MHz %s", cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); if (pflags & P_DSPST) { sprintf(s2, " rate %d step %.0f Hz", rp->rate, rp->step); strcat(s1, s2); } if (!(pflags & P_DSPCH)) return; if (flags & (F_7000 | F_756)) { /* * Reveal split */ if (cp->split != 0) { sprintf(s2, " split %.*f MHz", sigtab[rp->rate], cp->split); strcat(s1, s2); } /* * Reveal duplex direction */ temp = vp->mode2 & 0xf0; switch(temp) { case 0x10: strcat(s1, " split dup-"); break; case 0x20: strcat(s1, " split dup+"); break; } /* * Reveal tone squelch info */ temp = vp->mode2 & 0xf; switch (temp) { case 1: temp = (vp->tone[1] << 8) | vp->tone[2]; sprintf(s2, " tone %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 2: temp = (vp->tsql[1] << 8) | vp->tsql[2]; sprintf(s2, " tsql %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 3: temp = (vp->dtcs[1] << 8) | vp->dtcs[2]; sprintf(s2, " dtcs %s-", capname(temp, dtcs)); strcat(s1, s2); temp = vp->dtcs[0] & 0x3; sprintf(s2, "%s", capname(temp, polar)); strcat(s1, s2); } } else if (flags & F_8500){ /* * Reveal tuning step. */ if (cp->aux.step != 0) { temp = cp->aux.step; if (temp != 0x13) sprintf(s2, " dial %s kHz", capname(temp, rp->dialtab)); else sprintf(s2, " dial %.1f kHz", freqdouble(cp->aux.pstep, 2) / 10); strcat(s1, s2); } /* * Reveal attentuator setting. */ if (cp->aux.atten != 0) { sprintf(s2, " atten %x dB", cp->aux.atten); strcat(s1, s2); } } /* * Reveal channel name enclosed in quotes ". */ if (cp->name[0] != '\0') { sprintf(s2, " name \"%s\"", cp->name); strcat(s1, s2); } } /* * Print error comment */ static void perr( int temp /* error code */ ) { switch (temp) { case R_CMD: printf("*** unknown command\n"); break; case R_ARG: printf("*** unknown or missing command argument\n"); break; case R_FMT: printf("*** invalid argument format\n"); break; case R_RAD: printf("*** unknown radio\n"); break; case R_NOR: printf("*** no radios found\n"); break; case R_DEF: printf("*** radio not defined\n"); break; case R_ERR: printf("*** radio can't do that\n"); break; case R_IO: printf("*** file open error\n"); break; } } /* * Getline(str) - process input line and extract tokens * * Blank lines and comments beginning with '#' are ignored and the * string converted to lower case. The resulting tokens are saved in the * *argv[] array. The number of tokens found is returned to the caller. */ static int /* number of tokens */ getline( char *str /* pointer to input string */ ) { char *ptr; char xbreak[] = " ,\t\n\0"; char sbreak[] = "\"\n\0"; int i, temp; /* * Trim trailing \r and comments */ ptr = strchr(str, '\r'); if (ptr != NULL) *ptr = '\0'; ptr = strchr(str, '#'); if (ptr != NULL) *ptr = '\0'; /* * Scan for tokens delimited by space, comma, tab, newline or * null. Arbitrary strings begin with quote " and end with * quote, newline or null. Quotes are not included in the token. */ ptr = str; for (i = 0; i < ARGMAX;) { temp = strspn(ptr, xbreak); ptr += temp; if (*ptr == '\0') break; if (*ptr == '"') { argv[i++] = ++ptr; temp = strcspn(ptr, sbreak); } else { argv[i++] = ptr; temp = strcspn(ptr, xbreak); } ptr += temp; if (*ptr == '\0') break; *ptr++ = '\0'; } argn = i; return (i); } /* * argchan(radio, chan, sptr) - decode channel argument * * NULL current bank/channel * $ all channels, current bank * b:$ all channels, bank b * $:$ all channels, all banks * + current bank/channel plus 1 with wrap * - current bank/channel minus 1 with wrap * c channel c, current bank * b.c channel c, bank b * c1:c2 channel range c1-c2, current bank with wrap * b1.c1:b2.c2 channel range b1.c1-b2.c2 with wrap * * returns 0 if single, 1 if multiple, 2 if reversed, 3 if end of range, * R_NOP if error */ static int /* > 0 (ok), < 0 (error) */ argchan( struct icom *rp, /* radio structure */ struct chan *cp, /* channel structure */ char *sptr /* ascii argument pointer */ ) { int rval, bank, mchan, topbk, topch; /* * null: current channel only */ if (cp->bank == rp->topbk && cp->mchan == rp->topch) rval = 3; else rval = 0; if (sptr == NULL) return (0); /* * '?': format help */ if (*sptr == '?') { capkey(sptr, argch); return (R_NOP); } /* * " ": end of range */ if (*sptr == ' ') return (3); /* * "+": next higher channel, current bank with wrap */ if (*sptr == '+') { cp->mchan++; if (cp->mchan > rp->maxch) { cp->mchan = rp->minch; cp->bank++; if (cp->bank > rp->maxbk) cp->bank = rp->minbk; } return (rval); } /* * "-" next lower channel, current bank with wrap */ if (*sptr == '-') { cp->mchan--; if (cp->mchan < rp->minch) { cp->mchan = rp->maxch; cp->bank--; if (cp->bank < rp->minbk) cp->bank = rp->maxbk; } return (rval); } /* * "$" all channels, current bank */ if (strcmp(sptr, "$") == 0) { rp->topbk = cp->bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "$:$" all banks, all channels */ if (strcmp(sptr, "$:$") == 0) { cp->bank = rp->minbk; rp->topbk = rp->maxbk; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b.$" bank b, all channels */ if (strstr(sptr, ".$") != NULL && sscanf(sptr, "%d", &bank) == 1) { cp->bank = bank; rp->topbk = bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b1.c1:b2.c2:": channel range b1.c1-b2.c2 */ if (sscanf(sptr, "%d.%d:%d.%d", &bank, &mchan, &topbk, &topch) == 4) { cp->bank = bank; rp->topbk = topbk; cp->mchan = mchan; rp->topch = topch; if (cp->bank > rp->topbk || (cp->bank == rp->topbk && cp->mchan > rp->topch)) return (2); else return (1); } /* * "c1:c2": channel range c1-c2 current bank */ if (sscanf(sptr, "%d:%d", &mchan, &topch) == 2) { rp->topbk = cp->bank; cp->mchan = mchan; rp->topch = topch; if (cp->mchan > rp->topch) return (2); else return (1); } /* * "c.b": channel c, bank b only */ if (sscanf(sptr, "%d.%d", &bank, &mchan) == 2) { cp->bank = rp->topbk = bank; cp->mchan = rp->topch = mchan; return (0); } /* * "c": channel c, current bank */ if (sscanf(sptr, "%d", &mchan) == 1) { rp->topbk = cp->bank; cp->mchan = rp->topch = mchan; return (0); } printf("*** bad channel format %s\n", sptr); return (R_NOP); } /* * sw_keypad() - switch to keypad mode */ static int /* 0 (ok), < 0 (system error) */ sw_keypad() { fd = open("/dev/tty", O_RDONLY); if (fd < 0) return (R_IO); if (tcgetattr(fd, &terma) < 0) return (R_IO); tcgetattr(fd, &termb); termb.c_lflag &= ~(ICANON | ECHO); termb.c_cc[VMIN] = 1; termb.c_cc[VTIME] = 0; if (tcsetattr(fd, TCSADRAIN, &termb) < 0) return (R_IO); return (R_OK); } /* * sw_keybd() - switch to keyboard mode */ static int /* 0 (ok), < 0 (system error) */ sw_keybd() { if (tcsetattr(fd, TCSADRAIN, &terma) < 0) return (R_IO); return (R_OK); } /* end program */ icom-20120228/html.settings/0000755000175000017500000000000010417560445014506 5ustar colincolinicom-20120228/html.settings/specialfolderssettings.xml0000744000175000017500000000141010417560444022004 0ustar colincolin icom-20120228/html.settings/colortabsettings.xml0000744000175000017500000000304510417560445020621 0ustar colincolin icom-20120228/html.settings/fonttabsettings.xml0000744000175000017500000000154010423261745020445 0ustar colincolin icom-20120228/html.settings/collectiontabsettings.xml0000744000175000017500000000122410417605307021630 0ustar colincolin icom-20120228/html.settings/urlhandlingsettings.xml0000744000175000017500000000126310417560444021322 0ustar colincolin icom-20120228/html.settings/externaltabsettings.xml0000744000175000017500000000044710417560445021330 0ustar colincolin icom-20120228/pcr.awk0000644000175000017500000000032110376731213013164 0ustar colincolinBEGIN { } { if (NF == 1 && substr($1, 1, 5) == "[BANK") { bank = substr($1, 6, 2) chan = 0 } if (NF == 9) { printf("%d.%d %s %s name %s\n", bank, chan, $2, $3, substr($1, 4, 8)) chan++ } } END { } icom-20120228/packet.c0000644000175000017500000002177010606010241013305 0ustar colincolin/* * Program to control ICOM radios * * Input/output interface */ #include "icom.h" #ifndef MSDOS #include #include #include #else /* MSDOS */ #include #endif /* MSDOS */ /* * Parameters */ #ifdef MSDOS #define XFRETRY 3000 /* interface timeout counter (MSDOS) */ /* * Define port and speed */ #define PORT 0x03f8 /* port address (COM1) */ /* #define PORT 0x02f8 /* port address (COM2) */ /* #define PORT 0x03e8 /* port address (COM3) */ /* #define PORT 0x02e8 /* port address (COM4) */ /* #define BAUD 384 /* baud rate 300 */ #define BAUD 96 /* baud rate 1200 */ /* #define BAUD 12 /* baud rate 9600 */ /* * Serial port definitions (8250) */ #define THR 0 /* transmitter holding register */ #define RBR 0 /* receiver buffer register */ #define DLL 0 /* divisor latch LSB */ #define DLM 1 /* divisor latch MSB */ #define LCR 3 /* line control register */ #define LCR_8BITS 3 /* 8 bit words */ #define LCR_DLAB 0x80 /* divisor latch access bit */ #define MCR 4 /* modem control register */ #define MCR_DTR 1 /* data terminal ready */ #define MCR_RTS 2 /* request to send */ #define LSR 5 /* line status register */ #define LSR_DR 0x01 /* data ready */ #define LSR_THRE 0x20 /* trans line holding register empty */ #define LSR_TSRE 0x40 /* transmitter shift register empty */ #endif /* MSDOS */ /* * fsa definitions */ #define S_IDLE 0 /* idle */ #define S_HDR 1 /* header */ #define S_TX 2 /* address */ #define S_DATA 3 /* data */ #define S_ERROR 4 /* error */ /* * Global variables */ int retry; /* max command retries */ /* * Local function prototypes */ static u_char sndoctet(u_char); /* send octet */ static u_char rcvoctet(); /* receive octet */ /* * Local variables */ static int count; /* retry counter */ static int state; /* fsa state */ #ifdef MSDOS static int inp(int); /* input port byte */ static void outp(int, int); /* output port byte */ static void outpw(int, int); /* output port word */ #endif /* MSDOS */ /* * Packet routines * * These routines send a packet and receive the response. Since the CI-V * bus is bidirectional, every octet sent by this program is read back * for check. If an error occurs on transmit (readback compare check), * the packet is resent. If an error occurs on receive (timeout), all * input to the terminating fe is discarded and the packet is resent. If * the maximum number of retries is not exceeded, the program returns * the number of octets in the user buffer; otherwise, it returns zero. * * ICOM frame format * * Frames begin with a two-octet preamble (fe-fe) followed by the radio * address RA, controller address (e0), command CN, subcommand SN * (optional), zero or more data octets DA and terminator fd. If a * subcommand is not used, the data field begins with the SN octet. * * The radio responds to a command frame with a response frame in the * same format, but with the radio and controller addresses * interchanged. If the response contains no data, the CN octet is fb * for success or fa for failure and the following octet fd ends the * frame. If the response format includes a data field, a frame with a * nonempty data field is a success, but an empty data field is a * failure. * * +------+------+------+------+------+------+--//--+------+ * | fe | fe | RA | e0 | CN | SN | DA | fd | * +------+------+------+------+------+------+--//--+------+ */ /* * initpkt() - initialize serial interface * * This routine opens the serial interface for raw transmission; that * is, character-at-a-time, no stripping, checking or monkeying with the * bits. For Unix, an input operation ends either with the receipt of a * character or a 0.5-s timeout. */ void initpkt( int baud /* CI-V bit rate code */ ) /* no return value */ { #ifdef MSDOS outp(PORT+LCR, LCR_DLAB); /* set baud */ outpw(PORT+DLL, BAUD); outp(PORT+LCR, LCR_8BITS); /* set 8 bits, no parity */ outp(PORT+MCR, MCR_DTR+MCR_RTS); /* wake up modem */ #else /* MSDOS */ struct termios ttyb, *ttyp; if (pflags & P_ERMSG) printf("*** baud %d\n", baud); ttyp = &ttyb; if (tcgetattr(fd_icom, ttyp) < 0) { printf("\n*** Unable to get line parameters\n"); exit(1); } ttyp->c_iflag = 0; /* input modes */ ttyp->c_oflag = 0; /* output modes */ ttyp->c_cflag = CS8|CREAD|CLOCAL; /* control modes */ ttyp->c_lflag = 0; /* local modes */ ttyp->c_cc[VMIN] = 0; /* min chars */ ttyp->c_cc[VTIME] = 5; /* receive timeout */ cfsetispeed(ttyp, baud); /* bit rate */ cfsetospeed(ttyp, baud); if (tcsetattr(fd_icom, TCSANOW, ttyp) < 0) { printf("\n*** Unable to set line parameters\n"); exit(1); } #endif /* MSDOS */ retry = RETRY; } /* * sndpkt(r, x, y) - send packet and receive response * * This routine sends a command frame, which consists of all except the * preamble octets fe-fe. It then listens for the response frame and * returns the payload to the caller. The routine checks for correct * response header format; that is, the length of the response vector * returned to the caller must be at least two and the radio and * controller address octets must be interchanged; otherwise, the * operation is retried up to the number of times specified in a global * variable. * * The trace function, which is enabled by the P_TRACE bit of the global * pflags variable, prints all characters received or echoed on the bus * preceded by a T (transmit) or R (receive). The P_ERMSG bit of the * pflags variable enables printing of bus error messages. * * Note that the first octet sent is a pad (ff) in order to allow time * for the radio to flush its receive buffer after sending the previous * response. Even with this precaution, some of the older radios * occasionally fail to receive a command and it has to be sent again. */ int sndpkt( /* returns octet count */ int r, /* radio address */ u_char *x, /* command vector */ u_char *y /* response vector */ ) { int i, j, k; /* temps */ u_char temp; #ifndef MSDOS (void)tcflush(fd_icom, TCIOFLUSH); #endif /* MSDOS */ for (i = 0; i < retry; i++) { state = S_IDLE; /* * Transmit packet. */ if (pflags & P_TRACE) printf("T:"); sndoctet(PAD); /* send header */ sndoctet(PR); sndoctet(PR); sndoctet(r); sndoctet(TX); for (j = 0; j < BMAX; j++) { /* send body */ if (sndoctet(x[j]) == FI) break; } while (rcvoctet() != FI); /* purge echos */ if (x[0] == V_FREQT || x[0] == V_MODET) return (0); /* shortcut for broadcast */ /* * Receive packet. First, delete all characters * preceeding a PR, then discard all PRs. Check that the * RE and TX fields are correctly interchanged, then * copy the remaining data and FI to the user buffer. */ if (pflags & P_TRACE) printf("\nR:"); j = 0; while ((temp = rcvoctet()) != FI) { switch (state) { case S_IDLE: if (temp != PR) continue; state = S_HDR; break; case S_HDR: if (temp == PR) { continue; } else if (temp != TX) { if (pflags & P_ERMSG) printf( "\n*** TX error\n"); state = S_ERROR; } state = S_TX; break; case S_TX: if (temp != r) { if (pflags & P_ERMSG) printf( "\n*** RE error\n"); state = S_ERROR; } state = S_DATA; break; case S_DATA: if (j >= BMAX ) { if (pflags & P_ERMSG) printf( "\n*** buffer overrun\n"); state = S_ERROR; j = 0; } y[j++] = temp; break; case S_ERROR: break; } } if (pflags & P_TRACE) printf("\n"); if (j > 0) { y[j++] = FI; return (j); } } if (pflags & P_ERMSG) printf("*** retries exceeded\n"); return (0); } /* * Interface routines * * These routines read and write octets on the bus. In case of receive * timeout a FI code is returned. In case of output collision (echo * does not match octet sent), the remainder of the collision frame * (including the trailing FI) is discarded. */ #ifdef MSDOS /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x; /* octet */ ) { u_char temp; inp(PORT+RBR); /* flush spikes */ outp(PORT+THR, x); /* write octet */ if (x == (temp = rcvoctet())) return (x); if (pflags & P_ERMSG) printf("\n*** bus error %02x %02x\n", x, temp); while (rcvoctet() != FI); /* discard junk */ return (FI); } /* * Receive octet */ static u_char rcvoctet() /* returns octet, FI if error */ { int i; u_char temp; for (i = 0; i < XFRETRY; i++) /* wait for input */ if ((inp(PORT + LSR)) & LSR_DR != 0) { if (i > count) count = i; temp = inp(PORT+RBR); /* read octet */ return (temp); } return (FI); } #else /* MSDOS */ /* * sndoctet(x) - send octet */ static u_char sndoctet( /* returns octet */ u_char x /* octet */ ) { write(fd_icom, &x, 1); return (x); } /* * rcvoctet () - receive octet */ static u_char rcvoctet() /* returns octet */ { u_char y; if (read(fd_icom, &y, 1) < 1) y = FI; /* come here if timeout */ if (pflags & P_TRACE && y != PAD) printf(" %02x", y); return (y); } #endif /* MSDOS */ /* end program */ icom-20120228/70000000644000175000017500000000013310423507165012206 0ustar colincolin# 7000 setup radio 7000 utc set restore * 7000_rpt restore * 7000_arinc restore * 7000_bc icom-20120228/706g0000644000175000017500000000023010453603740012300 0ustar colincolin# 706g palette # start in memo mode # radio 706g #empty $ vfo a default tone off split 0 default restore 1:39 706g_rpt default restore 40:99 706g_arinc icom-20120228/756_rpt0000644000175000017500000000046110416012111013012 0ustar colincolin# Newark area repeaters 1 53.0500 FM tone 107.2 name "Colora" split -1000 # K3UAV r 107.2 + 53.7100 FM tone 74.4 name "Quinton" split -1000 # N2KEJ oe 74.4 + 53.8300 FM tone 94.8 name "Port Deposit" split -1000 # N3OUT (CA) 94.8 + 53.9500 FM tone 94.8 name "Rising Sun" split -1000 # K3DWB (CA) 94.8 icom-20120228/tables.c0000644000175000017500000006725010453542521013326 0ustar colincolin/* * Program to control ICOM radios * * Tables and chairs */ #include "icom.h" #include #include /* * Commands */ #define ARG2(y, x) (((y) << 8) | (x)) #define ARG3(z, y, x) (((z) << 16) | ((y) << 8) | (x)) #define M_CTL(z, x) ARG3((z), V_WRCTL, (x)) #define M_MTR(z, x) ARG3((z), V_RMTR, (x)) #define M_TOG(z, x) ARG3((z), V_TOGL, (x)) #define M_SET(z, x) ARG2((z), (x)) /* * Keyboard mode commands */ struct cmdtable cmd[] = { {"agc", C_AGC, "AGC fast/medium/slow"}, {"ant", C_ANT, "select antenna"}, {"atten", C_ATTEN, "select attenuator"}, {"band", C_BAND, "set band limits"}, {"bank", C_BANK, "read/write bank/name"}, {"bfocomp", C_BCOMP, "set BFO compensation"}, {"break", C_BREAK, "break off/semi/full"}, {"chan", C_READ, "read channels"}, {"ctl", C_CTRL, "control commands"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set dial tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"dump", C_DUMP, "dump VFO (debug)"}, {"duplex", C_DUPLEX, "set transmit duplex"}, {"empty", C_EMPTY, "empty channel"}, {"include", C_INCLD, "include file"}, {"key", C_KEY, "send CW message"}, {"meter", C_METER, "read meters and squelch"}, {"misc", C_MISC, "miscellaneous control"}, {"mode", C_MODE, "set mode"}, {"mvfo", C_VFOM, "memory -> VFO"}, {"name", C_NAME, "set channel name"}, {"pad", C_KEYPAD, "switch to keypad mode"}, {"power", C_POWER, "power on/off"}, {"preamp", C_PAMP, "preamp off/1/2f"}, {"ptt", C_PTT, "push to talk"}, {"quit", C_QUIT, "exit program"}, {"radio", C_RADIO, "select radio"}, {"rate", C_RATE, "set tuning rate"}, {"restore", C_RESTORE, "restore channels"}, {"rx", C_RX, "receive"}, {"save", C_SAVE, "save channels"}, {"say", C_ANNC, "announce control"}, {"scan", C_SCAN, "scan control"}, {"set", C_SWTCH, "set/clear switches"}, {"split", C_SPLIT, "split/duplex commands"}, {"step", C_STEP, "set tuning step"}, {"swap", C_SWAP, "VFO A <-> VFO B"}, {"test", C_TEST, "send CI-V test message"}, {"tone", C_TONE, "set repeater tone frequency"}, {"trace", C_DEBUG, "trace CI-V messages"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"tx", C_TX, "transmit"}, {"utc", C_TIME, "set/display date and time"}, {"verbose", C_VERB, "set verbose"}, {"vfo", C_VFO, "vfo commands"}, {"vfocomp", C_VCOMP, "set VFO compensation"}, {"write", C_WRITE, "write channels"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Keypad mode commands */ struct cmdtable key[] = { {{KILL, '\0'}, C_ERASE, "erase input"}, {"[11", C_ANT, "F1 ant status"}, {"[12", C_AGC, "F2 agc status"}, {"[13", C_ATTEN, "F3 atten status"}, {"[14", C_PAMP, "F4 preamp status"}, {"[15", C_BREAK, "F5 break status"}, {"[17", C_ANNC, "F6 say status"}, {"[18", C_METER, "F7 display meters"}, {"[19", C_SWTCH, "F8 display switches"}, {"[20", C_CTRL, "F9 display controls"}, {"[a", C_UP, "UP step up"}, {"[b", C_DOWN, "DOWN step down"}, {"[c", C_RUP, "RIGHT tuning rate up"}, {"[d", C_RDOWN, "LEFT tuning rate down"}, {"c", C_READ, "read channel"}, {"e", C_EMPTY, "empty channel"}, {"q", C_KEYBD, "switch to keyboard mode"}, {"r", C_RX, "receive"}, {"s", C_SPLIT, "split mode with offset"}, {"t", C_TX, "transmit"}, {"u", C_TIME, "display date and time"}, {"w", C_WRITE, "write channel"}, {"x", C_SWAP, "VFO A <-> VFO B"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * dummy argument */ struct cmdtable dummy[] = { {"\0", R_NOP, "invalid command"} }; /* * channel/bank arguments */ struct cmdtable argch[] = { {"[empty]", 0x00, "current bank/chan"}, {"$", 0x00, "current bank, all chans"}, {"b.$", 0x00, "bank b, all chans"}, {"$:$", 0x00, "all banks, all chans"}, {"+", 0x00, "current bank/chan plus 1"}, {"-", 0x00, "current bank/chan minus 1"}, {"c", 0x00, "current bank, chan c"}, {"b.c", 0x00, "bank b, chan c"}, {"c1:c2", 0x00, "current bank, block c1-c2"}, {"b1.c1:b2.c2", 0x00, "block b1.c1-b2.c2"}, {"\0", R_NOP, "invalid argument"} }; /* * "verbose" arguments */ struct cmdtable verbx[] = { {"off", 0, "terse"}, {"on", P_VERB, "verbose"}, {"\0", R_NOP, "invalid argument"} }; /* * "trace" arguments */ struct cmdtable dbx[] = { {"all", P_TRACE|P_ERMSG, "trace bus, errors"}, {"bus", P_TRACE, "trace bus"}, {"off", 0, "trace none"}, {"packet", P_ERMSG, "trace errors"}, {"\0", R_NOP, "invalid argument"} }; /* * "vfo" subcommands (V_SVFO 0x07 command) */ struct cmdtable vfo[] = { {"a", 0x00, "select VFO A"}, {"b", 0x01, "select VFO B"}, {"btoa", 0xa0, "VFO B -> VFO A"}, {"equal", 0xb1, "main VFO -> sub VFO"}, {"main", 0xd0, "select main VFO"}, {"nowatch", 0xc0, "dual-watch off"}, {"sub", 0xd1, "select sub VFO"}, {"swap", 0xb0, "VFO A <-> VFO B"}, {"watch", 0xc1, "dual-watch on"}, {"\0", R_NOP, "invalid argument"} }; /* * "split" subcommands (V_SPLIT 0x0f command) */ struct cmdtable split[] = { {"dup+", 0x12, "duplex up"}, {"dup-", 0x11, "duplex down"}, {"off", 0x00, "split off"}, {"on", 0x01, "split on"}, {"simplex", 0x10, "simplex"}, {"\0", R_NOP, "invalid argument"} }; /* * "atten" subcommands (V_ATTEN 0x11 command) */ struct cmdtable atten[] = { {"0", 0x00, "off"}, {"6", 0x06, "6 dB"}, {"10", 0x10, "10 dB"}, {"12", 0x12, "12 dB"}, {"18", 0x18, "18 dB"}, {"20", 0x20, "20 dB"}, {"30", 0x30, "30 dB"}, {"\0", R_NOP, "invalid argument"} }; /* * "ant" subcommands (V_SANT 0x12 command) */ struct cmdtable ant[] = { {"1", ARG2(0x00,0x00), "xmt/rec antenna 1"}, {"1R", ARG2(0x01,0x00), "xmt antenna 1/rec antenna R"}, {"2", ARG2(0x00,0x01), "xmt/rec antenna 2"}, {"2R", ARG2(0x01,0x01), "xmt antenna 2/rec antenna R"}, {"\0", R_NOP, "invalid argument"} }; /* * "say" subcommands (V_ANNC 0x13 command) */ struct cmdtable say[] = { {"all", 0x00, "all data"}, {"freq", 0x01, "S meter, frequency and mode"}, {"mode", 0x02, "receive mode"}, {"\0", R_NOP, "invalid argument"} }; /* * "ctl" subcommands (V_WRCTL 0x14 command) */ struct cmdtable ctlc[] = { {"af", M_CTL(G,0x01), "af gain"}, {"antivox", M_CTL(G,0x17), "anti-vox gain"}, {"balance", M_CTL(G,0x10), "balance"}, {"blank", M_CTL(G,0x12), "noise blanker threshold"}, {"bright", M_CTL(G,0x19), "LCD brightness"}, {"comp", M_CTL(G,0x0e), "speech compressor gain"}, {"contrast", M_CTL(G,0x18), "LCD contrast"}, {"delay", M_CTL(G,0x0f), "break delay"}, {"mic", M_CTL(G,0x0b), "microphone gain"}, {"monitor", M_CTL(G,0x15), "monitor gain"}, {"nf1", M_CTL(F,0x0d), "manual notch nf1 frequency"}, {"nf2", M_CTL(F,0x1a), "manual notch nf2 frequency"}, {"nr", M_CTL(G,0x06), "noise reduction"}, {"pbti", M_CTL(F,0x07), "passband tuning (inner"}, {"pbto", M_CTL(F,0x08), "passband tuning (outer"}, {"pitch", M_CTL(F,0x09), "cw pitch"}, {"power", M_CTL(G,0x0a), "rf power"}, {"rf", M_CTL(G,0x02), "rf gain"}, {"speed", M_CTL(G,0x0c), "key speed"}, {"sql", M_CTL(G,0x03), "squelch threshold"}, {"vox", M_CTL(G,0x16), "vox gain"}, {"\0", R_NOP, "invalid argument"} }; /* * "meter" subcommands (V_RMTR 0x15 command) */ struct cmdtable meter[] = { {"alc", M_MTR(G,0x13), "read ALC meter"}, {"comp", M_MTR(G,0x14), "read COMP meter"}, {"power", M_MTR(G,0x11), "read RF power meter"}, {"signal", M_MTR(S,0x02), "read S meter"}, {"sql", M_MTR(Q,0x01), "read squelch condition"}, {"swr", M_MTR(G,0x12), "read SWR meter"}, {"\0", R_NOP, "invalid argument"} }; /* * "set" subcommands (V_TOGL 0x16 command) */ struct cmdtable switches[] = { {"agc", M_TOG(A,0x12), "agc fast/mid/slow"}, {"agcfast", M_TOG(P,0x11), "agc fast (R8500)"}, {"agcslow", M_TOG(P,0x10), "agc slow (R8500)"}, {"an", M_TOG(W,0x41), "auto notch"}, {"apfoff", M_TOG(W,0x30), "auto peak filter off (R8500)"}, {"apfon", M_TOG(W,0x31), "auto peak filter on (R8500)"}, {"break", M_TOG(B,0x47), "break off/semi/full"}, {"comp", M_TOG(W,0x44), "speech compressor"}, {"dcts", M_TOG(W,0x4b), "digital tone squelch"}, {"lock", M_TOG(W,0x50), "dial lock"}, {"monitor", M_TOG(W,0x45), "monitor"}, {"nb", M_TOG(W,0x22), "noise blanker"}, {"nboff", M_TOG(P,0x20), "noise blanker off (R8500)"}, {"nbon", M_TOG(P,0x21), "noise blanker on(R8500)"}, {"nf1", M_TOG(W,0x48), "manual notch nf1"}, {"nf2", M_TOG(W,0x51), "manual notch nf2"}, {"nr", M_TOG(W,0x40), "noise reduction"}, {"peak", M_TOG(W,0x4f), "twin peak filter"}, {"preamp", M_TOG(P,0x02), "preamp off/1/2"}, {"rtty", M_TOG(W,0x49), "RTTY filter"}, {"tone", M_TOG(W,0x42), "repeater tone"}, {"tsql", M_TOG(W,0x43), "tone squelch"}, {"vcs", M_TOG(W,0x4c), "voice squelch"}, {"vox", M_TOG(W,0x46), "voice break"}, {"\0", R_NOP, "invalid argument"}, }; struct cmdtable fmtw[] = { {"off", M_SET(W,0x00), "switch off"}, {"on", M_SET(W,0x01), "switch on"}, {"\0", R_NOP, "invalid argument"}, }; /* * "power" subcommands (V_POWER 0x18 command) */ struct cmdtable power[] = { {"off", 0x00, "power off at sleep timeout"}, {"on", 0x01, "power on"}, {"\0", R_NOP, "invalid argument"} }; /* * "tone" and "tsql" subcommands (V_TONE 0x1b command) * * The CTSS tone frequency is in tenths of a Hertz. The vollowing * frequencies are valid for both the repeater tone (tone command) and * tone squelch (tsql command) functions. */ struct cmdtable tone[] = { {"off", 0x00, "CTSS off)"}, {"on", 0x01, "CTSS on)"}, {"67.0", 0x0670, "XZ (67.0 Hz)"}, {"69.3", 0x0693, "WZ (69.3 Hz)"}, {"71.9", 0x0719, "XA (71.9 Hz)"}, {"74.4", 0x0744, "WA (74.4 Hz)"}, {"77.0", 0x0770, "XB (77.0 Hz)"}, {"79.7", 0x0797, "WB (79.7 Hz)"}, {"82.5", 0x0825, "YZ (82.5 Hz)"}, {"85.4", 0x0854, "YA (85.4 Hz)"}, {"88.5", 0x0885, "YB (88.5 Hz)"}, {"91.5", 0x0915, "ZZ (91.5 Hz)"}, {"94.8", 0x0948, "ZA (94.8 Hz)"}, {"97.4", 0x0974, "ZB (97.4 Hz)"}, {"100.0", 0x1000, "1Z (100.0 Hz)"}, {"103.5", 0x1035, "1A (103.5 Hz)"}, {"107.2", 0x1072, "1B (107.2 Hz)"}, {"110.9", 0x1109, "2Z (110.9 Hz)"}, {"114.8", 0x1148, "2A (114.8 Hz)"}, {"118.8", 0x1188, "2B (118.8 Hz)"}, {"123.0", 0x1230, "3Z (123.0 Hz)"}, {"127.3", 0x1273, "3A (127.3 Hz)"}, {"131.8", 0x1318, "3B (131.8 Hz)"}, {"136.5", 0x1365, "4Z (136.5 Hz)"}, {"141.3", 0x1413, "4A (141.3 Hz)"}, {"146.2", 0x1462, "4B (146.2 Hz)"}, {"151.4", 0x1514, "5Z (151.4 Hz)"}, {"156.7", 0x1567, "5A (156.7 Hz)"}, {"159.8", 0x1598, "-- (159.8 Hz)"}, {"162.2", 0x1622, "5B (162.2 Hz)"}, {"165.5", 0x1655, "-- (165.5 Hz)"}, {"167.9", 0x1679, "6Z (167.9 Hz)"}, {"171.3", 0x1713, "-- (171.3 Hz)"}, {"173.8", 0x1738, "6A (173.8 Hz)"}, {"177.3", 0x1773, "-- (177.3 Hz)"}, {"179.9", 0x1799, "6B (179.9 Hz)"}, {"183.5", 0x1835, "-- (183.5 Hz)"}, {"186.2", 0x1862, "7Z (186.2 Hz)"}, {"189.9", 0x1899, "-- (189.9 Hz)"}, {"192.8", 0x1928, "7A (192.8 Hz)"}, {"196.6", 0x1968, "-- (196.6 Hz)"}, {"199.5", 0x1995, "-- (199.5 Hz)"}, {"203.5", 0x2035, "M1 (203.5 Hz)"}, {"206.5", 0x2065, "-- (206.5 Hz)"}, {"210.7", 0x2107, "M2 (210.7 Hz)"}, {"218.1", 0x2181, "M3 (218.1 Hz)"}, {"225.7", 0x2257, "M4 (225.7 Hz)"}, {"229.1", 0x2291, "9Z (229.1 Hz)"}, {"233.6", 0x2336, "M5 (233.6 Hz)"}, {"241.8", 0x2418, "M6 (241.8 Hz)"}, {"250.3", 0x2503, "M7 (250.3 Hz)"}, {"254.1", 0x2541, "0Z (254.1 Hz)"}, {"\0", R_NOP, "invalid argument"} }; /* * tone command on/off */ struct cmdtable toneon[] = { {"off", 0x00, "tone off"}, {"on", 0x01, "tone on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dtcs" subcommands (V_TONE 0x1b command) * * Thd DTCS code is nnn-pq, where nnn is 3 decimal digits, p is the * transmit polarity and q is the receive polarity. Polarity is N for * normal and R for reversed. The following codes are valid for the * digital tone squelch function (dtcs command). */ struct cmdtable dtcs[] = { {"off", 0x00, "DTCS off)"}, {"on", 0x01, "DTCS on)"}, {"023", 0x0023, "DTCS 023"}, {"025", 0x0025, "DTCS 025"}, {"026", 0x0026, "DTCS 026"}, {"031", 0x0031, "DTCS 031"}, {"032", 0x0032, "DTCS 032"}, {"036", 0x0036, "DTCS 036"}, {"043", 0x0043, "DTCS 043"}, {"047", 0x0047, "DTCS 047"}, {"051", 0x0051, "DTCS 051"}, {"053", 0x0053, "DTCS 054"}, {"054", 0x0054, "DTCS 055"}, {"055", 0x0055, "DTCS 071"}, {"071", 0x0071, "DTCS 071"}, {"072", 0x0072, "DTCS 072"}, {"073", 0x0073, "DTCS 073"}, {"074", 0x0074, "DTCS 074"}, {"114", 0x0114, "DTCS 114"}, {"115", 0x0115, "DTCS 115"}, {"116", 0x0116, "DTCS 116"}, {"122", 0x0122, "DTCS 122"}, {"125", 0x0125, "DTCS 125"}, {"131", 0x0131, "DTCS 131"}, {"132", 0x0132, "DTCS 132"}, {"134", 0x0134, "DTCS 134"}, {"143", 0x0143, "DTCS 143"}, {"145", 0x0145, "DTCS 145"}, {"152", 0x0152, "DTCS 152"}, {"155", 0x0155, "DTCS 155"}, {"156", 0x0156, "DTCS 156"}, {"162", 0x0162, "DTCS 162"}, {"165", 0x0165, "DTCS 165"}, {"172", 0x0172, "DTCS 172"}, {"174", 0x0174, "DTCS 174"}, {"205", 0x0205, "DTCS 205"}, {"212", 0x0212, "DTCS 212"}, {"223", 0x0223, "DTCS 223"}, {"225", 0x0225, "DTCS 225"}, {"226", 0x0226, "DTCS 226"}, {"243", 0x0243, "DTCS 243"}, {"244", 0x0244, "DTCS 244"}, {"245", 0x0245, "DTCS 245"}, {"246", 0x0246, "DTCS 246"}, {"251", 0x0251, "DTCS 251"}, {"252", 0x0252, "DTCS 252"}, {"255", 0x0255, "DTCS 255"}, {"261", 0x0261, "DTCS 261"}, {"263", 0x0263, "DTCS 263"}, {"265", 0x0265, "DTCS 265"}, {"266", 0x0266, "DTCS 266"}, {"271", 0x0271, "DTCS 271"}, {"274", 0x0274, "DTCS 274"}, {"306", 0x0306, "DTCS 306"}, {"311", 0x0311, "DTCS 311"}, {"315", 0x0315, "DTCS 315"}, {"325", 0x0325, "DTCS 325"}, {"331", 0x0331, "DTCS 331"}, {"332", 0x0332, "DTCS 332"}, {"343", 0x0343, "DTCS 343"}, {"346", 0x0346, "DTCS 346"}, {"351", 0x0351, "DTCS 351"}, {"356", 0x0356, "DTCS 356"}, {"364", 0x0364, "DTCS 364"}, {"365", 0x0365, "DTCS 365"}, {"371", 0x0371, "DTCS 371"}, {"411", 0x0411, "DTCS 411"}, {"412", 0x0412, "DTCS 412"}, {"413", 0x0413, "DTCS 413"}, {"423", 0x0423, "DTCS 423"}, {"431", 0x0431, "DTCS 431"}, {"432", 0x0432, "DTCS 432"}, {"445", 0x0445, "DTCS 445"}, {"446", 0x0446, "DTCS 446"}, {"452", 0x0452, "DTCS 452"}, {"454", 0x0454, "DTCS 454"}, {"455", 0x0455, "DTCS 455"}, {"462", 0x0462, "DTCS 462"}, {"464", 0x0464, "DTCS 464"}, {"465", 0x0465, "DTCS 465"}, {"466", 0x0466, "DTCS 466"}, {"503", 0x0503, "DTCS 503"}, {"506", 0x0506, "DTCS 506"}, {"516", 0x0516, "DTCS 516"}, {"523", 0x0523, "DTCS 523"}, {"526", 0x0526, "DTCS 526"}, {"532", 0x0532, "DTCS 532"}, {"546", 0x0546, "DTCS 546"}, {"565", 0x0565, "DTCS 565"}, {"606", 0x0606, "DTCS 606"}, {"612", 0x0612, "DTCS 612"}, {"624", 0x0624, "DTCS 624"}, {"627", 0x0627, "DTCS 627"}, {"631", 0x0631, "DTCS 631"}, {"632", 0x0632, "DTCS 632"}, {"654", 0x0654, "DTCS 654"}, {"662", 0x0662, "DTCS 662"}, {"664", 0x0664, "DTCS 664"}, {"703", 0x0703, "DTCS 703"}, {"712", 0x0712, "DTCS 712"}, {"723", 0x0723, "DTCS 723"}, {"731", 0x0731, "DTCS 731"}, {"732", 0x0732, "DTCS 732"}, {"734", 0x0734, "DTCS 734"}, {"743", 0x0743, "DTCS 743"}, {"754", 0x0754, "DTCS 754"}, {"\0", R_NOP, "invalid argument"} }; /* * DTCS polarity codes * * These codes are used with the DTCS codes given above. An "N" codes * for normal polarity, "R" reversed. */ struct cmdtable polar[] = { {"NN", 0x00, "+ transmit, + receive"}, {"NR", 0x01, "+ transmit, - receive"}, {"RN", 0x10, "- transmit, + receive"}, {"RR", 0x11, "- transmit, - receive"}, {"\0", R_NOP, "invalid argument"} }; /* * "tx" subcommands (V_TX 0x1c command) */ struct cmdtable tx[] = { {"off", 0x00, "receive"}, {"on", 0x01, "transmit"}, {"\0", R_NOP, "invalid argument"} }; /* * "misc" subcommands (775) */ struct cmdtable misc[] = { {"ctss", 0x06, "read CTSS"}, {"dcs", 0x07, "read DCS"}, {"dtmf", 0x08, "read DTMF"}, {"id", 0x09, "read ID"}, {"local", 0x01, "local control"}, {"next", 0x0e, "next frequency"}, {"nosearch", 0x10, "disable search"}, {"nospeaker", 0x0b, "mute speaker"}, {"notape", 0x04, "disable tape recorder"}, {"nowindow", 0x0d, "disable search window"}, {"opto", 0x05, "read OPTO"}, {"remote", 0x02, "remote control"}, {"search", 0x0f, "enable search"}, {"speaker", 0x0a, "unmute speaker"}, {"tape", 0x03, "enable tape recorder"}, {"window", 0x0c, "enable search window"}, {"\0", R_NOP, "invalid argument"} }; /* * "agc" subcommands */ struct cmdtable agc[] = { {"fast", M_SET(A,0x01), "agc fast"}, {"medium", M_SET(A,0x02), "agc mid"}, {"slow", M_SET(A,0x03), "agc slow"}, {"\0", R_NOP, "invalid argument"} }; /* * "preamp" subcommands */ struct cmdtable preamp[] = { {"off", 0x00, "preamp off"}, {"1", 0x01, "preamp 1"}, {"2", 0x02, "preamp 2"}, {"\0", R_NOP, "invalid argument"} }; /* * "break" subcommands */ struct cmdtable fmtb[] = { {"full", M_SET(B,0x02), "break full"}, {"off", M_SET(B,0x00), "break off"}, {"semi", M_SET(B,0x01), "break semi"}, {"\0", R_NOP, "invalid argument"}, }; /* * "scan" subcommands */ struct cmdtable scan[] = { {"10", 0xa3, "delta-f 10 kHz"}, {"2.5", 0xa1, "delta-f 2.5 kHz"}, {"20", 0xa4, "delta-f 20 kHz"}, {"5", 0xa2, "delta-f 5 kHz"}, {"50", 0xa5, "delta-f 50 kHz"}, {"autowrite", 0x04, "auto write scan"}, {"deltaf", 0x03, "delta-f scan"}, {"finedeltaf", 0x13, "fine delta-f scan start"}, {"fineprog", 0x12, "fine program scan start"}, {"fix", 0xaa, "fix center frequency"}, {"mem", 0x22, "memory scan start"}, {"memchan", 0xb2, "memory channel scan number"}, {"memnum", 0x23, "select memory scan start"}, {"nofix", 0xa0, "unfix center frequency"}, {"noresume", 0xd1, "scan resume off"}, {"noskip", 0xb1, "select memory channel"}, {"noresume", 0xd0, "scan resume never"}, {"novsc", 0xc0, "VSC off"}, {"priority", 0x42, "priority scan"}, {"prog", 0x02, "program scan"}, {"resume", 0xd3, "scan resume after delay"}, {"resumeb", 0xd2, "scan resume b"}, {"select", 0x24, "selected mode memory scan"}, {"skip", 0xb0, "deselect memory channel"}, {"start", 0x01, "scan start"}, {"stop", 0x00, "scan stop"}, {"vsc", 0xc1, "VSC on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dial" subcommands */ struct cmdtable diala[] = { /* R8500 */ {".01", 0x00, "10 Hz"}, {".05", 0x01, "50 Hz"}, {".1", 0x02, "100 Hz"}, {"1", 0x03, "1 kHz"}, {"2.5", 0x04, "2.5 kHz"}, {"5", 0x05, "5 kHz"}, {"9", 0x06, "9 kHz"}, {"10", 0x07, "10 kHz"}, {"12.5", 0x08, "12.5 kHz"}, {"20", 0x09, "20 kHz"}, {"25", 0x10, "25 kHz"}, {"100", 0x11, "100 kHz"}, {"1000", 0x12, "1 MHz"}, {"*", 0x13, "* kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialb[] = { /* 775 */ {".01", 0x00, "10 Hz"}, {"1", 0x01, "1 kHz"}, {"2", 0x02, "2 kHz"}, {"3", 0x03, "3 kHz"}, {"4", 0x04, "4 kHz"}, {"5", 0x05, "5 kHz"}, {"6", 0x06, "6 kHz"}, {"7", 0x07, "7 kHz"}, {"8", 0x08, "8 kHz"}, {"9", 0x09, "9 kHz"}, {"10", 0x10, "10 kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialc[] = { /* 706G, 756, 7000 */ {".01", 0x00, "10 Hz"}, {".1", 0x01, "100 Hz"}, {"1", 0x02, "1 kHz"}, {"5", 0x03, "5 kHz"}, {"9", 0x04, "9 kHz"}, {"10", 0x05, "10 kHz"}, {"12.5", 0x06, "12.5 kHz"}, {"20", 0x07, "20 kHz"}, {"25", 0x08, "25 kHz"}, {"100", 0x09, "100 kHz"}, {"\0", R_NOP, "invalid argument"} }; /* * bank, restore and save subcommands */ struct cmdtable loadtab[] = { {"atten", C_ATTEN, "set attenuator"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"name", C_NAME, "set channel name"}, {"set", C_SWTCH, "set commands"}, {"split", C_SPLIT, "split/duplex commands"}, {"tone", C_TONE, "set repeater tone frequency"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Radio identifier decode */ struct cmdtable identab[] = { {"1271", 0x24, "1271 UHF Transceiver"}, {"1275", 0x18, "1275 UHF Transceiver"}, {"271", 0x20, "271 VHF Transceiver"}, {"275", 0x10, "275 VHF Transceiver"}, {"375", 0x12, "375 VHF Transceiver"}, {"471", 0x22, "471 UHF Transceiver"}, {"475", 0x14, "475 UHF Transceiver"}, {"575", 0x16, "575 VHF Transceiver"}, {"575", 0x28, "725 HF Transceiver"}, {"706", 0x4e, "706 HF Transceiver"}, {"706G", 0x58, "706MKIIG HF Transceiver"}, {"726", 0x30, "726 HF Transceiver"}, {"735", 0x04, "735 HF Transceiver"}, {"746", 0x66, "746 HF Transceiver"}, {"751", 0x1c, "751 HF Transceiver"}, {"756", 0x64, "756 HF Transceiver"}, {"761", 0x1e, "761 HF Transceiver"}, {"765", 0x2c, "765 HF Transceiver"}, {"775", 0x46, "775 HF Transceiver"}, {"781", 0x26, "781 HF Transceiver"}, {"970", 0x2e, "970 HF Transceiver"}, {"7000", 0x70, "7000 HF/VHF/UHF Transceiver"}, {"7800", 0x6a, "7800 HF/VHF/UHF Transceiver"}, {"R7000", 0x08, "R7000 VHF/UHF Receiver"}, {"R71", 0x1A, "R71 HF Receiver"}, {"R7100", 0x34, "R7100 VHF/UHF Receiver"}, {"R72", 0x32, "R72 HF Receiver"}, {"R75", 0x5a, "R75 HF Receiver"}, {"R8500", 0x4a, "R8500 HF/VHF/UHF Receiver"}, {"R9000", 0x2a, "R9000 VHF/UHF Receiver"}, {"probe", 0x00, "Probe all radios"}, {"\0", R_NOP, "unknown radio"} }; /* * Broadband HF/VHF/UHF receiver mode decode (R7000) * * Note that panel FM mode is really wideband FM and panel FMn mode is * really FM mode on other radios. Emptying a channel changes the mode * to 0xff, but does not change the frequency. Reactivate the channel * by loading valid mode. */ static struct cmdtable mode2[] = { {"AM", 0x0002, "AM"}, {"a", 0x0002, "AM (keypad)"}, {"FMn", 0x8205, "FM"}, {"WFM", 0x0005, "WFM"}, {"f", 0x8205, "FM (keypad)"}, {"SSB", 0x8005, "SSB"}, {"s", 0x8005, "SSB (keypad)"}, {"\0", R_NOP, "invalid command"} }; /* * Broadband MF/HF/VHF/UHF receiver mode decode (R8500/R9000) */ static struct cmdtable mode3[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0103, "CW"}, {"k", 0x0103, "CW (keypad)"}, {"CWn", 0x0203, "CW narrow"}, {"FM", 0x0105, "FM"}, {"f", 0x0105, "FM (keypad)"}, {"FMn", 0x0205, "FM narrow"}, {"LSB", 0x0100, "LSB"}, {"l", 0x0100, "LSB (keypad)"}, {"USB", 0x0101, "USB"}, {"u", 0x0101, "USB (keypad)"}, {"WFM", 0x0106, "WFM"}, {"\0", R_NOP, "invalid command"} }; /* * Narrowband MF/HF/VHF/UHF transceiver and receiver mode decode * * The 7000 can do all of these, the 756 all but WFM, the 706g most * except the -R (reverse) modes. */ static struct cmdtable mode1[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM (keypad)"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0203, "CW"}, {"k", 0x0203, "CW (keypad)"}, {"CW-R", 0x0207, "CW reverse"}, {"CW-Rn", 0x0307, "CW reverse narrow"}, {"CW-Rw", 0x0107, "CW reverse wide"}, {"CWn", 0x0303, "CW narrow"}, {"CWw", 0x0103, "CW wide"}, {"FM", 0x0205, "FM"}, {"f", 0x0205, "FM (keypad)"}, {"FMn", 0x0305, "FM narrow"}, {"FMw", 0x0105, "FM wide"}, {"LSB", 0x0200, "LSB"}, {"l", 0x0200, "LSB (keypad)"}, {"LSBn", 0x0300, "LSB narrow"}, {"LSBw", 0x0100, "LSB wide"}, {"RTTY", 0x0204, "RTTY"}, {"RTTY-R", 0x0208, "RTTY reverse"}, {"RTTY-Rn", 0x0308, "RTTY reverse narrow"}, {"RTTY-Rw", 0x0108, "RTTY reverse wide"}, {"RTTYn", 0x0304, "RTTY narrow"}, {"RTTYw", 0x0104, "RTTY wide"}, {"USB", 0x0201, "USB"}, {"u", 0x0201, "USB (keypad)"}, {"USBn", 0x0301, "USB narrow"}, {"USBw", 0x0101, "USB wide"}, {"WFM", 0x0106, "wideband FM"}, {"\0", R_NOP, "invalid command"} }; /* * IC 7000 MF/HF/VHF/UHF transceiver and receiver mode decode */ static struct cmdtable mode4[] = { {"AM", 0x0202, "AM 6.0"}, {"a", 0x0202, "AM 6.0 (keypad)"}, {"AMn", 0x0302, "AM 3.0"}, {"AMw", 0x0102, "AM 9.0"}, {"CW", 0x0203, "CW 500"}, {"k", 0x0203, "CW 500 (keypad)"}, {"CW-R", 0x0207, "CW-R 500"}, {"CW-Rn", 0x0307, "CW-R 250"}, {"CW-Rw", 0x0107, "CW-R 1.2"}, {"CWn", 0x0303, "CW 250"}, {"CWw", 0x0103, "CW 1.2"}, {"FM", 0x0205, "FM 10.0"}, {"f", 0x0205, "FM 10.0 (keypad)"}, {"FMn", 0x0305, "FM 7.0"}, {"FMw", 0x0105, "FM 15.0"}, {"LSB", 0x0200, "LSB 2.4"}, {"l", 0x0200, "LSB 2.4 (keypad)"}, {"LSBn", 0x0100, "LSB 1.8"}, {"LSBw", 0x0300, "LSB 3.0"}, {"RTTY", 0x0204, "RTTY 500"}, {"RTTY-R", 0x0208, "RTTY-R 500"}, {"RTTY-Rn", 0x0308, "RTTY-R 250"}, {"RTTY-Rw", 0x0108, "RTTY-R 2.4"}, {"RTTYn", 0x0304, "RTTY 250"}, {"RTTYw", 0x0104, "RTTY 2.4"}, {"USB", 0x0201, "USB 2.4"}, {"u", 0x0201, "USB 2.4 (keypad)"}, {"USBn", 0x0301, "USB 1.8"}, {"USBw", 0x0101, "USB 3.0"}, {"WFM", 0x0106, "WFM 280.0"}, {"\0", R_NOP, "invalid command"} }; /* * CI-V bit rate control */ struct cmdtable baud[] = { {"300", B300, "300 b/s"}, {"600", B600, "600 b/s"}, {"1200", B1200, "1200 b/s"}, {"2400", B2400, "2400 b/s"}, {"4800", B4800, "4800 b/s"}, {"9600", B9600, "9600 b/s"}, {"19200", B19200, "19200 b/s"}, {"38400", B38400, "38400 b/s"}, {"\0", R_NOP, "invalid argument"} }; /* * Radio control initialization * * model ident ch bk init mode step flag ptr */ struct namestruct name[] = { {"1271", 0x24, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"1275", 0x18, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"271", 0x20, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"275", 0x10, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"375", 0x12, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"471", 0x22, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"475", 0x14, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"575", 0x16, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"706", 0x4e, B9600, 10, 0, dummy, mode1, dummy, 0, NULL}, {"706G", 0x58, B19200,99, 0, dummy, mode1, dialc, 0, NULL}, {"725", 0x28, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"726", 0x30, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"735", 0x04, B1200, 12, 0, dummy, mode1, dummy, F_735, NULL}, {"746", 0x66, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"751", 0x1c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"756", 0x64, B19200,99, 0, ctlc, mode1, dialc, F_756, NULL}, {"761", 0x1e, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"765", 0x2c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"775", 0x46, B1200, 99, 0, dummy, mode1, dialb, 0, NULL}, {"781", 0x26, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"970", 0x2e, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"7000", 0x70, B19200,99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"7800", 0x6a, B1200, 99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"R7000", 0x08, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R71", 0x1A, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"R7100", 0x34, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R72", 0x32, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"R75", 0x5a, B19200,99, 0, dummy, mode1, dummy, 0, NULL}, {"R8500", 0x4a, B19200,39, 19, ctlc, mode3, diala, F_8500, NULL}, {"R9000", 0x2a, B1200, 99, 0, dummy, mode3, diala, F_8500, NULL}, {"\0", 0x0, 0, 0, 0, 0, 0, NULL, 0, NULL} }; double logtab[] = { /* tuning rate table */ 1., 2., 5., /* 0.000000 */ 10., 25., 50., /* 0.00000 */ 1e2, 2.5e2, 5e2, /* 0.0000 */ 1e3, 2.5e3, 5e3, /* 0.000 */ 1e4, 2.5e4, 5e4, /* 0.00 */ 1e5, 2.5e5, 5e5, /* 0.0 */ 1e6, 2.5e6, 5e6 /* 0. */ }; int sigtab[] = { /* significant digits table */ 6, 6, 6, /* 0.000000 */ 5, 6, 5, /* 0.00000 */ 4, 5, 4, /* 0.0000 */ 3, 4, 3, /* 0.000 */ 2, 3, 2, /* 0.00 */ 1, 2, 1, /* 0.0 */ 0, 0, 0 /* 0. */ }; struct metertab mtab[] = { {0, "S0"}, /* 0.4-1.3 uv */ {12, "S1"}, {32, "S2"}, {46, "S3"}, /* 0.79-2.0 uV */ {64, "S4"}, {78, "S5"}, /* 3.2 uV */ {94, "S6"}, {110, "S7"}, /* 13 uV */ {126, "S8"}, {140, "S9"}, /* 50 uV */ {156, "S9+10"}, {174, "S9+20"}, /* 0.5 mv */ {190, "S9+30"}, {208, "S9+40"}, /* 5 mv */ {230, "S9+50"}, {999, "S9+60"} /* 50 mV */ }; icom-20120228/r85000000644000175000017500000000013010423551331012365 0ustar colincolin# r8500 setup radio r8500 restore * r8500_arinc restore * r8500_bc restore * r8500_ham icom-20120228/pcr1.csv0000644000175000017500000004002310376731213013261 0ustar colincolin[REV] ID=1.0.0 APP=IC-PCR1000 Revision 2.0 [BANK00] BANKNAME=Africa ACTIVECH=0 00=AFI-1/SAT-1 3.452 USB 3k OFF 3kHz OFF OFF OFF 01=AFI-1/SAT-1 6.535 USB 3k OFF 3kHz OFF OFF OFF 02=AFI-1/SAT-1 8.861 USB 3k OFF 3kHz OFF OFF OFF 03=AFI-1/SAT-1 13.357 USB 3k OFF 3kHz OFF OFF OFF 04=AFI-1/SAT-1 17.955 USB 3k OFF 3kHz OFF OFF OFF 05=AFI-2 3.419 USB 3k OFF 3kHz OFF OFF OFF 06=AFI-2 5.652 USB 3k OFF 3kHz OFF OFF OFF 07=AFI-2 8.894 USB 3k OFF 3kHz OFF OFF OFF 08=AFI-2 13.273 USB 3k OFF 3kHz OFF OFF OFF 09=AFI-2 17.961 USB 3k OFF 3kHz OFF OFF OFF 10=AFI-3/MID-2 3.467 USB 3k OFF 3kHz OFF OFF OFF 11=AFI-3/MID-2 5.658 USB 3k OFF 3kHz OFF OFF OFF 12=AFI-3/MID-2 10.018 USB 3k OFF 3kHz OFF OFF OFF 13=AFI-3/MID-2 11.3 USB 3k OFF 3kHz OFF OFF OFF 14=AFI-3/MID-2 13.288 USB 3k OFF 3kHz OFF OFF OFF 15=AFI-3/MID-2 17.961 USB 3k OFF 3kHz OFF OFF OFF 16=AFI-4 2.878 USB 3k OFF 3kHz OFF OFF OFF 17=AFI-4 5.493 USB 3k OFF 3kHz OFF OFF OFF 18=AFI-4 8.903 USB 3k OFF 3kHz OFF OFF OFF 19=AFI-4 13.294 USB 3k OFF 3kHz OFF OFF OFF 20=AFI-4 17.961 USB 3k OFF 3kHz OFF OFF OFF 21=AFI-5/INO-1 3.476 USB 3k OFF 3kHz OFF OFF OFF 22=AFI-5/INO-1 5.634 USB 3k OFF 3kHz OFF OFF OFF 23=AFI-5/INO-1 8.879 USB 3k OFF 3kHz OFF OFF OFF 24=AFI-5/INO-1 13.306 USB 3k OFF 3kHz OFF OFF OFF 25=AFI-5/INO-1 17.961 USB 3k OFF 3kHz OFF OFF OFF [BANK01] BANKNAME=Pacific ACTIVECH=0 00=CEP-1/2 2.869 USB 3k OFF 3kHz OFF OFF OFF 01=CEP-1/2 3.413 USB 3k OFF 3kHz OFF OFF OFF 02=CEP-1/2 5.547 USB 3k OFF 3kHz OFF OFF OFF 03=CEP-1/2 5.574 USB 3k OFF 3kHz OFF OFF OFF 04=CEP-1/2 8.843 USB 3k OFF 3kHz OFF OFF OFF 05=CEP-1/2 11.282 USB 3k OFF 3kHz OFF OFF OFF 06=CEP-1/2 13.261 USB 3k OFF 3kHz OFF OFF OFF 07=CEP-1/2 13.354 USB 3k OFF 3kHz OFF OFF OFF 08=CEP-1/2 17.904 USB 3k OFF 3kHz OFF OFF OFF 09=CWP-1/2 2.998 USB 3k OFF 3kHz OFF OFF OFF 10=CWP-1/2 4.666 USB 3k OFF 3kHz OFF OFF OFF 11=CWP-1/2 6.532 USB 3k OFF 3kHz OFF OFF OFF 12=CWP-1/2 6.562 USB 3k OFF 3kHz OFF OFF OFF 13=CWP-1/2 8.903 USB 3k OFF 3kHz OFF OFF OFF 14=CWP-1/2 11.384 USB 3k OFF 3kHz OFF OFF OFF 15=CWP-1/2 13.3 USB 3k OFF 3kHz OFF OFF OFF 16=CWP-1/2 17.904 USB 3k OFF 3kHz OFF OFF OFF 17=CWP-1/2 21.985 USB 3k OFF 3kHz OFF OFF OFF 18=NP 2.932 USB 3k OFF 3kHz OFF OFF OFF 19=NP 5.628 USB 3k OFF 3kHz OFF OFF OFF 20=NP 5.667 USB 3k OFF 3kHz OFF OFF OFF 21=NP 6.665 USB 3k OFF 3kHz OFF OFF OFF 22=NP 8.915 USB 3k OFF 3kHz OFF OFF OFF 23=NP 10.048 USB 3k OFF 3kHz OFF OFF OFF 24=NP 13.294 USB 3k OFF 3kHz OFF OFF OFF 25=NP 17.904 USB 3k OFF 3kHz OFF OFF OFF 26=NP 17.946 USB 3k OFF 3kHz OFF OFF OFF 27=NP 21.925 USB 3k OFF 3kHz OFF OFF OFF 28=SP 3.467 USB 3k OFF 3kHz OFF OFF OFF 29=SP 5.643 USB 3k OFF 3kHz OFF OFF OFF 30=SP 5.667 USB 3k OFF 3kHz OFF OFF OFF 31=SP 8.867 USB 3k OFF 3kHz OFF OFF OFF 32=SP 13.273 USB 3k OFF 3kHz OFF OFF OFF 33=SP 17.904 USB 3k OFF 3kHz OFF OFF OFF [BANK02] BANKNAME=Eur/W_Asia ACTIVECH=0 00=EUR-A 3.479 USB 3k OFF 3kHz OFF OFF OFF 01=EUR-A 5.661 USB 3k OFF 3kHz OFF OFF OFF 02=EUR-A 6.598 USB 3k OFF 3kHz OFF OFF OFF 03=EUR-A 10.084 USB 3k OFF 3kHz OFF OFF OFF 04=EUR-A 13.288 USB 3k OFF 3kHz OFF OFF OFF 05=EUR-A 17.961 USB 3k OFF 3kHz OFF OFF OFF 06=MID-1 2.992 USB 3k OFF 3kHz OFF OFF OFF 07=MID-1 4.669 USB 3k OFF 3kHz OFF OFF OFF 08=MID-1 6.631 USB 3k OFF 3kHz OFF OFF OFF 09=MID-1 8.951 USB 3k OFF 3kHz OFF OFF OFF 10=MID-1 11.375 USB 3k OFF 3kHz OFF OFF OFF 11=MID-1 17.961 USB 3k OFF 3kHz OFF OFF OFF 12=MID-3 2.944 USB 3k OFF 3kHz OFF OFF OFF 13=MID-3 4.669 USB 3k OFF 3kHz OFF OFF OFF 14=MID-3 6.631 USB 3k OFF 3kHz OFF OFF OFF 15=MID-3 8.951 USB 3k OFF 3kHz OFF OFF OFF 16=MID-3 11.375 USB 3k OFF 3kHz OFF OFF OFF 17=MID-3 17.961 USB 3k OFF 3kHz OFF OFF OFF 18=NCA-1 3.019 USB 3k OFF 3kHz OFF OFF OFF 19=NCA-1 5.646 USB 3k OFF 3kHz OFF OFF OFF 20=NCA-1 13.315 USB 3k OFF 3kHz OFF OFF OFF 21=NCA-1 17.958 USB 3k OFF 3kHz OFF OFF OFF 22=NCA-2 2.851 USB 3k OFF 3kHz OFF OFF OFF 23=NCA-2 4.678 USB 3k OFF 3kHz OFF OFF OFF 24=NCA-2 6.592 USB 3k OFF 3kHz OFF OFF OFF 25=NCA-2 10.096 USB 3k OFF 3kHz OFF OFF OFF 26=NCA-2 17.958 USB 3k OFF 3kHz OFF OFF OFF 27=NCA-3 3.004 USB 3k OFF 3kHz OFF OFF OFF 28=NCA-3 5.664 USB 3k OFF 3kHz OFF OFF OFF 29=NCA-3 10.039 USB 3k OFF 3kHz OFF OFF OFF 30=NCA-3 13.303 USB 3k OFF 3kHz OFF OFF OFF 31=NCA-3 17.958 USB 3k OFF 3kHz OFF OFF OFF [BANK03] BANKNAME=N_Atlantic ACTIVECH=0 00=NAT-A 3.016 USB 3k OFF 3kHz OFF OFF OFF 01=NAT-A 5.598 USB 3k OFF 3kHz OFF OFF OFF 02=NAT-A 8.906 USB 3k OFF 3kHz OFF OFF OFF 03=NAT-A 13.306 USB 3k OFF 3kHz OFF OFF OFF 04=NAT-A 17.946 USB 3k OFF 3kHz OFF OFF OFF 05=NAT-B 2.899 USB 3k OFF 3kHz OFF OFF OFF 06=NAT-B 5.616 USB 3k OFF 3kHz OFF OFF OFF 07=NAT-B 8.864 USB 3k OFF 3kHz OFF OFF OFF 08=NAT-B 13.291 USB 3k OFF 3kHz OFF OFF OFF 09=NAT-B 17.946 USB 3k OFF 3kHz OFF OFF OFF 10=NAT-C 2.862 USB 3k OFF 3kHz OFF OFF OFF 11=NAT-C 5.649 USB 3k OFF 3kHz OFF OFF OFF 12=NAT-C 8.879 USB 3k OFF 3kHz OFF OFF OFF 13=NAT-C 13.306 USB 3k OFF 3kHz OFF OFF OFF 14=NAT-C 17.946 USB 3k OFF 3kHz OFF OFF OFF 15=NAT-D 2.971 USB 3k OFF 3kHz OFF OFF OFF 16=NAT-D 4.675 USB 3k OFF 3kHz OFF OFF OFF 17=NAT-D 8.891 USB 3k OFF 3kHz OFF OFF OFF 18=NAT-D 11.279 USB 3k OFF 3kHz OFF OFF OFF 19=NAT-D 13.291 USB 3k OFF 3kHz OFF OFF OFF 20=NAT-D 17.946 USB 3k OFF 3kHz OFF OFF OFF 21=NAT-E 2.962 USB 3k OFF 3kHz OFF OFF OFF 22=NAT-E 6.628 USB 3k OFF 3kHz OFF OFF OFF 23=NAT-E 8.825 USB 3k OFF 3kHz OFF OFF OFF 24=NAT-E 11.309 USB 3k OFF 3kHz OFF OFF OFF 25=NAT-E 13.354 USB 3k OFF 3kHz OFF OFF OFF 26=NAT-F 3.476 USB 3k OFF 3kHz OFF OFF OFF 27=NAT-F 6.622 USB 3k OFF 3kHz OFF OFF OFF 28=NAT-F 8.831 USB 3k OFF 3kHz OFF OFF OFF [BANK04] BANKNAME=Carr/S_Am ACTIVECH=0 00=CAR-A 2.887 USB 3k OFF 3kHz OFF OFF OFF 01=CAR-A 5.55 USB 3k OFF 3kHz OFF OFF OFF 02=CAR-A 6.577 USB 3k OFF 3kHz OFF OFF OFF 03=CAR-A 8.918 USB 3k OFF 3kHz OFF OFF OFF 04=CAR-A 11.396 USB 3k OFF 3kHz OFF OFF OFF 05=CAR-A 13.297 USB 3k OFF 3kHz OFF OFF OFF 06=CAR-A 17.907 USB 3k OFF 3kHz OFF OFF OFF 07=CAR-B 3.455 USB 3k OFF 3kHz OFF OFF OFF 08=CAR-B 5.52 USB 3k OFF 3kHz OFF OFF OFF 09=CAR-B 6.586 USB 3k OFF 3kHz OFF OFF OFF 10=CAR-B 8.846 USB 3k OFF 3kHz OFF OFF OFF 11=CAR-B 11.33 USB 3k OFF 3kHz OFF OFF OFF 12=CAR-B 11.387 USB 3k OFF 3kHz OFF OFF OFF 13=CAR-B 17.907 USB 3k OFF 3kHz OFF OFF OFF 14=E_SAM 3.479 USB 3k OFF 3kHz OFF OFF OFF 15=E_SAM 5.526 USB 3k OFF 3kHz OFF OFF OFF 16=E_SAM 8.855 USB 3k OFF 3kHz OFF OFF OFF 17=E_SAM 10.096 USB 3k OFF 3kHz OFF OFF OFF 18=E_SAM 13.297 USB 3k OFF 3kHz OFF OFF OFF 19=E_SAM 17.907 USB 3k OFF 3kHz OFF OFF OFF 20=W_SAM 2.944 USB 3k OFF 3kHz OFF OFF OFF 21=W_SAM 4.669 USB 3k OFF 3kHz OFF OFF OFF 22=W_SAM 6.549 USB 3k OFF 3kHz OFF OFF OFF 23=W_SAM 10.024 USB 3k OFF 3kHz OFF OFF OFF 24=W_SAM 11.36 USB 3k OFF 3kHz OFF OFF OFF 25=W_SAM 17.907 USB 3k OFF 3kHz OFF OFF OFF 26=SAT-2 2.854 USB 3k OFF 3kHz OFF OFF OFF 27=SAT-2 5.565 USB 3k OFF 3kHz OFF OFF OFF 28=SAT-2 11.291 USB 3k OFF 3kHz OFF OFF OFF 29=SAT-2 13.315 USB 3k OFF 3kHz OFF OFF OFF 30=SAT-2 17.955 USB 3k OFF 3kHz OFF OFF OFF [BANK05] BANKNAME=E/S_Asia ACTIVECH=0 00=EA-1 3.016 USB 3k OFF 3kHz OFF OFF OFF 01=EA-1 6.571 USB 3k OFF 3kHz OFF OFF OFF 02=EA-1 8.897 USB 3k OFF 3kHz OFF OFF OFF 03=EA-1 10.042 USB 3k OFF 3kHz OFF OFF OFF 04=EA-1 17.958 USB 3k OFF 3kHz OFF OFF OFF 05=SEA-1/3 3.47 USB 3k OFF 3kHz OFF OFF OFF 06=SEA-1/3 6.556 USB 3k OFF 3kHz OFF OFF OFF 07=SEA-1/3 10.066 USB 3k OFF 3kHz OFF OFF OFF 08=SEA-1/3 11.396 USB 3k OFF 3kHz OFF OFF OFF 09=SEA-1/3 13.318 USB 3k OFF 3kHz OFF OFF OFF 10=SEA-1/3 17.907 USB 3k OFF 3kHz OFF OFF OFF 11=SEA-2/EA-2 3.485 USB 3k OFF 3kHz OFF OFF OFF 12=SEA-2/EA-2 5.649 USB 3k OFF 3kHz OFF OFF OFF 13=SEA-2/EA-2 5.655 USB 3k OFF 3kHz OFF OFF OFF 14=SEA-2/EA-2 8.942 USB 3k OFF 3kHz OFF OFF OFF 15=SEA-2/EA-2 11.396 USB 3k OFF 3kHz OFF OFF OFF 16=SEA-2/EA-2 13.309 USB 3k OFF 3kHz OFF OFF OFF 17=SEA-2/EA-2 17.907 USB 3k OFF 3kHz OFF OFF OFF [BANK06] BANKNAME=VOLMET ACTIVECH=1 00=VOLMET-NAT 3.485 USB 3k OFF 3kHz OFF OFF OFF 01=VOLMET-NAT 6.604 USB 3k OFF 3kHz OFF OFF OFF 02=VOLMET-NAT 10.051 USB 3k OFF 3kHz OFF OFF OFF 03=VOLMET-NAT 13.27 USB 3k OFF 3kHz OFF OFF OFF 04=VOLMET-EU 3.413 USB 3k OFF 3kHz OFF OFF OFF 05=VOLMET-EU 5.505 USB 3k OFF 3kHz OFF OFF OFF 06=VOLMET-EU 8.957 USB 3k OFF 3kHz OFF OFF OFF 07=VOLMET-EU 13.264 USB 3k OFF 3kHz OFF OFF OFF 08=VOLMET-PAC 2.863 USB 3k OFF 3kHz OFF OFF OFF 09=VOLMET-PAC 6.679 USB 3k OFF 3kHz OFF OFF OFF 10=VOLMET-PAC 8.828 USB 3k OFF 3kHz OFF OFF OFF 11=VOLMET-PAC 13.282 USB 3k OFF 3kHz OFF OFF OFF [BANK07] BANKNAME=Comp-1 ACTIVECH=0 00=Houston 5.529 USB 3k OFF 3kHz OFF OFF OFF 01=Houston 6.637 USB 3k OFF 3kHz OFF OFF OFF 02=Houston 10.075 USB 3k OFF 3kHz OFF OFF OFF 03=Houston 11.342 USB 3k OFF 3kHz OFF OFF OFF 04=Houston 13.33 USB 3k OFF 3kHz OFF OFF OFF 05=Houston 17.94 USB 3k OFF 3kHz OFF OFF OFF 06=Houston 21.964 USB 3k OFF 3kHz OFF OFF OFF 07=ARINC_Honolulu 3.013 USB 3k OFF 3kHz OFF OFF OFF 08=ARINC_Honolulu 6.64 USB 3k OFF 3kHz OFF OFF OFF 09=ARINC_Honolulu 10.033 USB 3k OFF 3kHz OFF OFF OFF 10=ARINC_Honolulu 11.342 USB 3k OFF 3kHz OFF OFF OFF 11=ARINC_Honolulu 13.348 USB 3k OFF 3kHz OFF OFF OFF 12=ARINC_Honolulu 13.354 USB 3k OFF 3kHz OFF OFF OFF 13=ARINC_Honolulu 17.925 USB 3k OFF 3kHz OFF OFF OFF 14=ARINC_Honolulu 21.964 USB 3k OFF 3kHz OFF OFF OFF 15=ARINC_New_York 3.494 USB 3k OFF 3kHz OFF OFF OFF 16=ARINC_New_York 6.526 USB 3k OFF 3kHz OFF OFF OFF 17=ARINC_New_York 6.64 USB 3k OFF 3kHz OFF OFF OFF 18=ARINC_New_York 11.342 USB 3k OFF 3kHz OFF OFF OFF 19=ARINC_New_York 13.33 USB 3k OFF 3kHz OFF OFF OFF 20=ARINC_New_York 13.354 USB 3k OFF 3kHz OFF OFF OFF 21=ARINC_New_York 17.925 USB 3k OFF 3kHz OFF OFF OFF 22=ARINC_New_York 21.964 USB 3k OFF 3kHz OFF OFF OFF 23=ARINC_San_Fran 3.013 USB 3k OFF 3kHz OFF OFF OFF 24=ARINC_San_Fran 3.413 USB 3k OFF 3kHz OFF OFF OFF 25=ARINC_San_Fran 6.64 USB 3k OFF 3kHz OFF OFF OFF 26=ARINC_San_Fran 8.843 USB 3k OFF 3kHz OFF OFF OFF 27=ARINC_San_Fran 11.342 USB 3k OFF 3kHz OFF OFF OFF 28=ARINC_San_Fran 13.3 USB 3k OFF 3kHz OFF OFF OFF 29=ARINC_San_Fran 13.348 USB 3k OFF 3kHz OFF OFF OFF 30=ARINC_San_Frano 13.354 USB 3k OFF 3kHz OFF OFF OFF 31=ARINC_San_Fran 17.925 USB 3k OFF 3kHz OFF OFF OFF 32=ARINC_San_Fran 21.964 USB 3k OFF 3kHz OFF OFF OFF 33=ARINC_Gulf_Mex 4.55 USB 3k OFF 3kHz OFF OFF OFF 34=ARINC_Gulf_Mex 6.82 USB 3k OFF 3kHz OFF OFF OFF 35=ARINC_Gulf_Mex 8.07 USB 3k OFF 3kHz OFF OFF OFF 36=ARINC_Gulf_Mex 13.354 USB 3k OFF 3kHz OFF OFF OFF 37=Rainbow_St_Johns 3.485 USB 3k OFF 3kHz OFF OFF OFF 38=Rainbow_St_Johns 5.604 USB 3k OFF 3kHz OFF OFF OFF 39=Rainbow_St_Johns 8.819 USB 3k OFF 3kHz OFF OFF OFF 40=Rainbow_St_Johns 13.285 USB 3k OFF 3kHz OFF OFF OFF 41=Rainbow_St_Johns 13.42 USB 3k OFF 3kHz OFF OFF OFF 42=Rainbow_St_Johns 17.91 USB 3k OFF 3kHz OFF OFF OFF [BANK08] BANKNAME=Comp-2 ACTIVECH=42 00=Berne 3.01 USB 3k OFF 3kHz OFF OFF OFF 01=Berne 4.654 USB 3k OFF 3kHz OFF OFF OFF 02=Berne 4.67 USB 3k OFF 3kHz OFF OFF OFF 03=Berne 4.702 USB 3k OFF 3kHz OFF OFF OFF 04=Berne 6.526 USB 3k OFF 3kHz OFF OFF OFF 05=Berne 6.643 USB 3k OFF 3kHz OFF OFF OFF 06=Berne 6.705 USB 3k OFF 3kHz OFF OFF OFF 07=Berne 6.742 USB 3k OFF 3kHz OFF OFF OFF 08=Berne 8.936 USB 3k OFF 3kHz OFF OFF OFF 09=Berne 9.211 USB 3k OFF 3kHz OFF OFF OFF 10=Berne 10.069 USB 3k OFF 3kHz OFF OFF OFF 11=Berne 13.205 USB 3k OFF 3kHz OFF OFF OFF 12=Berne 13.266 USB 3k OFF 3kHz OFF OFF OFF 13=Berne 13.324 USB 3k OFF 3kHz OFF OFF OFF 14=Berne 15.046 USB 3k OFF 3kHz OFF OFF OFF 15=Berne 15.05 USB 3k OFF 3kHz OFF OFF OFF 16=Berne 15.835 USB 3k OFF 3kHz OFF OFF OFF 17=Berne 17.931 USB 3k OFF 3kHz OFF OFF OFF 18=Berne 18.023 USB 3k OFF 3kHz OFF OFF OFF 19=Berne 18.48 USB 3k OFF 3kHz OFF OFF OFF 20=Berne 19.554 USB 3k OFF 3kHz OFF OFF OFF 21=Berne 20.035 USB 3k OFF 3kHz OFF OFF OFF 22=Berne 20.87 USB 3k OFF 3kHz OFF OFF OFF 23=Berne 21.933 USB 3k OFF 3kHz OFF OFF OFF 24=Berne 21.988 USB 3k OFF 3kHz OFF OFF OFF 25=Berne 23.285 USB 3k OFF 3kHz OFF OFF OFF 26=Berne 25.5 USB 3k OFF 3kHz OFF OFF OFF 27=Portishead 3.482 USB 3k OFF 3kHz OFF OFF OFF 28=Portishead 4.807 USB 3k OFF 3kHz OFF OFF OFF 29=Portishead 5.61 USB 3k OFF 3kHz OFF OFF OFF 30=Portishead 6.634 USB 3k OFF 3kHz OFF OFF OFF 31=Portishead 8.17 USB 3k OFF 3kHz OFF OFF OFF 32=Portishead 8.96 USB 3k OFF 3kHz OFF OFF OFF 33=Portishead 10.291 USB 3k OFF 3kHz OFF OFF OFF 34=Portishead 11.306 USB 3k OFF 3kHz OFF OFF OFF 35=Portishead 12.133 USB 3k OFF 3kHz OFF OFF OFF 36=Portishead 13.865 USB 3k OFF 3kHz OFF OFF OFF 37=Portishead 14.89 USB 3k OFF 3kHz OFF OFF OFF 38=Portishead 17.405 USB 3k OFF 3kHz OFF OFF OFF 39=Portishead 19.51 USB 3k OFF 3kHz OFF OFF OFF 40=Portishead 20.065 USB 3k OFF 3kHz OFF OFF OFF 41=Portishead 21.765 USB 3k OFF 3kHz OFF OFF OFF [BANK09] BANKNAME= ACTIVECH=7 00=WWV2 2.5 AM 6k ON 5kHz OFF OFF OFF 01=WWV5 5 AM 6k ON 5kHz OFF OFF OFF 02=WWV10 10 AM 6k ON 5kHz OFF OFF OFF 03=WWV15 15 AM 6k ON 5kHz OFF OFF OFF 04=WWV20 20 AM 6k ON 5kHz OFF OFF OFF 05=CHU3 3.33 AM 6k ON 5kHz OFF OFF OFF 06=CHU5 7.335 AM 6k ON 5kHz OFF OFF OFF 07=CHU14 14.67 AM 6k ON 20kHz OFF OFF OFF [BANK10] BANKNAME= ACTIVECH=0 00=WFAN 0.66 AM 15k OFF 10kHz OFF OFF OFF 01=NONAME 0.83 AM 15k OFF 10kHz OFF OFF OFF 02=WPEN 0.95 AM 15k OFF 10kHz OFF OFF OFF 03=WBZ 1.03 AM 15k OFF 20kHz OFF OFF OFF 04=KYW 1.06 AM 15k OFF 10kHz OFF OFF OFF 05=WBAL 1.09 AM 15k OFF 10kHz OFF OFF OFF 06=NONAME 1.1 AM 15k OFF 10kHz OFF OFF OFF 07=NONAME 1.11 AM 15k OFF 10kHz OFF OFF OFF 08=WDEL 1.15 AM 15k OFF 10kHz OFF OFF OFF 09=NONAME 1.17 AM 15k OFF 10kHz OFF OFF OFF 10=WPHT 1.21 AM 15k OFF 10kHz OFF OFF OFF 11=WNRK 1.26 AM 15k OFF 10kHz OFF OFF OFF 12=WJBR 1.29 AM 15k OFF 10kHz OFF OFF OFF 13=NONAME 1.33 AM 15k OFF 10kHz OFF OFF OFF 14=WTMC 1.38 AM 15k OFF 10kHz OFF OFF OFF 15=WILM 1.45 AM 15k OFF 10kHz OFF OFF OFF 16=NONAME 1.51 AM 15k OFF 10kHz OFF OFF OFF 17=WSER 1.55 AM 15k OFF 10kHz OFF OFF OFF 18=NONAME 0.88 AM 15k OFF 10kHz OFF OFF OFF 19=NONAME 0.8 AM 15k OFF 10kHz OFF OFF OFF 20=NONAME 89.9 WFM 230k OFF 200kHz OFF OFF OFF 21=WVUD 91.3 WFM 230k OFF 200kHz OFF OFF OFF 22=WSTW 93.7 WFM 230k OFF 200kHz OFF OFF OFF 23=NONAME 94.1 WFM 230k OFF 200kHz OFF OFF OFF 24=NONAME 94.7 WFM 230k OFF 200kHz OFF OFF OFF 25=NONAME 95.7 WFM 230k OFF 200kHz OFF OFF OFF 26=WJBR 99.5 WFM 230k OFF 200kHz OFF OFF OFF 27=WXCY 103.7 WFM 230k OFF 200kHz OFF OFF OFF 28=NONAME 107.7 WFM 230k OFF 200kHz OFF OFF OFF [BANK14] BANKNAME= ACTIVECH=0 [BANK15] BANKNAME= ACTIVECH=0 [BANK16] BANKNAME= ACTIVECH=0 [BANK17] BANKNAME= ACTIVECH=0 [BANK18] BANKNAME= ACTIVECH=0 [BANK19] BANKNAME=scan ACTIVECH=7 02=C17 493.75 WFM 230k OFF 6MHz OFF OFF OFF 04=C22 523.75 WFM 230k OFF 6MHz OFF OFF OFF 05=C23 529.75 WFM 230k OFF 6MHz OFF OFF OFF 07=C48 679.75 WFM 230k OFF 6MHz OFF OFF OFF 08=C61 757.75 WFM 230k OFF 6MHz OFF OFF OFF 10=C65 781.75 WFM 230k OFF 6MHz OFF OFF OFF 13=C29 565.75 WFM 230k OFF 6MHz OFF OFF OFF 16=C43 649.75 WFM 230k OFF 6MHz OFF OFF OFF 17=C45 661.75 WFM 230k OFF 6MHz OFF OFF OFF 20=C57 733.75 WFM 230k OFF 6MHz OFF OFF OFF [COMMON] ACTIVEBANK=11 [BANK11] BANKNAME= ACTIVECH=10 00=C2 59.75 WFM 230k OFF 6MHz OFF OFF OFF 01=C10 197.75 WFM 230k OFF 6MHz OFF OFF OFF 02=C11 203.75 WFM 230k OFF 6MHz OFF OFF OFF 03=C12 209.75 WFM 230k OFF 6MHz OFF OFF OFF 04=C13 215.75 WFM 230k OFF 6MHz OFF OFF OFF 05=C17 493.75 WFM 230k OFF 6MHz OFF OFF OFF 06=C22 523.75 WFM 230k OFF 6MHz OFF OFF OFF 07=C23 529.75 WFM 230k OFF 6MHz OFF OFF OFF 08=C48 679.75 WFM 230k OFF 6MHz OFF OFF OFF 09=C61 757.75 WFM 230k OFF 6MHz OFF OFF OFF 10=C65 781.75 WFM 230k OFF 6MHz OFF OFF OFF 11=C29 565.75 WFM 230k OFF 6MHz OFF OFF OFF 12=C43 649.75 WFM 230k OFF 6MHz OFF OFF OFF 13=C45 661.75 WFM 230k OFF 6MHz OFF OFF OFF 14=C57 733.75 WFM 230k OFF 6MHz OFF OFF OFF icom-20120228/IC.BAK0000744000175000017500000020310010453572171012511 0ustar colincolin/* * Program to control ICOM radios * * Main program */ #include "icom.h" #include #ifndef MSDOS /* include for Unix */ #include #include #include #include #endif /* MSDOS */ /* * Module definitions */ #define ARGMAX 20 /* maximum number of command args */ #define DICOM "/dev/icom" /* CI-V serial port device */ /* * External functions */ extern FILE *fopen(); extern char *strtok(), *strcpy(); extern char *optarg; extern int optind, opterr; extern double freqdouble(u_char *, int); /* * Local function prototypes */ static int getline(char *); static int argchan(struct icom *, struct chan *, char *); static int argbank(struct icom *, struct chan *, char *); static int setswitch(struct icom *, struct cmdtable *, int); static int setswitch2(struct icom *, struct cmdtable *, int); static int setswitch3(struct icom *, struct cmdtable *, int, int); static int sw_keypad(void); static int sw_keybd(void); char *capname(int, struct cmdtable *); static char *capdescr(char *, struct cmdtable *); int capkey(char *, struct cmdtable *); double fabs(double); static void printch(struct icom *, char *); static int readmeter(struct icom *, struct cmdtable *, int, char *); static void perr(int); static int qqsv(struct icom *, struct cmdtable *); static void banner(struct icom *); /* * Global variables */ int fd_icom; /* CI-V device */ struct icom *rptr = NULL; /* radio structure pointer */ int flags; /* radio flags */ int pflags; /* program flags */ static char defarg[LINMAX]; /* default arguments */ static char args[LINMAX]; /* command line */ static char *argv[ARGMAX]; /* command line args */ static int argn; /* number of command line args */ static int argi; /* command args index */ static FILE *fp_cmd[FPMAX] = {NULL}; /* include file stack */ static int fp = 0; /* include file statck index */ static char *updown = " +- "; /* channel dinkle */ #ifndef MSDOS static int fd; /* terminal control file descriptor */ static struct termios terma, termb; /* Unix terminal interface */ extern int errno; #endif /* MSDOS */ /* * Main program */ int main( int argc, /* number of arguments */ char **argcv /* vector of argument pointers */ ) { char chr; /* char temp */ char *ptr; /* fiddles */ int i, temp; /* int temps */ double freq; /* double temp */ struct icom *rp; /* radio structure pointer */ struct chan *cp; /* memory channel pointer */ char s1[LINMAX]; /* string buffer */ FILE *fp_temp; /* * Initialize */ flags = pflags = 0; *defarg = '\0'; rptr = NULL; #ifndef MSDOS /* * Process command-line arguments */ if ((fd_icom = open(DICOM, O_RDWR, 0777)) < 0) { printf("*** Unable to open serial port %s\n", DICOM); exit(1); } while ((temp = getopt(argc, argcv, "c:df:g:km:o:r:")) != -1) { switch (temp) { /* * -d - debug trace */ case 'd': pflags |= P_TRACE | P_ERMSG; continue; /* * -f - open command file */ case 'f': if ((fp_temp = fopen(optarg, "r")) == NULL) { perr(R_IO); exit(R_IO); } fp++; fp_cmd[fp] = fp_temp; continue; /* * -k - select keypad mode */ case 'k': pflags |= P_PAD; continue; /* * -r - select radio. Use default bit rate. */ case 'r': temp = capkey(optarg, identab); if (temp < 0) { perr(temp); exit(temp); } rptr = select_radio(temp, 0); if (rptr == NULL) { perr(R_RAD); exit(R_RAD); } continue; } /* * The remaining options are valid only after a radio * has been selected. If any are selected, the program * exits after executing the command line options. */ if (rptr == NULL) { perr(R_DEF); exit(R_DEF); } rp = rptr; cp = &rp->chan; switch (temp) { /* * -c - set bank, channel * * This is the same as the chan keyboard command. */ case 'c': pflags |= P_EXIT; temp = argchan(rp, cp, optarg); if (temp < 0) { perr(temp); continue; } temp = readchan(rp); if (temp < 0) perr(temp); continue; /* * -g - set frequency * * This is the same as the default frequency keyboard * command. */ case 'g': pflags |= P_EXIT; if (sscanf(optarg, "%lf", &freq) != 1) { perr(R_FMT); continue; } if (freq > 1000) freq /= 1000; temp = loadfreq(rp, freq); if (temp < 0) perr(temp); continue; /* * -m - set mode * * This is the same as the mode keybard command. Note, * this option must precede the -g option for older * radios. */ case 'm': pflags |= P_EXIT; temp = capkey(optarg, rp->modetab); if (temp < 0) { perr(temp); continue; } temp = loadmode(rp->ident, temp); if (temp < 0) perr(temp); continue; } } /* * If a radio was found, initialize it. If its settings were * changed and a command file is not open, assume this is run * from a script and nothing more needs to be done. */ if (pflags & P_EXIT) exit(0); if (pflags & P_PAD) { if (sw_keypad()) pflags &= ~P_PAD; } #endif /* MSDOS */ /* * Main loop */ while (1) { flags &= ~F_CACHE; pflags &= ~(P_DISP | P_DSPCH | P_DSPST | P_KEYP | P_ESC); if (pflags & P_PAD) { /* * Keypad mode. Keypad commands begin with a * sequence of digits and special characters and * end with a single letter, ANSI escape * sequence or '\n', which specifies the * function. Escape sequences consist of ESC * followed by '[' and either a letter or * sequence of digits followed by '~', which is * not part of the command. Help '?' displays a * list of command names and descriptions. */ printf(">"); ptr = s1; *ptr = *args = '\0'; while (1) { chr = (char)getchar(); if (chr == KILL) { printf(" XXX\n>"); ptr = s1; *ptr = *args = '\0'; continue; } if (chr == ESC) { pflags |= P_ESC; *ptr = '\0'; ptr = args; continue; } if (pflags & P_ESC) { if (chr == '~' || chr == '\n') break; *ptr++ = chr; if (isalpha(chr)) break; continue; } if (!isalpha(chr) && !iscntrl(chr) && chr != '?' && chr != ' ') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); continue; } *ptr = '\0'; ptr = args; if (chr != '\n') { pflags |= P_KEYP; *ptr++ = chr; putchar(chr); } if (pflags & P_KEYP) putchar('\n'); break; } /* * Rewrite the line with the command letter * first followed by the argument, then pretend * it a keyboard command. */ *ptr = '\0'; strcat(args, " "); strcat(args, s1); argn = getline(args); argi = 0; temp = command(rptr, key); } else { /* * Keyboard mode. Get the next command line and * parse the tokens separated by whitespace. * Ignore '#' and the rest of the line. This is * handy for command script annotations. */ if (fp_cmd[fp] != NULL) { if (fgets(args, LINMAX, fp_cmd[fp]) == NULL) { close(fp_cmd[fp]); fp--; continue; } else { printf("%s", args); } } else { printf("icom>"); if (gets(args) == NULL) exit(0); } if (*args == '#') continue; argn = getline(args); argi = 0; temp = command(rptr, cmd); } perr(temp); if (rptr == NULL) continue; /* * Update chan, freq, mode. */ rp = rptr; cp = &rp->chan; if (pflags & (P_DISP | P_DSPCH | P_DSPST)) { printch(rp, s1); printf("%s\n", s1); } } } /* * Process each command in the line in turn. */ int command( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { int rval; rval = R_OK; if (argn == 0) { pflags |= P_DISP; return (rval); } while (argn - argi > 0) { rval = qqsv(rptr, cmdop); if (rval < 0) break; argi++; } return (rval); } /* * Execute command * * This routine executes a command consisting of a single line beginning * with a command token followed by argument tokens. Some commands cause * this routine to be invoked recursively. In each case the recursive * call points to a command token. */ int qqsv( struct icom *rp, /* radio pointer */ struct cmdtable *cmdop /* command table pointer */ ) { FILE *fp_in; /* data input file */ FILE *fp_out; /* data output file */ char s1[LINMAX]; /* string buffer */ char s2[LINMAX]; /* string buffer */ u_char rsp[BMAX]; /* radio response */ u_char *ptr; /* fiddles */ int i, temp, sw, rval; /* int temps */ FILE *fp_temp; double freq, step, dtemp; /* double temps */ struct chan *cp; /* memory channel pointer */ u_char cmdempty[] = {V_EMPTY, FI}; u_char cmdctl[] = {0, 0, 0, 0, FI}; u_char cmdvfom[] = {V_VFOM, FI}; u_char cmdwrite[] = {V_WRITE, FI}; u_char cmdtx[] = {V_TX, 0x00, 0x01, FI}; u_char cmdrx[] = {V_TX, 0x00, 0x00, FI}; u_char cmdvfoa[] = {V_SVFO, 0x00, FI}; u_char cmdvfob[] = {V_SVFO, 0x01, FI}; u_char cmdsplit[] = {V_SPLIT, 0x00, FI}; u_char cmdswap[] = {V_SVFO, 0xb0, FI}; struct timeval tv; struct tm *tm; /* * For the 756, 7000 and 7800 time comands */ u_char year7000[] = {V_SETW, 0x05, 0x00, 0x39, FI, 0x00, FI}; u_char date7000[] = {V_SETW, 0x05, 0x00, 0x40, FI, 0x00, FI}; u_char time7000[] = {V_SETW, 0x05, 0x00, 0x41, FI, 0x00, FI}; u_char date7800[] = {V_SETW, 0x05, 0x00, 0x59, FI, 0x00, 0x00, 0x00, FI}; u_char time7800[] = {V_SETW, 0x05, 0x00, 0x60, FI, 0x00, FI}; u_char time756[] = {V_SETW, 0x05, 0x16, FI, 0x00, FI}; /* * Ignore selected noise strings. */ rval = R_OK; if (strcmp(argv[argi], "MHz") == 0 || strcmp(argv[argi], "kHz") == 0 || strcmp(argv[argi], "dB") == 0) return(rval); sw = capkey(argv[argi], cmdop); switch (sw) { /* * radio [ [ ]] * * Select the radio and CI-V bit rate for further * commands and display its description and band limits. If * is missing, use the default from tables. If is * missing and the radio has not been previously defined, the * bus is probed for all known radios, which takes some time. If * previously defined, its description and band limits of are * displayed. */ case C_RADIO: if (argn - argi < 2) { if (rp != NULL) { banner(rp); break; } temp = R_NOR;; for (i = 0; name[i].name[0] != '\0'; i++) { rp = select_radio(name[i].ident, 0); if (rp != NULL) banner(rp); } } else { temp = capkey(argv[++argi], identab); if (temp < 0) return (temp); if (argn - argi < 2) i = 0; else i = capkey(argv[++argi], baud); if (i < 0) return(i); rp = select_radio(temp, i); if (rp != NULL) banner(rp); } if (rptr == NULL) return (R_RAD); pflags |= P_DSPCH; break; /* * include * * include command file. */ case C_INCLD: if (argn - argi < 2) { rval = R_ARG; break; } if ((fp_temp = fopen(argv[++argi], "r")) == NULL) { rval = (R_IO); break; } fp++; fp_cmd[fp] = fp_temp; break; /* * quit * * Quit the dance */ case C_QUIT: exit(0); /* * verbose off | on * * Set verbose mode */ case C_VERB: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], verbx); if (temp < 0) rval = temp; else pflags = (pflags & ~P_VERB) | temp; return (rval); /* * trace [ all | none | bus | pkt ] * * Set debug flags */ case C_DEBUG: if (argn - argi < 2) return (R_ARG); temp = capkey(argv[++argi], dbx); if (temp < 0) rval = temp; else pflags = (pflags & ~(P_TRACE | P_ERMSG)) | temp; return (rval); /* * pad * * Switch to keypad mode. */ case C_KEYPAD: if (!sw_keypad()) pflags |= P_PAD; return (rval); /* * / (keypad mode) * * Erase input */ case R_ERR: case C_ERASE: return (rval); /* * q (keypad mode) * * Switch to keyboard mode. */ case C_KEYBD: if (!sw_keybd()) pflags &= ~P_PAD; return (rval); } /* * The remaining commands are valid only after a radio has been * selected. */ if (rp == NULL) return (R_DEF); cp = &rp->chan; switch (sw) { /* * dump vfo (debug) */ case C_DUMP: printf("flags %x pflags %x vfo", flags, pflags); ptr = (u_char *)&cp->vfo; for (i = 0; i < sizeof(struct vfo7000); i++) printf(" %02x", *ptr++ & 0xff); printf("\nsplit %f step %02x pstep %02x %02x atten %02x scan %02x\n", cp->split, cp->aux.step, cp->aux.pstep[0], cp->aux.pstep[1], cp->aux.atten, cp->aux.scan); break; /* * default * * Concatenate remaining tokens as default string for restore. */ case C_DEFLT: if (argn - argi < 2) { printf("default:%s\n", defarg); break; } *defarg = '\0'; while (argn - argi > 1) { strcat(defarg, " "); strcat(defarg, argv[++argi]); } break; /* * time [ set ] * * Set date and time and display for readback. This works for * the 7000 and 756 and maybe works for the 7800. */ case C_TIME: gettimeofday(&tv, NULL); tm = gmtime((time_t *)&tv.tv_sec); /* * 7000 yyyy mm/dd hhmm */ if (rp->ident == 0x70) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &year7000[4]); rval = setcmda(rp->ident, year7000, rsp); if (rval < 0) break; dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7000[4]); setcmda(rp->ident, date7000, rsp); dtohex(tm->tm_hour * 100 + tm->tm_min, &time7000[4]); setcmda(rp->ident, time7000, rsp); } year7000[4] = FI; setcmda(rp->ident, year7000, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); date7000[4] = FI; setcmda(rp->ident, date7000, rsp); sprintf(s2, "%x/%x ", rsp[4], rsp[5]); strcat(s1, s2); time7000[4] = FI; setcmda(rp->ident, time7000, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 7800 yyyy mm/dd hhmm */ } else if (rp->ident == 0x6a) { if (argn - argi > 1) { ++argi; dtohex(tm->tm_year + 1900, &date7800[4]); dtohex((tm->tm_mon + 1) * 100 + tm->tm_mday, &date7800[6]); rval = setcmda(rp->ident, date7800, rsp); if (rval < 0) break; dtohex(tm->tm_hour * 100 + tm->tm_min, &time7800[4]); setcmda(rp->ident, time7800, rsp); } date7800[4] = FI; setcmda(rp->ident, date7800, rsp); sprintf(s1, "%02x%02x ", rsp[4], rsp[5]); sprintf(s2, "%x/%x ", rsp[6], rsp[7]); strcat(s1, s2); time7800[4] = FI; setcmda(rp->ident, time7800, rsp); sprintf(s2, "%02x%02x UTC", rsp[4], rsp[5]); strcat(s1, s2); /* * 756 hhmm */ } else { if (argn - argi > 1) { ++argi; dtohex(tm->tm_hour * 100 + tm->tm_min, &time756[3]); rval = setcmda(rp->ident, time756, rsp); if (rval < 0) break; } time756[3] = FI; setcmda(rp->ident, time756, rsp); sprintf(s1, "%02x%02x UTC", rsp[3], rsp[4]); } printf("%s\n", s1); break; /* * (command not found) * * We get here if the token matches no valid command name. If it * has valid floating-point format, set the frequency as given. * If it is a valid mode name, then set the mode as given. * Otherwise, declare an error. */ case C_FREQX: if (sscanf(argv[argi], "%lf", &freq) == 1) { if (freq > 1000.) freq /= 1000; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DISP; break; } temp = capkey(argv[argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* * mode * * The only reason this command is here is to provide help with * the valid mode combinations. The following radios support the * mode variants listed (1 narrow, 2 medium, 3 wide). * * usb/lsb cw/rtty am fm wfm * 706g 2, 3 1, 2, 3 2, 3 2, 3 1 * 756 1, 2, 3 1, 2, 3 1, 2, 3 2, 3 no * 7000 1, 2, 3 1, 2, 3 1, 2, 3 1, 2, 3 1 * R8500 1, 2, 3 1, 2, 3 1, 2, 3 1, 2 1 */ case C_MODE: if (argn - argi < 2) { pflags |= P_DISP; break; } temp = capkey(argv[++argi], rp->modetab); if (temp < 0) { rval = temp; break; } rval = loadmode(rp->ident, temp); if (rval < 0) break; pflags |= P_DISP; break; /* *************************************************************** * * * These commands are the bread and butter for most operators. * * They can be used to enter and display frequency and mode * * data and, when available, filter configuration. Note the * * difference between the freq and chan commands; the freq * * command operates directly on the VFO, while the chan * * command retrieves the entire channel contents, including in * * the 7000 both VFOs and channel name. * * * *************************************************************** */ /* *************************************************************** * * * The save and restore commands are used to save a single * * channel or block of channels to a file and restore them * * from a file. They can also be used to clone data between * * compatible radios. The read, write and empty commands * * operate on a single channel or block of channels. * * * *************************************************************** * * The arguments to these commands specify a single bank/chanel * number or a range of bank/channel numbers. See argchan() for * syntax */ /* * save [ chan ] [ file ] * * Save a block of memory channels to a file. */ case C_SAVE: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp);; if ((fp_out = fopen(argv[++argi], "w")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (cp->freq != 0) fprintf(fp_out, "%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } fclose(fp_out); pflags &= ~P_DSPCH; break; /* * restore [ chan ] [ file ] * * Restore a block of memory channels from a file. If the * argument is '*', restore each file line to the same memory * channel it came from. If not, restore the block specified, * from the first channel to the lase. */ case C_RESTORE: if (argn < 3) return (R_ARG); if (*argv[++argi] == '*') temp = 4; else temp = argchan(rp, cp, argv[argi]); if (temp < 0) return (temp); if ((fp_in = fopen(argv[++argi], "r")) == NULL) return (R_IO); pflags |= P_DSPCH; while (1) { /* * Get next line from file. Ignore empty lines. */ if (fgets(s1, LINMAX, fp_in) == NULL) break; if (*defarg != '\0') { strcpy(s1, defarg); argn = getline(s1); argi = 0; if (argn == 0) continue; rval = command(rp, loadtab); if (rval < 0) break; } argn = getline(s1); argi = 0; if (argn == 0) continue; /* * If '*' argument, copy the data to the channel * specified on the file line. If not, copy the * data to the channel specified in the * argument. */ emptyvfo(cp); if (temp == 4) { rval = argchan(rp, cp, argv[argi++]); if (rval < 0) break; if (argn == 1) continue; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; } else { if (argn == 1) continue; argi++; rval = command(rp, loadtab); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } } close(fp_in); pflags &= ~(P_DISP | P_DSPCH); break; /* * read [ chan ] * * Read frequency, mode and other data from a memory channel. * While it seems silly, specifying a block of channels reads * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_READ: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) { if (temp == R_NOP) capkey("?", loadtab); return (temp); } pflags |= P_DSPCH; while (1) { rval = readchan(rp); if (rval < 0) break; printch(rp, s1); printf("%s\n", s1); if (argchan(rp, cp, &updown[temp]) == 3) break; } pflags &= ~P_DSPCH; break; /* * write [ chan ] * * Write the current frequency, mode and other data to a memory * channel. Various radios interpret other data in various ways. * For the 7000, this includes both VFOs with their current * mode, filter setting, duplex and CTSS/DTCS configuration. * While it seems silly, specifying a block of channels writes * them all and leaves the current channel pointer at the first * one beyond the range. */ case C_WRITE: if (argn < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = writechan(rp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } break; /* * empty [ chan ] [ chan ] * * Empty memory channel or block of memory channels. */ case C_EMPTY: if (argn - argi < 2) temp = argchan(rp, cp, NULL); else temp = argchan(rp, cp, argv[++argi]); if (temp < 0) return (temp); while (1) { rval = emptychan(rp->ident, cp); if (rval < 0) break; if (argchan(rp, cp, &updown[temp]) == 3) break; } cp->freq = 0; break; /* * bank [ bank ] [ name ] [...] * * Read/write bank name. This works for the R8500 and maybe * R9000, but not for known transceivers, which don't have a * bank name. */ case C_BANK: if (argn - argi < 2) temp = cp->bank; else if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (argn > 2) loadbank(rp->ident, temp, cp->name); rval = readbank(rp->ident, temp, s1); if (rval < 0) break; cp->bank = temp; printf("bank %d %s\n", temp, s1); break; /* *************************************************************** * * * The following commands can provide software compensation * * for VFO or BFO frequency errors. Some radios generate BFO * * frequencies using a VCXO for each mode. The BFO * * compensation command corrects for the intrinsic frequency * * error (Hz) in each mode. Other radios generate all LO and * * BFO frequencies from a single VFO synthesizer. The VFO * * compensation corrects for the intrinsic frequency error * * (PPM). As each radio is different, these commands should * * probably live in a batch file. * * * *************************************************************** */ /* * vfocomp [ ] * * Set the VFO frequency compensation (PPM). */ case C_VCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->freq_comp = freq; } printf("frequency %f VFO offset %.2f PPM\n", cp->freq, rp->freq_comp); break; /* * bfocomp [ ] * * Set the BFO frequency compensation (Hz). */ case C_BCOMP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rp->bfo[cp->mode & 0x0f] = freq; } freq = rp->bfo[cp->mode & 0x0f]; printf("mode %s BFO offset %.0lf Hz\n", capname(cp->mode, rp->modetab), freq); break; /* *************************************************************** * * * Radio commands that read and write internal registers, * * including VFO options, scan options, and duplex/simplex * * options. * * * *************************************************************** */ /* * Modern transceivers have two VFOs, called A and B, * alternatively main and sub, and two frequency/mode displays. * Each VFO is associated with mode and memory channel. The * functions of the vfo commands differ in funky ways on the * various transceivers. * * On the 7000 a "vfo a" command shows VFO A on the main display * and VFO B on the sub display. A "vfo b" command shows VFO B * on the main display and VFO A on the sub display. A "vfo * btoa" command copies the contents of VFO B to VFO A. A "vfo * swap" command interchanges the contents of VFO A and VFO B. * The 7000 can't do any of the other vfo commands. * * On the 756 the main display is at the top in large bright * font, while the sub display is at the bottom in small dim * font. Each display is associated with a VFO and a memory * channel. The mode, duplex direction and tone configuration * can be set separately for each VFO. Both VFOs and related * data can be saved in a memory channel. Ordinarily, updates * from the panel controls and this program go to the main VFO. * A "split sub" command switches updates to the sub VFO, while * a "split main" command switches back to the main VFO. Note * that the updated VFO is highlighted in bright font. A "vfo * equal" command copies the contents of the main VFO to the sub * VFO, while a "vfo swap" command interchanges the contents of * the two VFOs. The "vfo watch" and "vfo nowatch" turn the * dual-watch function on and off. Note that in dual-watch the * sub VFO is highlihted in large font. * * vfo [ ] (V_SVFO 0x07 command) * * Execute one of the subcommands on the help menu. */ case C_VFO: rval = setswitch(rp, vfo, V_SVFO); if (rval < 0) break; pflags |= P_DSPCH; break; /* * swap (V_SVFO 0x07 command) * * Swap the contents of VFO A and VFO B and make the swapped VFO * active to enter frequency and mode. This is the same function * as the "vfo swap" command useful in keypad mode to monitor * the transmit frequency. */ case C_SWAP: rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; pflags |= P_DSPCH; break; /* * split [ cmd ] (V_SPLIT 0x0f command) * * Use VFO A for receive and VFO B for transmit. * * Ordinarily, ICOM transceivers transmit and receive with VFO * on VFO A. A "split on" command transmits with VFO B, while a * "split off" restores the normal behavior. The 7000 can do * "split dup+", "split dup-" and "split simplex" as well. * * In addition to the split commands on the help menu, this * command can be used to set the transmit offset in kHz if the * argument is preceeded by a + or - or to an arbitrary value in * MHz if an unsigned value. */ case C_SPLIT: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &freq) == 1) { if (freq > 1000) freq /= 1000; readvfo(rp); if (argv[argi][0] == '+' || argv[argi][0] == '-') { freq /= 1000.; freq += cp->freq; } cp->split = freq; if (cp->split == 0) { cmdsplit[1] = 0x00; rval = setcmda(rp->ident, cmdsplit, rsp); pflags |= P_DSPCH; break; } rval = setcmda(rp->ident, cmdswap, rsp); if (rval < 0) break; rval = loadfreq(rp, freq); if (rval < 0) break; rval = loadmode(rp->ident, cp->mode); if (rval < 0) break; setcmda(rp->ident, cmdvfoa, rsp); cmdsplit[1] = 0x01; setcmda(rp->ident, cmdswap, rsp); pflags |= P_DSPCH; break; } argi--; } rval = setswitch(rp, split, V_SPLIT); if (rval < 0) break; pflags |= P_DSPCH; break; /* * mvfo (V_VFOM 0x0a command) * * Read memory channel and transfer to VFO. This works for the * 756 and 7000. The radio does this his in memory channel mode, * so this program does it in VFO mode. In principle, this * command should never be necessary, but is included for test * and exploration. */ case C_VFOM: if (argn - argi < 2) rval = argchan(rp, cp, NULL); else rval = argchan(rp, cp, argv[++argi]); if (rval < 0) break; rval = readchan(rp); if (rval < 0) break; rval = setcmda(rp->ident, cmdvfom, rsp); break; /* * duplex [ duplex ] * * Set transmit offset for FM duplex. This works with the 706G * and 7000, which have four duplex registers, one for each of * the HF, 50 MHz, 144 MHz and 420 MHz bands. In order to read * and write these registers, the frequency must be first set * within the correct band. */ case C_DUPLEX: if (argn - argi < 2) { rval = readoffset(rp->ident, &freq); if (rval < 0) break; printf("duplex %.1f\n", freq); break; } if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); rval = loadoffset(rp->ident, freq); break; /* * scan [ ] (V_SCAN 0x0e command) * * Perform awesome scans, both memory an channel. Some * radios have simply awesome scanning modes; others are * mostly bare. Need some volunteer experimentors here. */ case C_SCAN: return (setswitch(rp, scan, V_SCAN)); /* *************************************************************** * * * Tuning step and rate commands. The step and rate commands * * should work for all radios, as they do not use the radio * * tuning-step functions. The dial command works with the * * radio tuning-step functions, so is model dependent. * * * *************************************************************** */ /* * rate [ ] * * Set tuning rate. The values of from 0 through 20 * select the rate values in a 1-2.5-5-10 sequence. Warning: if * the frequency resolution (minimum tuning step) is 10, 100, * 1000 Hz, etc., the nexxt step up would be 25, 250, 2500, * etc., which is not a multiple of the minimum tuning step. In * such cases the step is rounded to 20, 200, 2000, etc. */ case C_RATE: if (argn - argi > 1) { if (sscanf(argv[++argi], "%d", &temp) != 1) return (R_FMT); if (temp > 20) temp = 20; else if (temp < rp->minstep) temp = rp->minstep; rp->rate = temp; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; } pflags |= P_DSPST; break; /* * rate up (keypad) * * Set tuning rate up one notch. */ case C_RUP: if (rp->rate < 20) rp->rate++; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * rate down (keypad) * * Set tuning rate down one notch. */ case C_RDOWN: if (rp->rate > rp->minstep) rp->rate--; rp->step = logtab[rp->rate]; step = modf(cp->freq * 1e6 / rp->step, &freq); freq = freq / 1e6 * rp->step; rval = loadfreq(rp, freq); if (rval < 0) break; pflags |= P_DSPST; break; /* * Tuning step commands. The step command sets the tuning step * directly to an arbitrary value. The up and down commands * shift the frequency up or down by the value of the tuning * step. * * step [ ] * * Set tuning step directly in Hz. This is useful when scanning * odd channel spacings, such as aviation and marine radio * channels. Note that the tuning rate is set to minimum here, * since otherwise the rounding process would violate the * principle of least astonishment. */ case C_STEP: if (argn - argi > 1) { if (sscanf(argv[++argi], "%lf", &dtemp) != 1) return (R_FMT); if (dtemp < logtab[rp->minstep]) dtemp = logtab[rp->minstep]; rp->step = dtemp; rp->rate = rp->minstep; } pflags |= P_DSPST; break; /* * up (keypad) * * Tune up one step. */ case C_UP: freq = cp->freq + rp->step / 1e6; if (freq >= rp->ustep) freq = rp->lstep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * down (keypad) * * Tune down one step. */ case C_DOWN: freq = cp->freq - rp->step / 1e6; if (freq < rp->lstep) freq = rp->ustep; rval = loadfreq(rp, freq); if (rval < 0) break; cp->freq = freq; pflags |= P_DSPST; break; /* * band [ ] [ ] * * Set band scan limits. An up or down via keypad beyond the * upper limit wraps to the lower limit and vice-versa. */ case C_BAND: if (argn - argi < 2) { printf("band %s\n", capdescr("band", rp->cap)); break; } if (argn - argi < 3) return (R_ARG); if (sscanf(argv[++argi], "%lf", &freq) != 1) return (R_FMT); if (sscanf(argv[++argi], "%lf", &step) != 1) return (R_FMT); if (freq > step) { dtemp = freq; freq = step; step = dtemp; } if (freq < rp->lband) freq = rp->lband; rp->lstep = freq; if (step > rp->uband) step = rp->uband; rp->ustep = step; break; /* *************************************************************** * * * Control commands. These are used to set switches, twirl * * controls and read meters. Various radios implement none or * * a subset of the defined functions. * * * *************************************************************** */ /* * ctl [ name ] [ value ] (V_WRCTL 0x14 command) * * The ctl subcommand reads or writes internal registers * associated with a front panel control. The 756 and 7000 can * read and write them. The 706G can read these registers but * cannot write them. The R8500 can write them but not read * them. Most radios implement only a subset of the defined * subcommands. */ case C_CTRL: if (argn - argi < 2) { for (i = 0; ctlc[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, ctlc[i].ident, rsp); if (temp < 0) continue; printf("%10s %s\n", ctlc[i].name, rsp); } break; } temp = capkey(argv[++argi], rp->ctrl); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn < 3) { cmdctl[2] = FI; rval = readmeter(rp, ctlc, temp, s1); if (rval < 0) break; printf("%s\n", s1); } else { if (sscanf(argv[++argi], "%d", &sw) != 1) return (R_FMT); sw = (sw * 255) / 100; if (temp >> 16 == F) sw += 128; sprintf(s1, "%04d", sw); ptr = s1; cmdctl[2] = (*ptr++ & 0xf) * 16; cmdctl[2] += *ptr++ & 0xf; cmdctl[3] = (*ptr++ & 0xf) * 16; cmdctl[3] += *ptr++ & 0xf; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * meter [ name ] [ value ] (V_RMTR 0x15 command) * * The meter subcommands report current meter indications. Note * that the S meter is reported in S units and dB above S9. The * squelch condition is reported as open (signal) or closed * (silent). * * The 706G can read the signal and sql meters. */ case C_METER: if (argn - argi < 2) { for (i = 0; meter[i].name[0] != '\0'; i++) { temp = readmeter(rp, meter, meter[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", meter[i].name, s1); } break; } temp = capkey(argv[++argi], meter); if (temp < 0) return (temp); rval = readmeter(rp, meter, temp, s1); if (rval == R_OK) printf("%s\n", s1); break; /* * set [ name ] [ value ] (V_TOGL 0x16 command) * * The switch subcommands read or write internal switches. */ case C_SWTCH: if (argn - argi < 2) { for (i = 0; switches[i].name[0] != '\0'; i++) { temp = readmeter(rp, ctlc, switches[i].ident, s1); if (temp < 0) continue; printf("%10s %s\n", switches[i].name, s1); } break; } temp = capkey(argv[++argi], switches); if (temp < 0) return (temp); cmdctl[0] = temp >> 8; cmdctl[1] = temp; if (argn - argi < 2) { cmdctl[2] = FI; rval = readmeter(rp, switches, temp, s1); break; } else { temp >>= 16; if (temp == A) { temp = capkey(argv[++argi], agc); } else if (temp == B) { temp = capkey(argv[++argi], fmtb); } else if (temp == W) { temp = capkey(argv[++argi], fmtw); } else { sscanf(argv[++argi], "%d", &temp); sprintf(s1, "%02d", temp); ptr = s1; temp = (*ptr++ & 0xf) * 16; temp += *ptr++ & 0xf; } if (temp < 0) return (temp); cmdctl[2] = temp; cmdctl[3] = FI; rval = setcmda(rp->ident, cmdctl, rsp); } break; /* * dial [ ] (V_DIAL 0x10 command) * * Set dial tuning step. This command works with all radios, * including the 775 and R8500; however, the allowable arguments * are different. Note that in the R8500 the allowable steps are * constrained to multiples of 0.5 kHz. */ case C_DIAL: if (argn - argi < 2) { temp = cp->aux.step; if (temp != 0x13) printf("dial %s kHz\n", capname(temp, rp->dialtab)); else printf("dial %.1f kHz\n", freqdouble(cp->aux.pstep, 2) / 10); break; } /* * Construct V_DIAL command for tuning step. */ ptr = s1; *ptr++ = V_DIAL; dtemp = 0; temp = capkey(argv[++argi], rp->dialtab); if (temp < 0) return (temp); if (temp == 0x13) { if (sscanf(argv[argi], "%lf", &dtemp) != 1) return (R_FMT); } *ptr++ = temp; *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) break; /* * Save step and programmed step for later. */ cp->aux.step = temp; doublefreq(dtemp * 10, s1, 2); memcpy(cp->aux.pstep, s1, 2); break; /* *************************************************************** * * * CTSS and DTCS commands. These commands turn on and off and * * program the repeater tone (tone), tone squelch (tsql) and * * digital tone squelch (dtcs) functions. * * * *************************************************************** * * The syntax for all three commands is the same; * * tone reports the status and frequency/code * tone off turns off the function * tone on turns on the function * tone turns on the function and programs the * frequency/code * tone ? reports a list of valid CTSS/DTCS code * tsql ? values. The must be identical to * an item in the list. * * dtcs ? reports a list of valid DTCS code values. The * must be identical to an item on the list. * The polarity codes "-pp" are appended, where pp * are N (upright) or N (inverted). * * The three commands are mutually exlusive; setting one of them * on turns off the others. */ /* * tone [ args ] (V_TONE 0x1b command) * * Set the repeator tone CTSS frequency. This works for the 756 * and 7000. */ case C_TONE: return (setswitch3(rp, tone, 0x00, 0x42)); /* * tsql [ args ] (V_TONE 0x1b command) * * Set the tone squelch CTSS frequency. This works for the 756 * and 7000. */ case C_TSQL: return (setswitch3(rp, tone, 0x01, 0x43)); /* * dtcs [ args ] (V_TONE 0x1b command) * * Set the digital tone squelch DTCS code. This works only for * the 7000. */ case C_DTCS: return (setswitch3(rp, dtcs, 0x02, 0x4b)); /* *************************************************************** * * * Utility commands. Select the antenna, attenuator, preamp, * * agc and and break-in options. * * * *************************************************************** */ /* * The duplex, preamp and attenuator commands can be set for * each band segment. There are four duplex offset registers, * one each fot HF, 6 m, 2 m and 70 cm bands. The preamp and * attentuator settings are stored by band segment as follows: * * 703g 756 7000 * .3-1.6 .3-1.6 .03-1.6 * 1.6-2 1.6-2 1.6-2 160 m * 2-5 2-6 2-6 80 m * 5-8 6-8 6-8 40 m * 8-11 8-11 8-11 30 m * 11-20 11-20 20, 17 m * 11-15 20 m * 15-20 17 m * 20-22 20-22 20-22 15 m * 22-26 22-26 22-26 12 m * 26-40 26-45 26-30 10 m * 40-60 45-60 45-129 6 m * 129-144 * 60-148 144-148 2 m * 148-200 * 400-470 400-470 70 sm */ /* * ant [ 1 | 1R | 2 | 2R ] (V_SANT 0x12 command) * * Select antenna. Transceivers like the 756 have two antennas * (1, 2) for transmit/receive and a third (R) for receive only. * For instance, option 1R selects antenna 1 for transmit and R * for receive. */ case C_ANT: argv[argi] = capname(sw, cmd); return (setswitch(rp, ant, V_SANT)); /* * atten [ ] (V_ATTEN 0x11 command) * * Set attenuator options. The options include all known * attentuator options in dB. Following are the known values for * a few modern radios. * * 706G 20 dB * 756, 7000 6, 12, 18 dB * R8500 10, 20, 30 dB */ case C_ATTEN: argv[argi] = capname(sw, cmd); return (setswitch(rp, atten, V_ATTEN)); /* * preamp [ off | 1 | 2 ] * * Set preamp options. Some radios have none, one or two preamp * settings. * * 706G, 7000 1 * 756 2 * R8500 none */ case C_PAMP: argv[argi] = capname(sw, cmd); return (setswitch2(rp, preamp, (V_TOGL << 8) | 0x02)); /* * agc [ slow | medium | fast ] * * Set AGC options. Some radios have none or a subset of these * options. * * 706G medium, fast * 756, 7000 slow, medium, fast * R8500 slow (agcslow), fast (agcfast) */ case C_AGC: argv[argi] = capname(sw, cmd); return (setswitch2(rp, agc, (V_TOGL << 8) | 0x12)); /* * break [ off | semi | full ] * * Set break options. This works on the 706G, 756 and 7000. */ case C_BREAK: argv[argi] = capname(sw, cmd); return (setswitch2(rp, fmtb, (V_TOGL << 8) | 0x47)); /* *************************************************************** * * * Power and voice commands. These commands control the power * * to the radio, turn the transmitter on and off and report * * the status by voice. * * * *************************************************************** */ /* * power [ off | on ] (V_POWER 0x18 command) * * Set power on/off. The radio will be powered off after the * sleep interval, but it will still listen for a power on * command. This works only on the R8500. */ case C_POWER: return (setswitch(rp, power, V_POWER)); /* * ptt (V_PTT 0x1c command) * * Display transmit condition; turn transmitter on and off. */ case C_PTT: return (setswitch2(rp, tx, V_TX << 8 | 0x00)); /* * rx (V_TX 0x1c command). Turn transmitter off. */ case C_RX: return (setcmda(rp->ident, cmdrx, rsp)); /* * tx (V_TX 0x1c command). Turn transmitter on. */ case C_TX: return (setcmda(rp->ident, cmdtx, rsp)); /* * say [ all | freq | mode ] (V_ANNC 0x13 command) * * Set announce control off/on. This requires the UT-102 Voice * Synthesizer Unit, which is standard in the 7000. */ case C_ANNC: return (setswitch(rp, say, V_ANNC)); /* *************************************************************** * * * Mongrels. These commands are used for testing and just * * playing around. * * * *************************************************************** */ /* * name * * Set channel name. Enclose in quotes if contains * spaces. */ case C_NAME: if (argn - argi < 2) printf("%s\n", cp->name); else strlcpy(cp->name, argv[++argi], sizeof(cp->name)); break; /* * key (V_SETW 0x1a command) * * Program memory keyer (756 and 7000). Each of four memory * keyer channels can hold 55 characters. */ case C_KEY: if (argn - argi < 2) { rval = R_ARG; break; } /* * Get memory keyer ID (1-4) */ ptr = s1; *ptr++ = V_SETW; *ptr++ = 0x02; if (sscanf(argv[++argi], "%d", &temp) != 1) { rval = R_FMT; break; } *ptr++ = temp; /* * If no argument string, read from radio. Remove * trailing spaces from the radio string. */ if (argn - argi < 2) { *ptr = FI; rval = setcmda(rp->ident, s1, rsp); if (rval < 0) return (rval); for (i = rval - 2; i > 2; i--) { if (rsp[i] == ' ') rsp[i] = '\0'; else break; } temp = rsp[2]; printf("%d (%d) %s\n", temp, i - 2, &rsp[3]); break; } /* * Concatenate remaining strings and send to radio. */ *ptr = '\0'; temp = 55; while (argn - argi > 1 && temp > 0) { strncat(s1, argv[++argi], temp); strcat(s1, " "); temp -= strlen(argv[argi]) + 1; } s1[strlen(s1) - 1] = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * Miscellaneous control (S_CTRL) subcommands. */ case C_MISC: return (setswitch2(rp, misc, V_TOGL)); /* * test BCD * * Send CI-V test message */ case C_TEST: if (argn - argi < 2) break; ptr = s1; for (i = 1; i < argn; i++) { sscanf(argv[++argi], "%x", &temp); *ptr++ = temp; } *ptr = FI; rval = setcmda(rp->ident, s1, rsp); break; /* * step (r8500) */ C_XSTEP: if (sscanf(argv[++argi], "%x", &temp) != 1) { rval = R_FMT; break; } cp->aux.step = temp; break; /* * pstep (r8500) */ C_PSTEP: break; } return (rval); } /* * capname(ident, table) - returns capability name given key */ char * /* capability name, "" (not found) */ capname( int ident, /* capability key */ struct cmdtable *table /* capability table */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (table[i].ident == ident) return (table[i].name); } return (""); } /* * capkey(name, table) - returns capability key given name */ int /* capability key, -1 (not found) */ capkey( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i, temp; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (R_NOP); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0 || *table[i].name == '*') break; } if (table[i].ident == R_NOP) printf("*** %s\n", table[i].descr); return (table[i].ident); } /* * capdescr(name, table) - returns capability description given name */ char * /* capability string, "" (not found") */ capdescr( char *name, /* capability name */ struct cmdtable *table /* capability table */ ) { int i; if (*name == '?') { for (i = 0; table[i].name[0] != '\0'; i++) printf("%10s %s\n", table[i].name, table[i].descr); return (""); } for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) break; } return (table[i].descr); } /* * setcap(name, table, string) - insert capability string */ void setcap( char *name, /* capability name */ struct cmdtable *table, /* capability table */ char *string /* capability string */ ) { int i; for (i = 0; table[i].name[0] != '\0'; i++) { if (strcasecmp(name, table[i].name) == 0) { strcpy(table[i].descr, string); return; } } strcpy(table[i].name, name); strcpy(table[i].descr, string); table[i + 1].name[0] = '\0'; table[i + 1].ident = R_NOP; table[i + 1].descr[0] = '\0'; } /* * setswitch(radio, name, op) - V_VFO, V_SPLIT, V_SCAN, V_SANT, V_ATTEN, * V_POWER, V_TX, V_ANNC. * * Commands with a single character command and one argument, with the * single exception of the V_SANT, which can have one or two arguments * depending on the radio type. Only the V_SANT and V_ATTEN can */ static int setswitch( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { struct chan *cp; struct vfo7000 *vp; u_char cmd[BMAX], rsp[BMAX]; int temp, rval; cmd[0] = op; cmd[1] = FI; if (argn - argi < 2) { /* * Read data from radio. Only the V_SANT and V_ATTEN * return unambigous data. The V_SANT returns one or two * octets depending on the transceiver model. The R8500 * can't return anything. */ switch (op) { case V_SANT: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; if (rsp[2] != FI) temp |= rsp[2] << 8; printf("%s %s\n", argv[argi], capname(temp, cmmd)); break; case V_ATTEN: rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) break; temp = rsp[1]; printf("%s %s dB\n", argv[argi], capname(temp, cmmd)); break; case V_ANNC: cmd[1] = 0x00; cmd[2] = FI; rval = setcmda(rp->ident, cmd, rsp); pflags |= P_DISP; break; default: rval = R_ARG; } } else { /* * Write data to the radio. First, decode argument. */ temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = FI; /* * For the ant command, find out if one or two * subcommand bytes follow. */ if (op == V_SANT) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); if (rsp[2] != FI) { cmd[2] = temp >> 8; cmd[3] = FI; } } cmd[1] = temp; rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); /* * For the attenuator command, copy attenuator code for * R8500. */ if (op == V_ATTEN) { cp = &rp->chan; cp->aux.atten = temp; /* * For the split duplex subcommands, edit mode2. */ } else if (op == V_SPLIT) { cp = &rp->chan; vp = &cp->vfo; switch (temp) { case 0x10: /* simplex */ vp->mode2 = (vp->mode2 & 0x0f) | 0x00; break; case 0x11: /* dup- */ vp->mode2 = (vp->mode2 & 0x0f) | 0x10; break; case 0x12: /* dup+ */ vp->mode2 = (vp->mode2 & 0x0f) | 0x20; break; } } } return (rval); } /* * setswitch2(radio, name, op) - V_PAMP, V_AGC, V_BREAK, V_PTT and * V_MISC. * * Commands with a two-octet command and one argument. */ static int setswitch2( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op /* command code */ ) { u_char cmd[BMAX], rsp[BMAX]; int temp, rval, i; rval = R_OK; cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; if (argn - argi < 2) { rval = setcmda(rp->ident, cmd, rsp); if (rval < 0) return (rval); for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident & 0xff) == rsp[2]) { printf("%s %s\n", argv[argi], cmmd[i].name); break; } } } else { temp = capkey(argv[++argi], cmmd); if (temp < 0) return (temp); cmd[2] = temp; cmd[3] = FI; rval = setcmda(rp->ident, cmd, rsp); } return (rval); } /* * setswitch3(radio, name, op, sw) - V_TONE, etc. * * This routine is used with the tone, tsql and dtcs commands, which * turn on and off and program CTSS tones and DTCS codes. */ static int setswitch3( struct icom *rp, /* radio structure pointer */ struct cmdtable *cmmd, /* command table pointer */ int op, /* command code */ int sw /* switch code */ ) { struct chan *cp; struct vfo7000 *vp; u_char rsp[BMAX]; int temp, rval, i; u_char cmdctl[] = {V_TONE, 0, 0, 0, 0, FI}; u_char cmdswt[] = {V_TOGL, 0, 0, FI}; char *token; cmdctl[1] = op; cmdctl[2] = FI; cmdswt[1] = sw; cmdswt[2] = FI; if (argn - argi < 2) { /* * Read switch code */ rval = setcmda(rp->ident, cmdswt, rsp); if (rval < 0) return (rval); temp = rsp[2]; token = capname(temp, toneon); /* * Read frequency/code */ rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); temp = rsp[3] << 8 | rsp[4]; for (i = 0; cmmd[i].name[0] != '\0'; i++) { if ((cmmd[i].ident) == temp) { if (cmdctl[1] == 0x02) { temp = rsp[2]; printf("%s %s (%s-%s)\n", argv[argi], token, cmmd[i].name, capname(temp, polar)); } else { printf("%s %s (%s Hz)\n", argv[argi], token, cmmd[i].name); } } } } else { /* * Set frequency/code. Repeater tone and tone squelch * frequencies are in nn.n Hz and tenths. Digital tone * squelch codes are in nn-pp code polarity. */ token = strtok(argv[++argi], "-"); temp = capkey(token, cmmd); if (temp < 0) return (temp); cp = &rp->chan; vp = &cp->vfo; if (temp > 0x01) { cmdctl[3] = temp >> 8; cmdctl[4] = temp; token = strtok(NULL, "-"); if (token == NULL) { cmdctl[2] = 0; } else { temp = capkey(token, polar); if (temp < 0) return (temp); cmdctl[2] = temp; } rval = setcmda(rp->ident, cmdctl, rsp); if (rval < 0) return (rval); /* * Update VFO tones */ switch (op) { case 0: memcpy(&vp->tone, &cmdctl[2], 3); break; case 1: memcpy(&vp->tsql, &cmdctl[2], 3); break; case 2: memcpy(&vp->dtcs, &cmdctl[2], 3); break; } temp = 0x01; } /* * Set switch code */ vp->mode2 &= 0xf0; if (temp == 0x01) vp->mode2 += op + 1; cmdswt[2] = temp; rval = setcmda(rp->ident, cmdswt, rsp); } return (rval); } /* * readmeter(radio, optab, op, pstring) - V_METER, V_TOGL */ static int readmeter( struct icom *rp, /* radio structure */ struct cmdtable *optab, /* command table */ int op, /* operation code */ char *s2 /* result string */ ) { u_char cmd[] = {0, 0, 0, 0, FI}; char rsp[BMAX], *ptr; int temp, i; /* * Read register or switch */ cmd[0] = op >> 8; cmd[1] = op; cmd[2] = FI; temp = setcmda(rp->ident, cmd, rsp); if (temp < 0) return (temp); if (temp < 5) temp = ((rsp[2] >> 4) & 0xf) * 10 + (rsp[2] & 0xf); else temp = ((rsp[2] >> 4) & 0xf) * 1000 + (rsp[2] & 0xf) * 100 + ((rsp[3] >> 4) & 0xf) * 10 + (rsp[3] & 0xf); ptr = capname(op, optab); /* * Format as required */ switch (op >> 16) { case A: /* agc */ if (temp == 1) strcpy(s2, "fast"); else if (temp == 2) strcpy(s2, "mid"); else if (temp == 3) strcpy(s2, "slow"); break; case B: /* breakin */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "semi"); else if (temp == 2) strcpy(s2, "full"); break; case F: /* signed control */ sprintf(s2, "%d", ((temp - 128) * 100) / 256); break; case G: /* unsigned control */ sprintf(s2, "%d", (temp * 100) / 256); break; case P: /* preamp */ if (temp == 0) strcpy(s2, "off"); else if (temp == 1) strcpy(s2, "1"); else if (temp == 2) strcpy(s2, "2"); break; case Q: /* squelch */ if (temp == 1) strcpy(s2, "open"); else strcpy(s2, "closed"); break; case S: /* S meter */ for (i = 0; temp > mtab[i].smeter; i++); strcpy(s2, mtab[i].pip); break; case W: /* miscellaneous switch */ if (temp == 0) strcpy(s2, "off"); else strcpy(s2, "on"); break; } return (R_OK); } /* * banner - format and print banner */ void banner( struct icom *rp /* radio structure pointer */ ) { printf("radio %s (%02x) %g-%g MHz chan %d bank %d baud %s\n", capdescr(rp->name, identab), rp->ident, rp->lband, rp->uband, rp->maxch - rp->minch + 1, rp->maxbk - rp->minbk + 1, capname(rp->baud, baud)); rptr = rp; } /* * printch - format and print channel data */ static void printch( struct icom *rp, /* radio structure pointer */ char *s1 /* prettyprint string */ ) { struct chan *cp; struct vfo7000 *vp; char s2[LINMAX]; char *s3; int temp; double dtemp; /* * Reveal frequency and mode */ cp = &rp->chan; vp = &cp->vfo; readvfo(rp); if (cp->freq == 0) { if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d empty", cp->bank, cp->mchan); else sprintf(s1, "%2d empty", cp->mchan); return; } if (rp->flags & F_BANK) sprintf(s1, "%2d.%-2d %.*f MHz %s", cp->bank, cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); else sprintf(s1, "%2d %.*f MHz %s", cp->mchan, sigtab[rp->rate], cp->freq, capname(cp->mode, rp->modetab)); if (pflags & P_DSPST) { sprintf(s2, " rate %d step %.0f Hz", rp->rate, rp->step); strcat(s1, s2); } if (!(pflags & P_DSPCH)) return; if (flags & (F_7000 | F_756)) { /* * Reveal split */ if (cp->split != 0) { sprintf(s2, " split %.*f MHz", sigtab[rp->rate], cp->split); strcat(s1, s2); } /* * Reveal duplex direction */ temp = vp->mode2 & 0xf0; switch(temp) { case 0x10: strcat(s1, " split dup-"); break; case 0x20: strcat(s1, " split dup+"); break; } /* * Reveal tone squelch info */ temp = vp->mode2 & 0xf; switch (temp) { case 1: temp = (vp->tone[1] << 8) | vp->tone[2]; sprintf(s2, " tone %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 2: temp = (vp->tsql[1] << 8) | vp->tsql[2]; sprintf(s2, " tsql %s Hz", capname(temp, tone)); strcat(s1, s2); break; case 3: temp = (vp->dtcs[1] << 8) | vp->dtcs[2]; sprintf(s2, " dtcs %s-", capname(temp, dtcs)); strcat(s1, s2); temp = vp->dtcs[0] & 0x3; sprintf(s2, "%s", capname(temp, polar)); strcat(s1, s2); } } else if (flags & F_8500){ /* * Reveal tuning step. */ if (cp->aux.step != 0) { temp = cp->aux.step; if (temp != 0x13) sprintf(s2, " dial %s kHz", capname(temp, rp->dialtab)); else sprintf(s2, " dial %.1f kHz", freqdouble(cp->aux.pstep, 2) / 10); strcat(s1, s2); } /* * Reveal attentuator setting. */ if (cp->aux.atten != 0) { sprintf(s2, " atten %x dB", cp->aux.atten); strcat(s1, s2); } } /* * Reveal channel name enclosed in quotes ". */ if (cp->name[0] != '\0') { sprintf(s2, " name \"%s\"", cp->name); strcat(s1, s2); } } /* * Print error comment */ static void perr( int temp /* error code */ ) { switch (temp) { case R_CMD: printf("*** unknown command\n"); break; case R_ARG: printf("*** unknown or missing command argument\n"); break; case R_FMT: printf("*** invalid argument format\n"); break; case R_RAD: printf("*** unknown radio\n"); break; case R_NOR: printf("*** no radios found\n"); break; case R_DEF: printf("*** radio not defined\n"); break; case R_ERR: printf("*** radio can't do that\n"); break; case R_IO: printf("*** file open error\n"); break; } } /* * Getline(str) - process input line and extract tokens * * Blank lines and comments beginning with '#' are ignored and the * string converted to lower case. The resulting tokens are saved in the * *argv[] array. The number of tokens found is returned to the caller. */ static int /* number of tokens */ getline( char *str /* pointer to input string */ ) { char *ptr; char xbreak[] = " ,\t\n\0"; char sbreak[] = "\"\n\0"; int i, temp; /* * Trim trailing \r and comments */ ptr = strchr(str, '\r'); if (ptr != NULL) *ptr = '\0'; ptr = strchr(str, '#'); if (ptr != NULL) *ptr = '\0'; /* * Scan for tokens delimited by space, comma, tab, newline or * null. Arbitrary strings begin with quote " and end with * quote, newline or null. Quotes are not included in the token. */ ptr = str; for (i = 0; i < ARGMAX;) { temp = strspn(ptr, xbreak); ptr += temp; if (*ptr == '\0') break; if (*ptr == '"') { argv[i++] = ++ptr; temp = strcspn(ptr, sbreak); } else { argv[i++] = ptr; temp = strcspn(ptr, xbreak); } ptr += temp; if (*ptr == '\0') break; *ptr++ = '\0'; } argn = i; return (i); } /* * argchan(radio, chan, sptr) - decode channel argument * * NULL current bank/channel * $ all channels, current bank * b:$ all channels, bank b * $:$ all channels, all banks * + current bank/channel plus 1 with wrap * - current bank/channel minus 1 with wrap * c channel c, current bank * b.c channel c, bank b * c1:c2 channel range c1-c2, current bank with wrap * b1.c1:b2.c2 channel range b1.c1-b2.c2 with wrap * * returns 0 if single, 1 if multiple, 2 if reversed, 3 if end of range, * R_NOP if error */ static int /* > 0 (ok), < 0 (error) */ argchan( struct icom *rp, /* radio structure */ struct chan *cp, /* channel structure */ char *sptr /* ascii argument pointer */ ) { int rval, bank, mchan, topbk, topch; /* * null: current channel only */ if (cp->bank == rp->topbk && cp->mchan == rp->topch) rval = 3; else rval = 0; if (sptr == NULL) return (0); /* * '?': format help */ if (*sptr == '?') { capkey(sptr, argch); return (R_NOP); } /* * " ": end of range */ if (*sptr == ' ') return (3); /* * "+": next higher channel, current bank with wrap */ if (*sptr == '+') { cp->mchan++; if (cp->mchan > rp->maxch) { cp->mchan = rp->minch; cp->bank++; if (cp->bank > rp->maxbk) cp->bank = rp->minbk; } return (rval); } /* * "-" next lower channel, current bank with wrap */ if (*sptr == '-') { cp->mchan--; if (cp->mchan < rp->minch) { cp->mchan = rp->maxch; cp->bank--; if (cp->bank < rp->minbk) cp->bank = rp->maxbk; } return (rval); } /* * "$" all channels, current bank */ if (strcmp(sptr, "$") == 0) { rp->topbk = cp->bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "$:$" all banks, all channels */ if (strcmp(sptr, "$:$") == 0) { cp->bank = rp->minbk; rp->topbk = rp->maxbk; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b.$" bank b, all channels */ if (strstr(sptr, ".$") != NULL && sscanf(sptr, "%d", &bank) == 1) { cp->bank = bank; rp->topbk = bank; cp->mchan = rp->minch; rp->topch = rp->maxch; return (1); } /* * "b1.c1:b2.c2:": channel range b1.c1-b2.c2 */ if (sscanf(sptr, "%d.%d:%d.%d", &bank, &mchan, &topbk, &topch) == 4) { cp->bank = bank; rp->topbk = topbk; cp->mchan = mchan; rp->topch = topch; if (cp->bank > rp->topbk || (cp->bank == rp->topbk && cp->mchan > rp->topch)) return (2); else return (1); } /* * "c1:c2": channel range c1-c2 current bank */ if (sscanf(sptr, "%d:%d", &mchan, &topch) == 2) { rp->topbk = cp->bank; cp->mchan = mchan; rp->topch = topch; if (cp->mchan > rp->topch) return (2); else return (1); } /* * "c.b": channel c, bank b only */ if (sscanf(sptr, "%d.%d", &bank, &mchan) == 2) { cp->bank = rp->topbk = bank; cp->mchan = rp->topch = mchan; return (0); } /* * "c": channel c, current bank */ if (sscanf(sptr, "%d", &mchan) == 1) { rp->topbk = cp->bank; cp->mchan = rp->topch = mchan; return (0); } printf("*** bad channel format %s\n", sptr); return (R_NOP); } /* * sw_keypad() - switch to keypad mode */ static int /* 0 (ok), < 0 (system error) */ sw_keypad() { fd = open("/dev/tty", O_RDONLY); if (fd < 0) return (R_IO); if (tcgetattr(fd, &terma) < 0) return (R_IO); tcgetattr(fd, &termb); termb.c_lflag &= ~(ICANON | ECHO); termb.c_cc[VMIN] = 1; termb.c_cc[VTIME] = 0; if (tcsetattr(fd, TCSADRAIN, &termb) < 0) return (R_IO); return (R_OK); } /* * sw_keybd() - switch to keyboard mode */ static int /* 0 (ok), < 0 (system error) */ sw_keybd() { if (tcsetattr(fd, TCSADRAIN, &terma) < 0) return (R_IO); return (R_OK); } /* end program */ icom-20120228/pcr.csv0000744000175000017500000003716310376731213013214 0ustar colincolin[REV] ID=1.0.0 APP=IC-PCR1000 Revision 2.0 [BANK00] BANKNAME=Africa ACTIVECH=0 00=AFI/SAT 3.452 USB 3k OFF 3kHz OFF OFF OFF 01=AFI/SAT 6.535 USB 3k OFF 3kHz OFF OFF OFF 02=AFI/SAT 8.861 USB 3k OFF 3kHz OFF OFF OFF 03=AFI/SAT 13.357 USB 3k OFF 3kHz OFF OFF OFF 04=AFI/SAT 17.955 USB 3k OFF 3kHz OFF OFF OFF 05=AFI-2 3.419 USB 3k OFF 3kHz OFF OFF OFF 06=AFI-2 5.652 USB 3k OFF 3kHz OFF OFF OFF 07=AFI-2 8.894 USB 3k OFF 3kHz OFF OFF OFF 08=AFI-2 13.273 USB 3k OFF 3kHz OFF OFF OFF 09=AFI-2 17.961 USB 3k OFF 3kHz OFF OFF OFF 10=AFI/MID 3.467 USB 3k OFF 3kHz OFF OFF OFF 11=AFI/MID 5.658 USB 3k OFF 3kHz OFF OFF OFF 12=AFI/MID 10.018 USB 3k OFF 3kHz OFF OFF OFF 13=AFI/MID 11.3 USB 3k OFF 3kHz OFF OFF OFF 14=AFI/MID 13.288 USB 3k OFF 3kHz OFF OFF OFF 15=AFI/MID 17.961 USB 3k OFF 3kHz OFF OFF OFF 16=AFI-4 2.878 USB 3k OFF 3kHz OFF OFF OFF 17=AFI-4 5.493 USB 3k OFF 3kHz OFF OFF OFF 18=AFI-4 8.903 USB 3k OFF 3kHz OFF OFF OFF 19=AFI-4 13.294 USB 3k OFF 3kHz OFF OFF OFF 20=AFI-4 17.961 USB 3k OFF 3kHz OFF OFF OFF 21=AFI/INO 3.476 USB 3k OFF 3kHz OFF OFF OFF 22=AFI/INO 5.634 USB 3k OFF 3kHz OFF OFF OFF 23=AFI/INO 8.879 USB 3k OFF 3kHz OFF OFF OFF 24=AFI/INO 13.306 USB 3k OFF 3kHz OFF OFF OFF 25=AFI/INO 17.961 USB 3k OFF 3kHz OFF OFF OFF [BANK01] BANKNAME=Pacific ACTIVECH=0 00=CEP-1/2 2.869 USB 3k OFF 3kHz OFF OFF OFF 01=CEP-1/2 3.413 USB 3k OFF 3kHz OFF OFF OFF 02=CEP-1/2 5.547 USB 3k OFF 3kHz OFF OFF OFF 03=CEP-1/2 5.574 USB 3k OFF 3kHz OFF OFF OFF 04=CEP-1/2 8.843 USB 3k OFF 3kHz OFF OFF OFF 05=CEP-1/2 11.282 USB 3k OFF 3kHz OFF OFF OFF 06=CEP-1/2 13.261 USB 3k OFF 3kHz OFF OFF OFF 07=CEP-1/2 13.354 USB 3k OFF 3kHz OFF OFF OFF 08=CEP-1/2 17.904 USB 3k OFF 3kHz OFF OFF OFF 09=CWP-1/2 2.998 USB 3k OFF 3kHz OFF OFF OFF 10=CWP-1/2 4.666 USB 3k OFF 3kHz OFF OFF OFF 11=CWP-1/2 6.532 USB 3k OFF 3kHz OFF OFF OFF 12=CWP-1/2 6.562 USB 3k OFF 3kHz OFF OFF OFF 13=CWP-1/2 8.903 USB 3k OFF 3kHz OFF OFF OFF 14=CWP-1/2 11.384 USB 3k OFF 3kHz OFF OFF OFF 15=CWP-1/2 13.3 USB 3k OFF 3kHz OFF OFF OFF 16=CWP-1/2 17.904 USB 3k OFF 3kHz OFF OFF OFF 17=CWP-1/2 21.985 USB 3k OFF 3kHz OFF OFF OFF 18=NP 2.932 USB 3k OFF 3kHz OFF OFF OFF 19=NP 5.628 USB 3k OFF 3kHz OFF OFF OFF 20=NP 5.667 USB 3k OFF 3kHz OFF OFF OFF 21=NP 6.665 USB 3k OFF 3kHz OFF OFF OFF 22=NP 8.915 USB 3k OFF 3kHz OFF OFF OFF 23=NP 10.048 USB 3k OFF 3kHz OFF OFF OFF 24=NP 13.294 USB 3k OFF 3kHz OFF OFF OFF 25=NP 17.904 USB 3k OFF 3kHz OFF OFF OFF 26=NP 17.946 USB 3k OFF 3kHz OFF OFF OFF 27=NP 21.925 USB 3k OFF 3kHz OFF OFF OFF 28=SP 3.467 USB 3k OFF 3kHz OFF OFF OFF 29=SP 5.643 USB 3k OFF 3kHz OFF OFF OFF 30=SP 5.667 USB 3k OFF 3kHz OFF OFF OFF 31=SP 8.867 USB 3k OFF 3kHz OFF OFF OFF 32=SP 13.273 USB 3k OFF 3kHz OFF OFF OFF 33=SP 17.904 USB 3k OFF 3kHz OFF OFF OFF [BANK02] BANKNAME=Eur/W_Asia ACTIVECH=0 00=EUR-A 3.479 USB 3k OFF 3kHz OFF OFF OFF 01=EUR-A 5.661 USB 3k OFF 3kHz OFF OFF OFF 02=EUR-A 6.598 USB 3k OFF 3kHz OFF OFF OFF 03=EUR-A 10.084 USB 3k OFF 3kHz OFF OFF OFF 04=EUR-A 13.288 USB 3k OFF 3kHz OFF OFF OFF 05=EUR-A 17.961 USB 3k OFF 3kHz OFF OFF OFF 06=MID-1 2.992 USB 3k OFF 3kHz OFF OFF OFF 07=MID-1 4.669 USB 3k OFF 3kHz OFF OFF OFF 08=MID-1 6.631 USB 3k OFF 3kHz OFF OFF OFF 09=MID-1 8.951 USB 3k OFF 3kHz OFF OFF OFF 10=MID-1 11.375 USB 3k OFF 3kHz OFF OFF OFF 11=MID-1 17.961 USB 3k OFF 3kHz OFF OFF OFF 12=MID-3 2.944 USB 3k OFF 3kHz OFF OFF OFF 13=MID-3 4.669 USB 3k OFF 3kHz OFF OFF OFF 14=MID-3 6.631 USB 3k OFF 3kHz OFF OFF OFF 15=MID-3 8.951 USB 3k OFF 3kHz OFF OFF OFF 16=MID-3 11.375 USB 3k OFF 3kHz OFF OFF OFF 17=MID-3 17.961 USB 3k OFF 3kHz OFF OFF OFF 18=NCA-1 3.019 USB 3k OFF 3kHz OFF OFF OFF 19=NCA-1 5.646 USB 3k OFF 3kHz OFF OFF OFF 20=NCA-1 13.315 USB 3k OFF 3kHz OFF OFF OFF 21=NCA-1 17.958 USB 3k OFF 3kHz OFF OFF OFF 22=NCA-2 2.851 USB 3k OFF 3kHz OFF OFF OFF 23=NCA-2 4.678 USB 3k OFF 3kHz OFF OFF OFF 24=NCA-2 6.592 USB 3k OFF 3kHz OFF OFF OFF 25=NCA-2 10.096 USB 3k OFF 3kHz OFF OFF OFF 26=NCA-2 17.958 USB 3k OFF 3kHz OFF OFF OFF 27=NCA-3 3.004 USB 3k OFF 3kHz OFF OFF OFF 28=NCA-3 5.664 USB 3k OFF 3kHz OFF OFF OFF 29=NCA-3 10.039 USB 3k OFF 3kHz OFF OFF OFF 30=NCA-3 13.303 USB 3k OFF 3kHz OFF OFF OFF 31=NCA-3 17.958 USB 3k OFF 3kHz OFF OFF OFF [BANK03] BANKNAME=N_Atlantic ACTIVECH=0 00=NAT-A 3.016 USB 3k OFF 3kHz OFF OFF OFF 01=NAT-A 5.598 USB 3k OFF 3kHz OFF OFF OFF 02=NAT-A 8.906 USB 3k OFF 3kHz OFF OFF OFF 03=NAT-A 13.306 USB 3k OFF 3kHz OFF OFF OFF 04=NAT-A 17.946 USB 3k OFF 3kHz OFF OFF OFF 05=NAT-B 2.899 USB 3k OFF 3kHz OFF OFF OFF 06=NAT-B 5.616 USB 3k OFF 3kHz OFF OFF OFF 07=NAT-B 8.864 USB 3k OFF 3kHz OFF OFF OFF 08=NAT-B 13.291 USB 3k OFF 3kHz OFF OFF OFF 09=NAT-B 17.946 USB 3k OFF 3kHz OFF OFF OFF 10=NAT-C 2.862 USB 3k OFF 3kHz OFF OFF OFF 11=NAT-C 5.649 USB 3k OFF 3kHz OFF OFF OFF 12=NAT-C 8.879 USB 3k OFF 3kHz OFF OFF OFF 13=NAT-C 13.306 USB 3k OFF 3kHz OFF OFF OFF 14=NAT-C 17.946 USB 3k OFF 3kHz OFF OFF OFF 15=NAT-D 2.971 USB 3k OFF 3kHz OFF OFF OFF 16=NAT-D 4.675 USB 3k OFF 3kHz OFF OFF OFF 17=NAT-D 8.891 USB 3k OFF 3kHz OFF OFF OFF 18=NAT-D 11.279 USB 3k OFF 3kHz OFF OFF OFF 19=NAT-D 13.291 USB 3k OFF 3kHz OFF OFF OFF 20=NAT-D 17.946 USB 3k OFF 3kHz OFF OFF OFF 21=NAT-E 2.962 USB 3k OFF 3kHz OFF OFF OFF 22=NAT-E 6.628 USB 3k OFF 3kHz OFF OFF OFF 23=NAT-E 8.825 USB 3k OFF 3kHz OFF OFF OFF 24=NAT-E 11.309 USB 3k OFF 3kHz OFF OFF OFF 25=NAT-E 13.354 USB 3k OFF 3kHz OFF OFF OFF 26=NAT-F 3.476 USB 3k OFF 3kHz OFF OFF OFF 27=NAT-F 6.622 USB 3k OFF 3kHz OFF OFF OFF 28=NAT-F 8.831 USB 3k OFF 3kHz OFF OFF OFF [BANK04] BANKNAME=Carr/S_Am ACTIVECH=0 00=CAR-A 2.887 USB 3k OFF 3kHz OFF OFF OFF 01=CAR-A 5.55 USB 3k OFF 3kHz OFF OFF OFF 02=CAR-A 6.577 USB 3k OFF 3kHz OFF OFF OFF 03=CAR-A 8.918 USB 3k OFF 3kHz OFF OFF OFF 04=CAR-A 11.396 USB 3k OFF 3kHz OFF OFF OFF 05=CAR-A 13.297 USB 3k OFF 3kHz OFF OFF OFF 06=CAR-A 17.907 USB 3k OFF 3kHz OFF OFF OFF 07=CAR-B 3.455 USB 3k OFF 3kHz OFF OFF OFF 08=CAR-B 5.52 USB 3k OFF 3kHz OFF OFF OFF 09=CAR-B 6.586 USB 3k OFF 3kHz OFF OFF OFF 10=CAR-B 8.846 USB 3k OFF 3kHz OFF OFF OFF 11=CAR-B 11.33 USB 3k OFF 3kHz OFF OFF OFF 12=CAR-B 11.387 USB 3k OFF 3kHz OFF OFF OFF 13=CAR-B 17.907 USB 3k OFF 3kHz OFF OFF OFF 14=E_SAM 3.479 USB 3k OFF 3kHz OFF OFF OFF 15=E_SAM 5.526 USB 3k OFF 3kHz OFF OFF OFF 16=E_SAM 8.855 USB 3k OFF 3kHz OFF OFF OFF 17=E_SAM 10.096 USB 3k OFF 3kHz OFF OFF OFF 18=E_SAM 13.297 USB 3k OFF 3kHz OFF OFF OFF 19=E_SAM 17.907 USB 3k OFF 3kHz OFF OFF OFF 20=W_SAM 2.944 USB 3k OFF 3kHz OFF OFF OFF 21=W_SAM 4.669 USB 3k OFF 3kHz OFF OFF OFF 22=W_SAM 6.549 USB 3k OFF 3kHz OFF OFF OFF 23=W_SAM 10.024 USB 3k OFF 3kHz OFF OFF OFF 24=W_SAM 11.36 USB 3k OFF 3kHz OFF OFF OFF 25=W_SAM 17.907 USB 3k OFF 3kHz OFF OFF OFF 26=SAT-2 2.854 USB 3k OFF 3kHz OFF OFF OFF 27=SAT-2 5.565 USB 3k OFF 3kHz OFF OFF OFF 28=SAT-2 11.291 USB 3k OFF 3kHz OFF OFF OFF 29=SAT-2 13.315 USB 3k OFF 3kHz OFF OFF OFF 30=SAT-2 17.955 USB 3k OFF 3kHz OFF OFF OFF [BANK05] BANKNAME=E/S_Asia ACTIVECH=0 00=EA-1 3.016 USB 3k OFF 3kHz OFF OFF OFF 01=EA-1 6.571 USB 3k OFF 3kHz OFF OFF OFF 02=EA-1 8.897 USB 3k OFF 3kHz OFF OFF OFF 03=EA-1 10.042 USB 3k OFF 3kHz OFF OFF OFF 04=EA-1 17.958 USB 3k OFF 3kHz OFF OFF OFF 05=SEA-1/3 3.47 USB 3k OFF 3kHz OFF OFF OFF 06=SEA-1/3 6.556 USB 3k OFF 3kHz OFF OFF OFF 07=SEA-1/3 10.066 USB 3k OFF 3kHz OFF OFF OFF 08=SEA-1/3 11.396 USB 3k OFF 3kHz OFF OFF OFF 09=SEA-1/3 13.318 USB 3k OFF 3kHz OFF OFF OFF 10=SEA-1/3 17.907 USB 3k OFF 3kHz OFF OFF OFF 11=SEA/EA 3.485 USB 3k OFF 3kHz OFF OFF OFF 12=SEA/EA 5.649 USB 3k OFF 3kHz OFF OFF OFF 13=SEA/EA 5.655 USB 3k OFF 3kHz OFF OFF OFF 14=SEA/EA 8.942 USB 3k OFF 3kHz OFF OFF OFF 15=SEA/EA 11.396 USB 3k OFF 3kHz OFF OFF OFF 16=SEA/EA 13.309 USB 3k OFF 3kHz OFF OFF OFF 17=SEA/EA 17.907 USB 3k OFF 3kHz OFF OFF OFF [BANK06] BANKNAME=MET ACTIVECH=1 00=MET-NAT 3.485 USB 3k OFF 3kHz OFF OFF OFF 01=MET-NAT 6.604 USB 3k OFF 3kHz OFF OFF OFF 02=MET-NAT 10.051 USB 3k OFF 3kHz OFF OFF OFF 03=MET-NAT 13.27 USB 3k OFF 3kHz OFF OFF OFF 04=MET-EU 3.413 USB 3k OFF 3kHz OFF OFF OFF 05=MET-EU 5.505 USB 3k OFF 3kHz OFF OFF OFF 06=MET-EU 8.957 USB 3k OFF 3kHz OFF OFF OFF 07=MET-EU 13.264 USB 3k OFF 3kHz OFF OFF OFF 08=MET-PAC 2.863 USB 3k OFF 3kHz OFF OFF OFF 09=MET-PAC 6.679 USB 3k OFF 3kHz OFF OFF OFF 10=MET-PAC 8.828 USB 3k OFF 3kHz OFF OFF OFF 11=MET-PAC 13.282 USB 3k OFF 3kHz OFF OFF OFF [BANK07] BANKNAME=Comp-1 ACTIVECH=0 00=Houston 5.529 USB 3k OFF 3kHz OFF OFF OFF 01=Houston 6.637 USB 3k OFF 3kHz OFF OFF OFF 02=Houston 10.075 USB 3k OFF 3kHz OFF OFF OFF 03=Houston 11.342 USB 3k OFF 3kHz OFF OFF OFF 04=Houston 13.33 USB 3k OFF 3kHz OFF OFF OFF 05=Houston 17.94 USB 3k OFF 3kHz OFF OFF OFF 07=Honolulu 3.013 USB 3k OFF 3kHz OFF OFF OFF 08=Honolulu 6.64 USB 3k OFF 3kHz OFF OFF OFF 09=Honolulu 10.033 USB 3k OFF 3kHz OFF OFF OFF 10=Honolulu 11.342 USB 3k OFF 3kHz OFF OFF OFF 11=Honolulu 13.348 USB 3k OFF 3kHz OFF OFF OFF 12=Honolulu 13.354 USB 3k OFF 3kHz OFF OFF OFF 13=Honolulu 17.925 USB 3k OFF 3kHz OFF OFF OFF 14=Honolulu 21.964 USB 3k OFF 3kHz OFF OFF OFF 15=New_York 3.494 USB 3k OFF 3kHz OFF OFF OFF 16=New_York 6.526 USB 3k OFF 3kHz OFF OFF OFF 17=New_York 6.64 USB 3k OFF 3kHz OFF OFF OFF 18=New_York 11.342 USB 3k OFF 3kHz OFF OFF OFF 19=New_York 13.33 USB 3k OFF 3kHz OFF OFF OFF 20=New_York 13.354 USB 3k OFF 3kHz OFF OFF OFF 21=New_York 17.925 USB 3k OFF 3kHz OFF OFF OFF 23=San_Fran 3.013 USB 3k OFF 3kHz OFF OFF OFF 24=San_Fran 3.413 USB 3k OFF 3kHz OFF OFF OFF 25=San_Fran 6.64 USB 3k OFF 3kHz OFF OFF OFF 26=San_Fran 8.843 USB 3k OFF 3kHz OFF OFF OFF 27=San_Fran 11.342 USB 3k OFF 3kHz OFF OFF OFF 28=San_Fran 13.3 USB 3k OFF 3kHz OFF OFF OFF 29=San_Fran 13.348 USB 3k OFF 3kHz OFF OFF OFF 30=San_Fran 13.354 USB 3k OFF 3kHz OFF OFF OFF 31=San_Fran 17.925 USB 3k OFF 3kHz OFF OFF OFF 33=Gulf_Mex 4.55 USB 3k OFF 3kHz OFF OFF OFF 34=Gulf_Mex 6.82 USB 3k OFF 3kHz OFF OFF OFF 35=Gulf_Mex 8.07 USB 3k OFF 3kHz OFF OFF OFF 36=Gulf_Mex 13.354 USB 3k OFF 3kHz OFF OFF OFF 37=St_Johns 3.485 USB 3k OFF 3kHz OFF OFF OFF 38=St_Johns 5.604 USB 3k OFF 3kHz OFF OFF OFF 39=St_Johns 8.819 USB 3k OFF 3kHz OFF OFF OFF 40=St_Johns 13.285 USB 3k OFF 3kHz OFF OFF OFF 41=St_Johns 13.42 USB 3k OFF 3kHz OFF OFF OFF 42=St_Johns 17.91 USB 3k OFF 3kHz OFF OFF OFF [BANK08] BANKNAME=Comp-2 ACTIVECH=42 00=Berne 3.01 USB 3k OFF 3kHz OFF OFF OFF 01=Berne 4.654 USB 3k OFF 3kHz OFF OFF OFF 02=Berne 4.67 USB 3k OFF 3kHz OFF OFF OFF 03=Berne 4.702 USB 3k OFF 3kHz OFF OFF OFF 04=Berne 6.526 USB 3k OFF 3kHz OFF OFF OFF 05=Berne 6.643 USB 3k OFF 3kHz OFF OFF OFF 06=Berne 6.705 USB 3k OFF 3kHz OFF OFF OFF 07=Berne 6.742 USB 3k OFF 3kHz OFF OFF OFF 08=Berne 8.936 USB 3k OFF 3kHz OFF OFF OFF 09=Berne 9.211 USB 3k OFF 3kHz OFF OFF OFF 10=Berne 10.069 USB 3k OFF 3kHz OFF OFF OFF 11=Berne 13.205 USB 3k OFF 3kHz OFF OFF OFF 12=Berne 13.266 USB 3k OFF 3kHz OFF OFF OFF 13=Berne 13.324 USB 3k OFF 3kHz OFF OFF OFF 14=Berne 15.046 USB 3k OFF 3kHz OFF OFF OFF 15=Berne 15.05 USB 3k OFF 3kHz OFF OFF OFF 16=Berne 15.835 USB 3k OFF 3kHz OFF OFF OFF 17=Berne 17.931 USB 3k OFF 3kHz OFF OFF OFF 18=Berne 18.023 USB 3k OFF 3kHz OFF OFF OFF 19=Berne 18.48 USB 3k OFF 3kHz OFF OFF OFF 20=Berne 19.554 USB 3k OFF 3kHz OFF OFF OFF 21=Berne 20.035 USB 3k OFF 3kHz OFF OFF OFF 22=Berne 20.87 USB 3k OFF 3kHz OFF OFF OFF 23=Berne 21.933 USB 3k OFF 3kHz OFF OFF OFF 24=Berne 21.988 USB 3k OFF 3kHz OFF OFF OFF 25=Berne 23.285 USB 3k OFF 3kHz OFF OFF OFF 26=Berne 25.5 USB 3k OFF 3kHz OFF OFF OFF 27=London 3.482 USB 3k OFF 3kHz OFF OFF OFF 28=London 4.807 USB 3k OFF 3kHz OFF OFF OFF 29=London 5.61 USB 3k OFF 3kHz OFF OFF OFF 30=London 6.634 USB 3k OFF 3kHz OFF OFF OFF 31=London 8.17 USB 3k OFF 3kHz OFF OFF OFF 32=London 8.96 USB 3k OFF 3kHz OFF OFF OFF 33=London 10.291 USB 3k OFF 3kHz OFF OFF OFF 34=London 11.306 USB 3k OFF 3kHz OFF OFF OFF 35=London 12.133 USB 3k OFF 3kHz OFF OFF OFF 36=London 13.865 USB 3k OFF 3kHz OFF OFF OFF 37=London 14.89 USB 3k OFF 3kHz OFF OFF OFF 38=London 17.405 USB 3k OFF 3kHz OFF OFF OFF 39=London 19.51 USB 3k OFF 3kHz OFF OFF OFF [BANK09] BANKNAME= ACTIVECH=7 00=WWV2 2.5 AM 6k ON 5kHz OFF OFF OFF 01=WWV5 5 AM 6k ON 5kHz OFF OFF OFF 02=WWV10 10 AM 6k ON 5kHz OFF OFF OFF 03=WWV15 15 AM 6k ON 5kHz OFF OFF OFF 04=WWV20 20 AM 6k ON 5kHz OFF OFF OFF 05=CHU3 3.33 AM 6k ON 5kHz OFF OFF OFF 06=CHU5 7.335 AM 6k ON 5kHz OFF OFF OFF 07=CHU14 14.67 AM 6k ON 20kHz OFF OFF OFF [BANK10] BANKNAME= ACTIVECH=0 00=WFAN 0.66 AM 15k OFF 10kHz OFF OFF OFF 19=NONAME 0.8 AM 15k OFF 10kHz OFF OFF OFF 01=NONAME 0.83 AM 15k OFF 10kHz OFF OFF OFF 18=NONAME 0.88 AM 15k OFF 10kHz OFF OFF OFF 02=WPEN 0.95 AM 15k OFF 10kHz OFF OFF OFF 03=WBZ 1.03 AM 15k OFF 20kHz OFF OFF OFF 04=KYW 1.06 AM 15k OFF 10kHz OFF OFF OFF 05=WBAL 1.09 AM 15k OFF 10kHz OFF OFF OFF 06=NONAME 1.1 AM 15k OFF 10kHz OFF OFF OFF 07=NONAME 1.11 AM 15k OFF 10kHz OFF OFF OFF 08=WDEL 1.15 AM 15k OFF 10kHz OFF OFF OFF 09=NONAME 1.17 AM 15k OFF 10kHz OFF OFF OFF 10=WPHT 1.21 AM 15k OFF 10kHz OFF OFF OFF 11=WNRK 1.26 AM 15k OFF 10kHz OFF OFF OFF 12=WJBR 1.29 AM 15k OFF 10kHz OFF OFF OFF 13=NONAME 1.33 AM 15k OFF 10kHz OFF OFF OFF 14=WTMC 1.38 AM 15k OFF 10kHz OFF OFF OFF 15=WILM 1.45 AM 15k OFF 10kHz OFF OFF OFF 16=NONAME 1.51 AM 15k OFF 10kHz OFF OFF OFF 17=WSER 1.55 AM 15k OFF 10kHz OFF OFF OFF 20=NONAME 89.9 WFM 230k OFF 200kHz OFF OFF OFF 21=WVUD 91.3 WFM 230k OFF 200kHz OFF OFF OFF 22=WSTW 93.7 WFM 230k OFF 200kHz OFF OFF OFF 23=NONAME 94.1 WFM 230k OFF 200kHz OFF OFF OFF 24=NONAME 94.7 WFM 230k OFF 200kHz OFF OFF OFF 25=NONAME 95.7 WFM 230k OFF 200kHz OFF OFF OFF 26=WJBR 99.5 WFM 230k OFF 200kHz OFF OFF OFF 27=WXCY 103.7 WFM 230k OFF 200kHz OFF OFF OFF 28=NONAME 107.7 WFM 230k OFF 200kHz OFF OFF OFF [BANK14] BANKNAME= ACTIVECH=0 [BANK15] BANKNAME= ACTIVECH=0 [BANK16] BANKNAME= ACTIVECH=0 [BANK17] BANKNAME= ACTIVECH=0 [BANK18] BANKNAME= ACTIVECH=0 [BANK19] BANKNAME=scan ACTIVECH=7 02=C17 493.75 WFM 230k OFF 6MHz OFF OFF OFF 04=C22 523.75 WFM 230k OFF 6MHz OFF OFF OFF 05=C23 529.75 WFM 230k OFF 6MHz OFF OFF OFF 07=C48 679.75 WFM 230k OFF 6MHz OFF OFF OFF 08=C61 757.75 WFM 230k OFF 6MHz OFF OFF OFF 10=C65 781.75 WFM 230k OFF 6MHz OFF OFF OFF 13=C29 565.75 WFM 230k OFF 6MHz OFF OFF OFF 16=C43 649.75 WFM 230k OFF 6MHz OFF OFF OFF 17=C45 661.75 WFM 230k OFF 6MHz OFF OFF OFF 20=C57 733.75 WFM 230k OFF 6MHz OFF OFF OFF [COMMON] ACTIVEBANK=11 [BANK11] BANKNAME= ACTIVECH=10 00=C2 59.75 WFM 230k OFF 6MHz OFF OFF OFF 01=C10 197.75 WFM 230k OFF 6MHz OFF OFF OFF 02=C11 203.75 WFM 230k OFF 6MHz OFF OFF OFF 03=C12 209.75 WFM 230k OFF 6MHz OFF OFF OFF 04=C13 215.75 WFM 230k OFF 6MHz OFF OFF OFF 05=C17 493.75 WFM 230k OFF 6MHz OFF OFF OFF 06=C22 523.75 WFM 230k OFF 6MHz OFF OFF OFF 07=C23 529.75 WFM 230k OFF 6MHz OFF OFF OFF 08=C48 679.75 WFM 230k OFF 6MHz OFF OFF OFF 09=C61 757.75 WFM 230k OFF 6MHz OFF OFF OFF 10=C65 781.75 WFM 230k OFF 6MHz OFF OFF OFF 11=C29 565.75 WFM 230k OFF 6MHz OFF OFF OFF 12=C43 649.75 WFM 230k OFF 6MHz OFF OFF OFF 13=C45 661.75 WFM 230k OFF 6MHz OFF OFF OFF 14=C57 733.75 WFM 230k OFF 6MHz OFF OFF OFF icom-20120228/pcr0000644000175000017500000001600410376731213012410 0ustar colincolin0.0 3.452 USB AFI/SAT 0.1 6.535 USB AFI/SAT 0.2 8.861 USB AFI/SAT 0.3 13.357 USB AFI/SAT 0.4 17.955 USB AFI/SAT 0.5 3.419 USB AFI-2 0.6 5.652 USB AFI-2 0.7 8.894 USB AFI-2 0.8 13.273 USB AFI-2 0.9 17.961 USB AFI-2 0.10 3.467 USB AFI/MID 0.11 5.658 USB AFI/MID 0.12 10.018 USB AFI/MID 0.13 11.3 USB AFI/MID 0.14 13.288 USB AFI/MID 0.15 17.961 USB AFI/MID 0.16 2.878 USB AFI-4 0.17 5.493 USB AFI-4 0.18 8.903 USB AFI-4 0.19 13.294 USB AFI-4 0.20 17.961 USB AFI-4 0.21 3.476 USB AFI/INO 0.22 5.634 USB AFI/INO 0.23 8.879 USB AFI/INO 0.24 13.306 USB AFI/INO 0.25 17.961 USB AFI/INO 0.26 2.869 USB CEP-1/2 0.27 3.413 USB CEP-1/2 0.28 5.547 USB CEP-1/2 0.29 5.574 USB CEP-1/2 0.30 8.843 USB CEP-1/2 0.31 11.282 USB CEP-1/2 0.32 13.261 USB CEP-1/2 0.33 13.354 USB CEP-1/2 0.34 17.904 USB CEP-1/2 0.35 2.998 USB CWP-1/2 0.36 4.666 USB CWP-1/2 0.37 6.532 USB CWP-1/2 0.38 6.562 USB CWP-1/2 0.39 8.903 USB CWP-1/2 0.40 11.384 USB CWP-1/2 0.41 13.3 USB CWP-1/2 0.42 17.904 USB CWP-1/2 0.43 21.985 USB CWP-1/2 0.44 2.932 USB NP 0.45 5.628 USB NP 0.46 5.667 USB NP 0.47 6.665 USB NP 0.48 8.915 USB NP 0.49 10.048 USB NP 0.50 13.294 USB NP 0.51 17.904 USB NP 0.52 17.946 USB NP 0.53 21.925 USB NP 0.54 3.467 USB SP 0.55 5.643 USB SP 0.56 5.667 USB SP 0.57 8.867 USB SP 0.58 13.273 USB SP 0.59 17.904 USB SP 0.60 3.479 USB EUR-A 0.61 5.661 USB EUR-A 0.62 6.598 USB EUR-A 0.63 10.084 USB EUR-A 0.64 13.288 USB EUR-A 0.65 17.961 USB EUR-A 0.66 2.992 USB MID-1 0.67 4.669 USB MID-1 0.68 6.631 USB MID-1 0.69 8.951 USB MID-1 0.70 11.375 USB MID-1 0.71 17.961 USB MID-1 0.72 2.944 USB MID-3 0.73 4.669 USB MID-3 0.74 6.631 USB MID-3 0.75 8.951 USB MID-3 0.76 11.375 USB MID-3 0.77 17.961 USB MID-3 0.78 3.019 USB NCA-1 0.79 5.646 USB NCA-1 0.80 13.315 USB NCA-1 0.81 17.958 USB NCA-1 0.82 2.851 USB NCA-2 0.83 4.678 USB NCA-2 0.84 6.592 USB NCA-2 0.85 10.096 USB NCA-2 0.86 17.958 USB NCA-2 0.87 3.004 USB NCA-3 0.88 5.664 USB NCA-3 0.89 10.039 USB NCA-3 0.90 13.303 USB NCA-3 0.91 17.958 USB NCA-3 0.92 3.016 USB NAT-A 0.93 5.598 USB NAT-A 0.94 8.906 USB NAT-A 0.95 13.306 USB NAT-A 0.96 17.946 USB NAT-A 0.97 2.899 USB NAT-B 0.98 5.616 USB NAT-B 0.99 8.864 USB NAT-B 0.100 13.291 USB NAT-B 0.101 17.946 USB NAT-B 0.102 2.862 USB NAT-C 0.103 5.649 USB NAT-C 0.104 8.879 USB NAT-C 0.105 13.306 USB NAT-C 0.106 17.946 USB NAT-C 0.107 2.971 USB NAT-D 0.108 4.675 USB NAT-D 0.109 8.891 USB NAT-D 0.110 11.279 USB NAT-D 0.111 13.291 USB NAT-D 0.112 17.946 USB NAT-D 0.113 2.962 USB NAT-E 0.114 6.628 USB NAT-E 0.115 8.825 USB NAT-E 0.116 11.309 USB NAT-E 0.117 13.354 USB NAT-E 0.118 3.476 USB NAT-F 0.119 6.622 USB NAT-F 0.120 8.831 USB NAT-F 0.121 2.887 USB CAR-A 0.122 5.55 USB CAR-A 0.123 6.577 USB CAR-A 0.124 8.918 USB CAR-A 0.125 11.396 USB CAR-A 0.126 13.297 USB CAR-A 0.127 17.907 USB CAR-A 0.128 3.455 USB CAR-B 0.129 5.52 USB CAR-B 0.130 6.586 USB CAR-B 0.131 8.846 USB CAR-B 0.132 11.33 USB CAR-B 0.133 11.387 USB CAR-B 0.134 17.907 USB CAR-B 0.135 3.479 USB E_SAM 0.136 5.526 USB E_SAM 0.137 8.855 USB E_SAM 0.138 10.096 USB E_SAM 0.139 13.297 USB E_SAM 0.140 17.907 USB E_SAM 0.141 2.944 USB W_SAM 0.142 4.669 USB W_SAM 0.143 6.549 USB W_SAM 0.144 10.024 USB W_SAM 0.145 11.36 USB W_SAM 0.146 17.907 USB W_SAM 0.147 2.854 USB SAT-2 0.148 5.565 USB SAT-2 0.149 11.291 USB SAT-2 0.150 13.315 USB SAT-2 0.151 17.955 USB SAT-2 0.152 3.016 USB EA-1 0.153 6.571 USB EA-1 0.154 8.897 USB EA-1 0.155 10.042 USB EA-1 0.156 17.958 USB EA-1 0.157 3.47 USB SEA-1/3 0.158 6.556 USB SEA-1/3 0.159 10.066 USB SEA-1/3 0.160 11.396 USB SEA-1/3 0.161 13.318 USB SEA-1/3 0.162 17.907 USB SEA-1/3 0.163 3.485 USB SEA/EA 0.164 5.649 USB SEA/EA 0.165 5.655 USB SEA/EA 0.166 8.942 USB SEA/EA 0.167 11.396 USB SEA/EA 0.168 13.309 USB SEA/EA 0.169 17.907 USB SEA/EA 0.170 3.485 USB MET-NAT 0.171 6.604 USB MET-NAT 0.172 10.051 USB MET-NAT 0.173 13.27 USB MET-NAT 0.174 3.413 USB MET-EU 0.175 5.505 USB MET-EU 0.176 8.957 USB MET-EU 0.177 13.264 USB MET-EU 0.178 2.863 USB MET-PAC 0.179 6.679 USB MET-PAC 0.180 8.828 USB MET-PAC 0.181 13.282 USB MET-PAC 0.182 5.529 USB Houston 0.183 6.637 USB Houston 0.184 10.075 USB Houston 0.185 11.342 USB Houston 0.186 13.33 USB Houston 0.187 17.94 USB Houston 0.188 3.013 USB Honolulu 0.189 6.64 USB Honolulu 0.190 10.033 USB Honolulu 0.191 11.342 USB Honolulu 0.192 13.348 USB Honolulu 0.193 13.354 USB Honolulu 0.194 17.925 USB Honolulu 0.195 21.964 USB Honolulu 0.196 3.494 USB New_York 0.197 6.526 USB New_York 0.198 6.64 USB New_York 0.199 11.342 USB New_York 0.200 13.33 USB New_York 0.201 13.354 USB New_York 0.202 17.925 USB New_York 0.203 3.013 USB San_Fran 0.204 3.413 USB San_Fran 0.205 6.64 USB San_Fran 0.206 8.843 USB San_Fran 0.207 11.342 USB San_Fran 0.208 13.3 USB San_Fran 0.209 13.348 USB San_Fran 0.210 13.354 USB San_Fran 0.211 17.925 USB San_Fran 0.212 4.55 USB Gulf_Mex 0.213 6.82 USB Gulf_Mex 0.214 8.07 USB Gulf_Mex 0.215 13.354 USB Gulf_Mex 0.216 3.485 USB St_Johns 0.217 5.604 USB St_Johns 0.218 8.819 USB St_Johns 0.219 13.285 USB St_Johns 0.220 13.42 USB St_Johns 0.221 17.91 USB St_Johns 0.222 3.01 USB Berne 0.223 4.654 USB Berne 0.224 4.67 USB Berne 0.225 4.702 USB Berne 0.226 6.526 USB Berne 0.227 6.643 USB Berne 0.228 6.705 USB Berne 0.229 6.742 USB Berne 0.230 8.936 USB Berne 0.231 9.211 USB Berne 0.232 10.069 USB Berne 0.233 13.205 USB Berne 0.234 13.266 USB Berne 0.235 13.324 USB Berne 0.236 15.046 USB Berne 0.237 15.05 USB Berne 0.238 15.835 USB Berne 0.239 17.931 USB Berne 0.240 18.023 USB Berne 0.241 18.48 USB Berne 0.242 19.554 USB Berne 0.243 20.035 USB Berne 0.244 20.87 USB Berne 0.245 21.933 USB Berne 0.246 21.988 USB Berne 0.247 23.285 USB Berne 0.248 25.5 USB Berne 0.249 3.482 USB London 0.250 4.807 USB London 0.251 5.61 USB London 0.252 6.634 USB London 0.253 8.17 USB London 0.254 8.96 USB London 0.255 10.291 USB London 0.256 11.306 USB London 0.257 12.133 USB London 0.258 13.865 USB London 0.259 14.89 USB London 0.260 17.405 USB London 0.261 19.51 USB London 0.262 2.5 AM WWV2 0.263 5 AM WWV5 0.264 10 AM WWV10 0.265 15 AM WWV15 0.266 20 AM WWV20 0.267 3.33 AM CHU3 0.268 7.335 AM CHU5 0.269 14.67 AM CHU14 0.270 0.66 AM WFAN 0.271 0.8 AM NONAME 0.272 0.83 AM NONAME 0.273 0.88 AM NONAME 0.274 0.95 AM WPEN 0.275 1.03 AM WBZ 0.276 1.06 AM KYW 0.277 1.09 AM WBAL 0.278 1.1 AM NONAME 0.279 1.11 AM NONAME 0.280 1.15 AM WDEL 0.281 1.17 AM NONAME 0.282 1.21 AM WPHT 0.283 1.26 AM WNRK 0.284 1.29 AM WJBR 0.285 1.33 AM NONAME 0.286 1.38 AM WTMC 0.287 1.45 AM WILM 0.288 1.51 AM NONAME 0.289 1.55 AM WSER 0.290 89.9 WFM NONAME 0.291 91.3 WFM WVUD 0.292 93.7 WFM WSTW 0.293 94.1 WFM NONAME 0.294 94.7 WFM NONAME 0.295 95.7 WFM NONAME 0.296 99.5 WFM WJBR 0.297 103.7 WFM WXCY 0.298 107.7 WFM NONAME 19.0 493.75 WFM C17 19.1 523.75 WFM C22 19.2 529.75 WFM C23 19.3 679.75 WFM C48 19.4 757.75 WFM C61 19.5 781.75 WFM C65 19.6 565.75 WFM C29 19.7 649.75 WFM C43 19.8 661.75 WFM C45 19.9 733.75 WFM C57 19.10 59.75 WFM C2 19.11 197.75 WFM C10 19.12 203.75 WFM C11 19.13 209.75 WFM C12 19.14 215.75 WFM C13 19.15 493.75 WFM C17 19.16 523.75 WFM C22 19.17 529.75 WFM C23 19.18 679.75 WFM C48 19.19 757.75 WFM C61 19.20 781.75 WFM C65 19.21 565.75 WFM C29 19.22 649.75 WFM C43 19.23 661.75 WFM C45 19.24 733.75 WFM C57 icom-20120228/arinc_world.MCH0000744000175000017500000004062710376731213014546 0ustar colincolin[REV],,,,,,,,, ID=1.0.0,,,,,,,,, APP=IC-PCR1000 Revision 2.0,,,,,,,,, [BANK00],,,,,,,,, BANKNAME=Africa,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=AFI-1/SAT-1,,3.452,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=AFI-1/SAT-1,,6.535,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=AFI-1/SAT-1,,8.861,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=AFI-1/SAT-1,,13.357,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=AFI-1/SAT-1,,17.955,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=AFI-2,,3.419,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=AFI-2,,5.652,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=AFI-2,,8.894,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=AFI-2,,13.273,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=AFI-2,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=AFI-3/MID-2,,3.467,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=AFI-3/MID-2,,5.658,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=AFI-3/MID-2,,10.018,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=AFI-3/MID-2,,11.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=AFI-3/MID-2,,13.288,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=AFI-3/MID-2,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=AFI-4,,2.878,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=AFI-4,,5.493,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=AFI-4,,8.903,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=AFI-4,,13.294,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=AFI-4,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=AFI-5/INO-1,,3.476,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=AFI-5/INO-1,,5.634,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=AFI-5/INO-1,,8.879,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=AFI-5/INO-1,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=AFI-5/INO-1,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK01],,,,,,,,, BANKNAME=Pacific,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=CEP-1/2,,2.869,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=CEP-1/2,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=CEP-1/2,,5.547,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=CEP-1/2,,5.574,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=CEP-1/2,,8.843,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=CEP-1/2,,11.282,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=CEP-1/2,,13.261,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=CEP-1/2,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=CEP-1/2,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=CWP-1/2,,2.998,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=CWP-1/2,,4.666,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=CWP-1/2,,6.532,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=CWP-1/2,,6.562,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=CWP-1/2,,8.903,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=CWP-1/2,,11.384,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=CWP-1/2,,13.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=CWP-1/2,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=CWP-1/2,,21.985,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NP,,2.932,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NP,,5.628,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NP,,5.667,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NP,,6.665,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NP,,8.915,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NP,,10.048,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NP,,13.294,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NP,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NP,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NP,,21.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=SP,,3.467,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=SP,,5.643,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=SP,,5.667,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=SP,,8.867,USB,3k,OFF,3kHz,OFF,OFF,OFF 32=SP,,13.273,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=SP,,17.904,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK02],,,,,,,,, BANKNAME=Eur/W_Asia,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=EUR-A,,3.479,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=EUR-A,,5.661,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=EUR-A,,6.598,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=EUR-A,,10.084,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=EUR-A,,13.288,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=EUR-A,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=MID-1,,2.992,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=MID-1,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=MID-1,,6.631,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=MID-1,,8.951,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=MID-1,,11.375,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=MID-1,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=MID-3,,2.944,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=MID-3,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=MID-3,,6.631,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=MID-3,,8.951,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=MID-3,,11.375,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=MID-3,,17.961,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NCA-1,,3.019,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NCA-1,,5.646,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NCA-1,,13.315,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NCA-1,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NCA-2,,2.851,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NCA-2,,4.678,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NCA-2,,6.592,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NCA-2,,10.096,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NCA-2,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NCA-3,,3.004,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=NCA-3,,5.664,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=NCA-3,,10.039,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=NCA-3,,13.303,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=NCA-3,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK03],,,,,,,,, BANKNAME=N_Atlantic,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=NAT-A,,3.016,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=NAT-A,,5.598,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=NAT-A,,8.906,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=NAT-A,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=NAT-A,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=NAT-B,,2.899,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=NAT-B,,5.616,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=NAT-B,,8.864,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=NAT-B,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=NAT-B,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=NAT-C,,2.862,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=NAT-C,,5.649,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=NAT-C,,8.879,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=NAT-C,,13.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=NAT-C,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=NAT-D,,2.971,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=NAT-D,,4.675,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=NAT-D,,8.891,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=NAT-D,,11.279,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=NAT-D,,13.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=NAT-D,,17.946,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=NAT-E,,2.962,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=NAT-E,,6.628,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=NAT-E,,8.825,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=NAT-E,,11.309,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=NAT-E,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=NAT-F,,3.476,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=NAT-F,,6.622,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=NAT-F,,8.831,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK04],,,,,,,,, BANKNAME=Carr/S_Am,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=CAR-A,,2.887,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=CAR-A,,5.55,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=CAR-A,,6.577,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=CAR-A,,8.918,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=CAR-A,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=CAR-A,,13.297,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=CAR-A,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=CAR-B,,3.455,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=CAR-B,,5.52,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=CAR-B,,6.586,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=CAR-B,,8.846,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=CAR-B,,11.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=CAR-B,,11.387,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=CAR-B,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=E_SAM,,3.479,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=E_SAM,,5.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=E_SAM,,8.855,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=E_SAM,,10.096,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=E_SAM,,13.297,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=E_SAM,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=W_SAM,,2.944,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=W_SAM,,4.669,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=W_SAM,,6.549,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=W_SAM,,10.024,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=W_SAM,,11.36,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=W_SAM,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=SAT-2,,2.854,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=SAT-2,,5.565,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=SAT-2,,11.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=SAT-2,,13.315,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=SAT-2,,17.955,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK05],,,,,,,,, BANKNAME=E/S_Asia,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=EA-1,,3.016,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=EA-1,,6.571,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=EA-1,,8.897,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=EA-1,,10.042,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=EA-1,,17.958,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=SEA-1/3,,3.47,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=SEA-1/3,,6.556,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=SEA-1/3,,10.066,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=SEA-1/3,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=SEA-1/3,,13.318,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=SEA-1/3,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=SEA-2/EA-2,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=SEA-2/EA-2,,5.649,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=SEA-2/EA-2,,5.655,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=SEA-2/EA-2,,8.942,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=SEA-2/EA-2,,11.396,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=SEA-2/EA-2,,13.309,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=SEA-2/EA-2,,17.907,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK06],,,,,,,,, BANKNAME=VOLMET,,,,,,,,, ACTIVECH=1,,,,,,,,, 00=VOLMET-NAT,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=VOLMET-NAT,,6.604,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=VOLMET-NAT,,10.051,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=VOLMET-NAT,,13.27,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=VOLMET-EU,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=VOLMET-EU,,5.505,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=VOLMET-EU,,8.957,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=VOLMET-EU,,13.264,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=VOLMET-PAC,,2.863,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=VOLMET-PAC,,6.679,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=VOLMET-PAC,,8.828,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=VOLMET-PAC,,13.282,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK07],,,,,,,,, BANKNAME=Comp-1,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=Houston,,5.529,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=Houston,,6.637,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=Houston,,10.075,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=Houston,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=Houston,,13.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=Houston,,17.94,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=Houston,,21.964,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=ARINC_Honolulu,,3.013,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=ARINC_Honolulu,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=ARINC_Honolulu,,10.033,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=ARINC_Honolulu,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=ARINC_Honolulu,,13.348,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=ARINC_Honolulu,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=ARINC_Honolulu,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=ARINC_Honolulu,,21.964,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=ARINC_New_York,,3.494,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=ARINC_New_York,,6.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=ARINC_New_York,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=ARINC_New_York,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=ARINC_New_York,,13.33,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=ARINC_New_York,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=ARINC_New_York,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=ARINC_New_York,,21.964,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=ARINC_San_Fran,,3.013,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=ARINC_San_Fran,,3.413,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=ARINC_San_Fran,,6.64,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=ARINC_San_Fran,,8.843,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=ARINC_San_Fran,,11.342,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=ARINC_San_Fran,,13.3,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=ARINC_San_Fran,,13.348,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=ARINC_San_Frano,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=ARINC_San_Fran,,17.925,USB,3k,OFF,3kHz,OFF,OFF,OFF 32=ARINC_San_Fran,,21.964,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=ARINC_Gulf_Mex,,4.55,USB,3k,OFF,3kHz,OFF,OFF,OFF 34=ARINC_Gulf_Mex,,6.82,USB,3k,OFF,3kHz,OFF,OFF,OFF 35=ARINC_Gulf_Mex,,8.07,USB,3k,OFF,3kHz,OFF,OFF,OFF 36=ARINC_Gulf_Mex,,13.354,USB,3k,OFF,3kHz,OFF,OFF,OFF 37=Rainbow_St_Johns,,3.485,USB,3k,OFF,3kHz,OFF,OFF,OFF 38=Rainbow_St_Johns,,5.604,USB,3k,OFF,3kHz,OFF,OFF,OFF 39=Rainbow_St_Johns,,8.819,USB,3k,OFF,3kHz,OFF,OFF,OFF 40=Rainbow_St_Johns,,13.285,USB,3k,OFF,3kHz,OFF,OFF,OFF 41=Rainbow_St_Johns,,13.42,USB,3k,OFF,3kHz,OFF,OFF,OFF 42=Rainbow_St_Johns,,17.91,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK08],,,,,,,,, BANKNAME=Comp-2,,,,,,,,, ACTIVECH=42,,,,,,,,, 00=Berne,,3.01,USB,3k,OFF,3kHz,OFF,OFF,OFF 01=Berne,,4.654,USB,3k,OFF,3kHz,OFF,OFF,OFF 02=Berne,,4.67,USB,3k,OFF,3kHz,OFF,OFF,OFF 03=Berne,,4.702,USB,3k,OFF,3kHz,OFF,OFF,OFF 04=Berne,,6.526,USB,3k,OFF,3kHz,OFF,OFF,OFF 05=Berne,,6.643,USB,3k,OFF,3kHz,OFF,OFF,OFF 06=Berne,,6.705,USB,3k,OFF,3kHz,OFF,OFF,OFF 07=Berne,,6.742,USB,3k,OFF,3kHz,OFF,OFF,OFF 08=Berne,,8.936,USB,3k,OFF,3kHz,OFF,OFF,OFF 09=Berne,,9.211,USB,3k,OFF,3kHz,OFF,OFF,OFF 10=Berne,,10.069,USB,3k,OFF,3kHz,OFF,OFF,OFF 11=Berne,,13.205,USB,3k,OFF,3kHz,OFF,OFF,OFF 12=Berne,,13.266,USB,3k,OFF,3kHz,OFF,OFF,OFF 13=Berne,,13.324,USB,3k,OFF,3kHz,OFF,OFF,OFF 14=Berne,,15.046,USB,3k,OFF,3kHz,OFF,OFF,OFF 15=Berne,,15.05,USB,3k,OFF,3kHz,OFF,OFF,OFF 16=Berne,,15.835,USB,3k,OFF,3kHz,OFF,OFF,OFF 17=Berne,,17.931,USB,3k,OFF,3kHz,OFF,OFF,OFF 18=Berne,,18.023,USB,3k,OFF,3kHz,OFF,OFF,OFF 19=Berne,,18.48,USB,3k,OFF,3kHz,OFF,OFF,OFF 20=Berne,,19.554,USB,3k,OFF,3kHz,OFF,OFF,OFF 21=Berne,,20.035,USB,3k,OFF,3kHz,OFF,OFF,OFF 22=Berne,,20.87,USB,3k,OFF,3kHz,OFF,OFF,OFF 23=Berne,,21.933,USB,3k,OFF,3kHz,OFF,OFF,OFF 24=Berne,,21.988,USB,3k,OFF,3kHz,OFF,OFF,OFF 25=Berne,,23.285,USB,3k,OFF,3kHz,OFF,OFF,OFF 26=Berne,,25.5,USB,3k,OFF,3kHz,OFF,OFF,OFF 27=Portishead,,3.482,USB,3k,OFF,3kHz,OFF,OFF,OFF 28=Portishead,,4.807,USB,3k,OFF,3kHz,OFF,OFF,OFF 29=Portishead,,5.61,USB,3k,OFF,3kHz,OFF,OFF,OFF 30=Portishead,,6.634,USB,3k,OFF,3kHz,OFF,OFF,OFF 31=Portishead,,8.17,USB,3k,OFF,3kHz,OFF,OFF,OFF 32=Portishead,,8.96,USB,3k,OFF,3kHz,OFF,OFF,OFF 33=Portishead,,10.291,USB,3k,OFF,3kHz,OFF,OFF,OFF 34=Portishead,,11.306,USB,3k,OFF,3kHz,OFF,OFF,OFF 35=Portishead,,12.133,USB,3k,OFF,3kHz,OFF,OFF,OFF 36=Portishead,,13.865,USB,3k,OFF,3kHz,OFF,OFF,OFF 37=Portishead,,14.89,USB,3k,OFF,3kHz,OFF,OFF,OFF 38=Portishead,,17.405,USB,3k,OFF,3kHz,OFF,OFF,OFF 39=Portishead,,19.51,USB,3k,OFF,3kHz,OFF,OFF,OFF 40=Portishead,,20.065,USB,3k,OFF,3kHz,OFF,OFF,OFF 41=Portishead,,21.765,USB,3k,OFF,3kHz,OFF,OFF,OFF [BANK09],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=7,,,,,,,,, 00=WWV2,,2.5,AM,6k,ON,5kHz,OFF,OFF,OFF 01=WWV5,,5,AM,6k,ON,5kHz,OFF,OFF,OFF 02=WWV10,,10,AM,6k,ON,5kHz,OFF,OFF,OFF 03=WWV15,,15,AM,6k,ON,5kHz,OFF,OFF,OFF 04=WWV20,,20,AM,6k,ON,5kHz,OFF,OFF,OFF 05=CHU3,,3.33,AM,6k,ON,5kHz,OFF,OFF,OFF 06=CHU5,,7.335,AM,6k,ON,5kHz,OFF,OFF,OFF 07=CHU14,,14.67,AM,6k,ON,20kHz,OFF,OFF,OFF [BANK10],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, 00=WFAN,,0.66,AM,15k,OFF,10kHz,OFF,OFF,OFF 01=NONAME,,0.83,AM,15k,OFF,10kHz,OFF,OFF,OFF 02=WPEN,,0.95,AM,15k,OFF,10kHz,OFF,OFF,OFF 03=WBZ,,1.03,AM,15k,OFF,20kHz,OFF,OFF,OFF 04=KYW,,1.06,AM,15k,OFF,10kHz,OFF,OFF,OFF 05=WBAL,,1.09,AM,15k,OFF,10kHz,OFF,OFF,OFF 06=NONAME,,1.1,AM,15k,OFF,10kHz,OFF,OFF,OFF 07=NONAME,,1.11,AM,15k,OFF,10kHz,OFF,OFF,OFF 08=WDEL,,1.15,AM,15k,OFF,10kHz,OFF,OFF,OFF 09=NONAME,,1.17,AM,15k,OFF,10kHz,OFF,OFF,OFF 10=WPHT,,1.21,AM,15k,OFF,10kHz,OFF,OFF,OFF 11=WNRK,,1.26,AM,15k,OFF,10kHz,OFF,OFF,OFF 12=WJBR,,1.29,AM,15k,OFF,10kHz,OFF,OFF,OFF 13=NONAME,,1.33,AM,15k,OFF,10kHz,OFF,OFF,OFF 14=WTMC,,1.38,AM,15k,OFF,10kHz,OFF,OFF,OFF 15=WILM,,1.45,AM,15k,OFF,10kHz,OFF,OFF,OFF 16=NONAME,,1.51,AM,15k,OFF,10kHz,OFF,OFF,OFF 17=WSER,,1.55,AM,15k,OFF,10kHz,OFF,OFF,OFF 18=NONAME,,0.88,AM,15k,OFF,10kHz,OFF,OFF,OFF 19=NONAME,,0.8,AM,15k,OFF,10kHz,OFF,OFF,OFF 20=NONAME,,89.9,WFM,230k,OFF,200kHz,OFF,OFF,OFF 21=WVUD,,91.3,WFM,230k,OFF,200kHz,OFF,OFF,OFF 22=WSTW,,93.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 23=NONAME,,94.1,WFM,230k,OFF,200kHz,OFF,OFF,OFF 24=NONAME,,94.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 25=NONAME,,95.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 26=WJBR,,99.5,WFM,230k,OFF,200kHz,OFF,OFF,OFF 27=WXCY,,103.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF 28=NONAME,,107.7,WFM,230k,OFF,200kHz,OFF,OFF,OFF [BANK14],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK15],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK16],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK17],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK18],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=0,,,,,,,,, [BANK19],,,,,,,,, BANKNAME=scan,,,,,,,,, ACTIVECH=7,,,,,,,,, 02=C17,,493.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 04=C22,,523.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 05=C23,,529.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 07=C48,,679.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 08=C61,,757.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 10=C65,,781.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 13=C29,,565.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 16=C43,,649.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 17=C45,,661.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 20=C57,,733.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF [COMMON],,,,,,,,, ACTIVEBANK=11,,,,,,,,, [BANK11],,,,,,,,, BANKNAME=,,,,,,,,, ACTIVECH=10,,,,,,,,, 00=C2,,59.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 01=C10,,197.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 02=C11,,203.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 03=C12,,209.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 04=C13,,215.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 05=C17,,493.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 06=C22,,523.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 07=C23,,529.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 08=C48,,679.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 09=C61,,757.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 10=C65,,781.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 11=C29,,565.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 12=C43,,649.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 13=C45,,661.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF 14=C57,,733.75,WFM,230k,OFF,6MHz,OFF,OFF,OFF icom-20120228/noaa_wx.txt0000744000175000017500000000120210364255440014071 0ustar colincolinÿþ162.400 FM # NOAA weather 1 Baltimore MD, Atlantic City NJ, Allentown PA 162.425 FM # NOAA weather 2 162.450 FM # NOAA weather 3 Southard NJ 162.475 FM # NOAA weather 4 Philadelphia PA, Salisbury MD 162.500 FM # NOAA weather 5 Sudlersville MD 162.525 FM # NOAA weather 6 162.550 FM # NOAA weather 7 Harrisburg PA icom-20120228/arinc_freq0000644000175000017500000000537210424306430013734 0ustar colincolin# Company Radio + 3010 USB name "Berne" # Berne + 3013 USB name "San Fran" # ARINC San Fransisco, Honolulu + 3482 USB name "Portis" # Portishead + 3485 USB name "St Johns" # Rainbow St Johns + 3494 USB name "New York" # ARINC New York # 4550 USB name "Gulf Mex" # ARINC Gulf Mexico + 4654 USB name "Berne" # Berne + 4670 USB name "Berne" # Berne # 4702 USB name "Berne" # Berne # 4807 USB name "Portis" # Portishead + 5529 USB name "Houston" # Houston + 5604 USB name "St Johns" # Rainbow St Johns + 5610 USB name "Portis" # Portishead + 6526 USB name "New York" # ARINC New York, Berne + 6634 USB name "Portis" # Portishead + 6637 USB name "Houston" # Houston + 6640 USB name "ARINC" # ARINC New York, San Fransisco, Honolulu + 6643 USB name "Berne" # Berne # 6705 USB name "Berne" # Berne # 6742 USB name "Berne" # Berne # 6820 USB name "Gulf Mex" # ARINC Gulf Mexico # 8070 USB name "Gulf Mex" # ARINC Gulf Mexico # 8170 USB name "Portis" # Portishead + 8819 USB name "St Johns" # Rainbow St Johns + 8843 USB name "San Fran" # ARINC San Fransisco + 8936 USB name "Berne" # Berne + 8960 USB name "Portis" # Portishead # 9211 USB name "Berne" # Berne + 10033 USB name "Honolulu" # ARINC Honolulu + 10069 USB name "Berne" # Berne + 10075 USB name "Houston" # Houston # 10291 USB name "Portis" # Portishead + 11306 USB name "Portis" # Portishead + 11342 USB name "ARINC" # ARINC New York, Honolulu, San Fransisco # 12133 USB name "Portis" # Portishead # 13205 USB name "Berne" # Berne # 13266 USB name "Berne" # Berne + 13285 USB name "St Johns" # Rainbow St Johns + 13300 USB name "San Fran" # ARINC San Fransisco + 13324 USB name "Berne" # Berne + 13330 USB name "New York" # ARINC New York, Houston + 13348 USB name "San Fran" # ARINC San Fransisco, Honolulu + 13354 USB name "ARINC" # ARINC New York, San Fransisco, Honolulu, Gulf Mexico # 13420 USB name "St Johns" # Rainbow St Johns # 13865 USB name "Portis" # Portishead # 14890 USB name "Portis" # Portishead # 15046 USB name "Berne" # Berne # 15050 USB name "Berne" # Berne # 15835 USB name "Berne" # Berne # 17405 USB name "Portis" # Portishead + 17910 USB name "St Johns" # Rainbow St Johns + 17925 USB name "ARINC" # ARINC New York, San Fransisco, Honolulu + 17931 USB name "Berne" # Berne + 17940 USB name "Houston" # Houston # 18023 USB name "Berne" # Berne # 18480 USB name "Berne" # Berne # 19510 USB name "Portis" # Portishead # 19554 USB name "Berne" # Berne # 20035 USB name "Berne" # Berne # 20065 USB name "Portis" # Portishead # 20870 USB name "Berne" # Berne # 21765 USB name "Portis" # Portishead + 21933 USB name "Berne" # Berne + 21964 USB name "ARINC" # ARINC New York, San Fransisco, Honolulu, Houston + 21988 USB name "Berne" # Berne # 23285 USB name "Berne" # Berne # 25500 USB name "Berne" # Berne icom-20120228/TAB.C0000744000175000017500000007107010453534053012417 0ustar colincolin/* * Program to control ICOM radios * * Tables and chairs */ #include "icom.h" #include #include /* * Commands */ #define ARG2(y, x) (((y) << 8) | (x)) #define ARG3(z, y, x) (((z) << 16) | ((y) << 8) | (x)) #define M_CTL(z, x) ARG3((z), V_WRCTL, (x)) #define M_MTR(z, x) ARG3((z), V_RMTR, (x)) #define M_TOG(z, x) ARG3((z), V_TOGL, (x)) #define M_SET(z, x) ARG2((z), (x)) /* * Keyboard mode commands */ struct cmdtable cmd[] = { {"agc", C_AGC, "AGC fast/medium/slow"}, {"ant", C_ANT, "select antenna"}, {"atten", C_ATTEN, "select attenuator"}, {"band", C_BAND, "set band limits"}, {"bank", C_BANK, "read/write bank/name"}, {"bfocomp", C_BCOMP, "set BFO compensation"}, {"break", C_BREAK, "break off/semi/full"}, {"chan", C_READ, "read channels"}, {"ctl", C_CTRL, "control commands"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set dial tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"dump", C_DUMP, "dump VFO (debug)"}, {"duplex", C_DUPLEX, "set transmit duplex"}, {"empty", C_EMPTY, "empty channel"}, {"include", C_INCLD, "include file"}, {"key", C_KEY, "send CW message"}, {"meter", C_METER, "read meters and squelch"}, {"misc", C_MISC, "miscellaneous control"}, {"mode", C_MODE, "set mode"}, {"mvfo", C_VFOM, "memory -> VFO"}, {"name", C_NAME, "set channel name"}, {"pad", C_KEYPAD, "switch to keypad mode"}, {"power", C_POWER, "power on/off"}, {"preamp", C_PAMP, "preamp off/1/2f"}, {"ptt", C_PTT, "push to talk"}, {"quit", C_QUIT, "exit program"}, {"radio", C_RADIO, "select radio"}, {"rate", C_RATE, "set tuning rate"}, {"restore", C_RESTORE, "restore channels"}, {"rx", C_RX, "receive"}, {"save", C_SAVE, "save channels"}, {"say", C_ANNC, "announce control"}, {"scan", C_SCAN, "scan control"}, {"set", C_SWTCH, "set/clear switches"}, {"split", C_SPLIT, "split/duplex commands"}, {"step", C_STEP, "set tuning step"}, {"swap", C_SWAP, "VFO A <-> VFO B"}, {"test", C_TEST, "send CI-V test message"}, {"tone", C_TONE, "set repeater tone frequency"}, {"trace", C_DEBUG, "trace CI-V messages"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"tx", C_TX, "transmit"}, {"utc", C_TIME, "set/display date and time"}, {"verbose", C_VERB, "set verbose"}, {"vfo", C_VFO, "vfo commands"}, {"vfocomp", C_VCOMP, "set VFO compensation"}, {"write", C_WRITE, "write channels"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Keypad mode commands */ struct cmdtable key[] = { {{KILL, '\0'}, C_ERASE, "erase input"}, {"[11", C_ANT, "F1 ant status"}, {"[12", C_AGC, "F2 agc status"}, {"[13", C_ATTEN, "F3 atten status"}, {"[14", C_PAMP, "F4 preamp status"}, {"[15", C_BREAK, "F5 break status"}, {"[17", C_ANNC, "F6 say status"}, {"[18", C_METER, "F7 display meters"}, {"[19", C_SWTCH, "F8 display switches"}, {"[20", C_CTRL, "F9 display controls"}, {"[a", C_UP, "UP step up"}, {"[b", C_DOWN, "DOWN step down"}, {"[c", C_RUP, "RIGHT tuning rate up"}, {"[d", C_RDOWN, "LEFT tuning rate down"}, {"c", C_READ, "read channel"}, {"e", C_EMPTY, "empty channel"}, {"q", C_KEYBD, "switch to keyboard mode"}, {"r", C_RX, "receive"}, {"s", C_SPLIT, "split mode with offset"}, {"t", C_TX, "transmit"}, {"u", C_TIME, "display date and time"}, {"w", C_WRITE, "write channel"}, {"x", C_SWAP, "VFO A <-> VFO B"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * dummy argument */ struct cmdtable dummy[] = { {"\0", R_NOP, "invalid command"} }; /* * channel/bank arguments */ struct cmdtable argch[] = { {"[empty]", 0x00, "current bank/chan"}, {"$", 0x00, "current bank, all chans"}, {"b.$", 0x00, "bank b, all chans"}, {"$:$", 0x00, "all banks, all chans"}, {"+", 0x00, "current bank/chan plus 1"}, {"-", 0x00, "current bank/chan minus 1"}, {"c", 0x00, "current bank, chan c"}, {"b.c", 0x00, "bank b, chan c"}, {"c1:c2", 0x00, "current bank, block c1-c2"}, {"b1.c1:b2.c2", 0x00, "block b1.c1-b2.c2"}, {"\0", R_NOP, "invalid argument"} }; /* * "verbose" arguments */ struct cmdtable verbx[] = { {"off", 0, "terse"}, {"on", P_VERB, "verbose"}, {"\0", R_NOP, "invalid argument"} }; /* * "trace" arguments */ struct cmdtable dbx[] = { {"all", P_TRACE|P_ERMSG, "trace bus, errors"}, {"bus", P_TRACE, "trace bus"}, {"off", 0, "trace none"}, {"packet", P_ERMSG, "trace errors"}, {"\0", R_NOP, "invalid argument"} }; /* * "vfo" subcommands (V_SVFO 0x07 command) */ struct cmdtable vfo[] = { {"a", 0x00, "select VFO A"}, {"b", 0x01, "select VFO B"}, {"btoa", 0xa0, "VFO B -> VFO A"}, {"equal", 0xb1, "main VFO -> sub VFO"}, {"main", 0xd0, "select main VFO"}, {"nowatch", 0xc0, "dual-watch off"}, {"sub", 0xd1, "select sub VFO"}, {"swap", 0xb0, "VFO A <-> VFO B"}, {"watch", 0xc1, "dual-watch on"}, {"\0", R_NOP, "invalid argument"} }; /* * "split" subcommands (V_SPLIT 0x0f command) */ struct cmdtable split[] = { {"dup+", 0x12, "duplex up"}, {"dup-", 0x11, "duplex down"}, {"off", 0x00, "split off"}, {"on", 0x01, "split on"}, {"simplex", 0x10, "simplex"}, {"\0", R_NOP, "invalid argument"} }; /* * "atten" subcommands (V_ATTEN 0x11 command) */ struct cmdtable atten[] = { {"0", 0x00, "off"}, {"6", 0x06, "6 dB"}, {"10", 0x10, "10 dB"}, {"12", 0x12, "12 dB"}, {"18", 0x18, "18 dB"}, {"20", 0x20, "20 dB"}, {"30", 0x30, "30 dB"}, {"\0", R_NOP, "invalid argument"} }; /* * "ant" subcommands (V_SANT 0x12 command) */ struct cmdtable ant[] = { {"1", ARG2(0x00,0x00), "xmt/rec antenna 1"}, {"1R", ARG2(0x01,0x00), "xmt antenna 1/rec antenna R"}, {"2", ARG2(0x00,0x01), "xmt/rec antenna 2"}, {"2R", ARG2(0x01,0x01), "xmt antenna 2/rec antenna R"}, {"\0", R_NOP, "invalid argument"} }; /* * "say" subcommands (V_ANNC 0x13 command) */ struct cmdtable say[] = { {"all", 0x00, "all data"}, {"freq", 0x01, "S meter, frequency and mode"}, {"mode", 0x02, "receive mode"}, {"\0", R_NOP, "invalid argument"} }; /* * "ctl" subcommands (V_WRCTL 0x14 command) */ struct cmdtable ctlc[] = { {"af", M_CTL(G,0x01), "af gain"}, {"antivox", M_CTL(G,0x17), "anti-vox gain"}, {"balance", M_CTL(G,0x10), "balance"}, {"blank", M_CTL(G,0x12), "noise blanker threshold"}, {"bright", M_CTL(G,0x19), "LCD brightness"}, {"comp", M_CTL(G,0x0e), "speech compressor gain"}, {"contrast", M_CTL(G,0x18), "LCD contrast"}, {"delay", M_CTL(G,0x0f), "break delay"}, {"mic", M_CTL(G,0x0b), "microphone gain"}, {"monitor", M_CTL(G,0x15), "monitor gain"}, {"nf1", M_CTL(F,0x0d), "manual notch nf1 frequency"}, {"nf2", M_CTL(F,0x1a), "manual notch nf2 frequency"}, {"nr", M_CTL(G,0x06), "noise reduction"}, {"pbti", M_CTL(F,0x07), "passband tuning (inner"}, {"pbto", M_CTL(F,0x08), "passband tuning (outer"}, {"pitch", M_CTL(F,0x09), "cw pitch"}, {"power", M_CTL(G,0x0a), "rf power"}, {"rf", M_CTL(G,0x02), "rf gain"}, {"speed", M_CTL(G,0x0c), "key speed"}, {"sql", M_CTL(G,0x03), "squelch threshold"}, {"vox", M_CTL(G,0x16), "vox gain"}, {"\0", R_NOP, "invalid argument"} }; /* * "meter" subcommands (V_RMTR 0x15 command) */ struct cmdtable meter[] = { {"alc", M_MTR(G,0x13), "read ALC meter"}, {"comp", M_MTR(G,0x14), "read COMP meter"}, {"power", M_MTR(G,0x11), "read RF power meter"}, {"signal", M_MTR(S,0x02), "read S meter"}, {"sql", M_MTR(Q,0x01), "read squelch condition"}, {"swr", M_MTR(G,0x12), "read SWR meter"}, {"\0", R_NOP, "invalid argument"} }; /* * "set" subcommands (V_TOGL 0x16 command) */ struct cmdtable switches[] = { {"agc", M_TOG(A,0x12), "agc fast/mid/slow"}, {"agcfast", M_TOG(P,0x11), "agc fast (R8500)"}, {"agcslow", M_TOG(P,0x10), "agc slow (R8500)"}, {"an", M_TOG(W,0x41), "auto notch"}, {"apfoff", M_TOG(W,0x30), "auto peak filter off (R8500)"}, {"apfon", M_TOG(W,0x31), "auto peak filter on (R8500)"}, {"break", M_TOG(B,0x47), "break off/semi/full"}, {"comp", M_TOG(W,0x44), "speech compressor"}, {"dcts", M_TOG(W,0x4b), "digital tone squelch"}, {"lock", M_TOG(W,0x50), "dial lock"}, {"monitor", M_TOG(W,0x45), "monitor"}, {"nb", M_TOG(W,0x22), "noise blanker"}, {"nboff", M_TOG(P,0x20), "noise blanker off (R8500)"}, {"nbon", M_TOG(P,0x21), "noise blanker on(R8500)"}, {"nf1", M_TOG(W,0x48), "manual notch nf1"}, {"nf2", M_TOG(W,0x51), "manual notch nf2"}, {"nr", M_TOG(W,0x40), "noise reduction"}, {"peak", M_TOG(W,0x4f), "twin peak filter"}, {"preamp", M_TOG(P,0x02), "preamp off/1/2"}, {"rtty", M_TOG(W,0x49), "RTTY filter"}, {"tone", M_TOG(W,0x42), "repeater tone"}, {"tsql", M_TOG(W,0x43), "tone squelch"}, {"vcs", M_TOG(W,0x4c), "voice squelch"}, {"vox", M_TOG(W,0x46), "voice break"}, {"\0", R_NOP, "invalid argument"}, }; struct cmdtable fmtw[] = { {"off", M_SET(W,0x00), "switch off"}, {"on", M_SET(W,0x01), "switch on"}, {"\0", R_NOP, "invalid argument"}, }; /* * "power" subcommands (V_POWER 0x18 command) */ struct cmdtable power[] = { {"off", 0x00, "power off at sleep timeout"}, {"on", 0x01, "power on"}, {"\0", R_NOP, "invalid argument"} }; /* * "tone" and "tsql" subcommands (V_TONE 0x1b command) * * The CTSS tone frequency is in tenths of a Hertz. The vollowing * frequencies are valid for both the repeater tone (tone command) and * tone squelch (tsql command) functions. */ struct cmdtable tone[] = { {"off", 0x00, "CTSS off)"}, {"on", 0x01, "CTSS on)"}, {"67.0", 0x0670, "XZ (67.0 Hz)"}, {"69.3", 0x0693, "WZ (69.3 Hz)"}, {"71.9", 0x0719, "XA (71.9 Hz)"}, {"74.4", 0x0744, "WA (74.4 Hz)"}, {"77.0", 0x0770, "XB (77.0 Hz)"}, {"79.7", 0x0797, "WB (79.7 Hz)"}, {"82.5", 0x0825, "YZ (82.5 Hz)"}, {"85.4", 0x0854, "YA (85.4 Hz)"}, {"88.5", 0x0885, "YB (88.5 Hz)"}, {"91.5", 0x0915, "ZZ (91.5 Hz)"}, {"94.8", 0x0948, "ZA (94.8 Hz)"}, {"97.4", 0x0974, "ZB (97.4 Hz)"}, {"100.0", 0x1000, "1Z (100.0 Hz)"}, {"103.5", 0x1035, "1A (103.5 Hz)"}, {"107.2", 0x1072, "1B (107.2 Hz)"}, {"110.9", 0x1109, "2Z (110.9 Hz)"}, {"114.8", 0x1148, "2A (114.8 Hz)"}, {"118.8", 0x1188, "2B (118.8 Hz)"}, {"123.0", 0x1230, "3Z (123.0 Hz)"}, {"127.3", 0x1273, "3A (127.3 Hz)"}, {"131.8", 0x1318, "3B (131.8 Hz)"}, {"136.5", 0x1365, "4Z (136.5 Hz)"}, {"141.3", 0x1413, "4A (141.3 Hz)"}, {"146.2", 0x1462, "4B (146.2 Hz)"}, {"151.4", 0x1514, "5Z (151.4 Hz)"}, {"156.7", 0x1567, "5A (156.7 Hz)"}, {"159.8", 0x1598, "-- (159.8 Hz)"}, {"162.2", 0x1622, "5B (162.2 Hz)"}, {"165.5", 0x1655, "-- (165.5 Hz)"}, {"167.9", 0x1679, "6Z (167.9 Hz)"}, {"171.3", 0x1713, "-- (171.3 Hz)"}, {"173.8", 0x1738, "6A (173.8 Hz)"}, {"177.3", 0x1773, "-- (177.3 Hz)"}, {"179.9", 0x1799, "6B (179.9 Hz)"}, {"183.5", 0x1835, "-- (183.5 Hz)"}, {"186.2", 0x1862, "7Z (186.2 Hz)"}, {"189.9", 0x1899, "-- (189.9 Hz)"}, {"192.8", 0x1928, "7A (192.8 Hz)"}, {"196.6", 0x1968, "-- (196.6 Hz)"}, {"199.5", 0x1995, "-- (199.5 Hz)"}, {"203.5", 0x2035, "M1 (203.5 Hz)"}, {"206.5", 0x2065, "-- (206.5 Hz)"}, {"210.7", 0x2107, "M2 (210.7 Hz)"}, {"218.1", 0x2181, "M3 (218.1 Hz)"}, {"225.7", 0x2257, "M4 (225.7 Hz)"}, {"229.1", 0x2291, "9Z (229.1 Hz)"}, {"233.6", 0x2336, "M5 (233.6 Hz)"}, {"241.8", 0x2418, "M6 (241.8 Hz)"}, {"250.3", 0x2503, "M7 (250.3 Hz)"}, {"254.1", 0x2541, "0Z (254.1 Hz)"}, {"\0", R_NOP, "invalid argument"} }; /* * tone command on/off */ struct cmdtable toneon[] = { {"off", 0x00, "tone off"}, {"on", 0x01, "tone on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dtcs" subcommands (V_TONE 0x1b command) * * Thd DTCS code is nnn-pq, where nnn is 3 decimal digits, p is the * transmit polarity and q is the receive polarity. Polarity is N for * normal and R for reversed. The following codes are valid for the * digital tone squelch function (dtcs command). */ struct cmdtable dtcs[] = { {"off", 0x00, "DTCS off)"}, {"on", 0x01, "DTCS on)"}, {"023", 0x0023, "DTCS 023"}, {"025", 0x0025, "DTCS 025"}, {"026", 0x0026, "DTCS 026"}, {"031", 0x0031, "DTCS 031"}, {"032", 0x0032, "DTCS 032"}, {"036", 0x0036, "DTCS 036"}, {"043", 0x0043, "DTCS 043"}, {"047", 0x0047, "DTCS 047"}, {"051", 0x0051, "DTCS 051"}, {"053", 0x0053, "DTCS 054"}, {"054", 0x0054, "DTCS 055"}, {"055", 0x0055, "DTCS 071"}, {"071", 0x0071, "DTCS 071"}, {"072", 0x0072, "DTCS 072"}, {"073", 0x0073, "DTCS 073"}, {"074", 0x0074, "DTCS 074"}, {"114", 0x0114, "DTCS 114"}, {"115", 0x0115, "DTCS 115"}, {"116", 0x0116, "DTCS 116"}, {"122", 0x0122, "DTCS 122"}, {"125", 0x0125, "DTCS 125"}, {"131", 0x0131, "DTCS 131"}, {"132", 0x0132, "DTCS 132"}, {"134", 0x0134, "DTCS 134"}, {"143", 0x0143, "DTCS 143"}, {"145", 0x0145, "DTCS 145"}, {"152", 0x0152, "DTCS 152"}, {"155", 0x0155, "DTCS 155"}, {"156", 0x0156, "DTCS 156"}, {"162", 0x0162, "DTCS 162"}, {"165", 0x0165, "DTCS 165"}, {"172", 0x0172, "DTCS 172"}, {"174", 0x0174, "DTCS 174"}, {"205", 0x0205, "DTCS 205"}, {"212", 0x0212, "DTCS 212"}, {"223", 0x0223, "DTCS 223"}, {"225", 0x0225, "DTCS 225"}, {"226", 0x0226, "DTCS 226"}, {"243", 0x0243, "DTCS 243"}, {"244", 0x0244, "DTCS 244"}, {"245", 0x0245, "DTCS 245"}, {"246", 0x0246, "DTCS 246"}, {"251", 0x0251, "DTCS 251"}, {"252", 0x0252, "DTCS 252"}, {"255", 0x0255, "DTCS 255"}, {"261", 0x0261, "DTCS 261"}, {"263", 0x0263, "DTCS 263"}, {"265", 0x0265, "DTCS 265"}, {"266", 0x0266, "DTCS 266"}, {"271", 0x0271, "DTCS 271"}, {"274", 0x0274, "DTCS 274"}, {"306", 0x0306, "DTCS 306"}, {"311", 0x0311, "DTCS 311"}, {"315", 0x0315, "DTCS 315"}, {"325", 0x0325, "DTCS 325"}, {"331", 0x0331, "DTCS 331"}, {"332", 0x0332, "DTCS 332"}, {"343", 0x0343, "DTCS 343"}, {"346", 0x0346, "DTCS 346"}, {"351", 0x0351, "DTCS 351"}, {"356", 0x0356, "DTCS 356"}, {"364", 0x0364, "DTCS 364"}, {"365", 0x0365, "DTCS 365"}, {"371", 0x0371, "DTCS 371"}, {"411", 0x0411, "DTCS 411"}, {"412", 0x0412, "DTCS 412"}, {"413", 0x0413, "DTCS 413"}, {"423", 0x0423, "DTCS 423"}, {"431", 0x0431, "DTCS 431"}, {"432", 0x0432, "DTCS 432"}, {"445", 0x0445, "DTCS 445"}, {"446", 0x0446, "DTCS 446"}, {"452", 0x0452, "DTCS 452"}, {"454", 0x0454, "DTCS 454"}, {"455", 0x0455, "DTCS 455"}, {"462", 0x0462, "DTCS 462"}, {"464", 0x0464, "DTCS 464"}, {"465", 0x0465, "DTCS 465"}, {"466", 0x0466, "DTCS 466"}, {"503", 0x0503, "DTCS 503"}, {"506", 0x0506, "DTCS 506"}, {"516", 0x0516, "DTCS 516"}, {"523", 0x0523, "DTCS 523"}, {"526", 0x0526, "DTCS 526"}, {"532", 0x0532, "DTCS 532"}, {"546", 0x0546, "DTCS 546"}, {"565", 0x0565, "DTCS 565"}, {"606", 0x0606, "DTCS 606"}, {"612", 0x0612, "DTCS 612"}, {"624", 0x0624, "DTCS 624"}, {"627", 0x0627, "DTCS 627"}, {"631", 0x0631, "DTCS 631"}, {"632", 0x0632, "DTCS 632"}, {"654", 0x0654, "DTCS 654"}, {"662", 0x0662, "DTCS 662"}, {"664", 0x0664, "DTCS 664"}, {"703", 0x0703, "DTCS 703"}, {"712", 0x0712, "DTCS 712"}, {"723", 0x0723, "DTCS 723"}, {"731", 0x0731, "DTCS 731"}, {"732", 0x0732, "DTCS 732"}, {"734", 0x0734, "DTCS 734"}, {"743", 0x0743, "DTCS 743"}, {"754", 0x0754, "DTCS 754"}, {"\0", R_NOP, "invalid argument"} }; /* * DTCS polarity codes * * These codes are used with the DTCS codes given above. An "N" codes * for normal polarity, "R" reversed. */ struct cmdtable polar[] = { {"NN", 0x00, "+ transmit, + receive"}, {"NR", 0x01, "+ transmit, - receive"}, {"RN", 0x10, "- transmit, + receive"}, {"RR", 0x11, "- transmit, - receive"}, {"\0", R_NOP, "invalid argument"} }; /* * "tx" subcommands (V_TX 0x1c command) */ struct cmdtable tx[] = { {"off", 0x00, "receive"}, {"on", 0x01, "transmit"}, {"\0", R_NOP, "invalid argument"} }; /* * "misc" subcommands (775) */ struct cmdtable misc[] = { {"ctss", 0x06, "read CTSS"}, {"dcs", 0x07, "read DCS"}, {"dtmf", 0x08, "read DTMF"}, {"id", 0x09, "read ID"}, {"local", 0x01, "local control"}, {"next", 0x0e, "next frequency"}, {"nosearch", 0x10, "disable search"}, {"nospeaker", 0x0b, "mute speaker"}, {"notape", 0x04, "disable tape recorder"}, {"nowindow", 0x0d, "disable search window"}, {"opto", 0x05, "read OPTO"}, {"remote", 0x02, "remote control"}, {"search", 0x0f, "enable search"}, {"speaker", 0x0a, "unmute speaker"}, {"tape", 0x03, "enable tape recorder"}, {"window", 0x0c, "enable search window"}, {"\0", R_NOP, "invalid argument"} }; /* * "agc" subcommands */ struct cmdtable agc[] = { {"fast", M_SET(A,0x01), "agc fast"}, {"medium", M_SET(A,0x02), "agc mid"}, {"slow", M_SET(A,0x03), "agc slow"}, {"\0", R_NOP, "invalid argument"} }; /* * "preamp" subcommands */ struct cmdtable preamp[] = { {"off", 0x00, "preamp off"}, {"1", 0x01, "preamp 1"}, {"2", 0x02, "preamp 2"}, {"\0", R_NOP, "invalid argument"} }; /* * "break" subcommands */ struct cmdtable fmtb[] = { {"full", M_SET(B,0x02), "break full"}, {"off", M_SET(B,0x00), "break off"}, {"semi", M_SET(B,0x01), "break semi"}, {"\0", R_NOP, "invalid argument"}, }; /* * "scan" subcommands */ struct cmdtable scan[] = { {"10", 0xa3, "delta-f 10 kHz"}, {"2.5", 0xa1, "delta-f 2.5 kHz"}, {"20", 0xa4, "delta-f 20 kHz"}, {"5", 0xa2, "delta-f 5 kHz"}, {"50", 0xa5, "delta-f 50 kHz"}, {"autowrite", 0x04, "auto write scan"}, {"deltaf", 0x03, "delta-f scan"}, {"finedeltaf", 0x13, "fine delta-f scan start"}, {"fineprog", 0x12, "fine program scan start"}, {"fix", 0xaa, "fix center frequency"}, {"mem", 0x22, "memory scan start"}, {"memchan", 0xb2, "memory channel scan number"}, {"memnum", 0x23, "select memory scan start"}, {"nofix", 0xa0, "unfix center frequency"}, {"noresume", 0xd1, "scan resume off"}, {"noskip", 0xb1, "select memory channel"}, {"noresume", 0xd0, "scan resume never"}, {"novsc", 0xc0, "VSC off"}, {"priority", 0x42, "priority scan"}, {"prog", 0x02, "program scan"}, {"resume", 0xd3, "scan resume after delay"}, {"resumeb", 0xd2, "scan resume b"}, {"select", 0x24, "selected mode memory scan"}, {"skip", 0xb0, "deselect memory channel"}, {"start", 0x01, "scan start"}, {"stop", 0x00, "scan stop"}, {"vsc", 0xc1, "VSC on"}, {"\0", R_NOP, "invalid argument"} }; /* * "dial" subcommands */ struct cmdtable diala[] = { /* R8500 */ {".01", 0x00, "10 Hz"}, {".05", 0x01, "50 Hz"}, {".1", 0x02, "100 Hz"}, {"1", 0x03, "1 kHz"}, {"2.5", 0x04, "2.5 kHz"}, {"5", 0x05, "5 kHz"}, {"9", 0x06, "9 kHz"}, {"10", 0x07, "10 kHz"}, {"12.5", 0x08, "12.5 kHz"}, {"20", 0x09, "20 kHz"}, {"25", 0x10, "25 kHz"}, {"100", 0x11, "100 kHz"}, {"1000", 0x12, "1 MHz"}, {"*", 0x13, "* kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialb[] = { /* 775 */ {".01", 0x00, "10 Hz"}, {"1", 0x01, "1 kHz"}, {"2", 0x02, "2 kHz"}, {"3", 0x03, "3 kHz"}, {"4", 0x04, "4 kHz"}, {"5", 0x05, "5 kHz"}, {"6", 0x06, "6 kHz"}, {"7", 0x07, "7 kHz"}, {"8", 0x08, "8 kHz"}, {"9", 0x09, "9 kHz"}, {"10", 0x10, "10 kHz"}, {"\0", R_NOP, "invalid argument"} }; struct cmdtable dialc[] = { /* 706G, 756, 7000 */ {".01", 0x00, "10 Hz"}, {".1", 0x01, "100 Hz"}, {"1", 0x02, "1 kHz"}, {"5", 0x03, "5 kHz"}, {"9", 0x04, "9 kHz"}, {"10", 0x05, "10 kHz"}, {"12.5", 0x06, "12.5 kHz"}, {"20", 0x07, "20 kHz"}, {"25", 0x08, "25 kHz"}, {"100", 0x09, "100 kHz"}, {"\0", R_NOP, "invalid argument"} }; /* * bank, restore and save subcommands */ struct cmdtable loadtab[] = { {"atten", C_ATTEN, "set attenuator"}, {"default", C_DEFLT, "set default arguments"}, {"dial", C_DIAL, "set tuning step"}, {"dtcs", C_DTCS, "set digital tone squelch code"}, {"name", C_NAME, "set channel name"}, {"set", C_SWTCH, "set commands"}, {"split", C_SPLIT, "split/duplex commands"}, {"tone", C_TONE, "set repeater tone frequency"}, {"tsql", C_TSQL, "set tone squelch frequency"}, {"\0", C_FREQX, "set VFO frequency/mode"} }; /* * Radio identifier decode */ struct cmdtable identab[] = { {"1271", 0x24, "1271 UHF Transceiver"}, {"1275", 0x18, "1275 UHF Transceiver"}, {"271", 0x20, "271 VHF Transceiver"}, {"275", 0x10, "275 VHF Transceiver"}, {"375", 0x12, "375 VHF Transceiver"}, {"471", 0x22, "471 UHF Transceiver"}, {"475", 0x14, "475 UHF Transceiver"}, {"575", 0x16, "575 VHF Transceiver"}, {"575", 0x28, "725 HF Transceiver"}, {"706", 0x4e, "706 HF Transceiver"}, {"706G", 0x58, "706MKIIG HF Transceiver"}, {"726", 0x30, "726 HF Transceiver"}, {"735", 0x04, "735 HF Transceiver"}, {"746", 0x66, "746 HF Transceiver"}, {"751", 0x1c, "751 HF Transceiver"}, {"756", 0x64, "756 HF Transceiver"}, {"761", 0x1e, "761 HF Transceiver"}, {"765", 0x2c, "765 HF Transceiver"}, {"775", 0x46, "775 HF Transceiver"}, {"781", 0x26, "781 HF Transceiver"}, {"970", 0x2e, "970 HF Transceiver"}, {"7000", 0x70, "7000 HF/VHF/UHF Transceiver"}, {"7800", 0x6a, "7800 HF/VHF/UHF Transceiver"}, {"R7000", 0x08, "R7000 VHF/UHF Receiver"}, {"R71", 0x1A, "R71 HF Receiver"}, {"R7100", 0x34, "R7100 VHF/UHF Receiver"}, {"R72", 0x32, "R72 HF Receiver"}, {"R75", 0x5a, "R75 HF Receiver"}, {"R8500", 0x4a, "R8500 HF/VHF/UHF Receiver"}, {"R9000", 0x2a, "R9000 VHF/UHF Receiver"}, {"probe", 0x00, "Probe all radios"}, {"\0", R_NOP, "unknown radio"} }; /* * Broadband HF/VHF/UHF receiver mode decode (R7000) * * Note that panel FM mode is really wideband FM and panel FMn mode is * really FM mode on other radios. Emptying a channel changes the mode * to 0xff, but does not change the frequency. Reactivate the channel * by loading valid mode. */ static struct cmdtable mode2[] = { {"AM", 0x0002, "AM"}, {"a", 0x0002, "AM (keypad)"}, {"FMn", 0x8205, "FM"}, {"WFM", 0x0005, "WFM"}, {"f", 0x8205, "FM (keypad)"}, {"SSB", 0x8005, "SSB"}, {"s", 0x8005, "SSB (keypad)"}, {"\0", R_NOP, "invalid command"} }; /* * Broadband MF/HF/VHF/UHF receiver mode decode (R8500/R9000) */ static struct cmdtable mode3[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0103, "CW"}, {"k", 0x0103, "CW (keypad)"}, {"CWn", 0x0203, "CW narrow"}, {"FM", 0x0105, "FM"}, {"f", 0x0105, "FM (keypad)"}, {"FMn", 0x0205, "FM narrow"}, {"LSB", 0x0100, "LSB"}, {"l", 0x0100, "LSB (keypad)"}, {"USB", 0x0101, "USB"}, {"u", 0x0101, "USB (keypad)"}, {"WFM", 0x0106, "WFM"}, {"\0", R_NOP, "invalid command"} }; /* * Narrowband MF/HF/VHF/UHF transceiver and receiver mode decode * * The 7000 can do all of these, the 756 all but WFM, the 706g most * except the -R (reverse) modes. */ static struct cmdtable mode1[] = { {"AM", 0x0202, "AM"}, {"a", 0x0202, "AM (keypad)"}, {"AMn", 0x0302, "AM narrow"}, {"AMw", 0x0102, "AM wide"}, {"CW", 0x0203, "CW"}, {"k", 0x0203, "CW (keypad)"}, {"CW-R", 0x0207, "CW reverse"}, {"CW-Rn", 0x0307, "CW reverse narrow"}, {"CW-Rw", 0x0107, "CW reverse wide"}, {"CWn", 0x0303, "CW narrow"}, {"CWw", 0x0103, "CW wide"}, {"FM", 0x0205, "FM"}, {"f", 0x0205, "FM (keypad)"}, {"FMn", 0x0305, "FM narrow"}, {"FMw", 0x0105, "FM wide"}, {"LSB", 0x0200, "LSB"}, {"l", 0x0200, "LSB (keypad)"}, {"LSBn", 0x0300, "LSB narrow"}, {"LSBw", 0x0100, "LSB wide"}, {"RTTY", 0x0204, "RTTY"}, {"RTTY-R", 0x0208, "RTTY reverse"}, {"RTTY-Rn", 0x0308, "RTTY reverse narrow"}, {"RTTY-Rw", 0x0108, "RTTY reverse wide"}, {"RTTYn", 0x0304, "RTTY narrow"}, {"RTTYw", 0x0104, "RTTY wide"}, {"USB", 0x0201, "USB"}, {"u", 0x0201, "USB (keypad)"}, {"USBn", 0x0301, "USB narrow"}, {"USBw", 0x0101, "USB wide"}, {"WFM", 0x0106, "wideband FM"}, {"\0", R_NOP, "invalid command"} }; /* * IC 7000 MF/HF/VHF/UHF transceiver and receiver mode decode */ static struct cmdtable mode4[] = { {"AM", 0x0202, "AM 6.0"}, {"a", 0x0202, "AM 6.0 (keypad)"}, {"AMn", 0x0302, "AM 3.0"}, {"AMw", 0x0102, "AM 9.0"}, {"CW", 0x0203, "CW 500"}, {"k", 0x0203, "CW 500 (keypad)"}, {"CW-R", 0x0207, "CW-R 500"}, {"CW-Rn", 0x0307, "CW-R 250"}, {"CW-Rw", 0x0107, "CW-R 1.2"}, {"CWn", 0x0303, "CW 250"}, {"CWw", 0x0103, "CW 1.2"}, {"FM", 0x0205, "FM 10.0"}, {"f", 0x0205, "FM 10.0 (keypad)"}, {"FMn", 0x0305, "FM 7.0"}, {"FMw", 0x0105, "FM 15.0"}, {"LSB", 0x0200, "LSB 2.4"}, {"l", 0x0200, "LSB 2.4 (keypad)"}, {"LSBn", 0x0100, "LSB 1.8"}, {"LSBw", 0x0300, "LSB 3.0"}, {"RTTY", 0x0204, "RTTY 500"}, {"RTTY-R", 0x0208, "RTTY-R 500"}, {"RTTY-Rn", 0x0308, "RTTY-R 250"}, {"RTTY-Rw", 0x0108, "RTTY-R 2.4"}, {"RTTYn", 0x0304, "RTTY 250"}, {"RTTYw", 0x0104, "RTTY 2.4"}, {"USB", 0x0201, "USB 2.4"}, {"u", 0x0201, "USB 2.4 (keypad)"}, {"USBn", 0x0301, "USB 1.8"}, {"USBw", 0x0101, "USB 3.0"}, {"WFM", 0x0106, "WFM 280.0"}, {"\0", R_NOP, "invalid command"} }; /* * CI-V bit rate control */ struct cmdtable baud[] = { {"300", B300, "300 b/s"}, {"600", B600, "600 b/s"}, {"1200", B1200, "1200 b/s"}, {"2400", B2400, "2400 b/s"}, {"4800", B4800, "4800 b/s"}, {"9600", B9600, "9600 b/s"}, {"19200", B19200, "19200 b/s"}, {"38400", B38400, "38400 b/s"}, {"\0", R_NOP, "invalid argument"} }; /* * Radio control initialization * * model ident ch bk init mode step flag ptr */ struct namestruct name[] = { {"1271", 0x24, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"1275", 0x18, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"271", 0x20, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"275", 0x10, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"375", 0x12, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"471", 0x22, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"475", 0x14, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"575", 0x16, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"706", 0x4e, B9600, 10, 0, dummy, mode1, dummy, 0, NULL}, {"706G", 0x58, B19200,99, 0, dummy, mode1, dialc, 0, NULL}, {"725", 0x28, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"726", 0x30, B1200, 26, 0, dummy, mode1, dummy, 0, NULL}, {"735", 0x04, B1200, 12, 0, dummy, mode1, dummy, F_735, NULL}, {"746", 0x66, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"751", 0x1c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"756", 0x64, B19200,99, 0, ctlc, mode1, dialc, F_756, NULL}, {"761", 0x1e, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"765", 0x2c, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"775", 0x46, B1200, 99, 0, dummy, mode1, dialb, 0, NULL}, {"781", 0x26, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"970", 0x2e, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"7000", 0x70, B19200,99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"7800", 0x6a, B1200, 99, 5, ctlc, mode4, dialc, F_7000, NULL}, {"R7000", 0x08, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R71", 0x1A, B1200, 32, 0, dummy, mode1, dummy, 0, NULL}, {"R7100", 0x34, B1200, 99, 0, dummy, mode2, dummy, 0, NULL}, {"R72", 0x32, B1200, 99, 0, dummy, mode1, dummy, 0, NULL}, {"R75", 0x5a, B19200,99, 0, dummy, mode1, dummy, 0, NULL}, {"R8500", 0x4a, B19200,39, 19, ctlc, mode3, diala, F_8500, NULL}, {"R9000", 0x2a, B1200, 99, 0, dummy, mode3, diala, F_8500, NULL}, {"\0", 0x0, 0, 0, 0, 0, 0, NULL, 0, NULL} }; double logtab[] = { /* tuning rate table */ 1., 2., 5., /* 0.000000 */ 10., 25., 50., /* 0.00000 */ 1e2, 2.5e2, 5e2, /* 0.0000 */ 1e3, 2.5e3, 5e3, /* 0.000 */ 1e4, 2.5e4, 5e4, /* 0.00 */ 1e5, 2.5e5, 5e5, /* 0.0 */ 1e6, 2.5e6, 5e6 /* 0. */ }; int sigtab[] = { /* significant digits table */ 6, 6, 6, /* 0.000000 */ 5, 6, 5, /* 0.00000 */ 4, 5, 4, /* 0.0000 */ 3, 4, 3, /* 0.000 */ 2, 3, 2, /* 0.00 */ 1, 2, 1, /* 0.0 */ 0, 0, 0 /* 0. */ }; struct metertab mtab[] = { {0, "S0"}, /* 0.4-1.3 uv */ {12, "S1"}, {32, "S2"}, {46, "S3"}, /* 0.79-2.0 uV */ {64, "S4"}, {78, "S5"}, /* 3.2 uV */ {94, "S6"}, {110, "S7"}, /* 13 uV */ {126, "S8"}, {140, "S9"}, /* 50 uV */ {156, "S9+10"}, {174, "S9+20"}, /* 0.5 mv */ {190, "S9+30"}, {208, "S9+40"}, /* 5 mv */ {230, "S9+50"}, {999, "S9+60"} /* 50 mV */ }; icom-20120228/RAD_R.DOC0000744000175000017500000000122010054016660013105 0ustar colincolin# Radio # 20 1150 mode AMw # name WDEL-AM # + 1260 mode AMw name WNRK-AM # Newark + 1290 mode AMw name WJBR-AM # Wilmington + 1450 mode AMw name WILM-AM # + 1550 mode AMw name WSER-AM # # + 5975 mode AMw name BBC # London + 7325 mode AMw name BBC # London + 12095 mode AMw name BBC # London + 15070 mode AMw name BBC # London # + 2500 mode USB name WWV # Ft. Collins + 5000 mode USB name WWV # Ft. Collins + 10000 mode USB name WWV # Ft. Collins + 15000 mode USB name WWV # Ft. Collins + 20000 mode USB name WWV # Ft. Collins # + 3330 mode USB name CHU # Ottawa + 7335 mode USB name CHU # Ottawa + 14670 mode USB name CHU # Ottawa icom-20120228/r8500_dump0000644000175000017500000005724410410642516013436 0ustar colincolin 0.0 19.51000 MHz USB name "Portis" 0.1 20.06500 MHz USB name "Portis" 0.2 21.76500 MHz USB name "Portis" 0.3 5.55000 MHz USB name "CAR A" 0.4 6.57700 MHz USB name "CAR A" 0.5 6.58600 MHz USB name "CAR B" 0.6 8.84600 MHz USB name "CAR B" 0.7 8.91800 MHz USB name "CAR A" 0.8 11.33000 MHz USB name "CAR B" 0.9 11.38700 MHz USB name "CAR B" 0.10 2.88700 MHz USB name "CAR A" 0.11 13.29700 MHz USB name "CAR A" 0.12 17.90700 MHz USB name "CAR A/B" 0.13 2.86200 MHz USB name "NAT C" 0.14 2.89900 MHz USB name "NAT B" 0.15 2.96200 MHz USB name "NAT E" 0.16 2.97100 MHz USB name "NAT D" 0.17 3.01600 MHz USB name "NAT A" 0.18 3.47600 MHz USB name "NAT F" 0.19 4.67500 MHz USB name "NAT D" 0.20 5.59800 MHz USB name "NAT A" 0.21 5.61600 MHz USB name "NAT B" 0.22 5.64900 MHz USB name "NAT C" 0.23 6.62200 MHz USB name "NAT F" 0.24 6.62800 MHz USB name "NAT E" 0.25 8.82500 MHz USB name "NAT E" 0.26 8.83100 MHz USB name "NAT F" 0.27 8.86400 MHz USB name "NAT B" 0.28 8.87900 MHz USB name "NAT C" 0.29 8.89100 MHz USB name "NAT D" 0.30 8.90600 MHz USB name "NAT A" 0.31 11.27900 MHz USB name "NAT D" 0.32 11.30900 MHz USB name "NAT E" 0.33 13.29100 MHz USB name "NAT B/D" 0.34 3.40000 MHz USB 0.35 13.35400 MHz USB name "NAT E" 0.36 17.94600 MHz USB name "NAT A-D" 0.37 2.86300 MHz USB name "VOL PAC" 0.38 3.41300 MHz USB name "VOL EU" 0.39 3.48500 MHz USB name "VOL NAT" 1.0 5.50500 MHz USB name "VOL EU" 1.1 6.60400 MHz USB name "VOL NAT" 1.2 6.67900 MHz USB name "VOL PAC" 1.3 8.82800 MHz USB name "VOL PAC" 1.4 8.95700 MHz USB name "VOL EU" 1.5 10.05100 MHz USB name "VOL NAT" 1.6 13.26400 MHz USB name "VOL EU" 1.7 13.27000 MHz USB name "VOL NAT" 1.8 13.28200 MHz USB name "VOL PAC" 1.9 10.04800 MHz USB name "NP" 1.10 13.29400 MHz USB name "NP" 1.11 17.90400 MHz USB name "NP" 1.12 17.94600 MHz USB name "NP" 1.13 21.92500 MHz USB name "NP" 1.14 3.46700 MHz USB name "SP" 1.15 5.64300 MHz USB name "SP" 1.16 5.66700 MHz USB name "SP" 1.17 8.86700 MHz USB name "SP" 1.18 13.27300 MHz USB name "SP" 1.19 17.90400 MHz USB name "SP" 1.20 3.47900 MHz USB name "EUR-A" 1.21 5.66100 MHz USB name "EUR-A" 1.22 6.59800 MHz USB name "EUR-A" 1.23 10.08400 MHz USB name "EUR-A" 1.24 13.28800 MHz USB name "EUR-A" 1.25 17.96100 MHz USB name "EUR-A" 1.26 2.99200 MHz USB name "MID-1" 1.27 4.66900 MHz USB name "MID-1" 1.28 6.63100 MHz USB name "MID-1" 1.29 8.95100 MHz USB name "MID-1" 1.30 11.37500 MHz USB name "MID-1" 1.31 17.96100 MHz USB name "MID-1" 1.32 2.94400 MHz USB name "MID-3" 1.33 4.66900 MHz USB name "MID-3" 1.34 3.50000 MHz USB name "MID-3" 1.35 8.95100 MHz USB name "MID-3" 1.36 11.37500 MHz USB name "MID-3" 1.37 17.96100 MHz USB name "MID-3" 1.38 3.01900 MHz USB name "NCA-1" 1.39 5.64600 MHz USB name "NCA-1" 2.0 13.31500 MHz USB name "NCA-1" 2.1 17.95800 MHz USB name "NCA-1" 2.2 2.85100 MHz USB name "NCA-2" 2.3 4.67800 MHz USB name "NCA-2" 2.4 6.59200 MHz USB name "NCA-2" 2.5 10.09600 MHz USB name "NCA-2" 2.6 17.95800 MHz USB name "NCA-2" 2.7 3.00400 MHz USB name "NCA-3" 2.8 5.66400 MHz USB name "NCA-3" 2.9 10.03900 MHz USB name "NCA-3" 2.10 13.30300 MHz USB name "NCA-3" 2.11 17.95800 MHz USB name "NCA-3" 2.12 3.01600 MHz USB name "NAT-A" 2.13 5.59800 MHz USB name "NAT-A" 2.14 8.90600 MHz USB name "NAT-A" 2.15 13.30600 MHz USB name "NAT-A" 2.16 17.94600 MHz USB name "NAT-A" 2.17 2.89900 MHz USB name "NAT-B" 2.18 5.61600 MHz USB name "NAT-B" 2.19 8.86400 MHz USB name "NAT-B" 2.20 13.29100 MHz USB name "NAT-B" 2.21 17.94600 MHz USB name "NAT-B" 2.22 2.86200 MHz USB name "NAT-C" 2.23 5.64900 MHz USB name "NAT-C" 2.24 8.87900 MHz USB name "NAT-C" 2.25 13.30600 MHz USB name "NAT-C" 2.26 17.94600 MHz USB name "NAT-C" 2.27 2.97100 MHz USB name "NAT-D" 2.28 4.67500 MHz USB name "NAT-D" 2.29 8.89100 MHz USB name "NAT-D" 2.30 11.27900 MHz USB name "NAT-D" 2.31 13.29100 MHz USB name "NAT-D" 2.32 17.94600 MHz USB name "NAT-D" 2.33 2.96200 MHz USB name "NAT-E" 2.34 6.62800 MHz USB name "NAT-E" 2.35 8.82500 MHz USB name "NAT-E" 2.36 11.30900 MHz USB name "NAT-E" 2.37 13.35400 MHz USB name "NAT-E" 2.38 3.47600 MHz USB name "NAT-F" 2.39 6.62200 MHz USB name "NAT-F" 3.0 8.83100 MHz USB name "NAT-F" 3.1 2.88700 MHz USB name "CAR-A" 3.2 5.55000 MHz USB name "DGWGDGWG" 3.3 6.57700 MHz USB name "CAR-A" 3.4 8.91800 MHz USB name "CAR-A" 3.5 11.39600 MHz USB name "CAR-A" 3.6 13.29700 MHz USB name "CAR-A" 3.7 17.90700 MHz USB name "CAR-A" 3.8 3.45500 MHz USB name "CAR-B" 3.9 5.52000 MHz USB name "CAR-B" 3.10 6.58600 MHz USB name "CAR-B" 3.11 8.84600 MHz USB name "CAR-B" 3.12 11.33000 MHz USB name "CAR-B" 3.13 11.38700 MHz USB name "CAR-B" 3.14 17.90700 MHz USB name "CAR-B" 3.15 3.47900 MHz USB name "E_SAM" 3.16 5.52600 MHz USB name "E_SAM" 3.17 8.85500 MHz USB name "E_SAM" 3.18 10.09600 MHz USB name "E_SAM" 3.19 13.29700 MHz USB name "E_SAM" 3.20 17.90700 MHz USB name "E_SAM" 3.21 2.94400 MHz USB name "W_SAM" 3.22 4.66900 MHz USB name "W_SAM" 3.23 6.54900 MHz USB name "W_SAM" 3.24 10.02400 MHz USB name "W_SAM" 3.25 11.36000 MHz USB name "W_SAM" 3.26 17.90700 MHz USB name "W_SAM" 3.27 2.85400 MHz USB name "SAT-2" 3.28 5.56500 MHz USB name "SAT-2" 3.29 11.29100 MHz USB name "SAT-2" 3.30 13.31500 MHz USB name "SAT-2" 3.31 17.95500 MHz USB name "SAT-2" 3.32 3.01600 MHz USB name "EA-1" 3.33 6.57100 MHz USB name "EA-1" 3.34 8.89700 MHz USB name "EA-1" 3.35 10.04200 MHz USB name "EA-1" 3.36 17.95800 MHz USB name "EA-1" 3.37 3.47000 MHz USB name "SEA-1/3" 3.38 6.55600 MHz USB name "SEA-1/3" 3.39 3.45500 MHz USB name "CAR B" 4.0 11.39600 MHz USB name "SEA-1/3" 4.1 13.31800 MHz USB name "SEA-1/3" 4.2 17.90700 MHz USB name "SEA-1/3" 4.3 3.48500 MHz USB name "SEA/EA" 4.4 5.64900 MHz USB name "SEA/EA" 4.5 5.65500 MHz USB name "SEA/EA" 4.6 8.94200 MHz USB name "SEA/EA" 4.7 11.39600 MHz USB name "SEA/EA" 4.8 13.30900 MHz USB name "SEA/EA" 4.9 17.90700 MHz USB name "SEA/EA" 4.10 3.48500 MHz USB name "MET-NAT" 4.11 6.60400 MHz USB name "MET-NAT" 4.12 10.05100 MHz USB name "MET-NAT" 4.13 13.27000 MHz USB name "MET-NAT" 4.14 3.41300 MHz USB name "MET-EU" 4.15 5.50500 MHz USB name "MET-EU" 4.16 8.95700 MHz USB name "MET-EU" 4.17 13.26400 MHz USB name "MET-EU" 4.18 2.86300 MHz USB name "MET-PAC" 4.19 6.67900 MHz USB name "MET-PAC" 4.20 8.82800 MHz USB name "MET-PAC" 4.21 13.28200 MHz USB name "MET-PAC" 4.22 5.52900 MHz USB name "Houston" 4.23 6.63700 MHz USB name "Houston" 4.24 10.07500 MHz USB name "Houston" 4.25 11.34200 MHz USB name "Houston" 4.26 13.33000 MHz USB name "Houston" 4.27 17.94000 MHz USB name "Houston" 4.28 3.01300 MHz USB name "Honolulu" 4.29 6.64000 MHz USB name "Honolulu" 4.30 10.03300 MHz USB name "Honolulu" 4.31 11.34200 MHz USB name "Honolulu" 4.32 13.34800 MHz USB name "Honolulu" 4.33 13.35400 MHz USB name "Honolulu" 4.34 17.92500 MHz USB name "Honolulu" 4.35 21.96400 MHz USB name "Honolulu" 4.36 3.49400 MHz USB name "New_York" 4.37 6.52600 MHz USB name "New_York" 4.38 6.64000 MHz USB name "New_York" 4.39 11.34200 MHz USB name "New_York" 5.0 6.57700 MHz USB name "6.57700" 5.1 11.33000 MHz USB name "xxx" 5.2 11.33000 MHz USB name "yyy" 5.3 8.91800 MHz USB 5.4 8.84600 MHz USB 5.5 6.58600 MHz USB 5.6 6.57700 MHz USB 5.7 5.55000 MHz USB 5.8 5.52000 MHz USB 5.9 3.45500 MHz USB 5.10 6.57700 MHz USB 5.11 6.57700 MHz USB 5.12 4.55000 MHz USB name "Gulf_Mex" 5.13 6.82000 MHz USB name "Gulf_Mex" 5.14 8.07000 MHz USB name "Gulf_Mex" 5.15 13.35400 MHz USB name "Gulf_Mex" 5.16 3.48500 MHz USB name "St_Johns" 5.17 5.60400 MHz USB name "St_Johns" 5.18 8.81900 MHz USB name "St_Johns" 5.19 2.88700 MHz USB name "CAR A" 5.20 13.42000 MHz USB name "St_Johns" 5.21 17.91000 MHz USB name "St_Johns" 5.22 3.01000 MHz USB name "Berne" 5.23 4.65400 MHz USB name "Berne" 5.24 4.67000 MHz USB name "Berne" 5.25 4.70200 MHz USB name "Berne" 5.26 6.52600 MHz USB name "Berne" 5.27 6.64300 MHz USB name "Berne" 5.28 6.70500 MHz USB name "Berne" 5.29 6.74200 MHz USB name "Berne" 5.30 8.93600 MHz USB name "Berne" 5.31 9.21100 MHz USB name "Berne" 5.32 10.06900 MHz USB name "Berne" 5.33 13.30000 MHz USB name "CWP-1/2" 5.37 15.05000 MHz USB name "Berne" 5.38 15.83500 MHz USB name "Berne" 6.0 18.02300 MHz USB name "Berne" 6.1 18.48000 MHz USB name "Berne" 6.2 19.55400 MHz USB name "Berne" 6.3 20.03500 MHz USB name "Berne" 6.4 20.87000 MHz USB name "Berne" 6.5 21.93300 MHz USB name "Berne" 6.6 21.98800 MHz USB name "Berne" 6.7 23.28500 MHz USB name "Berne" 6.8 25.50000 MHz USB name "Berne" 6.9 3.48200 MHz USB name "London" 6.10 4.80700 MHz USB name "London" 6.11 5.61000 MHz USB name "London" 6.12 6.63400 MHz USB name "London" 6.13 8.17000 MHz USB name "London" 6.14 8.96000 MHz USB name "London" 6.15 10.29100 MHz USB name "London" 6.16 11.30600 MHz USB name "London" 6.17 12.13300 MHz USB name "London" 6.18 13.86500 MHz USB name "London" 6.19 14.89000 MHz USB name "London" 6.20 17.40500 MHz USB name "London" 6.21 19.51000 MHz USB name "London" 6.22 2.50000 MHz AM name "WWV2" 6.23 5.00000 MHz AM name "WWV5" 6.24 10.00000 MHz AM name "WWV10" 6.25 15.00000 MHz AM name "WWV15" 6.26 20.00000 MHz AM name "WWV20" 6.27 3.33000 MHz AM name "CHU3" 6.28 7.33500 MHz AM name "CHU5" 6.29 14.67000 MHz AM name "CHU14" 6.30 0.66000 MHz AM name "WFAN" 6.31 0.80000 MHz AM name "NONAME" 6.32 0.83000 MHz AM name "NONAME" 6.33 0.88000 MHz AM name "NONAME" 6.34 0.95000 MHz AM name "WPEN" 6.35 1.03000 MHz AM name "WBZ" 6.36 1.06000 MHz AM name "KYW" 6.37 1.09000 MHz AM name "WBAL" 6.38 1.10000 MHz AM name "NONAME" 6.39 1.11000 MHz AM name "NONAME" 7.0 1.15000 MHz AM name "WDEL" 7.1 1.17000 MHz AM name "NONAME" 7.2 1.21000 MHz AM name "WPHT" 7.3 1.26000 MHz AM name "WNRK" 7.4 1.29000 MHz AM name "WJBR" 7.5 1.33000 MHz AM name "NONAME" 7.6 1.38000 MHz AM name "WTMC" 7.7 1.45000 MHz AM name "WILM" 7.8 1.51000 MHz AM name "NONAME" 7.9 1.55000 MHz AM name "WSER" 7.10 90.90000 MHz WFM name "NONAME" 7.11 91.30000 MHz WFM name "WVUD" 7.12 93.70000 MHz WFM name "WSTW" 7.13 94.10000 MHz WFM name "NONAME" 7.14 94.70000 MHz WFM name "NONAME" 7.15 95.70000 MHz WFM name "NONAME" 7.16 99.50000 MHz WFM name "WJBR" 7.17 103.70000 MHz WFM name "WXCY" 7.18 107.70000 MHz WFM name "NONAME" 7.19 493.75000 MHz WFM name "C17" 7.20 523.75000 MHz WFM name "C22" 7.21 529.75000 MHz WFM name "C23" 7.22 679.75000 MHz WFM name "C48" 7.23 757.75000 MHz WFM name "C61" 7.24 781.75000 MHz WFM name "C65" 7.25 565.75000 MHz WFM name "C29" 7.26 649.75000 MHz WFM name "C43" 7.27 661.75000 MHz WFM name "C45" 7.28 733.75000 MHz WFM name "C57" 7.29 59.75000 MHz WFM name "C2" 7.30 197.75000 MHz WFM name "C10" 7.31 203.75000 MHz WFM name "C11" 7.32 209.75000 MHz WFM name "C12" 7.33 215.75000 MHz WFM name "C13" 7.34 493.75000 MHz WFM name "C17" 7.35 523.75000 MHz WFM name "C22" 7.36 529.75000 MHz WFM name "C23" 7.37 679.75000 MHz WFM name "C48" 7.38 757.75000 MHz WFM name "C61" 7.39 781.75000 MHz WFM name "C65" 8.0 1.15000 MHz AM name "WDEL-AM" 8.1 1.21000 MHz AM name "AM" 8.2 1.26000 MHz AM name "WNRK-AM" 8.3 1.29000 MHz AM name "WJBR-AM" 8.4 1.33000 MHz AM name "AM" 8.5 1.38000 MHz AM name "AM" 8.6 1.45000 MHz AM name "WILM-AM" 8.7 1.51000 MHz AM name "AM" 8.8 1.55000 MHz AM name "WSER-AM" 8.9 1.59000 MHz AM name "AM" 8.10 89.90000 MHz WFM name "FM" 8.11 91.30000 MHz WFM name "WVUD-FM" 8.12 93.70000 MHz WFM name "WSTW-FM" 8.13 94.70000 MHz WFM name "FM" 8.14 97.90000 MHz WFM name "FM" 8.15 98.10000 MHz WFM name "FM" 8.16 98.90000 MHz WFM name "FM" 8.17 99.50000 MHz WFM name "WJBR-FM" 8.18 101.10000 MHz WFM name "FM" 8.19 102.90000 MHz WFM name "FM" 8.20 103.50000 MHz WFM name "WJYN-FM" 8.21 103.70000 MHz WFM name "WXCY-FM" 8.22 104.30000 MHz WFM name "FM" 8.23 104.50000 MHz WFM name "FM" 8.24 105.30000 MHz WFM name "FM" 8.25 105.70000 MHz WFM name "FM" 8.26 945.40000 MHz WFM name "FM" 8.27 5.97500 MHz AM name "BBC" 8.28 7.32500 MHz AM name "BBC" 8.29 12.09500 MHz AM name "BBC" 8.30 15.07000 MHz AM name "BBC" 8.31 2.50000 MHz AM name "WWV" 8.32 5.00000 MHz AM name "WWV" 8.33 10.00000 MHz AM name "WWV" 8.34 15.00000 MHz AM name "WWV" 8.35 20.00000 MHz AM name "WWV" 8.36 3.33000 MHz USB name "CHU" 8.37 7.33500 MHz USB name "CHU" 8.38 14.67000 MHz USB name "CHU" 9.0 59.75000 MHz WFM name "TV-2" 9.1 65.75000 MHz WFM name "CBS-3" 9.2 71.75000 MHz WFM name "FOX-4" 9.3 81.75000 MHz WFM name "TV-5" 9.4 87.75000 MHz WFM name "ABC-6" 9.5 179.75000 MHz WFM name "WB-7" 9.6 185.75000 MHz WFM name "CN-8" 9.7 191.75000 MHz WFM name "TV-9" 9.8 197.75000 MHz WFM name "NBC-10" 9.9 203.75000 MHz WFM name "PBS-11" 9.10 209.75000 MHz WFM name "PBS-12" 9.11 215.75000 MHz WFM name "TV-13" 9.12 493.75000 MHz WFM name "WB-17" 9.13 523.75000 MHz WFM name "TV-22" 9.14 529.75000 MHz WFM name "WNJS-23" 9.15 565.75000 MHz WFM name "WTXF-29" 9.16 601.75000 MHz WFM name "WYBE-35" 9.17 679.75000 MHz WFM name "WGTW-48" 9.18 733.75000 MHz WFM name "WPSG-57" 9.19 757.75000 MHz WFM name "WPPX-61" 9.20 781.75000 MHz WFM name "TV-65" 10.0 0.66000 MHz AM 10.1 0.80000 MHz AM 10.2 0.83000 MHz AM 10.3 0.88000 MHz AM 10.4 0.95000 MHz AM 10.5 1.03000 MHz AM 10.6 1.06000 MHz AM 10.7 1.09000 MHz AM 10.8 1.10000 MHz AM 10.9 1.11000 MHz AM 10.10 99.50000 MHz WFM 10.11 1.17000 MHz AM 10.12 1.21000 MHz AM 10.13 1.26000 MHz AM 10.14 1.29000 MHz AM 10.15 1.33000 MHz AM 10.16 1.38000 MHz AM 10.17 1.45000 MHz AM 10.18 1.51000 MHz AM 10.19 1.55000 MHz AM 10.20 89.90000 MHz WFM 10.21 91.30000 MHz WFM 10.22 93.70000 MHz WFM 10.23 94.10000 MHz WFM 10.24 94.70000 MHz WFM 10.25 95.70000 MHz WFM 10.26 99.50000 MHz WFM 10.27 103.70000 MHz WFM 10.28 107.70000 MHz WFM 11.0 59.75000 MHz WFM 11.1 197.75000 MHz WFM 11.2 203.75000 MHz WFM 11.3 52.85000 MHz FM 11.4 215.75000 MHz WFM 11.5 493.75000 MHz WFM 11.6 523.75000 MHz WFM 11.7 529.75000 MHz WFM 11.8 679.75000 MHz WFM 11.9 757.75000 MHz WFM 11.10 781.75000 MHz WFM 11.11 565.75000 MHz WFM 11.12 649.75000 MHz WFM 11.13 661.75000 MHz WFM 11.14 733.75000 MHz WFM 12.1 3.45200 MHz USB name "AFI/SAT" 12.2 6.53500 MHz USB name "AFI/SAT" 12.3 8.86100 MHz USB name "AFI/SAT" 12.4 13.35700 MHz USB name "AFI/SAT" 12.5 17.95500 MHz USB name "AFI/SAT" 12.6 3.41900 MHz USB name "AFI 2" 12.7 5.65200 MHz USB name "AFI 2" 12.8 8.89400 MHz USB name "AFI 2" 12.9 13.27300 MHz USB name "AFI 2" 12.10 17.96100 MHz USB name "AFI 2" 12.11 3.46700 MHz USB name "AFI/MID" 12.12 5.65800 MHz USB name "AFI/MID" 12.13 10.01800 MHz USB name "AFI/MID" 12.14 11.30000 MHz USB name "AFI/MID" 12.15 13.28800 MHz USB name "AFI/MID" 12.16 17.96100 MHz USB name "AFI/MID" 12.17 2.87800 MHz USB name "AFI 4" 12.18 5.49300 MHz USB name "AFI 4" 12.19 8.90300 MHz USB name "AFI 4" 12.20 13.29400 MHz USB name "AFI 4" 12.21 17.96100 MHz USB name "AFI 4" 12.22 3.47600 MHz USB name "AFI/INO" 12.23 5.63400 MHz USB name "AFI/INO" 12.24 8.87900 MHz USB name "AFI/INO" 12.25 13.30600 MHz USB name "AFI/INO" 12.26 17.96100 MHz USB name "AFI/INO" 13.0 2.88700 MHz USB name "CAR A" 13.1 3.45500 MHz USB name "CAR B" 13.2 5.52000 MHz USB name "CAR B" 13.3 5.55000 MHz USB name "CAR A" 13.4 6.57700 MHz USB name "CAR A" 13.5 6.58600 MHz USB name "CAR B" 13.6 8.84600 MHz USB name "CAR B" 13.7 8.91800 MHz USB name "CAR A" 13.8 11.33000 MHz USB name "CAR B" 13.9 11.38700 MHz USB name "CAR B" 13.10 11.39600 MHz USB name "CAR A" 13.11 13.29700 MHz USB name "CAR A" 13.12 17.90700 MHz USB name "CAR A/B" 13.13 3.48500 MHz USB name "VOLM NAT" 13.14 6.60400 MHz USB name "VOLM NAT" 13.15 10.05100 MHz USB name "VOLM NAT" 13.16 13.27000 MHz USB name "VOLM NAT" 13.17 3.41300 MHz USB name "VOLM EU" 13.18 5.50500 MHz USB name "VOLM EU" 13.19 8.95700 MHz USB name "VOLM EU" 13.20 13.26400 MHz USB name "VOLM EU" 13.21 2.86300 MHz USB name "VOLM PAC" 13.22 6.67900 MHz USB name "VOLM PAC" 13.23 8.82800 MHz USB name "VOLM PAC" 13.24 13.28200 MHz USB name "VOLM PAC" 13.25 5.45000 MHz USB name "VOLM ME" 13.26 3.47900 MHz USB name "E SAM" 13.27 5.52600 MHz USB name "E SAM" 13.28 8.85500 MHz USB name "E SAM" 13.29 10.09600 MHz USB name "E SAM" 13.30 13.29700 MHz USB name "E SAM" 13.31 17.90700 MHz USB name "E SAM" 13.32 2.94400 MHz USB name "W SAM" 13.33 4.66900 MHz USB name "W SAM" 13.34 6.54900 MHz USB name "W SAM" 13.35 10.02400 MHz USB name "W SAM" 13.36 11.36000 MHz USB name "W SAM" 13.37 17.90700 MHz USB name "W SAM" 14.0 3.01600 MHz USB name "NAT A" 14.1 5.59800 MHz USB name "NAT A" 14.2 8.90600 MHz USB name "NAT A" 14.3 13.30600 MHz USB name "NAT A" 14.4 17.94600 MHz USB name "NAT A" 14.5 2.89900 MHz USB name "NAT B" 14.6 5.61600 MHz USB name "NAT B" 14.7 8.86400 MHz USB name "NAT B" 14.8 13.29100 MHz USB name "NAT B" 14.9 17.94600 MHz USB name "NAT B" 14.10 2.86200 MHz USB name "NAT C" 14.11 5.64900 MHz USB name "NAT C" 14.12 8.87900 MHz USB name "NAT C" 14.13 13.30600 MHz USB name "NAT C" 14.14 17.94600 MHz USB name "NAT C" 14.15 2.97100 MHz USB name "NAT D" 14.16 4.67500 MHz USB name "NAT D" 14.17 8.89100 MHz USB name "NAT D" 14.18 11.27900 MHz USB name "NAT D" 14.19 13.29100 MHz USB name "NAT D" 14.20 17.94600 MHz USB name "NAT D" 14.21 2.96200 MHz USB name "NAT E" 14.22 6.62800 MHz USB name "NAT E" 14.23 8.82500 MHz USB name "NAT E" 14.24 11.30900 MHz USB name "NAT E" 14.25 13.35400 MHz USB name "NAT E" 14.26 3.47600 MHz USB name "NAT F" 14.27 6.62200 MHz USB name "NAT F" 14.28 8.83100 MHz USB name "NAT F" 14.29 5.66400 MHz USB name "NCA 3" 14.30 10.03900 MHz USB name "NCA 3" 14.31 13.30300 MHz USB name "NCA 3" 14.32 17.95800 MHz USB name "NCA 3" 15.0 2.86900 MHz USB name "CEP" 15.1 3.41300 MHz USB name "CEP" 15.2 5.54700 MHz USB name "CEP" 15.3 5.57400 MHz USB name "CEP" 15.4 8.84300 MHz USB name "CEP" 15.5 11.28200 MHz USB name "CEP" 15.6 13.26100 MHz USB name "CEP" 15.7 13.35400 MHz USB name "CEP" 15.8 17.90400 MHz USB name "CEP" 15.9 2.99800 MHz USB name "CWP" 15.10 4.66600 MHz USB name "CWP" 15.11 6.53200 MHz USB name "CWP" 15.12 6.56200 MHz USB name "CWP" 15.13 8.90300 MHz USB name "CWP" 15.14 11.38400 MHz USB name "CWP" 15.15 13.30000 MHz USB name "CWP" 15.16 17.90400 MHz USB name "CWP" 15.17 21.98500 MHz USB name "CWP" 15.18 2.93200 MHz USB name "NP" 15.19 5.62800 MHz USB name "NP" 15.20 5.66700 MHz USB name "NP" 15.21 6.66500 MHz USB name "NP" 15.22 8.91500 MHz USB name "NP" 15.23 10.04800 MHz USB name "NP" 15.24 13.29400 MHz USB name "NP" 15.25 17.90400 MHz USB name "NP" 15.26 17.94600 MHz USB name "NP" 15.27 21.92500 MHz USB name "NP" 15.28 3.46700 MHz USB name "SP" 15.29 5.64300 MHz USB name "SP" 15.30 5.66700 MHz USB name "SP" 15.31 8.86700 MHz USB name "SP" 15.32 13.27300 MHz USB name "SP" 15.33 17.90400 MHz USB name "SP" 15.34 28.15000 MHz CW name "CW" 15.35 28.30000 MHz USB name "PHONE" 15.36 50.00000 MHz CW name "CW" 15.37 50.10000 MHz USB name "PHONE" 15.38 144.00000 MHz CW name "CW" 15.39 144.10000 MHz USB name "PHONE" 16.0 2.85400 MHz USB name "SAT 2" 16.1 5.56500 MHz USB name "SAT 2" 16.2 11.29100 MHz USB name "SAT 2" 16.3 13.31500 MHz USB name "SAT 2" 16.4 17.95500 MHz USB name "SAT 2" 16.5 3.45200 MHz USB name "AFI/SAT" 16.6 6.53500 MHz USB name "AFI/SAT" 16.7 8.86100 MHz USB name "AFI/SAT" 16.8 13.35700 MHz USB name "AFI/SAT" 16.9 17.95500 MHz USB name "AFI/SAT" 16.10 3.41900 MHz USB name "AFI 2" 16.11 5.65200 MHz USB name "AFI 2" 16.12 8.89400 MHz USB name "AFI 2" 16.13 13.27300 MHz USB name "AFI 2" 16.14 17.96100 MHz USB name "AFI 2" 16.15 3.46700 MHz USB name "AFI/MID" 16.16 5.65800 MHz USB name "AFI/MID" 16.17 10.01800 MHz USB name "AFI/MID" 16.18 11.30000 MHz USB name "AFI/MID" 16.19 13.28800 MHz USB name "AFI/MID" 16.20 17.96100 MHz USB name "AFI/MID" 16.21 2.87800 MHz USB name "AFI 4" 16.22 5.49300 MHz USB name "AFI 4" 16.23 8.90300 MHz USB name "AFI 4" 16.24 13.29400 MHz USB name "AFI 4" 16.25 17.96100 MHz USB name "AFI 4" 16.26 3.47600 MHz USB name "AFI/INO" 16.27 5.63400 MHz USB name "AFI/INO" 16.28 8.87900 MHz USB name "AFI/INO" 16.29 13.30600 MHz USB name "AFI/INO" 16.30 17.96100 MHz USB name "AFI/INO" 16.31 17.95500 MHz USB name "SAT 2" 17.0 3.47900 MHz USB name "EUR A" 17.1 5.66100 MHz USB name "EUR A" 17.2 6.59800 MHz USB name "EUR A" 17.3 10.08400 MHz USB name "EUR A" 17.4 13.28800 MHz USB name "EUR A" 17.5 17.96100 MHz USB name "EUR A" 17.6 2.99200 MHz USB name "MID 1" 17.7 4.66900 MHz USB name "MID 1" 17.8 6.63100 MHz USB name "MID 1" 17.9 8.95100 MHz USB name "MID 1" 17.10 11.37500 MHz USB name "MID 1" 17.11 17.96100 MHz USB name "MID 1" 17.12 2.94400 MHz USB name "MID 3" 17.13 4.66900 MHz USB name "MID 3" 17.14 6.63100 MHz USB name "MID 3" 17.15 8.95100 MHz USB name "MID 3" 17.16 11.37500 MHz USB name "MID 3" 17.17 17.96100 MHz USB name "MID 3" 17.18 3.01900 MHz USB name "NCA 1" 17.19 5.64600 MHz USB name "NCA 1" 17.20 13.31500 MHz USB name "NCA 1" 17.21 17.95800 MHz USB name "NCA 1" 17.22 2.85100 MHz USB name "NCA 2" 17.23 4.67800 MHz USB name "NCA 2" 17.24 6.59200 MHz USB name "NCA 2" 17.25 10.09600 MHz USB name "NCA 2" 17.26 17.95800 MHz USB name "NCA 2" 17.27 3.00400 MHz USB name "NCA 3" 17.28 5.66400 MHz USB name "NCA 3" 17.29 10.03900 MHz USB name "NCA 3" 17.30 13.30300 MHz USB name "NCA 3" 17.31 17.95800 MHz USB name "NCA 3" 18.0 3.01600 MHz USB name "EA 1" 18.1 6.57100 MHz USB name "EA 1" 18.2 8.89700 MHz USB name "EA 1" 18.3 10.04200 MHz USB name "EA 1" 18.4 17.95800 MHz USB name "EA 1" 18.5 3.47000 MHz USB name "SEA 1/3" 18.6 6.55600 MHz USB name "SEA 1/3" 18.7 10.06600 MHz USB name "SEA 1/3" 18.8 11.39600 MHz USB name "SEA 1/3" 18.9 13.31800 MHz USB name "SEA 1/3" 18.10 17.90700 MHz USB name "SEA 1/3" 18.11 3.48500 MHz USB name "SEA/EA" 18.12 5.64900 MHz USB name "SEA/EA" 18.13 5.65500 MHz USB name "SEA/EA" 18.14 8.94200 MHz USB name "SEA/EA" 18.15 11.39600 MHz USB name "SEA/EA" 18.16 13.30900 MHz USB name "SEA/EA" 18.17 17.90700 MHz USB name "SEA/EA" 18.18 6.64000 MHz USB name "New York" 18.19 11.34200 MHz USB name "New York" 18.20 13.33000 MHz USB name "New York" 18.21 13.35400 MHz USB name "New York" 18.22 17.92500 MHz USB name "New York" 18.23 21.96400 MHz USB name "New York" 18.24 3.01300 MHz USB name "San Fran" 18.25 3.41300 MHz USB name "San Fran" 18.26 6.64000 MHz USB name "San Fran" 18.27 8.84300 MHz USB name "San Fran" 18.28 11.34200 MHz USB name "San Fran" 18.29 13.30000 MHz USB name "San Fran" 18.30 13.34800 MHz USB name "San Fran" 18.31 13.35400 MHz USB name "San Fran" 18.32 17.92500 MHz USB name "San Fran" 18.33 21.96400 MHz USB name "San Fran" 18.34 4.55000 MHz USB name "Gulf Mex" 18.35 6.82000 MHz USB name "Gulf Mex" 18.36 8.07000 MHz USB name "Gulf Mex" 18.37 13.35400 MHz USB name "Gulf Mex" 18.38 3.48500 MHz USB name "St Johns" 18.39 5.60400 MHz USB name "St Johns" 19.0 3.01000 MHz USB name "Berne" 19.1 3.01300 MHz USB name "San Fran" 19.2 3.48200 MHz USB name "Portis" 19.3 3.48500 MHz USB name "St Johns" 19.4 3.49400 MHz USB name "New York" 19.5 4.65400 MHz USB name "Berne" 19.6 4.67000 MHz USB name "Berne" 19.7 5.52900 MHz USB name "Houston" 19.8 5.60400 MHz USB name "St Johns" 19.9 5.61000 MHz USB name "Portis" 19.10 6.52600 MHz USB name "New York" 19.11 6.63400 MHz USB name "Portis" 19.12 6.63700 MHz USB name "Houston" 19.13 6.64000 MHz USB name "ARINC" 19.14 6.64300 MHz USB name "Berne" 19.15 8.81900 MHz USB name "St Johns" 19.16 8.84300 MHz USB name "San Fran" 19.17 8.93600 MHz USB name "Berne" 19.18 8.96000 MHz USB name "Portis" 19.19 10.03300 MHz USB name "Honolulu" 19.20 10.06900 MHz USB name "Berne" 19.21 10.07500 MHz USB name "Houston" 19.22 11.30600 MHz USB name "Portis" 19.23 11.34200 MHz USB name "ARINC" 19.24 13.28500 MHz USB name "St Johns" 19.25 13.30000 MHz USB name "San Fran" 19.26 13.32400 MHz USB name "Berne" 19.27 13.33000 MHz USB name "New York" 19.28 13.34800 MHz USB name "San Fran" 19.29 13.35400 MHz USB name "ARINC" 19.30 17.91000 MHz USB name "St Johns" 19.31 17.92500 MHz USB name "ARINC" 19.32 17.93100 MHz USB name "Berne" 19.33 17.94000 MHz USB name "Houston" 19.34 21.93300 MHz USB name "Berne" 19.35 21.96400 MHz USB name "ARINC" 19.36 21.98800 MHz USB name "Berne"