POK
blackboardread.c
1 /*
2  * POK header
3  *
4  * The following file is a part of the POK project. Any modification should
5  * made according to the POK licence. You CANNOT use this file or a part of
6  * this file is this part of a file for your own project
7  *
8  * For more information on the POK licence, please see our LICENCE FILE
9  *
10  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
11  *
12  * Copyright (c) 2007-2009 POK team
13  *
14  * Created by julien on Thu Jan 15 23:34:13 2009
15  */
16 
17 #include <core/dependencies.h>
18 
19 #ifdef POK_NEEDS_MIDDLEWARE
20 #ifdef POK_NEEDS_BLACKBOARDS
21 #include <errno.h>
22 #include <types.h>
23 #include <core/event.h>
24 #include <libc/string.h>
25 #include <middleware/blackboard.h>
26 
27 extern pok_blackboard_t pok_blackboards[POK_CONFIG_NB_BLACKBOARDS];
28 extern char pok_blackboards_data[1024];
29 
30 
31 pok_ret_t pok_blackboard_read (const pok_blackboard_id_t id,
32  const uint64_t timeout,
33  void* data,
34  pok_port_size_t* len)
35 {
36  (void) timeout;
37  if (id > POK_CONFIG_NB_BLACKBOARDS)
38  {
39  return POK_ERRNO_EINVAL;
40  }
41 
42  if (data == NULL)
43  {
44  return POK_ERRNO_EINVAL;
45  }
46 
47  if (pok_blackboards[id].ready != TRUE)
48  {
49  return POK_ERRNO_EINVAL;
50  }
51 
52  /* FIXME : Protect with mutexes when empty, ... */
53  /* See what is the condition to use the timeout */
54 
55  pok_event_lock (pok_blackboards[id].lock);
56 
57  memcpy (data, &pok_blackboards_data[pok_blackboards[id].index], pok_blackboards[id].size);
58 
59  pok_event_unlock (pok_blackboards[id].lock);
60 
61  /* FIXME : return right size */
62  *len = pok_blackboards[id].size;
63 
64  return POK_ERRNO_OK;
65 }
66 
67 #endif
68 #endif