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 16 port_id id; 17 char data[100]; 18 19 int32 20 test_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 34 int 35 main() 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