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 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 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