summaryrefslogtreecommitdiffstats
path: root/package/tapi_sip/src/dialdetector.h
blob: c3737c36e9c3cc14c408d321e5c6ffacde99a6af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <linux/input.h>
#include <sys/epoll.h>
#include <stdint.h>
#include <stdbool.h>


#include <stdlib.h>
#include <stdio.h>

#include "events.h"
#include "timerfd.h"

#include "tapi-port.h"

enum dialdetector_dial_state {
	DIALDETECTOR_DIAL_WAIT = 1,
	DIALDETECTOR_DIAL_WAIT_TIMEOUT = 2,
};

enum dialdetector_port_state {
	DIALDETECTOR_PORT_INACTIVE = 0,
	DIALDETECTOR_PORT_ACTIVE = 1,
	DIALDETECTOR_PORT_ACTIVE_DOWN = 2,
};

struct dialdetector {
	enum dialdetector_dial_state dial_state;
	enum dialdetector_port_state port_state;

	struct tapi_port *port;
	int timer_fd;
	int impulse_timer_fd;

	struct event_callback timeout_cb;
	struct event_callback impulse_cb;
	struct tapi_port_event_listener port_listener;

	size_t num_digits;
	unsigned char digits[20];

	unsigned int impulses;

	void (*dial_callback)(struct tapi_port *port, size_t num_digits, const unsigned char *digits);
};


struct tapi_port;

struct dialdetector *dialdetector_alloc(struct tapi_port *port);