e2a21a2a7d8bad7a082a53134837a15c1bea740d
Stefan Schuermans 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) 
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

7) #ifdef WINDOWS
8) #include <winsock.h>
9) #endif
10) 
Stefan Schuermans v1.0.5

Stefan Schuermans authored 13 years ago

11) /* just an example for some data */
Stefan Schuermans 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;
Stefan Schuermans v1.0.5

Stefan Schuermans authored 13 years ago

53)   userdata_t userdata = { 42, 42.0, '!' }; /* just an example */
Stefan Schuermans 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) 
Stefan Schuermans 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) 
Stefan Schuermans 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);
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

139) 
140) #ifdef WINDOWS
141)   WSACleanup();
142) #endif
143)