POK
/home/jaouen/pok_official/pok/trunk/libpok/middleware/blackboardread.c
00001 /*
00002  *                               POK header
00003  * 
00004  * The following file is a part of the POK project. Any modification should
00005  * made according to the POK licence. You CANNOT use this file or a part of
00006  * this file is this part of a file for your own project
00007  *
00008  * For more information on the POK licence, please see our LICENCE FILE
00009  *
00010  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
00011  *
00012  *                                      Copyright (c) 2007-2009 POK team 
00013  *
00014  * Created by julien on Thu Jan 15 23:34:13 2009 
00015  */
00016 
00017 #include <core/dependencies.h>
00018 
00019 #ifdef POK_NEEDS_MIDDLEWARE
00020 #ifdef POK_NEEDS_BLACKBOARDS
00021 #include <errno.h>
00022 #include <types.h>
00023 #include <core/event.h>
00024 #include <libc/string.h>
00025 #include <middleware/blackboard.h>
00026 
00027 extern pok_blackboard_t    pok_blackboards[POK_CONFIG_NB_BLACKBOARDS];
00028 extern char                pok_blackboards_data[1024];
00029 
00030 
00031 pok_ret_t pok_blackboard_read (const pok_blackboard_id_t   id, 
00032                                const uint64_t              timeout,
00033                                void*                       data,
00034                                pok_port_size_t*            len)
00035 {
00036    (void) timeout;
00037    if (id > POK_CONFIG_NB_BLACKBOARDS)
00038    {
00039       return POK_ERRNO_EINVAL;
00040    }
00041 
00042    if (data == NULL)
00043    {
00044       return POK_ERRNO_EINVAL;
00045    }
00046 
00047    if (pok_blackboards[id].ready != TRUE)
00048    {
00049       return POK_ERRNO_EINVAL;
00050    }
00051 
00052    /* FIXME : Protect with mutexes when empty, ... */ 
00053    /* See what is the condition to use the timeout */
00054 
00055    pok_event_lock (pok_blackboards[id].lock);
00056 
00057    memcpy (data, &pok_blackboards_data[pok_blackboards[id].index], pok_blackboards[id].size);
00058 
00059    pok_event_unlock (pok_blackboards[id].lock);
00060 
00061    /* FIXME : return right size */
00062    *len = pok_blackboards[id].size;
00063 
00064    return POK_ERRNO_OK;
00065 }
00066 
00067 #endif
00068 #endif