2 * irmp-main-sharedlib.h
4 * Copyright (c) 2009-2019 Frank Meyer - frank(at)fli4l.de
5 * Copyright (c) 2009-2019 René Staffen - r.staffen(at)gmx.de
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
13 #ifndef IRMP_SHAREDLIB_H
14 #define IRMP_SHAREDLIB_H
23 /* Export the public API routines. */
24 #ifndef IRMP_DLLEXPORT
25 # if defined WIN32 && defined _MSC_VER
26 # define IRMP_DLLEXPORT __declspec(dllexport)
28 # define IRMP_DLLEXPORT __attribute__((visibility("default")))
32 /* Part of the library API is optional. */
33 #define WITH_IRMP_DETECT_BUFFER 0
36 * @brief IR decoder result data at the library's public API.
38 struct irmp_result_data {
39 uint32_t protocol; /**!< protocol, e.g. NEC_PROTOCOL */
40 const char *protocol_name; /**!< name of the protocol */
41 uint32_t address; /**!< address */
42 uint32_t command; /**!< command */
43 uint32_t flags; /**!< flags currently only repetition (bit 0) */
44 uint32_t start_sample; /**!< the sampleindex there the detected command started */
45 uint32_t end_sample; /**!< the sampleindex there the detected command ended */
48 #define IRMP_DATA_FLAG_REPETITION (1 << 0)
51 * @brief Query the IRMP library's configured sample rate.
53 * The internally used sample rate is a compile time option. Any data
54 * that is provided at runtime needs to match this rate, or detection
57 IRMP_DLLEXPORT uint32_t irmp_get_sample_rate(void);
60 * @brief Reset internal decoder state.
62 * This must be called before data processing starts.
64 IRMP_DLLEXPORT void irmp_reset_state(void);
67 * @brief Feed an individual sample to the detector.
69 * See @ref irmp_get_result_data() for result retrieval when detection
70 * of an IR frame completes. Make sure @ref irmp_reset_state() was
71 * called before providing the first sample.
73 * @param[in] sample The pin value to feed to the detector.
75 * @returns Non-zero when an IR frame was detected.
77 IRMP_DLLEXPORT int irmp_add_one_sample(int sample);
79 #if WITH_IRMP_DETECT_BUFFER
81 * @brief Process the given buffer until an IR frame is found.
83 * Stops at the first detected IR frame, and returns its data. Subsequent
84 * calls resume processing at the previously stopped position. Make sure
85 * @ref irmp_reset_state() was called before the first detect call.
87 * @param[in] buf Pointer to the data buffer.
88 * @param[in] len Number of samples in the Buffer.
90 IRMP_DLLEXPORT struct irmp_result_data irmp_detect_buffer(const uint8_t *buf, size_t len);
94 * @brief Query result data after detection succeeded.
96 * @param[out] data The caller provided result buffer.
98 * @returns Non-zero if data was available, zero otherwise.
100 IRMP_DLLEXPORT int irmp_get_result_data(struct irmp_result_data *data);
103 * @brief Resolve the protocol identifer to the protocol's name.
105 * @param[in] protocol The numerical identifier.
107 * @returns A pointer to the string literal, or #NULL in case of failure.
109 IRMP_DLLEXPORT const char *irmp_get_protocol_name(uint32_t protocol);