PUD: add getNodeIdType function
[olsrd.git] / lib / pud / src / wireFormat.h
index 60b2ee2..728e8b9 100644 (file)
@@ -1,12 +1,12 @@
 #ifndef _PUD_WIREFORMAT_H_
 #define _PUD_WIREFORMAT_H_
 
-/* Plugin includes */
-
-/* OLSR includes */
+/* OLSRD includes */
+#include "olsr_protocol.h"
 
 /* System includes */
 #include <stdint.h>
+#include <time.h>
 
 /*
  * Version
@@ -15,9 +15,6 @@
 /** The version of the wire format */
 #define PUD_WIRE_FORMAT_VERSION                0
 
-/** The version of the transmit sentence */
-#define PUD_TX_SENTENCE_VERSION                0
-
 /*
  * Flags
  * We use the smask of nmeaINFO and the flags below on top of that
  * Node ID Type
  */
 
+/** nodeIdType legal values */
+typedef enum _NodeIdType {
+       /** MAC address, 48 bits, 6 bytes */
+       PUD_NODEIDTYPE_MAC = 0,
+
+       /** MSISDN number, 15 digits, 50 bits, 7 bytes */
+       PUD_NODEIDTYPE_MSISDN = 1,
+
+       /** TETRA number, 17 digits, 57 bits, 8 bytes */
+       PUD_NODEIDTYPE_TETRA = 2,
+
+       /** DNS name, variable length */
+       PUD_NODEIDTYPE_DNS = 3,
+
+       /** IPv4 address, 32 bits, 4 bytes */
+       PUD_NODEIDTYPE_IPV4 = 4,
+
+       /** IPv6 address, 128 bits, 16 bytes */
+       PUD_NODEIDTYPE_IPV6 = 6,
+
+       /** Brandweer number, 7 digits, 24 bits, 3 bytes */
+       PUD_NODEIDTYPE_192 = 192,
+
+       /** Ambulance number, 6 digits, 20 bits, 3 bytes */
+       PUD_NODEIDTYPE_193 = 193,
+
+       /** Number in the range [1, 8191], 4 digits, 13 bits, 2 bytes */
+       PUD_NODEIDTYPE_194 = 194
+} NodeIdType;
+
 /** The maximum size of the string representation of the nodeIdType */
 #define PUD_TX_NODEIDTYPE_DIGITS       3
 
  */
 
 /** Sub-format GPS information, 120 bits = 15 bytes */
-typedef struct {
+typedef struct _GpsInfo {
                uint32_t time :PUD_TIME_BITS; /**< the number of seconds since midnight, ALWAYS present */
                uint32_t lat :PUD_LATITUDE_BITS; /**< latitude */
                uint32_t lon :PUD_LONGITUDE_BITS; /**< longitude */
@@ -149,13 +176,13 @@ typedef struct {
 }__attribute__((__packed__)) GpsInfo;
 
 /** Sub-format Node information, 8 + variable bits = 1 + variable bytes */
-typedef struct {
+typedef struct _NodeInfo {
                uint8_t nodeIdType; /**< the nodeIdType */
                unsigned char nodeId; /**< placeholder for variable length nodeId string */
 }__attribute__((__packed__)) NodeInfo;
 
 /** Complete format, 8+8+8+120+(8+variable) bits =  18+(1+variable) bytes*/
-typedef struct {
+typedef struct _PudOlsrWireFormat {
                uint8_t version; /**< the version of the sentence */
                uint8_t validityTime; /**< the validity time of the sentence */
                uint8_t smask; /**< mask signaling the contents of the sentence */
@@ -166,4 +193,34 @@ typedef struct {
 /** The size of the wire format, minus the size of the node information */
 #define PUD_OLSRWIREFORMATSIZE (sizeof(PudOlsrWireFormat) - sizeof(NodeInfo))
 
+/* ************************************************************************
+ * FUNCTIONS
+ * ************************************************************************ */
+
+unsigned char getValidityTimeForOlsr(unsigned long long validityTime);
+unsigned long getValidityTimeFromOlsr(unsigned char internal);
+
+unsigned long getTimeForOlsr(int hour, int min, int sec);
+void getTimeFromOlsr(uint32_t olsrTime, struct tm *nowStruct);
+
+unsigned long getLatitudeForOlsr(double infoLat);
+double getLatitudeFromOlsr(uint32_t olsrLat);
+
+unsigned long getLongitudeForOlsr(double infoLon);
+double getLongitudeFromOlsr(uint32_t olsrLon);
+
+long getAltitudeForOlsr(double infoElv);
+long getAltitudeFromOlsr(uint32_t olsrAlt);
+
+long getSpeedForOlsr(double infoSpeed);
+unsigned long getSpeedFromOlsr(uint32_t olsrSpeed);
+
+long getTrackForOlsr(double infoTrack);
+unsigned long getTrackFromOlsr(uint32_t olsrTrack);
+
+long getHdopForOlsr(double infoHdop);
+double getHdopFromOlsr(uint32_t olsrHdop);
+
+NodeIdType getNodeIdType(int ipVersion, union olsr_message * olsrMessage);
+
 #endif /* _PUD_WIREFORMAT_H_ */