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 /* A full port can't be written to. Thus the write from thread should block, until main thread reads.
13 *
14 */
15
16 port_id id;
17 char data[100];
18
19 int32
test_thread(void *)20 test_thread(void *)
21 {
22 status_t s;
23
24 printf("write port...\n");
25 s = write_port(id, 0x5678, data, 20);
26 printf("write port result 0x%08lx (%s)\n", s, strerror(s));
27
28 return 0;
29 }
30
31
32 int
main()33 main()
34 {
35 status_t s;
36 ssize_t size;
37 int32 code;
38
39 id = create_port(1, "test port");
40 printf("created port %ld\n", id);
41
42 s = write_port(id, 0x1234, data, 10);
43 printf("write port result 0x%08lx (%s)\n", s, strerror(s));
44
45 printf("write should block for 5 seconds now, as port is full\n");
46
47 thread_id thread = spawn_thread(test_thread, "test thread", B_NORMAL_PRIORITY, NULL);
48 resume_thread(thread);
49 snooze(5000000);
50
51 // BeBook: does block when port is empty, and unblocks when port is written to or deleted
52 printf("read port...\n");
53 size = read_port(id, &code, data, sizeof(data));
54 printf("read port code %lx, size %ld (0x%08lx) (%s)\n", code, size, size, strerror(size));
55
56 printf("waiting for thread to terminate\n");
57 wait_for_thread(thread, &s);
58
59 return 0;
60 }
61