Bugfixes
[rtl-433.git] / include / rtl_433.h
1 #ifndef INCLUDE_RTL_433_H_
2 #define INCLUDE_RTL_433_H_
3
4 #include <errno.h>
5 #include <signal.h>
6 #include <string.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <time.h>
10 #include <stdint.h>
11
12 #include "rtl_433_devices.h"
13 #include "bitbuffer.h"
14 #include "data.h"
15
16 #ifndef _WIN32
17 #include <unistd.h>
18 #else
19 #include <windows.h>
20 #include <io.h>
21 #include <fcntl.h>
22 #ifndef __MINGW32__
23 #include "getopt/getopt.h"
24 #else
25 #include <getopt.h>
26 #endif
27 #endif
28
29 #define DEFAULT_SAMPLE_RATE     250000
30 #define DEFAULT_FREQUENCY       433920000
31 #define DEFAULT_HOP_TIME        (60*10)
32 #define DEFAULT_HOP_EVENTS      2
33 #define DEFAULT_ASYNC_BUF_NUMBER    32
34 #define DEFAULT_BUF_LENGTH      (16 * 16384)
35
36 /*
37  * Theoretical high level at I/Q saturation is 128x128 = 16384 (above is ripple)
38  * 0 = automatic adaptive level limit, else fixed level limit
39  * 8000 = previous fixed default
40  */
41 #define DEFAULT_LEVEL_LIMIT     0
42
43 #define MINIMAL_BUF_LENGTH      512
44 #define MAXIMAL_BUF_LENGTH      (256 * 16384)
45 #define MAX_PROTOCOLS           77
46 #define SIGNAL_GRABBER_BUFFER   (12 * DEFAULT_BUF_LENGTH)
47
48 /* Supported modulation types */
49 #define OOK_PULSE_MANCHESTER_ZEROBIT    3       // Manchester encoding. Hardcoded zerobit. Rising Edge = 0, Falling edge = 1
50 #define OOK_PULSE_PCM_RZ                4                       // Pulse Code Modulation with Return-to-Zero encoding, Pulse = 0, No pulse = 1
51 #define OOK_PULSE_PPM_RAW               5                       // Pulse Position Modulation. No startbit removal. Short gap = 0, Long = 1
52 #define OOK_PULSE_PWM_PRECISE   6                       // Pulse Width Modulation with precise timing parameters
53 #define OOK_PULSE_PWM_RAW               7                       // Pulse Width Modulation. Short pulses = 1, Long = 0
54 #define OOK_PULSE_PWM_TERNARY   8                       // Pulse Width Modulation with three widths: Sync, 0, 1. Sync determined by argument
55 #define OOK_PULSE_CLOCK_BITS    9                       // Level shift within the clock cycle.
56 #define OOK_PULSE_PWM_OSV1              10                      // Pulse Width Modulation. Oregon Scientific v1
57
58 #define FSK_DEMOD_MIN_VAL               16                      // Dummy. FSK demodulation must start at this value
59 #define FSK_PULSE_PCM                   16                      // FSK, Pulse Code Modulation
60 #define FSK_PULSE_PWM_RAW               17                      // FSK, Pulse Width Modulation. Short pulses = 1, Long = 0
61 #define FSK_PULSE_MANCHESTER_ZEROBIT 18         // FSK, Manchester encoding
62
63 extern int debug_output;
64 extern float sample_file_pos;
65
66 struct protocol_state {
67     int (*callback)(bitbuffer_t *bitbuffer);
68
69    // Bits state (for old sample based decoders)
70     bitbuffer_t bits;
71
72     unsigned int modulation;
73
74     /* pwm limits (provided by driver in µs and converted to samples) */
75     float short_limit;
76     float long_limit;
77     float reset_limit;
78     char *name;
79     unsigned long demod_arg;
80 };
81
82 void data_acquired_handler(data_t *data);
83
84 #endif /* INCLUDE_RTL_433_H_ */