POK
/home/jaouen/pok_official/pok/trunk/libpok/middleware/buffercreate.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_BUFFERS
00021 
00022 #include <errno.h>
00023 #include <types.h>
00024 #include <core/time.h>
00025 #include <core/event.h>
00026 #include <libc/string.h>
00027 #include <middleware/buffer.h>
00028 
00029 extern pok_buffer_t    pok_buffers[POK_CONFIG_NB_BUFFERS];
00030 extern char*           pok_buffers_names[POK_CONFIG_NB_BUFFERS];
00031 pok_size_t             pok_buffers_data_index = 0;
00032 
00033 
00034 pok_ret_t pok_buffer_create (char*                                 name, 
00035                              const pok_port_size_t                 size, 
00036                              const pok_port_size_t                 msg_size, 
00037                              const pok_queueing_discipline_t       discipline,
00038                              pok_buffer_id_t*                      id)
00039 {
00040    uint8_t     n;
00041    pok_ret_t   ret;
00042 
00043    for (n=0 ; n < POK_CONFIG_NB_BUFFERS ; n++)
00044    {
00045       if (streq (name, pok_buffers_names[n]))
00046       {
00047          if (pok_buffers[n].ready == TRUE)
00048          {
00049             return POK_ERRNO_READY;
00050          }
00051 
00052          ret = pok_event_create (&pok_buffers[n].lock);
00053 
00054          if (ret != POK_ERRNO_OK)
00055          {
00056             return ret;
00057          }
00058 
00059          pok_buffers[n].index                = pok_buffers_data_index;
00060          pok_buffers[n].ready                = TRUE;
00061          pok_buffers[n].empty                = TRUE;
00062          pok_buffers[n].size                 = size;
00063          pok_buffers[n].msgsize              = msg_size;
00064          pok_buffers[n].waiting_processes    = 0;
00065          pok_buffers[n].off_e                = 0;
00066          pok_buffers[n].off_b                = 0;
00067          pok_buffers[n].discipline           = discipline;
00068 
00069          pok_buffers_data_index              = pok_buffers_data_index + size;
00070 
00071          *id = n;
00072 
00073          return POK_ERRNO_OK;
00074       }
00075 
00076    }
00077 
00078    return POK_ERRNO_EINVAL;
00079 }
00080 
00081 #endif /* POK_NEEDS_BUFFERS */
00082 #endif /* POK_NEEDS_MIDDLEWARE */