v1.0.0
Stefan Schuermans authored 13 years ago
|
1) #include <stdarg.h>
2) #include <stdio.h>
3) #include <stdlib.h>
4)
5) #include <flexipix/flexipix.h>
6)
|
v1.0.6
Stefan Schuermans authored 13 years ago
|
7) #ifdef WINDOWS
8) #include <winsock.h>
9) #endif
10)
|
v1.0.5
Stefan Schuermans authored 13 years ago
|
11) /* just an example for some data */
|
v1.0.0
Stefan Schuermans authored 13 years ago
|
12) typedef struct userdata_s {
13) int i;
14) float f;
15) char c;
16) } userdata_t;
17)
18) /* callback function called during display creation,
19) the p_ctx parameter is the userdata supplied in the call
20) to flp_display_create() */
21) void msg(void *p_ctx, flp_msg_type_t type, const char *fmt, ...)
22) {
23) userdata_t *p_userdata = (userdata_t *)p_ctx;
24) va_list va;
25)
26) printf("msg (%d %f %c): ",
27) p_userdata->i, p_userdata->f,
28) p_userdata->c); /* make use of the userdata */
29)
30) /* type tells if the message is an error, a warning or an information */
31) switch (type) {
32) case flp_msg_type_err:
33) printf("ERROR: ");
34) break;
35) case flp_msg_type_warn:
36) printf("WARNING: ");
37) break;
38) case flp_msg_type_info:
39) printf("INFORMATION: ");
40) break;
41) }
42)
43) /* fmt is a printf-style format string,
44) the arguments are passed exactly as for printf */
45) va_start(va, fmt);
46) vprintf(fmt, va);
47) va_end(va);
48) }
49)
50) int main(int argc, char *argv[])
51) {
52) const char *config;
|
v1.0.5
Stefan Schuermans authored 13 years ago
|
53) userdata_t userdata = { 42, 42.0, '!' }; /* just an example */
|
v1.0.0
Stefan Schuermans authored 13 years ago
|
54) flp_displayer_t *p_displayer;
55) unsigned int width, height, i, j, c, x, y;
56) flp_u8_t *p_image;
57) char line[64];
58)
59) if (argc < 2) {
60) printf("usage: %s <config.flp>\n", argv[0]);
61) return -1;
62) }
63) config = argv[1];
64)
|
v1.0.6
Stefan Schuermans authored 13 years ago
|
65) #ifdef WINDOWS
66) {
67) WSADATA data;
68) WSAStartup(MAKEWORD(1,1), &data);
69) }
70) #endif
71)
|
v1.0.0
Stefan Schuermans authored 13 years ago
|
72) /* create a displayer that manages a display in the background
73) and takes care that data is sent periodically to the distributors
74) to prevent that the pixels turn off after a timeout,
75) take the configuration from a file,
76) deliver messages to the callback function msg(),
77) the last parameter is passed as first parameter to msg()
78) and can be used to supply some user defined data */
79) p_displayer = flp_displayer_create(config, msg, (void *)&userdata);
80) if (!p_displayer) {
81) printf("could not create displayer\n");
82) return -1;
83) }
84)
85) flp_displayer_get_size(p_displayer, &width, &height);
86) printf("width: %5u\nheight: %5u\n", width, height);
87)
88) /* create a buffer for the image */
89) p_image = (flp_u8_t *)malloc(height * width * 3);
90) if (!p_image) {
91) flp_displayer_free(p_displayer);
92) printf("out of memory\n");
93) return -1;
94) }
95)
96) /* make displayer start sending data to distributors */
97) flp_displayer_activate(p_displayer);
98)
99) /* The following loop will spent most waiting for user input.
100) While it is waiting, the displayer will periodically sent
101) data to the distributors. */
102)
103) printf("enter something, \".\" for end\n");
104) while (1) {
105)
106) /* wait for user input */
107) printf("> ");
108) scanf("%50s", line);
109) if (line[0] == 0 || (line[0] == '.' && line[1] == 0))
110) break;
111)
112) /* create some image from entered text
113) (this is just creating some image out of the entered data,
114) it does not do any useful processing) */
115) i = 0;
116) j = 0;
117) for (y = 0; y < height; ++y) {
118) for (x = 0; x < width; ++x) {
119) for (c = 0; c < 3; ++c) {
120) p_image[i++] = (line[j++] & 0xF) * 0x11;
121) if (line[j] == 0)
122) j = 0;
123) }
124) }
125) }
126)
127) /* set new image */
128) flp_displayer_data(p_displayer, p_image,
129) 3, /* consecutive pixels are 3 bytes apart */
130) width*3, /* consecutive lines are width*3 bytes apart */
131) 0, 0, width, height);
132) /* force sending data to distris immediately */
133) flp_displayer_send(p_displayer);
134)
135) } /* while (1) */
136)
137) free(p_image);
138) flp_displayer_free(p_displayer);
|
v1.0.6
Stefan Schuermans authored 13 years ago
|
139)
140) #ifdef WINDOWS
141) WSACleanup();
142) #endif
143)
|