POK(kernelpart)
Main Page
Data Structures
Files
File List
Globals
portsamplingread.c
Go to the documentation of this file.
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
18
#ifdef POK_NEEDS_PORTS_SAMPLING
19
#include <
errno.h
>
20
#include <types.h>
21
#include <
core/lockobj.h
>
22
#include <
core/sched.h
>
23
#include <
core/time.h
>
24
#include <
middleware/port.h
>
25
#include <
middleware/queue.h
>
26
#include <
libc.h
>
27
28
extern
pok_port_t
pok_ports[POK_CONFIG_NB_PORTS];
29
30
pok_ret_t
pok_port_sampling_read (
const
pok_port_id_t
id
,
31
void
* data,
32
pok_port_size_t
* len,
33
bool_t
* valid)
34
{
35
pok_ret_t
ret;
36
37
if
(data ==
NULL
)
38
{
39
return
POK_ERRNO_EINVAL
;
40
}
41
42
if
(
id
> POK_CONFIG_NB_PORTS)
43
{
44
return
POK_ERRNO_EINVAL
;
45
}
46
47
if
(! pok_own_port (POK_SCHED_CURRENT_PARTITION,
id
))
48
{
49
return
POK_ERRNO_PORT
;
50
}
51
52
if
(pok_ports[
id
].ready !=
TRUE
)
53
{
54
return
POK_ERRNO_PORT
;
55
}
56
57
if
(pok_ports[
id
].kind !=
POK_PORT_KIND_SAMPLING
)
58
{
59
return
POK_ERRNO_EINVAL
;
60
}
61
62
if
(pok_ports[
id
].direction !=
POK_PORT_DIRECTION_IN
)
63
{
64
return
POK_ERRNO_MODE
;
65
}
66
67
pok_lockobj_lock
(&pok_ports[
id
].lock,
NULL
);
68
69
ret = pok_port_get ((
uint8_t
)
id
, data, pok_ports[
id
].size);
70
71
if
(ret ==
POK_ERRNO_EMPTY
)
72
{
73
pok_lockobj_unlock
(&pok_ports[
id
].lock,
NULL
);
74
*len = 0;
75
*valid = 0;
76
return
POK_ERRNO_EMPTY
;
77
}
78
79
if
( (pok_ports[
id
].last_receive + pok_ports[
id
].refresh) < POK_GETTICK ())
80
{
81
*valid =
FALSE
;
82
}
83
else
84
{
85
*valid =
TRUE
;
86
}
87
88
*len = pok_ports[id].
size
;
89
90
pok_lockobj_unlock
(&pok_ports[
id
].lock,
NULL
);
91
92
return
POK_ERRNO_OK
;
93
}
94
95
#endif
96
kernel
middleware
portsamplingread.c
Generated on Fri Jun 1 2012 19:07:12 for POK(kernelpart) by
1.8.1