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
132
133
134
135
136
137
138
139
140
|
/**
* mds — A micro-display server
* Copyright © 2014, 2015 Mattias Andrée (maandree@member.fsf.org)
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef MDS_MDS_COLOUR_H
#define MDS_MDS_COLOUR_H
#include "mds-base.h"
#include <stdint.h>
/**
* Data structure for colour
*/
typedef struct colour
{
/**
* The value of the red channel
*/
uint64_t red;
/**
* The value of the green channel
*/
uint64_t green;
/**
* The value of the blue channel
*/
uint64_t blue;
/**
* The number of bytes with which
* each channel is encoded
*/
int bytes;
} colour_t;
/**
* Slot for a colour in a list of colours
*/
typedef struct colour_slot
{
/**
* The name of the colour, `NULL` if the slot is unused
*/
char* name;
/**
* The index of the next unused slot,
* only used on unused slot
*/
size_t next_unused;
/**
* The index of the previous unused slot,
* only used on unused slot
*/
size_t prev_unused;
/**
* The hash of `name`
*/
size_t name_hash;
/**
* The value of the colour
*/
colour_t colour;
} colour_slot_t;
/**
* Handle the received message
*
* @return Zero on success, -1 on error
*/
int handle_message(void);
/**
* Handle the received message after it has been
* identified to contain `Command: list-colours`
*
* @param recv_client_id The value of the `Client ID`-header, "0:0" if omitted
* @param recv_message_id The value of the `Message ID`-header
* @param recv_include_values The value of the `Include values`-header, `NULL` if omitted
* @return Zero on success, -1 on error
*/
int handle_list_colours(const char* recv_client_id, const char* recv_message_id,
const char* recv_include_values);
/**
* Handle the received message after it has been
* identified to contain `Command: get-colour`
*
* @param recv_client_id The value of the `Client ID`-header, "0:0" if omitted
* @param recv_message_id The value of the `Message ID`-header
* @param recv_name The value of the `Name`-header, `NULL` if omitted
* @return Zero on success, -1 on error
*/
int handle_get_colour(const char* recv_client_id, const char* recv_message_id, const char* recv_name);
/**
* Handle the received message after it has been
* identified to contain `Command: set-colour`
*
* @param recv_name The value of the `Name`-header, `NULL` if omitted
* @param recv_remove The value of the `Remove`-header, `NULL` if omitted
* @param recv_bytes The value of the `Bytes`-header, `NULL` if omitted
* @param recv_red The value of the `Red`-header, `NULL` if omitted
* @param recv_green The value of the `Green`-header, `NULL` if omitted
* @param recv_blue The value of the `Blue`-header, `NULL` if omitted
* @return Zero on success, -1 on error
*/
int handle_set_colour(const char* recv_name, const char* recv_remove, const char* recv_bytes,
const char* recv_red, const char* recv_green, const char* recv_blue);
#endif
|