1 #include "inc.h"
2
3 char *key_u32 = "test_u32";
4
5 /* SEF functions and variables. */
6 static void sef_local_startup(void);
7
8 /*===========================================================================*
9 * main *
10 *===========================================================================*/
main(void)11 int main(void)
12 {
13 int r;
14 message mess;
15 char key[DS_MAX_KEYLEN];
16 int type;
17 u32_t num;
18 char string[17];
19 char buf[1000];
20 size_t length = 1000;
21
22 /* SEF local startup. */
23 sef_local_startup();
24
25 /* Subscribe. */
26 r = ds_subscribe(key_u32, DSF_INITIAL);
27 if(r != OK && r != EEXIST) {
28 printf("SUBSCRIBER: error in ds_subscribe: %d\n", r);
29 return -1;
30 }
31
32 while(1) {
33 /* Wait for a message. */
34 r = sef_receive(ANY, &mess);
35 if(r != OK) {
36 printf("SUBSCRIBER: sef_receive failed.\n");
37 return 1;
38 }
39 /* Only handle notifications from DS. */
40 if(mess.m_source != DS_PROC_NR)
41 continue;
42
43 /* Check which one was changed. */
44 r = ds_check(key, &type, NULL);
45 if(r == ENOENT) {
46 printf("SUBSCRIBER: the key %s was deleted.\n",
47 key);
48 continue;
49 }
50 if(r != OK) {
51 printf("SUBSCRIBER: error in ds_check.\n");
52 continue;
53 }
54
55 /* Retrieve the entry. */
56 printf("SUBSCRIBER: key: %s, ", key);
57 switch(type) {
58 case DSF_TYPE_U32:
59 r = ds_retrieve_u32(key, &num);
60 if(r != OK)
61 printf("error in ds_retrieve_u32.\n");
62 printf("U32: %d\n", num);
63 break;
64 case DSF_TYPE_STR:
65 r = ds_retrieve_str(key, string, sizeof(string)-1);
66 if(r != OK)
67 printf("error in ds_retrieve_str.\n");
68 printf("STR: %s\n", string);
69 break;
70 case DSF_TYPE_MEM:
71 r = ds_retrieve_mem(key, buf, &length);
72 if(r != OK)
73 printf("error in ds_retrieve_mem.\n");
74 break;
75 default:
76 printf("error in type! %d\n", type);
77 }
78 }
79
80 return 0;
81 }
82
83 /*===========================================================================*
84 * sef_local_startup *
85 *===========================================================================*/
sef_local_startup()86 static void sef_local_startup()
87 {
88 /* Let SEF perform startup. */
89 sef_startup();
90 }
91
92