|
168
|
1 /* |
|
|
2 * Written 1999-03-19 by Jonathan Larmour, Cygnus Solutions |
|
|
3 * This file is in the public domain and may be used for any purpose |
|
|
4 */ |
|
|
5 |
|
|
6 /* CONFIGURATION CHECKS */ |
|
|
7 |
|
|
8 #include <pkgconf/system.h> /* which packages are enabled/disabled */ |
|
|
9 #ifdef CYGPKG_KERNEL |
|
|
10 # include <pkgconf/kernel.h> |
|
|
11 #endif |
|
|
12 #ifdef CYGPKG_LIBC |
|
|
13 # include <pkgconf/libc.h> |
|
|
14 #endif |
|
|
15 #ifdef CYGPKG_IO_SERIAL |
|
|
16 # include <pkgconf/io_serial.h> |
|
|
17 #endif |
|
|
18 |
|
|
19 #ifndef CYGFUN_KERNEL_API_C |
|
|
20 # error Kernel API must be enabled to build this example |
|
|
21 #endif |
|
|
22 |
|
|
23 #ifndef CYGPKG_LIBC_STDIO |
|
|
24 # error C library standard I/O must be enabled to build this example |
|
|
25 #endif |
|
|
26 |
|
|
27 #ifndef CYGPKG_IO_SERIAL_HALDIAG |
|
|
28 # error I/O HALDIAG pseudo-device driver must be enabled to build this example |
|
|
29 #endif |
|
|
30 |
|
|
31 /* INCLUDES */ |
|
|
32 |
|
|
33 #include <stdio.h> /* printf */ |
|
|
34 #include <string.h> /* strlen */ |
|
|
35 #include <cyg/kernel/kapi.h> /* All the kernel specific stuff */ |
|
|
36 #include <cyg/io/io.h> /* I/O functions */ |
|
|
37 #include <cyg/hal/hal_arch.h> /* CYGNUM_HAL_STACK_SIZE_TYPICAL */ |
|
|
38 |
|
|
39 |
|
|
40 |
|
|
41 /* DEFINES */ |
|
|
42 |
|
|
43 #define NTHREADS 1 |
|
|
44 #define STACKSIZE ( CYGNUM_HAL_STACK_SIZE_TYPICAL + 4096 ) |
|
|
45 |
|
|
46 /* STATICS */ |
|
|
47 |
|
|
48 static cyg_handle_t thread[NTHREADS]; |
|
|
49 static cyg_thread thread_obj[NTHREADS]; |
|
|
50 static char stack[NTHREADS][STACKSIZE]; |
|
|
51 |
|
|
52 /* FUNCTIONS */ |
|
|
53 |
|
|
54 static void simple_prog(CYG_ADDRESS data) |
|
|
55 { |
|
|
56 cyg_io_handle_t handle; |
|
|
57 Cyg_ErrNo err; |
|
|
58 const char test_string[] = "serial example is working correctly!\n"; |
|
|
59 cyg_uint32 len = strlen(test_string); |
|
|
60 |
|
|
61 printf("Starting serial example\n"); |
|
|
62 |
|
|
63 err = cyg_io_lookup( "/dev/haldiag", &handle ); |
|
|
64 |
|
|
65 if (ENOERR == err) { |
|
|
66 printf("Found /dev/haldiag. Writing string....\n"); |
|
|
67 err = cyg_io_write( handle, test_string, &len ); |
|
|
68 } |
|
|
69 |
|
|
70 if (ENOERR == err) { |
|
|
71 printf("I think I wrote the string. Did you see it?\n"); |
|
|
72 } |
|
|
73 |
|
|
74 printf("Serial example finished\n"); |
|
|
75 |
|
|
76 } |
|
|
77 |
|
|
78 void cyg_user_start(void) |
|
|
79 { |
|
|
80 cyg_thread_create(4, simple_prog, (cyg_addrword_t) 0, "serial", |
|
|
81 (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); |
|
|
82 cyg_thread_resume(thread[0]); |
|
|
83 } |