ebus: Switch to a 10ms ticker
[wk-misc.git] / ebus / ebus.h
1 /* ebus.h - Global definitions for an Elektor Bus Node
2  * Copyright (C) 2011 g10 Code GmbH
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #ifndef EBUS_H
19 #define EBUS_H
20
21 #include <avr/pgmspace.h>
22 #include "protocol.h"
23 #include "revision.h"
24
25
26 /* Typedefs.  */
27 typedef unsigned char byte;
28
29
30 /* We only support 16 byte long messages.  */
31 #define MSGSIZE 16
32
33
34 /* For fast access we copy some of the config data into the RAM.  */
35 struct
36 {
37   byte nodeid_hi;
38   byte nodeid_lo;
39   byte debug_flags;
40   byte reset_flags;
41 } config;
42
43
44 /* Set to one (e.g. the timer int) to wakeup the main loop.  */
45 volatile char wakeup_main;
46
47 /* We need a flag indicating whether the time has been set.  */
48 byte time_has_been_set;
49
50
51 /*-- hardware.c --*/
52 void hardware_setup (byte nodetype);
53 byte read_key_s2 (void);
54 byte read_key_s3 (void);
55 uint16_t get_current_time (void);
56 uint16_t get_current_fulltime (byte *r_deci);
57 void set_current_fulltime (uint16_t tim, byte deci);
58 void set_debug_flags (uint8_t value);
59
60
61 /*-- csma.c --*/
62 void csma_setup (void);
63 unsigned int csma_get_stats (int what);
64 void csma_send_message (const byte *data, byte datalen);
65 byte *csma_get_message (void);
66 void csma_message_done (void);
67
68 /*-- onewire.c --*/
69 void onewire_setup (void);
70 void onewire_enable (void);
71 void onewire_disable (void);
72 void onewire_write_byte (uint8_t c);
73 uint8_t onewire_read_byte (void);
74 void onewire_wait_for_one (void);
75
76 /*-- i2c.c --*/
77 void i2c_setup (void);
78 byte i2c_start_mt (byte address);
79 byte i2c_send_byte (byte value);
80 byte i2c_send_data (byte *data, byte datalen);
81 void i2c_stop (void);
82
83
84 /*-- i2c-lcd.c --*/
85 void lcd_setup (void);
86 void lcd_init (void);
87 void lcd_backlight (uint8_t onoff);
88 void lcd_putc (uint8_t c);
89 void lcd_clear (void);
90 void lcd_home (void);
91 void lcd_gotoxy (uint8_t x, uint8_t y);
92 void lcd_puts (const char *s);
93 void _lcd_puts_P (const char *progmem_s);
94 #define lcd_puts_P(s)  _lcd_puts_P (PSTR ((s)))
95
96
97 /*-- Callbacks to be implemented by each node  --*/
98 #define MILLISEC(a)  ((a)/10)
99 void ticker_bottom (unsigned int clock);  /* Called by hardware.c. */
100
101
102 /* Helper macros.  */
103 #define DIM(v)               (sizeof(v)/sizeof((v)[0]))
104
105
106 #endif /*EBUS_H*/