POK(kernelpart)
/home/jaouen/pok_official/pok/trunk/kernel/middleware/portsamplingstatus.c
Go to the documentation of this file.
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 
00018 #ifdef POK_NEEDS_PORTS_SAMPLING
00019 
00024 #ifndef POK_GENERATED_CODE
00025 
00026 #include <errno.h>
00027 #include <types.h>
00028 #include <core/sched.h>
00029 #include <core/time.h>
00030 #include <middleware/port.h>
00031 
00032 extern pok_port_t pok_ports[POK_CONFIG_NB_PORTS];
00033 
00034 pok_ret_t pok_port_sampling_status (const pok_port_id_t         id,
00035                                     pok_port_sampling_status_t* status)
00036 {
00037    if (id > POK_CONFIG_NB_PORTS)
00038    {
00039       return POK_ERRNO_EINVAL;
00040    }
00041 
00042    if (! pok_own_port (POK_SCHED_CURRENT_PARTITION, id))
00043    {
00044       return POK_ERRNO_PORT;
00045    }
00046 
00047    if (pok_ports[id].ready == FALSE)
00048    {
00049       return POK_ERRNO_EINVAL;
00050    }
00051 
00052    if (pok_ports[id].kind != POK_PORT_KIND_SAMPLING)
00053    {
00054       return POK_ERRNO_EINVAL;
00055    }
00056 
00057    if (pok_ports[id].partition != POK_SCHED_CURRENT_PARTITION)
00058    {
00059       return POK_ERRNO_EINVAL;
00060    }
00061 
00062    status->size      = pok_ports[id].size;
00063    status->direction = pok_ports[id].direction;
00064    status->refresh   = pok_ports[id].refresh; 
00065 
00066    if ( (pok_ports[id].last_receive + pok_ports[id].refresh) < POK_GETTICK())
00067    {
00068       status->validity = FALSE;
00069    }
00070    else
00071    {
00072       status->validity = TRUE;
00073    }
00074 
00075    return POK_ERRNO_OK;
00076 }
00077 
00078 #endif
00079 
00080 #endif