author | Edouard Tisserant |
Fri, 23 Aug 2019 13:01:37 +0200 | |
branch | svghmi |
changeset 2765 | 887aba5ef178 |
parent 2764 | b75cc2cf4e50 |
child 2766 | 3f3b1b8ccba4 |
permissions | -rw-r--r-- |
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
1 |
#include <pthread.h> |
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
2 |
#include "iec_types_all.h" |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
3 |
#include "POUS.h" |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
4 |
#include "config.h" |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
5 |
#include "beremiz.h" |
2750 | 6 |
|
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
7 |
#define HMI_BUFFER_SIZE %(buffer_size)d |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
8 |
|
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
9 |
/* PLC reads from that buffer */ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
10 |
static char rbuf[HMI_BUFFER_SIZE]; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
11 |
|
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
12 |
/* PLC writes to that buffer */ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
13 |
static char wbuf[HMI_BUFFER_SIZE]; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
14 |
|
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
15 |
static pthread_mutex_t wbuf_mutex = PTHREAD_MUTEX_INITIALIZER; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
16 |
static pthread_mutex_t rbuf_mutex = PTHREAD_MUTEX_INITIALIZER; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
17 |
|
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
18 |
%(extern_variables_declarations)s |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
19 |
|
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
20 |
typedef const struct { |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
21 |
void *ptr; |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
22 |
__IEC_types_enum type; |
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
23 |
uint32_t buf_index; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
24 |
uint32_t flags; |
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
25 |
} hmi_tree_item_t; |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
26 |
|
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
27 |
static hmi_tree_item_t hmi_tree_item[] = { |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
28 |
%(variable_decl_array)s |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
29 |
}; |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
30 |
|
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
31 |
typedef void(*hmi_tree_iterator)(hmi_tree_item_t*); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
32 |
void traverse_hmi_tree(hmi_tree_iterator fp) |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
33 |
{ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
34 |
unsigned int i; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
35 |
for(i = 0; i < sizeof(hmi_tree_item)/sizeof(hmi_tree_item_t); i++){ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
36 |
hmi_tree_item_t *dsc = &hmi_tree_item[i]; |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
37 |
if(dsc->type != UNKNOWN_ENUM) |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
38 |
(*fp)(dsc); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
39 |
} |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
40 |
} |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
41 |
|
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
42 |
void read_iterator(hmi_tree_item_t *dsc){ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
43 |
/* todo */ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
44 |
} |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
45 |
|
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
46 |
void write_iterator(hmi_tree_item_t *dsc){ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
47 |
/* todo */ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
48 |
} |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
49 |
|
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
50 |
int __init_svghmi() |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
51 |
{ |
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
52 |
bzero(rbuf,sizeof(rbuf)); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
53 |
bzero(wbuf,sizeof(wbuf)); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
54 |
|
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
55 |
return 0; |
2750 | 56 |
} |
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
57 |
|
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
58 |
void __cleanup_svghmi() |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
59 |
{ |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
60 |
} |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
61 |
|
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
62 |
void __retrieve_svghmi() |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
63 |
{ |
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
64 |
if(!pthread_mutex_lock(&rbuf_mutex)){ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
65 |
pthread_mutex_unlock(&rbuf_mutex); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
66 |
} |
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
67 |
} |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
68 |
|
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
69 |
void __publish_svghmi() |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
70 |
{ |
2765
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
71 |
if(!pthread_mutex_lock(&wbuf_mutex)){ |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
72 |
pthread_mutex_unlock(&wbuf_mutex); |
887aba5ef178
SVGHMI: svghmi.c now has mutex, iterator, and read/write buffer.
Edouard Tisserant
parents:
2764
diff
changeset
|
73 |
} |
2764
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
74 |
} |
b75cc2cf4e50
SVGHMI: draft for svghmi.c. It has all PLC variables pointed in HMI tree in an array.
Edouard Tisserant
parents:
2754
diff
changeset
|
75 |