Instrument Neutral Distributed Interface INDI
2.0.2
|
Implementations for common driver routines. More...
#include <math.h>
Go to the source code of this file.
Macros | |
#define | J2000 2451545.0 |
#define | ERRMSG_SIZE 1024 |
#define | STELLAR_DAY 86164.098903691 |
#define | TRACKRATE_SIDEREAL ((360.0 * 3600.0) / STELLAR_DAY) |
#define | SOLAR_DAY 86400 |
#define | TRACKRATE_SOLAR ((360.0 * 3600.0) / SOLAR_DAY) |
#define | TRACKRATE_LUNAR 14.511415 |
#define | EARTHRADIUSEQUATORIAL 6378137.0 |
#define | EARTHRADIUSPOLAR 6356752.0 |
#define | EARTHRADIUSMEAN 6372797.0 |
#define | SUNMASS 1.98847E+30 |
#define | PLANK_H 6.62607015E-34 |
#define | DIRAC_H (PLANK_H/(2*M_PI)) |
#define | EINSTEIN_G 6.67408E-11 |
#define | EULER 2.71828182845904523536028747135266249775724709369995 |
#define | ROOT2 1.41421356237309504880168872420969807856967187537694 |
#define | AIRY 1.21966 |
#define | CIRCLE_DEG 360 |
#define | CIRCLE_AM (CIRCLE_DEG * 60) |
#define | CIRCLE_AS (CIRCLE_AM * 60) |
#define | RAD_AS (CIRCLE_AS/(M_PI*2)) |
#define | ASTRONOMICALUNIT 1.495978707E+11 |
#define | PARSEC (ASTRONOMICALUNIT*RAD_AS) |
#define | LIGHTSPEED 299792458.0 |
#define | JULIAN_LY (LIGHTSPEED * SOLAR_DAY * 365) |
#define | STELLAR_LY (LIGHTSPEED * STELLAR_DAY * 365) |
#define | FLUX(wavelength) (wavelength/(PLANK_H*LIGHTSPEED)) |
#define | CANDLE ((1.0/683.0)*FLUX(555)) |
#define | LUMEN(wavelength) (CANDLE/(4*M_PI)*pow((FLUX(wavelength)/FLUX(555)), 0.25)) |
#define | REDSHIFT(wavelength, reference) (1.0-(reference/wavelength)) |
#define | DOPPLER(shift, speed) (speed*shift) |
Enumerations | |
enum | TTY_ERROR { TTY_OK = 0 , TTY_READ_ERROR = -1 , TTY_WRITE_ERROR = -2 , TTY_SELECT_ERROR = -3 , TTY_TIME_OUT = -4 , TTY_PORT_FAILURE = -5 , TTY_PARAM_ERROR = -6 , TTY_ERRNO = -7 , TTY_OVERFLOW = -8 , TTY_PORT_BUSY = -9 } |
Functions | |
int | tty_read (int fd, char *buf, int nbytes, int timeout, int *nbytes_read) |
read buffer from terminal More... | |
int | tty_read_expanded (int fd, char *buf, int nbytes, long timeout_seconds, long timeout_microseconds, int *nbytes_read) |
read buffer from terminal with a delimiter More... | |
int | tty_read_section (int fd, char *buf, char stop_char, int timeout, int *nbytes_read) |
read buffer from terminal with a delimiter More... | |
int | tty_read_section_expanded (int fd, char *buf, char stop_char, long timeout_seconds, long timeout_microseconds, int *nbytes_read) |
read buffer from terminal with a delimiter More... | |
int | tty_nread_section (int fd, char *buf, int nsize, char stop_char, int timeout, int *nbytes_read) |
read buffer from terminal with a delimiter More... | |
int | tty_write (int fd, const char *buffer, int nbytes, int *nbytes_written) |
Writes a buffer to fd. More... | |
int | tty_write_string (int fd, const char *buffer, int *nbytes_written) |
Writes a null terminated string to fd. More... | |
int | tty_connect (const char *device, int bit_rate, int word_size, int parity, int stop_bits, int *fd) |
Establishes a tty connection to a terminal device. More... | |
int | tty_disconnect (int fd) |
Closes a tty connection and flushes the bus. More... | |
void | tty_error_msg (int err_code, char *err_msg, int err_msg_len) |
Retrieve the tty error message. More... | |
void | tty_set_debug (int debug) |
tty_set_debug Enable or disable debug which prints verbose information. More... | |
void | tty_set_gemini_udp_format (int enabled) |
void | tty_set_generic_udp_format (int enabled) |
void | tty_clr_trailing_read_lf (int enabled) |
int | tty_timeout (int fd, int timeout) |
int | tty_timeout_microseconds (int fd, long timeout_seconds, long timeout_microseconds) |
int | fs_sexa (char *out, double a, int w, int fracbase) |
Converts a sexagesimal number to a string. sprint the variable a in sexagesimal format into out[]. More... | |
int | f_scansexa (const char *str0, double *dp) |
convert sexagesimal string str AxBxC to double. x can be anything non-numeric. Any missing A, B or C will be assumed 0. Optional - and + can be anywhere. More... | |
int | extractISOTime (const char *timestr, struct ln_date *iso_date) |
Extract ISO 8601 time and store it in a tm struct. More... | |
void | getSexComponents (double value, int *d, int *m, int *s) |
void | getSexComponentsIID (double value, int *d, int *m, double *s) |
int | numberFormat (char *buf, const char *format, double value) |
Fill buffer with properly formatted INumber string. More... | |
double | time_ns () |
Get a unix timestamp with nanosecond precision. More... | |
const char * | indi_timestamp () |
Create an ISO 8601 formatted time stamp. The format is YYYY-MM-DDTHH:MM:SS. More... | |
double | rangeHA (double r) |
rangeHA Limits the hour angle value to be between -12 —> 12 More... | |
double | range24 (double r) |
range24 Limits a number to be between 0-24 range. More... | |
double | range360 (double r) |
range360 Limits an angle to be between 0-360 degrees. More... | |
double | rangeDec (double r) |
rangeDec Limits declination value to be in -90 to 90 range. More... | |
double | get_local_sidereal_time (double longitude) |
get_local_sidereal_time Returns local sideral time given longitude and system clock. More... | |
double | get_local_hour_angle (double local_sideral_time, double ra) |
get_local_hour_angle Returns local hour angle of an object More... | |
void | get_hrz_from_equ (struct ln_equ_posn *object, struct ln_lnlat_posn *observer, double JD, struct ln_hrz_posn *position) |
get_hrz_from_equ Calculate horizontal coordinates from equatorial coordinates. More... | |
void | get_equ_from_hrz (struct ln_hrz_posn *object, struct ln_lnlat_posn *observer, double JD, struct ln_equ_posn *position) |
ln_get_equ_from_hrz Calculate Equatorial EOD Coordinates from horizontal coordinates More... | |
void | get_alt_az_coordinates (double hour_angle, double dec, double latitude, double *alt, double *az) |
get_alt_az_coordinates Returns alt-azimuth coordinates of an object More... | |
double | estimate_geocentric_elevation (double latitude, double sea_level_elevation) |
estimate_geocentric_elevation Returns an estimation of the actual geocentric elevation More... | |
double | estimate_field_rotation_rate (double Alt, double Az, double latitude) |
estimate_field_rotation_rate Returns an estimation of the field rotation rate of the object More... | |
double | estimate_field_rotation (double hour_angle, double field_rotation_rate) |
estimate_field_rotation Returns an estimation of the field rotation rate of the object More... | |
double | as2rad (double as) |
as2rad Convert arcseconds into radians More... | |
double | rad2as (double rad) |
rad2as Convert radians into arcseconds More... | |
double | estimate_distance (double parsecs, double parallax_radius) |
estimate_distance Convert parallax arcseconds into meters More... | |
double | m2au (double m) |
m2au Convert meters into astronomical units More... | |
double | calc_delta_magnitude (double mag_ratio, double *spectrum, double *ref_spectrum, int spectrum_size) |
calc_delta_magnitude Returns the difference of magnitudes given two spectra More... | |
double | calc_photon_flux (double rel_magnitude, double filter_bandwidth, double wavelength, double steradian) |
calc_photon_flux Returns the photon flux of the object with the given magnitude observed at a determined wavelenght using a passband filter through a steradian expressed cone More... | |
double | calc_rel_magnitude (double photon_flux, double filter_bandwidth, double wavelength, double steradian) |
calc_rel_magnitude Returns the relative magnitude of the object with the given photon flux measured at a determined wavelenght using a passband filter over an incident surface More... | |
double | estimate_absolute_magnitude (double dist, double delta_mag) |
estimate_absolute_magnitude Returns an estimation of the absolute magnitude of an object given its distance and the difference of its magnitude with a reference object More... | |
double | estimate_star_mass (double delta_mag, double ref_mass) |
estimate the star mass in ref_size units e.g. sun masses or kgs More... | |
double | estimate_orbit_radius (double obs_lambda, double ref_lambda, double period) |
estimate the orbit radius of an object with known mass orbiting around a star. More... | |
double | estimate_secondary_mass (double star_mass, double star_drift, double orbit_radius) |
estimate the mass of an object with known mass orbiting around a star. More... | |
double | estimate_secondary_size (double star_size, double dropoff_ratio) |
estimate the size of an object occulting a star in star_size units. More... | |
void | baseline_2d_projection (double alt, double az, double baseline[3], double wavelength, double uvresult[2]) |
baseline_2d_projection Returns the coordinates of the projection of a single baseline targeting the object by coordinates More... | |
double | baseline_delay (double alt, double az, double baseline[3]) |
baseline_delay Returns the delay in meters of a single baseline targeting the object by coordinates More... | |
Variables | |
const char * | Direction [] |
const char * | SolarSystem [] |
Implementations for common driver routines.
INDI LIB Common routines used by all drivers Copyright (C) 2003 by Jason Harris (jharr) Elwood C. Downey Jasem Mutlaq is@3 0dora dus. org
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
The INDI Common Routine Library provides formatting and serial routines employed by many INDI drivers. Currently, the library is composed of the following sections:
Definition in file indicom.h.
#define CIRCLE_AM (CIRCLE_DEG * 60) |
#define EULER 2.71828182845904523536028747135266249775724709369995 |
#define FLUX | ( | wavelength | ) | (wavelength/(PLANK_H*LIGHTSPEED)) |
#define JULIAN_LY (LIGHTSPEED * SOLAR_DAY * 365) |
#define PARSEC (ASTRONOMICALUNIT*RAD_AS) |
#define REDSHIFT | ( | wavelength, | |
reference | |||
) | (1.0-(reference/wavelength)) |
#define ROOT2 1.41421356237309504880168872420969807856967187537694 |
#define STELLAR_LY (LIGHTSPEED * STELLAR_DAY * 365) |
#define TRACKRATE_SIDEREAL ((360.0 * 3600.0) / STELLAR_DAY) |
enum TTY_ERROR |
double as2rad | ( | double | as | ) |
void baseline_2d_projection | ( | double | alt, |
double | az, | ||
double | baseline[3], | ||
double | wavelength, | ||
double | uvresult[2] | ||
) |
baseline_2d_projection Returns the coordinates of the projection of a single baseline targeting the object by coordinates
alt | current altitude of the target. |
az | azimuth position of the target. |
baseline | the baseline in meters. Three-dimensional xyz north is z axis y is UTC0 x is UTC0+90°. |
wavelength | The observing electromagnetic wavelength, the lower the size increases. |
uvresult | result plane coordinates of the current projection given the baseline and target vector. |
double baseline_delay | ( | double | alt, |
double | az, | ||
double | baseline[3] | ||
) |
baseline_delay Returns the delay in meters of a single baseline targeting the object by coordinates
alt | current altitude of the target. |
az | azimuth position of the target. |
baseline | the baseline in meters. Three-dimensional xyz north is z axis y is UTC0 x is UTC0+90°. |
wavelength | The observing electromagnetic wavelength, the lower the size increases. |
double calc_delta_magnitude | ( | double | mag_ratio, |
double * | spectrum, | ||
double * | ref_spectrum, | ||
int | spectrum_size | ||
) |
calc_delta_magnitude Returns the difference of magnitudes given two spectra
mag_ratio | Reference magnitude |
spectrum | The spectrum of the star under exam |
ref_spectrum | The spectrum of the reference star |
spectrum_size | The size of the spectrum array in elements |
double calc_photon_flux | ( | double | rel_magnitude, |
double | filter_bandwidth, | ||
double | wavelength, | ||
double | steradian | ||
) |
calc_photon_flux Returns the photon flux of the object with the given magnitude observed at a determined wavelenght using a passband filter through a steradian expressed cone
rel_magnitude | Relative magnitude of the object observed |
filter_bandwidth | Filter bandwidth in meters |
wavelength | Wavelength in meters |
steradian | The light cone in steradians |
double calc_rel_magnitude | ( | double | photon_flux, |
double | filter_bandwidth, | ||
double | wavelength, | ||
double | steradian | ||
) |
calc_rel_magnitude Returns the relative magnitude of the object with the given photon flux measured at a determined wavelenght using a passband filter over an incident surface
photon_flux | The photon flux in Lumen |
filter_bandwidth | Filter bandwidth in meters |
wavelength | Wavelength in meters |
incident_surface | The incident surface in square meters |
double estimate_absolute_magnitude | ( | double | dist, |
double | delta_mag | ||
) |
estimate_absolute_magnitude Returns an estimation of the absolute magnitude of an object given its distance and the difference of its magnitude with a reference object
dist | The distance in parallax radiuses |
delta_mag | The difference of magnitudes |
double estimate_distance | ( | double | parsecs, |
double | parallax_radius | ||
) |
double estimate_field_rotation | ( | double | hour_angle, |
double | field_rotation_rate | ||
) |
double estimate_field_rotation_rate | ( | double | Alt, |
double | Az, | ||
double | latitude | ||
) |
estimate_field_rotation_rate Returns an estimation of the field rotation rate of the object
Alt | altitude coordinate of the object |
Az | azimuth coordinate of the object |
latitude | latitude in INDI format (-90 to +90) |
double estimate_geocentric_elevation | ( | double | latitude, |
double | sea_level_elevation | ||
) |
double estimate_orbit_radius | ( | double | obs_lambda, |
double | ref_lambda, | ||
double | period | ||
) |
estimate the orbit radius of an object with known mass orbiting around a star.
obs_lambda | The observed wavelength of a spectral line observed on the star affected by redshift or blueshift. |
ref_lambda | The reference wavelength of the spectral line observed on earth or the nullshift spectral line position. |
period | The orbital period. |
double estimate_secondary_mass | ( | double | star_mass, |
double | star_drift, | ||
double | orbit_radius | ||
) |
estimate the mass of an object with known mass orbiting around a star.
star_mass | The mass of the star hosting an orbiting object. |
star_drift | The star lagrange point L1 (observed drift of the star). |
orbit_radius | The estimated orbit radius of the companion object (star, planet, cloud). |
double estimate_secondary_size | ( | double | star_size, |
double | dropoff_ratio | ||
) |
double estimate_star_mass | ( | double | delta_mag, |
double | ref_mass | ||
) |
estimate the star mass in ref_size units e.g. sun masses or kgs
delta_mag | The absolute magnitude ratio between the reference object used as unit in ref_size. |
ref_mass | The mass of the reference object used to calculate the magnitude difference. |
int extractISOTime | ( | const char * | timestr, |
struct ln_date * | iso_date | ||
) |
Extract ISO 8601 time and store it in a tm struct.
timestr | a string containing date and time in ISO 8601 format. |
iso_date | a pointer to a ln_date structure to store the extracted time and date (libnova). |
int f_scansexa | ( | const char * | str0, |
double * | dp | ||
) |
convert sexagesimal string str AxBxC to double. x can be anything non-numeric. Any missing A, B or C will be assumed 0. Optional - and + can be anywhere.
str0 | string containing sexagesimal number. |
dp | pointer to a double to store the sexagesimal number. |
int fs_sexa | ( | char * | out, |
double | a, | ||
int | w, | ||
int | fracbase | ||
) |
Converts a sexagesimal number to a string. sprint the variable a in sexagesimal format into out[].
out | a pointer to store the sexagesimal number. |
a | the sexagesimal number to convert. |
w | the number of spaces in the whole part. |
fracbase | is the number of pieces a whole is to broken into; valid options:
|
void get_alt_az_coordinates | ( | double | hour_angle, |
double | dec, | ||
double | latitude, | ||
double * | alt, | ||
double * | az | ||
) |
get_alt_az_coordinates Returns alt-azimuth coordinates of an object
hour_angle | Hour angle in hours (-12 to 12) |
dec | DEC of object |
latitude | latitude in INDI format (-90 to +90) |
alt | ALT of object will be returned here |
az | AZ of object will be returned here |
void get_equ_from_hrz | ( | struct ln_hrz_posn * | object, |
struct ln_lnlat_posn * | observer, | ||
double | JD, | ||
struct ln_equ_posn * | position | ||
) |
ln_get_equ_from_hrz Calculate Equatorial EOD Coordinates from horizontal coordinates
object | Horizontal Object Coordinates |
observer | Observer Location |
JD | Julian Date |
position | Calculated Equatorial Coordinates. |
void get_hrz_from_equ | ( | struct ln_equ_posn * | object, |
struct ln_lnlat_posn * | observer, | ||
double | JD, | ||
struct ln_hrz_posn * | position | ||
) |
get_hrz_from_equ Calculate horizontal coordinates from equatorial coordinates.
object | Equatorial Object Coordinates |
observer | Observer Location |
JD | Julian Date |
position | Calculated Horizontal Coordinates. |
double get_local_hour_angle | ( | double | local_sideral_time, |
double | ra | ||
) |
double get_local_sidereal_time | ( | double | longitude | ) |
get_local_sidereal_time Returns local sideral time given longitude and system clock.
longitude | Longitude in INDI format (0 to 360) increasing eastward. |
void getSexComponents | ( | double | value, |
int * | d, | ||
int * | m, | ||
int * | s | ||
) |
void getSexComponentsIID | ( | double | value, |
int * | d, | ||
int * | m, | ||
double * | s | ||
) |
const char* indi_timestamp | ( | ) |
double m2au | ( | double | m | ) |
int numberFormat | ( | char * | buf, |
const char * | format, | ||
double | value | ||
) |
double rad2as | ( | double | rad | ) |
double range24 | ( | double | r | ) |
double range360 | ( | double | r | ) |
double rangeDec | ( | double | r | ) |
double rangeHA | ( | double | r | ) |
double time_ns | ( | ) |
int tty_connect | ( | const char * | device, |
int | bit_rate, | ||
int | word_size, | ||
int | parity, | ||
int | stop_bits, | ||
int * | fd | ||
) |
Establishes a tty connection to a terminal device.
device | the device node. e.g. /dev/ttyS0 |
bit_rate | bit rate |
word_size | number of data bits, 7 or 8, USE 8 DATA BITS with modbus |
parity | 0=no parity, 1=parity EVEN, 2=parity ODD |
stop_bits | number of stop bits : 1 or 2 |
fd | fd is set to the file descriptor value on success. |
int tty_disconnect | ( | int | fd | ) |
void tty_error_msg | ( | int | err_code, |
char * | err_msg, | ||
int | err_msg_len | ||
) |
int tty_nread_section | ( | int | fd, |
char * | buf, | ||
int | nsize, | ||
char | stop_char, | ||
int | timeout, | ||
int * | nbytes_read | ||
) |
read buffer from terminal with a delimiter
fd | file descriptor |
buf | pointer to store data. Must be initialized and big enough to hold data. |
stop_char | if the function encounters stop_char then it stops reading and returns the buffer. |
nsize | size of buf. If stop character is not encountered before nsize, the function aborts. |
timeout | number of seconds to wait for terminal before a timeout error is issued. |
nbytes_read | the number of bytes read. |
int tty_read | ( | int | fd, |
char * | buf, | ||
int | nbytes, | ||
int | timeout, | ||
int * | nbytes_read | ||
) |
read buffer from terminal
fd | file descriptor |
buf | pointer to store data. Must be initialized and big enough to hold data. |
nbytes | number of bytes to read. |
timeout | number of seconds to wait for terminal before a timeout error is issued. |
nbytes_read | the number of bytes read. |
int tty_read_expanded | ( | int | fd, |
char * | buf, | ||
int | nbytes, | ||
long | timeout_seconds, | ||
long | timeout_microseconds, | ||
int * | nbytes_read | ||
) |
read buffer from terminal with a delimiter
fd | file descriptor |
buf | pointer to store data. Must be initialized and big enough to hold data. |
stop_char | if the function encounters stop_char then it stops reading and returns the buffer. |
timeout_seconds | number of seconds to wait for terminal before a timeout error is issued. |
(Total time = timeout_seconds + timeout_microseconds)
timeout_microseconds | number of microseconds to wait for terminal before a timeout error is issued. |
(Total time = timeout_seconds + timeout_microseconds)
nbytes_read | the number of bytes read. |
int tty_read_section | ( | int | fd, |
char * | buf, | ||
char | stop_char, | ||
int | timeout, | ||
int * | nbytes_read | ||
) |
read buffer from terminal with a delimiter
fd | file descriptor |
buf | pointer to store data. Must be initialized and big enough to hold data. |
stop_char | if the function encounters stop_char then it stops reading and returns the buffer. |
timeout | number of seconds to wait for terminal before a timeout error is issued. |
nbytes_read | the number of bytes read. |
int tty_read_section_expanded | ( | int | fd, |
char * | buf, | ||
char | stop_char, | ||
long | timeout_seconds, | ||
long | timeout_microseconds, | ||
int * | nbytes_read | ||
) |
read buffer from terminal with a delimiter
fd | file descriptor |
buf | pointer to store data. Must be initialized and big enough to hold data. |
stop_char | if the function encounters stop_char then it stops reading and returns the buffer. |
nsize | size of buf. If stop character is not encountered before nsize, the function aborts. |
timeout_seconds | number of seconds to wait for terminal before a timeout error is issued. |
(Total Timeout is timeout_seconds + timeout_microseconds)
timeout_microseconds | number of microseconds to wait for terminal before a timeout error is issued. |
(Total Timeout is timeout_seconds + timeout_microseconds)
nbytes_read | the number of bytes read. |
void tty_set_debug | ( | int | debug | ) |
int tty_timeout_microseconds | ( | int | fd, |
long | timeout_seconds, | ||
long | timeout_microseconds | ||
) |
int tty_write | ( | int | fd, |
const char * | buffer, | ||
int | nbytes, | ||
int * | nbytes_written | ||
) |
int tty_write_string | ( | int | fd, |
const char * | buffer, | ||
int * | nbytes_written | ||
) |
|
extern |
|
extern |