1/* 2 * Copyright 2018, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <autoconf.h> 8#include <camkes.h> 9#include <stdio.h> 10 11#define CLIENT_BUF 20 12#define SERIAL_BUF (0x1000 - 8) 13 14struct { 15 uint32_t head; 16 uint32_t tail; 17 char buf[SERIAL_BUF]; 18} extern volatile *interrupt_getchar_buf; 19 20void pre_init(void) 21{ 22 set_putchar(interrupt_putchar_putchar); 23} 24 25int run(void) 26{ 27 printf("%s: Hello Serial Server!\n", get_instance_name()); 28 29 char buf[CLIENT_BUF]; 30 while (1) { 31 seL4_Word badge = 0; 32 int i = 0; 33 do { 34 if (interrupt_getchar_buf->head == interrupt_getchar_buf->tail) { 35 seL4_Wait(interrupt_getchar_notification(), &badge); 36 } 37 buf[i] = interrupt_getchar_buf->buf[interrupt_getchar_buf->head]; 38 interrupt_getchar_buf->head = (interrupt_getchar_buf->head + 1) % sizeof(interrupt_getchar_buf->buf); 39 } while (buf[i] != '\r' && ++i < CLIENT_BUF - 1); 40 buf[i] = 0; 41 printf("%s: %s\n", get_instance_name(), buf); 42 } 43 return 0; 44} 45