owlps/libowlps-resultreader/owlps-resultreader.h

112 lines
3.5 KiB
C

/*
* This file is part of the Owl Positioning System (OwlPS).
* OwlPS is a project of the University of Franche-Comté
* (Université de Franche-Comté), France.
*
* This is the header file of libowlps-resultreader, the library that
* provides functions to read results sent on UDP by OwlPS Positioning.
*
* See also the example program owlps-resultreader-udp.c.
*/
#ifndef _LIBOWLPS_RESULTREADER_CSV_
#define _LIBOWLPS_RESULTREADER_CSV_
#include <owlps.h>
#include <stdio.h>
#include <inttypes.h>
/* Maximum size of a result CSV string sent by OwlPS Positioning.
* Request's information:
* MAC, request type (2 chars), timestamp, ';'
* Plus, for each algorithm:
* Name, three coordinates, error (we assume the same size as the
* coordinates), area name, ';'
* Let's define OWL_NB_ALGORITHMS as the number of implemented
* algorithms (this is ugly).
*/
#define OWL_NB_ALGORITHMS 10
#define OWL_CSV_RESULT_REQUEST_STRLEN \
(OWL_ETHER_ADDR_STRLEN + OWL_TIMESTAMP_STRLEN + 3)
#define OWL_CSV_ALGORITHM_RESULT_STRLEN \
(OWL_ALGORITHM_STRLEN + 4 * OWL_COORDINATE_STRLEN + \
OWL_AREA_STRLEN + 1)
#define OWL_CSV_RESULT_STRLEN \
(OWL_CSV_RESULT_REQUEST_STRLEN + \
OWL_NB_ALGORITHMS * OWL_CSV_ALGORITHM_RESULT_STRLEN + 1)
/* Same thing, but for the simplified CSV strings created by
* *_to_csv_simple().
* Request's information is only the MAC address.
* For the algorithm:
* = 12 characters per coordinate + OWL_AREA_STRLEN
*/
#define OWL_CSV_RESULT_REQUEST_SIMPLE_STRLEN OWL_ETHER_ADDR_STRLEN
#define OWL_CSV_ALGORITHM_RESULT_SIMPLE_STRLEN \
(3 * OWL_COORDINATE_STRLEN + OWL_AREA_STRLEN + 1)
#define OWL_CSV_RESULT_SIMPLE_STRLEN \
(OWL_CSV_RESULT_REQUEST_SIMPLE_STRLEN + \
OWL_NB_ALGORITHMS * OWL_CSV_ALGORITHM_RESULT_SIMPLE_STRLEN + 1)
/* Linked list of algorithms' results.
* Each structure is the result of a single algorithm.
*/
typedef struct _owl_algorithm_result
{
char *algorithm ;
float x ;
float y ;
float z ;
float error ;
char *area ;
struct _owl_algorithm_result *next ;
} owl_algorithm_result ;
/* Results for a request. Includes the request's data, and the
* list of algorithms' results.
*/
typedef struct _owl_result
{
char *mobile_mac_addr ;
uint8_t request_type ;
owl_timestamp mobile_timestamp ;
unsigned int nb_results ;
owl_algorithm_result *results ;
} owl_result ;
owl_result* owl_receive_position(int sockfd) ;
owl_result* owl_fill_result(char *csv) ;
owl_algorithm_result* owl_fill_algorithm_result(char **csv) ;
void owl_result_to_csv(char dst[OWL_CSV_RESULT_STRLEN],
const owl_result *const src) ;
void
owl_algorithm_result_to_csv(char dst[OWL_CSV_ALGORITHM_RESULT_STRLEN],
const owl_algorithm_result *const src) ;
void owl_result_to_csv_simple(char dst[OWL_CSV_RESULT_SIMPLE_STRLEN],
const owl_result *const src) ;
void owl_algorithm_result_to_csv_simple
(char dst[OWL_CSV_ALGORITHM_RESULT_SIMPLE_STRLEN],
const owl_algorithm_result *const src) ;
void owl_fprint_result(FILE *stream, const owl_result *const src) ;
void owl_fprint_algorithm_result(FILE *stream,
const owl_algorithm_result *const src) ;
#define owl_print_result(SRC) \
(owl_fprint_result(stdout, (SRC)))
#define owl_print_algorithm_result(SRC) \
(owl_fprint_algorithm_result(stdout, (SRC)))
void owl_free_result(owl_result *result) ;
void owl_free_algorithm_result(owl_algorithm_result *algo) ;
#endif // _LIBOWLPS_RESULTREADER_CSV_