1/* 2 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <camkes.h> 8#include <stdio.h> 9#include <string.h> 10#include <platsupport/sync/spinlock.h> 11 12int run(void) { 13 const char *name = get_instance_name(); 14 15 printf("%s: Waiting for client init...\n", name); 16 setup_wait(); 17 18 printf("%s: Initialising lock...\n", name); 19 sync_spinlock_init((sync_spinlock_t*)&outgoing->lock); 20 21 printf("%s: Notifying receiver...\n", name); 22 init_emit(); 23 24 printf("%s: Waiting for data...\n", name); 25 int received = 0; 26 while (!received) { 27 sync_spinlock_lock((sync_spinlock_t*)&incoming->lock); 28 if (incoming->full) { 29 sync_spinlock_lock((sync_spinlock_t*)&outgoing->lock); 30 strcpy((char*)outgoing->data, (char*)incoming->data); 31 outgoing->full = 1; 32 sync_spinlock_unlock((sync_spinlock_t*)&outgoing->lock); 33 received = 1; 34 } 35 sync_spinlock_unlock((sync_spinlock_t*)&incoming->lock); 36 } 37 38 printf("%s: Done.\n", name); 39 return 0; 40} 41