Changes in uspace/app/vlaunch/vlaunch.c [1c635d6:a047aaa] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/vlaunch/vlaunch.c
r1c635d6 ra047aaa 37 37 #include <stdio.h> 38 38 #include <malloc.h> 39 #include <io/pixel.h>40 39 #include <task.h> 41 #include <str.h>42 40 #include <str_error.h> 43 #include <loc.h>44 #include <fibril_synch.h>45 #include <io/pixel.h>46 #include <device/led_dev.h>47 41 48 42 #include <window.h> … … 64 58 #define LOGO_HEIGHT 66 65 59 66 #define PERIOD 100000067 #define COLORS 768 69 60 static char *winreg = NULL; 70 static fibril_timer_t *timer = NULL;71 static list_t led_devs;72 73 static pixel_t colors[COLORS] = {74 PIXEL(0xff, 0xff, 0x00, 0x00),75 PIXEL(0xff, 0x00, 0xff, 0x00),76 PIXEL(0xff, 0x00, 0x00, 0xff),77 PIXEL(0xff, 0xff, 0xff, 0x00),78 PIXEL(0xff, 0xff, 0x00, 0xff),79 PIXEL(0xff, 0x00, 0xff, 0xff),80 PIXEL(0xff, 0xff, 0xff, 0xff)81 };82 83 static unsigned int color = 0;84 85 typedef struct {86 link_t link;87 service_id_t svc_id;88 async_sess_t *sess;89 } led_dev_t;90 61 91 62 static int app_launch(const char *app) … … 129 100 } 130 101 131 static void timer_callback(void *data)132 {133 pixel_t next_color = colors[color];134 135 color++;136 if (color >= COLORS)137 color = 0;138 139 list_foreach(led_devs, link, led_dev_t, dev) {140 if (dev->sess)141 led_dev_color_set(dev->sess, next_color);142 }143 144 fibril_timer_set(timer, PERIOD, timer_callback, NULL);145 }146 147 static void loc_callback(void)148 {149 category_id_t led_cat;150 int rc = loc_category_get_id("led", &led_cat, IPC_FLAG_BLOCKING);151 if (rc != EOK)152 return;153 154 service_id_t *svcs;155 size_t count;156 rc = loc_category_get_svcs(led_cat, &svcs, &count);157 if (rc != EOK)158 return;159 160 for (size_t i = 0; i < count; i++) {161 bool known = false;162 163 /* Determine whether we already know this device. */164 list_foreach(led_devs, link, led_dev_t, dev) {165 if (dev->svc_id == svcs[i]) {166 known = true;167 break;168 }169 }170 171 if (!known) {172 led_dev_t *dev = (led_dev_t *) calloc(1, sizeof(led_dev_t));173 if (!dev)174 continue;175 176 link_initialize(&dev->link);177 dev->svc_id = svcs[i];178 dev->sess = loc_service_connect(EXCHANGE_SERIALIZE, svcs[i], 0);179 180 list_append(&dev->link, &led_devs);181 }182 }183 184 // FIXME: Handle LED device removal185 186 free(svcs);187 }188 189 102 int main(int argc, char *argv[]) 190 103 { 191 104 if (argc < 2) { 192 105 printf("Compositor server not specified.\n"); 193 return 1;194 }195 196 list_initialize(&led_devs);197 int rc = loc_register_cat_change_cb(loc_callback);198 if (rc != EOK) {199 printf("Unable to register callback for device discovery.\n");200 return 1;201 }202 203 timer = fibril_timer_create(NULL);204 if (!timer) {205 printf("Unable to create timer.\n");206 106 return 1; 207 107 } … … 262 162 window_exec(main_window); 263 163 264 fibril_timer_set(timer, PERIOD, timer_callback, NULL);265 266 164 task_retval(0); 267 165 async_manager();
Note:
See TracChangeset
for help on using the changeset viewer.