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 #ifndef GPS_H
AjK 0:0a841b89d614 24 #define GPS_H
AjK 0:0a841b89d614 25
AjK 0:0a841b89d614 26 #define GPS_LAT_STR 0
AjK 0:0a841b89d614 27 #define GPS_LON_STR 1
AjK 0:0a841b89d614 28
AjK 0:0a841b89d614 29 #define GPS_HISTORY_SIZE 60
AjK 0:0a841b89d614 30
AjK 0:0a841b89d614 31 typedef struct _gps_time {
AjK 0:0a841b89d614 32 int year;
AjK 0:0a841b89d614 33 char month;
AjK 0:0a841b89d614 34 char day;
AjK 0:0a841b89d614 35 char hour;
AjK 0:0a841b89d614 36 char minute;
AjK 0:0a841b89d614 37 char second;
AjK 0:0a841b89d614 38 char tenth;
AjK 0:0a841b89d614 39 char hundreth;
AjK 0:0a841b89d614 40 char is_valid;
AjK 0:0a841b89d614 41 char prev_valid;
AjK 0:0a841b89d614 42 } GPS_TIME;
AjK 0:0a841b89d614 43
AjK 0:0a841b89d614 44 typedef struct _gps_location_raw {
AjK 0:0a841b89d614 45 char north_south;
AjK 0:0a841b89d614 46 char east_west;
AjK 0:0a841b89d614 47 char lat[16];
AjK 0:0a841b89d614 48 char lon[16];
AjK 0:0a841b89d614 49 char alt[16];
AjK 0:0a841b89d614 50 char sats[8];
AjK 0:0a841b89d614 51 char is_valid;
AjK 0:0a841b89d614 52 uint32_t updated;
AjK 0:0a841b89d614 53 } GPS_LOCATION_RAW;
AjK 0:0a841b89d614 54
AjK 0:0a841b89d614 55 typedef struct _gps_location_average {
AjK 0:0a841b89d614 56 char north_south;
AjK 0:0a841b89d614 57 double latitude;
AjK 0:0a841b89d614 58 char east_west;
AjK 0:0a841b89d614 59 double longitude;
AjK 0:0a841b89d614 60 double height;
AjK 0:0a841b89d614 61 char *sats;
AjK 0:0a841b89d614 62 char is_valid;
AjK 0:0a841b89d614 63 } GPS_LOCATION_AVERAGE;
AjK 0:0a841b89d614 64
AjK 0:0a841b89d614 65 /* GPS module API function prototypes. */
AjK 0:0a841b89d614 66 void gps_init(void);
AjK 0:0a841b89d614 67 void gps_process(void);
AjK 0:0a841b89d614 68 double gps_convert_coord(char *s, int type);
AjK 0:0a841b89d614 69 double gps_julian_day_number(GPS_TIME *t);
AjK 0:0a841b89d614 70 double gps_julian_date(GPS_TIME *t);
AjK 0:0a841b89d614 71 double gps_siderealDegrees_by_jd(double jd);
AjK 0:0a841b89d614 72 double gps_siderealDegrees_by_time(GPS_TIME *t);
AjK 0:0a841b89d614 73 double gps_siderealHA_by_jd(double jd);
AjK 0:0a841b89d614 74 double gps_siderealHA_by_time(GPS_TIME *t);
AjK 0:0a841b89d614 75 GPS_TIME *gps_get_time(GPS_TIME *q);
AjK 0:0a841b89d614 76 GPS_LOCATION_RAW *gps_get_location_raw(GPS_LOCATION_RAW *q);
AjK 0:0a841b89d614 77 GPS_LOCATION_AVERAGE *gps_get_location_average(GPS_LOCATION_AVERAGE *q);
AjK 0:0a841b89d614 78
AjK 0:0a841b89d614 79 /* Used by other modules to make callbacks. */
AjK 0:0a841b89d614 80 void gps_pps_fall(void); /* gpioirq.c needs this to know what to callback to. */
AjK 0:0a841b89d614 81
AjK 0:0a841b89d614 82 #define GPS_BUFFER_SIZE 128
AjK 0:0a841b89d614 83
AjK 0:0a841b89d614 84 /* Used to test the IIR register. Common across UARTs. */
AjK 0:0a841b89d614 85 #define UART_ISSET_THRE 0x0002
AjK 0:0a841b89d614 86 #define UART_ISSET_RDA 0x0004
AjK 0:0a841b89d614 87 #define UART_ISSET_CTI 0x000C
AjK 0:0a841b89d614 88 #define UART_ISSET_RLS 0x0006
AjK 0:0a841b89d614 89 #define UART_ISSET_FIFOLVL_RXFULL 0x0000000F
AjK 0:0a841b89d614 90 #define UART_ISSET_FIFOLVL_TXFULL 0x00000F00
AjK 0:0a841b89d614 91
AjK 0:0a841b89d614 92 #define UART_RX_INTERRUPT iir & UART_ISSET_RDA
AjK 0:0a841b89d614 93
AjK 0:0a841b89d614 94
AjK 0:0a841b89d614 95 /* UART1 register configuration values. */
AjK 0:0a841b89d614 96 #define UART1_SET_LCR 0x00000003
AjK 0:0a841b89d614 97 #define UART1_SET_LCR_DLAB 0x00000083
AjK 0:0a841b89d614 98 #define UART1_SET_DLLSB 0x71
AjK 0:0a841b89d614 99 #define UART1_SET_DLMSB 0x02
AjK 0:0a841b89d614 100 #define UART1_SET_FCR 0x01
AjK 0:0a841b89d614 101 #define UART1_SET_FCR_CLEAR 0x07
AjK 0:0a841b89d614 102 #define UART1_SET_IER 0x07
AjK 0:0a841b89d614 103
AjK 0:0a841b89d614 104 /* Macros. */
AjK 0:0a841b89d614 105 #define UART1_FIFO_NOT_EMPTY LPC_UART1->LSR & 0x1
AjK 0:0a841b89d614 106 #define UART1_GETC (char)LPC_UART1->RBR
AjK 0:0a841b89d614 107
AjK 0:0a841b89d614 108 #endif
AjK 0:0a841b89d614 109