diff -r 9857b4b0d979 -r 3b93409ba22c svghmi/svghmi.c --- a/svghmi/svghmi.c Thu Sep 12 12:56:47 2019 +0200 +++ b/svghmi/svghmi.c Mon Sep 16 10:54:15 2019 +0200 @@ -118,9 +118,9 @@ if(dsc->wstate == buf_tosend){ // send - // TODO call the python callback - - dsc->wstate = buf_free; + // TODO pack data in buffer + + dsc->wstate = buf_free; } AtomicCompareExchange(&dsc->wlock, 1, 0); @@ -138,18 +138,24 @@ memcpy(visible_value_p, src_p, __get_type_enum_size(dsc->type)); } +static pthread_cond_t UART_WakeCond = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t UART_WakeCondLock = PTHREAD_MUTEX_INITIALIZER; + int __init_svghmi() { bzero(rbuf,sizeof(rbuf)); bzero(wbuf,sizeof(wbuf)); - - // TODO - sending pthread condition variable + continue_collect = 1; return 0; } void __cleanup_svghmi() { + pthread_mutex_lock(&UART_WakeCondLock); + continue_collect = 0; + pthread_cond_signal(&UART_WakeCond); + pthread_mutex_unlock(&UART_WakeCondLock); } void __retrieve_svghmi() @@ -162,21 +168,37 @@ global_write_dirty = 0; traverse_hmi_tree(write_iterator); if(global_write_dirty) { - // TODO : set condition variable to wakeup sending collector - } - -} - -void* collect_updates_to_send(void* args){ - - // TODO : get callback from args - - - // TODO : wait for - // - condition variable - - // TODO add arg to traverse_hmi_tree to pass callback - - traverse_hmi_tree(send_iterator); - -} + pthread_cond_signal(&UART_WakeCond); + } +} + +/* PYTHON CALLS */ +int svghmi_send_collect(uint32_t *size, void *ptr){ + + pthread_mutex_lock(&UART_WakeCondLock); + do_collect = continue_collect; + if do_collect; + pthread_cond_wait(&UART_WakeCond, &UART_WakeCondLock); + do_collect = continue_collect; + pthread_mutex_unlock(&UART_WakeCondLock); + + + if(do_collect) { + traverse_hmi_tree(send_iterator); + /* TODO set ptr and size to something */ + return 0; + } + else + { + return EINTR; + } +} + +int svghmi_recv_dispatch(uint32_t size, void* ptr){ + /* TODO something with ptr and size + - subscribe + or + - spread values + */ +} +