94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "inc.h"
 | |
| 
 | |
| char *key_u32 = "test_u32";
 | |
| 
 | |
| /* SEF functions and variables. */
 | |
| static void sef_local_startup(void);
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *				main					     *
 | |
|  *===========================================================================*/
 | |
| int main(void)
 | |
| {
 | |
| 	int r;
 | |
| 	message mess;
 | |
| 	char key[DS_MAX_KEYLEN];
 | |
| 	int type;
 | |
| 	unsigned long num;
 | |
| 	char string[17];
 | |
| 	char buf[1000];
 | |
| 	size_t length = 1000;
 | |
| 
 | |
| 	/* SEF local startup. */
 | |
| 	sef_local_startup();
 | |
| 
 | |
| 	/* Subscribe. */
 | |
| 	r = ds_subscribe(key_u32, DSF_INITIAL);
 | |
| 	if(r != OK && r != EEXIST) {
 | |
| 		printf("SUBSCRIBER: error in ds_subscribe: %d\n", r);
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	while(1) {
 | |
| 		/* Wait for a message. */
 | |
| 		r = sef_receive(ANY, &mess);
 | |
| 		if(r != OK) {
 | |
| 			printf("SUBSCRIBER: sef_receive failed.\n");
 | |
| 			return 1;
 | |
| 		}
 | |
| 		/* Only handle notifications from DS. */
 | |
| 		if(mess.m_source != DS_PROC_NR)
 | |
| 			continue;
 | |
| 
 | |
| 		/* Check which one was changed. */
 | |
| 		r = ds_check(key, &type, NULL);
 | |
| 		if(r == ENOENT) {
 | |
| 			printf("SUBSCRIBER: the key %s was deleted.\n",
 | |
| 				key);
 | |
| 			continue;
 | |
| 		}
 | |
| 		if(r != OK) {
 | |
| 			printf("SUBSCRIBER: error in ds_check.\n");
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		/* Retrieve the entry. */
 | |
| 		printf("SUBSCRIBER: key: %s, ", key);
 | |
| 		switch(type) {
 | |
| 		case DSF_TYPE_U32:
 | |
| 			r = ds_retrieve_u32(key, &num);
 | |
| 			if(r != OK)
 | |
| 				printf("error in ds_retrieve_u32.\n");
 | |
| 			printf("U32: %d\n", num);
 | |
| 			break;
 | |
| 		case DSF_TYPE_STR:
 | |
| 			r = ds_retrieve_str(key, string, sizeof(string)-1);
 | |
| 			if(r != OK)
 | |
| 				printf("error in ds_retrieve_str.\n");
 | |
| 			printf("STR: %s\n", string);
 | |
| 			break;
 | |
| 		case DSF_TYPE_MEM:
 | |
| 			r = ds_retrieve_mem(key, buf, &length);
 | |
| 			if(r != OK)
 | |
| 				printf("error in ds_retrieve_mem.\n");
 | |
| 			break;
 | |
| 		case DSF_TYPE_MAP:
 | |
| 			break;
 | |
| 		default:
 | |
| 			printf("error in type! %d\n", type);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *			       sef_local_startup			     *
 | |
|  *===========================================================================*/
 | |
| static void sef_local_startup()
 | |
| {
 | |
|   /* Let SEF perform startup. */
 | |
|   sef_startup();
 | |
| }
 | |
| 
 | 
