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 *===========================================================================*/ 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 *===========================================================================*/ 86 static void sef_local_startup() 87 { 88 /* Let SEF perform startup. */ 89 sef_startup(); 90 } 91 92