1/*
2 * Copyright 2006, Marcus Overhagen, <marcus@overhagen.de>
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <OS.h>
8#include <stdio.h>
9#include <string.h>
10
11
12/*
13 *
14 */
15
16port_id id;
17char data[100];
18
19int32
20test_thread(void *)
21{
22	ssize_t size;
23	int32 code;
24
25	// BeBook: does block when port is empty, and unblocks when port is written to or deleted
26	printf("read port...\n");
27	size = read_port(id, &code, data, sizeof(data));
28	printf("read port code %lx, size %ld (0x%08lx) (%s)\n", code, size, size, strerror(size));
29
30	return 0;
31}
32
33
34int
35main()
36{
37	status_t s;
38	ssize_t size;
39	int32 code;
40
41	id = create_port(1, "test port");
42	printf("created port %ld\n", id);
43
44	s = write_port(id, 0x1234, data, 10);
45	printf("write port result 0x%08lx (%s)\n", s, strerror(s));
46
47	size = read_port(id, &code, data, sizeof(data));
48	printf("read port code %lx, size %ld (0x%08lx) (%s)\n", code, size, size, strerror(size));
49
50	printf("read should block for 5 seconds now, as port is empty\n");
51
52	thread_id thread = spawn_thread(test_thread, "test thread", B_NORMAL_PRIORITY, NULL);
53	resume_thread(thread);
54	snooze(5000000);
55
56	printf("write port...\n");
57	s = write_port(id, 0x5678, data, 20);
58	printf("write port result 0x%08lx (%s)\n", s, strerror(s));
59
60	printf("waiting for thread to terminate\n");
61	wait_for_thread(thread, &s);
62
63	return 0;
64}
65