Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.

Dependencies:   mbed

Committer:
AjK
Date:
Mon Oct 11 10:34:55 2010 +0000
Revision:
0:0a841b89d614
Totally Alpha quality as this project isn\t completed. Just publishing it as it answers many questions asked in the forums

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:0a841b89d614 1 /****************************************************************************
AjK 0:0a841b89d614 2 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd
AjK 0:0a841b89d614 3 *
AjK 0:0a841b89d614 4 * This file is part of the Satellite Observers Workbench (SOWB).
AjK 0:0a841b89d614 5 *
AjK 0:0a841b89d614 6 * SOWB is free software: you can redistribute it and/or modify
AjK 0:0a841b89d614 7 * it under the terms of the GNU General Public License as published by
AjK 0:0a841b89d614 8 * the Free Software Foundation, either version 3 of the License, or
AjK 0:0a841b89d614 9 * (at your option) any later version.
AjK 0:0a841b89d614 10 *
AjK 0:0a841b89d614 11 * SOWB is distributed in the hope that it will be useful,
AjK 0:0a841b89d614 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
AjK 0:0a841b89d614 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
AjK 0:0a841b89d614 14 * GNU General Public License for more details.
AjK 0:0a841b89d614 15 *
AjK 0:0a841b89d614 16 * You should have received a copy of the GNU General Public License
AjK 0:0a841b89d614 17 * along with SOWB. If not, see <http://www.gnu.org/licenses/>.
AjK 0:0a841b89d614 18 *
AjK 0:0a841b89d614 19 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $
AjK 0:0a841b89d614 20 *
AjK 0:0a841b89d614 21 ***************************************************************************/
AjK 0:0a841b89d614 22
AjK 0:0a841b89d614 23 #include "stations.h"
AjK 0:0a841b89d614 24
AjK 0:0a841b89d614 25 /** COSPAR observing stations around the World.
AjK 0:0a841b89d614 26 */
AjK 0:0a841b89d614 27 const STATION_t stations[] = {
AjK 0:0a841b89d614 28
AjK 0:0a841b89d614 29 { 2010, "MM", 30.3340, -97.7610, 160., "5105 Crestway Dr." },
AjK 0:0a841b89d614 30 { 2011, "MM", 30.3150, -97.8661, 300., "Bee Caves Rsrch Ctr" },
AjK 0:0a841b89d614 31 { 2420, "RE", 55.9486, -3.1386, 40., "Russell Eberst" },
AjK 0:0a841b89d614 32 { 2675, "DB", 52.1358, -2.3264, 70., "David Brierley" },
AjK 0:0a841b89d614 33 { 2676, "DB", 52.1273, -2.3365, 107., "David Brierley" },
AjK 0:0a841b89d614 34 { 2018, "PW", 51.0945, -1.1188, 150., "Peter Wakelin" },
AjK 0:0a841b89d614 35 { 2701, "TM", 43.6876, -79.3924, 230., "Ted Molczan" },
AjK 0:0a841b89d614 36 { 3022, "JC", 48.7389, 3.4589, 52., "Jean-Paul Cornec" },
AjK 0:0a841b89d614 37 { 5917, "BG", 59.3418, 18.0545, 33., "Bjorn Gimle" },
AjK 0:0a841b89d614 38 { 5918, "BG", 59.2985, 18.1045, 44., "Bjorn Gimle" },
AjK 0:0a841b89d614 39 { 5919, "BG", 59.2615, 18.6206, 33., "Bjorn Gimle" },
AjK 0:0a841b89d614 40 { 9987, "BF", 59.3418, 18.0545, 30., "Bjorn Gimle" },
AjK 0:0a841b89d614 41 { 100, "SG", 59.4628, 17.9137, 30., "Sven Grahn" },
AjK 0:0a841b89d614 42 { 8305, "PG", 26.2431, -98.2163, 30., "Paul Gabriel" },
AjK 0:0a841b89d614 43 { 2563, "PN", 51.0524, 2.4043, 10., "Pierre Nierinck" },
AjK 0:0a841b89d614 44 { 6226, "SC", 28.4861, -97.8194, 110., "Scott Campbell" },
AjK 0:0a841b89d614 45 { 8539, "SN", 39.4707, -79.3388, 839., "Steve Newcomb" },
AjK 0:0a841b89d614 46 { 2751, "BM", 51.3440, -1.9849, 125., "Bruce MacDonald" },
AjK 0:0a841b89d614 47 { 2756, "AK", 56.0907, -3.1623, 25., "Andy Kirkham" }, /* wow, that's me! Shame I no longer live there. */
AjK 0:0a841b89d614 48 { 433, "GR", -33.9406, 18.5129, 10., "Greg Roberts" },
AjK 0:0a841b89d614 49 { 4541, "AR", 41.9639, 12.4531, 80., "Alberto Rango" },
AjK 0:0a841b89d614 50 { 4542, "AR", 41.9683, 12.4545, 80., "Alberto Rango" },
AjK 0:0a841b89d614 51 { 4641, "AR", 41.1060, 16.9010, 70., "Alberto Rango" },
AjK 0:0a841b89d614 52 { 2115, "MW", 51.3286, 0.7950, 75., "Mike Waterman" },
AjK 0:0a841b89d614 53 { 1775, "KF", 44.6062, -75.6910, 200., "Kevin Fettner" },
AjK 0:0a841b89d614 54 { 1747, "DD", 45.7275, -72.3526, 191., "Daniel Deak" },
AjK 0:0a841b89d614 55 { 8597, "TB", -34.9638, 138.6333, 100., "Tony Beresford" },
AjK 0:0a841b89d614 56 { 8730, "EC", 30.3086, -97.7279, 150., "Ed Cannon" },
AjK 0:0a841b89d614 57 { 9730, "MM", 30.3150, -97.8660, 280., "BCRC (0002)" },
AjK 0:0a841b89d614 58 { 4353, "ML", 52.1541, 4.4908, 0., "Marco Langbroek" },
AjK 0:0a841b89d614 59 { 4354, "ML", 52.1168, 4.5602, -2., "Marco Langbroek" },
AjK 0:0a841b89d614 60 { 710, "LS", 52.3261, 10.6756, 85., "Lutz Schindler" },
AjK 0:0a841b89d614 61 { 1056, "MK", 57.0122, 23.9833, 4., "Martins Keruss" },
AjK 0:0a841b89d614 62 { 110, "LK", 32.5408, -96.8906, 200., "Lyn Kennedy" },
AjK 0:0a841b89d614 63 { 11, "VA", 44.7269, 34.0167, 580., "Crimea Astrophysical Observ." },
AjK 0:0a841b89d614 64 { 70, "BC", 53.2233, -0.6003, 30., "Bob Christy" },
AjK 0:0a841b89d614 65 { 8335, "BY", 35.8311, -96.1471, 335., "Brad Young" },
AjK 0:0a841b89d614 66 { 8336, "BY", 36.1397, -95.9838, 205., "Brad Young" },
AjK 0:0a841b89d614 67 { 8337, "BY", 36.9557, -96.5518, 395., "Brad Young" },
AjK 0:0a841b89d614 68 { 4160, "BD", 51.2793, 5.4768, 35., "Bram Dorreman" },
AjK 0:0a841b89d614 69 { 9011, "RM", 50.9310, 2.4053, 72., "Richard Miles" },
AjK 0:0a841b89d614 70 { 20, "PM", 50.7453, 2.1107, 70., "Paul Marsh" },
AjK 0:0a841b89d614 71 { 40, "IR", 50.7453, 2.1107, 70., "Ian Roberts" },
AjK 0:0a841b89d614 72 { 90, "RF", 50.7453, 2.1107, 70., "Richard Flagg" },
AjK 0:0a841b89d614 73 { 1, "AK", 56.1923, -3.0340, 53., "SOWB Test Station" }, /* Used for testing the SOWB. */
AjK 0:0a841b89d614 74 { 0, "uk", 0.0000, 0.0000, 0., "Unknown station location" } /* Always the last entry. */
AjK 0:0a841b89d614 75 };
AjK 0:0a841b89d614 76
AjK 0:0a841b89d614 77 /** cospar_station_at
AjK 0:0a841b89d614 78 *
AjK 0:0a841b89d614 79 * Given a latitude and longitude is the point within a +/-0.0005 degree
AjK 0:0a841b89d614 80 * box of a given station? If so, return a handle (array index) for that
AjK 0:0a841b89d614 81 * station.
AjK 0:0a841b89d614 82 *
AjK 0:0a841b89d614 83 * @param double latitude
AjK 0:0a841b89d614 84 * @param double longitude
AjK 0:0a841b89d614 85 * @return int index
AjK 0:0a841b89d614 86 */
AjK 0:0a841b89d614 87 int cospar_station_at(double latitude, double longitude) {
AjK 0:0a841b89d614 88 int i;
AjK 0:0a841b89d614 89 double high, low;
AjK 0:0a841b89d614 90
AjK 0:0a841b89d614 91 for (i = 0; stations[i].cospar != 0; i++) {
AjK 0:0a841b89d614 92 high = stations[i].latitude + 0.0005;
AjK 0:0a841b89d614 93 low = stations[i].latitude - 0.0005;
AjK 0:0a841b89d614 94 if (latitude <= high && latitude >= low) {
AjK 0:0a841b89d614 95 high = stations[i].longitude + 0.0005;
AjK 0:0a841b89d614 96 low = stations[i].longitude - 0.0005;
AjK 0:0a841b89d614 97 if (longitude <= high && longitude >= low) {
AjK 0:0a841b89d614 98 return i;
AjK 0:0a841b89d614 99 }
AjK 0:0a841b89d614 100 }
AjK 0:0a841b89d614 101 }
AjK 0:0a841b89d614 102
AjK 0:0a841b89d614 103 return i;
AjK 0:0a841b89d614 104 }
AjK 0:0a841b89d614 105
AjK 0:0a841b89d614 106 /** station
AjK 0:0a841b89d614 107 *
AjK 0:0a841b89d614 108 * Given an array index value, return a pointer to the station information structure.
AjK 0:0a841b89d614 109 * The proceedure is basically a look-up opertaion.
AjK 0:0a841b89d614 110 *
AjK 0:0a841b89d614 111 * @param int index
AjK 0:0a841b89d614 112 * @return STATION_t *
AjK 0:0a841b89d614 113 */
AjK 0:0a841b89d614 114 const STATION_t * cospar_station(int index) {
AjK 0:0a841b89d614 115 return &stations[index];
AjK 0:0a841b89d614 116 }