equal
deleted
inserted
replaced
116 |
116 |
117 // check for variable being modified |
117 // check for variable being modified |
118 if(dsc->wstate == buf_tosend){ |
118 if(dsc->wstate == buf_tosend){ |
119 // send |
119 // send |
120 |
120 |
121 // TODO call the python callback |
121 // TODO pack data in buffer |
122 |
122 |
123 dsc->wstate = buf_free; |
123 dsc->wstate = buf_free; |
124 } |
124 } |
125 |
125 |
126 AtomicCompareExchange(&dsc->wlock, 1, 0); |
126 AtomicCompareExchange(&dsc->wlock, 1, 0); |
127 } |
127 } |
128 |
128 |
136 |
136 |
137 |
137 |
138 memcpy(visible_value_p, src_p, __get_type_enum_size(dsc->type)); |
138 memcpy(visible_value_p, src_p, __get_type_enum_size(dsc->type)); |
139 } |
139 } |
140 |
140 |
|
141 static pthread_cond_t UART_WakeCond = PTHREAD_COND_INITIALIZER; |
|
142 static pthread_mutex_t UART_WakeCondLock = PTHREAD_MUTEX_INITIALIZER; |
|
143 |
141 int __init_svghmi() |
144 int __init_svghmi() |
142 { |
145 { |
143 bzero(rbuf,sizeof(rbuf)); |
146 bzero(rbuf,sizeof(rbuf)); |
144 bzero(wbuf,sizeof(wbuf)); |
147 bzero(wbuf,sizeof(wbuf)); |
145 |
148 continue_collect = 1; |
146 // TODO - sending pthread condition variable |
|
147 |
149 |
148 return 0; |
150 return 0; |
149 } |
151 } |
150 |
152 |
151 void __cleanup_svghmi() |
153 void __cleanup_svghmi() |
152 { |
154 { |
|
155 pthread_mutex_lock(&UART_WakeCondLock); |
|
156 continue_collect = 0; |
|
157 pthread_cond_signal(&UART_WakeCond); |
|
158 pthread_mutex_unlock(&UART_WakeCondLock); |
153 } |
159 } |
154 |
160 |
155 void __retrieve_svghmi() |
161 void __retrieve_svghmi() |
156 { |
162 { |
157 traverse_hmi_tree(read_iterator); |
163 traverse_hmi_tree(read_iterator); |
160 void __publish_svghmi() |
166 void __publish_svghmi() |
161 { |
167 { |
162 global_write_dirty = 0; |
168 global_write_dirty = 0; |
163 traverse_hmi_tree(write_iterator); |
169 traverse_hmi_tree(write_iterator); |
164 if(global_write_dirty) { |
170 if(global_write_dirty) { |
165 // TODO : set condition variable to wakeup sending collector |
171 pthread_cond_signal(&UART_WakeCond); |
166 } |
172 } |
167 |
173 } |
168 } |
174 |
169 |
175 /* PYTHON CALLS */ |
170 void* collect_updates_to_send(void* args){ |
176 int svghmi_send_collect(uint32_t *size, void *ptr){ |
171 |
177 |
172 // TODO : get callback from args |
178 pthread_mutex_lock(&UART_WakeCondLock); |
173 |
179 do_collect = continue_collect; |
174 |
180 if do_collect; |
175 // TODO : wait for |
181 pthread_cond_wait(&UART_WakeCond, &UART_WakeCondLock); |
176 // - condition variable |
182 do_collect = continue_collect; |
177 |
183 pthread_mutex_unlock(&UART_WakeCondLock); |
178 // TODO add arg to traverse_hmi_tree to pass callback |
184 |
179 |
185 |
180 traverse_hmi_tree(send_iterator); |
186 if(do_collect) { |
181 |
187 traverse_hmi_tree(send_iterator); |
182 } |
188 /* TODO set ptr and size to something */ |
|
189 return 0; |
|
190 } |
|
191 else |
|
192 { |
|
193 return EINTR; |
|
194 } |
|
195 } |
|
196 |
|
197 int svghmi_recv_dispatch(uint32_t size, void* ptr){ |
|
198 /* TODO something with ptr and size |
|
199 - subscribe |
|
200 or |
|
201 - spread values |
|
202 */ |
|
203 } |
|
204 |