summaryrefslogtreecommitdiff
path: root/cleopatre/application/managerd/inc/gpio_event.h
blob: d2f590acb6ab1db84b8fd60c2cd202e01d78cfef (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * cleopatre/application/managerd/inc/gpio_event.h
 *
 * (C) Copyright 2010 SPiDCOM Technologies
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */
#ifndef GPIO_EVENT_H
#define GPIO_EVENT_H

struct managerd_ctx;

/** GPIO number for SC button and it associated LED */
#define SC_BUT_GPIO_NUM 1

/** LED GPIO numbers */
#if !defined (CONFIG_HAVE_POWER_LED)
#  define LED_ATTACHMENT_GPIO_NUM 3
#endif

/** Blinking timers */
#define LED_FAST_TIMER_US   100000
#define LED_LOW_TIMER_US    500000

/** name of the gpio device */
#define GPIO_DEVICE_NAME    "/dev/gpio"

/**
 * Simple Connect detection event.
 *
 * \param  ctx  managerd context
 * \return  error code
 */
int
simple_connect_event (struct managerd_ctx *ctx);

/**
 * Open and set GPIO direction.
 *
 * \param  ctx  managerd context
 * \return  error code
 */
int
simple_connect_init (struct managerd_ctx *ctx);

/**
 * Close gpio device.
 *
 * \param  ctx  managerd context
 */
void
simple_connect_uninit (struct managerd_ctx *ctx);

/**
 * Handle SIGALRM reception.
 *
 * \param  signal_nb  signal identifier
 */
void
led_signal_handler (int signal_nb);

/**
 * When timer expires, this function is called to invert current value of LED,
 * in order to make it blink.
 */
void
led_flashing (void);

/**
 * LED attachment event.
 *
 * \param  ctx  managerd context
 * \param  status  current status value from hpav.info
 * \param  is_sc  current Simple Connect value from hpav.info
 * \return  error code
 */
int
led_attachment_event (struct managerd_ctx *ctx, const char *status,
                      libspid_boolean_t is_sc);

/**
 * LED1 event.
 *
 * \param  ctx  managerd context
  * \param  cco  current CCo value from hpav.info
 * \return  error code
 */
int
led1_event (struct managerd_ctx *ctx, const char *cco);

/**
 * LED2 event.
 *
 * \param  ctx  managerd context
  * \param  is_backup_cco  current backup CCo value from hpav.info
 * \return  error code
 */
int
led2_event (struct managerd_ctx *ctx, libspid_boolean_t is_backup_cco);

/**
 * Initialize LED-s: set GPIO direction and value.
 *
 * \param  ctx  managerd context
 * \return  error code
 */
int
led_init (struct managerd_ctx *ctx);

/**
 * Uninitialize LED-s: reset GPIO value.
 *
 * \param  ctx  managerd context
 */
void
led_uninit (struct managerd_ctx *ctx);

#endif /* GPIO_EVENT_H */