Peter Cooper
/
Dome
Geodesic Light Dome Controller Program
serial.c@1:dc58f0b0eeec, 2010-03-24 (annotated)
- Committer:
- lolpcc
- Date:
- Wed Mar 24 09:06:23 2010 +0000
- Revision:
- 1:dc58f0b0eeec
- Parent:
- 0:a7af7ec8b12f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lolpcc | 0:a7af7ec8b12f | 1 | #include "mbed.h" |
lolpcc | 0:a7af7ec8b12f | 2 | #include "useful.h" |
lolpcc | 0:a7af7ec8b12f | 3 | |
lolpcc | 0:a7af7ec8b12f | 4 | Serial rs232(p13, p14); // tx, rx |
lolpcc | 0:a7af7ec8b12f | 5 | /******************************************/ |
lolpcc | 0:a7af7ec8b12f | 6 | /* */ |
lolpcc | 0:a7af7ec8b12f | 7 | /* Test the RS232 interface */ |
lolpcc | 0:a7af7ec8b12f | 8 | /* Should send and recieve data on the */ |
lolpcc | 0:a7af7ec8b12f | 9 | /* serial port, send a string, and get */ |
lolpcc | 0:a7af7ec8b12f | 10 | /* back what is returned from the RX */ |
lolpcc | 0:a7af7ec8b12f | 11 | /* */ |
lolpcc | 0:a7af7ec8b12f | 12 | /******************************************/ |
lolpcc | 0:a7af7ec8b12f | 13 | void rs232_opener(void) |
lolpcc | 0:a7af7ec8b12f | 14 | { |
lolpcc | 0:a7af7ec8b12f | 15 | rs232.baud(9600); |
lolpcc | 0:a7af7ec8b12f | 16 | rs232.printf("\n\r"); |
lolpcc | 0:a7af7ec8b12f | 17 | rs232.printf("Dome Controler\n\r"); |
lolpcc | 0:a7af7ec8b12f | 18 | rs232.printf("\n\rCMD > "); |
lolpcc | 0:a7af7ec8b12f | 19 | } |
lolpcc | 0:a7af7ec8b12f | 20 | |
lolpcc | 0:a7af7ec8b12f | 21 | void rs232_output_string(char *buf) |
lolpcc | 0:a7af7ec8b12f | 22 | { |
lolpcc | 0:a7af7ec8b12f | 23 | int a = 0; |
lolpcc | 0:a7af7ec8b12f | 24 | while(a != strlen(buf)){ |
lolpcc | 0:a7af7ec8b12f | 25 | rs232.putc(buf[a]); |
lolpcc | 0:a7af7ec8b12f | 26 | if(buf[a]=='\n') |
lolpcc | 0:a7af7ec8b12f | 27 | rs232.putc('\r'); |
lolpcc | 0:a7af7ec8b12f | 28 | a++; |
lolpcc | 0:a7af7ec8b12f | 29 | } |
lolpcc | 0:a7af7ec8b12f | 30 | } |
lolpcc | 0:a7af7ec8b12f | 31 | |
lolpcc | 0:a7af7ec8b12f | 32 | int rs232_readable(void) |
lolpcc | 0:a7af7ec8b12f | 33 | { |
lolpcc | 0:a7af7ec8b12f | 34 | return(rs232.readable()); |
lolpcc | 0:a7af7ec8b12f | 35 | } |
lolpcc | 0:a7af7ec8b12f | 36 | |
lolpcc | 0:a7af7ec8b12f | 37 | int rs232_gets(char *s,int len) |
lolpcc | 0:a7af7ec8b12f | 38 | { |
lolpcc | 0:a7af7ec8b12f | 39 | char c; |
lolpcc | 0:a7af7ec8b12f | 40 | int cnt=0; |
lolpcc | 0:a7af7ec8b12f | 41 | |
lolpcc | 0:a7af7ec8b12f | 42 | while ((c = rs232.getc()) != 0) { |
lolpcc | 0:a7af7ec8b12f | 43 | if ((c == 0x0a) || (c==0x0d)) { |
lolpcc | 0:a7af7ec8b12f | 44 | rs232.printf("\n\r"); |
lolpcc | 0:a7af7ec8b12f | 45 | *s++ = '\0'; |
lolpcc | 0:a7af7ec8b12f | 46 | return(cnt); /* Return length */ |
lolpcc | 0:a7af7ec8b12f | 47 | } else if (c==0x7f) { /* Delete */ |
lolpcc | 0:a7af7ec8b12f | 48 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 49 | rs232.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 50 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 51 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 52 | *s--; |
lolpcc | 0:a7af7ec8b12f | 53 | } else if (c==0x08) { /* BS */ |
lolpcc | 0:a7af7ec8b12f | 54 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 55 | rs232.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 56 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 57 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 58 | *s--; |
lolpcc | 0:a7af7ec8b12f | 59 | } else if (c==025) { /* CTRL-U */ |
lolpcc | 0:a7af7ec8b12f | 60 | while (cnt!=0) { |
lolpcc | 0:a7af7ec8b12f | 61 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 62 | rs232.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 63 | rs232.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 64 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 65 | *s--; |
lolpcc | 0:a7af7ec8b12f | 66 | } |
lolpcc | 0:a7af7ec8b12f | 67 | } else { |
lolpcc | 0:a7af7ec8b12f | 68 | *s++ = c; |
lolpcc | 0:a7af7ec8b12f | 69 | rs232.putc(c); |
lolpcc | 0:a7af7ec8b12f | 70 | cnt++; |
lolpcc | 0:a7af7ec8b12f | 71 | } |
lolpcc | 0:a7af7ec8b12f | 72 | } |
lolpcc | 0:a7af7ec8b12f | 73 | return(cnt); |
lolpcc | 0:a7af7ec8b12f | 74 | } |
lolpcc | 0:a7af7ec8b12f | 75 | |
lolpcc | 0:a7af7ec8b12f | 76 | /******************************************/ |
lolpcc | 0:a7af7ec8b12f | 77 | /* */ |
lolpcc | 0:a7af7ec8b12f | 78 | /* Set the baud rate of the serial line */ |
lolpcc | 0:a7af7ec8b12f | 79 | /* from the command line input */ |
lolpcc | 0:a7af7ec8b12f | 80 | /* */ |
lolpcc | 0:a7af7ec8b12f | 81 | /******************************************/ |
lolpcc | 0:a7af7ec8b12f | 82 | #define BAUD_NUMBER 10 |
lolpcc | 0:a7af7ec8b12f | 83 | void baud_rate(int c, char **a) |
lolpcc | 0:a7af7ec8b12f | 84 | { |
lolpcc | 0:a7af7ec8b12f | 85 | int b,cnt; |
lolpcc | 0:a7af7ec8b12f | 86 | int v[BAUD_NUMBER] = {300,600,1200,2400,4800,9600,19200,38400,57600,15200}; |
lolpcc | 0:a7af7ec8b12f | 87 | |
lolpcc | 0:a7af7ec8b12f | 88 | b = atoi(a[1]); |
lolpcc | 0:a7af7ec8b12f | 89 | cnt = 0; |
lolpcc | 0:a7af7ec8b12f | 90 | while(cnt < BAUD_NUMBER){ |
lolpcc | 0:a7af7ec8b12f | 91 | if(v[cnt]==b){ |
lolpcc | 0:a7af7ec8b12f | 92 | rs232.baud(b); |
lolpcc | 0:a7af7ec8b12f | 93 | return; |
lolpcc | 0:a7af7ec8b12f | 94 | } |
lolpcc | 0:a7af7ec8b12f | 95 | cnt++; |
lolpcc | 0:a7af7ec8b12f | 96 | } |
lolpcc | 0:a7af7ec8b12f | 97 | cnt=0; |
lolpcc | 0:a7af7ec8b12f | 98 | lprintf("Select a speed from "); |
lolpcc | 0:a7af7ec8b12f | 99 | while(cnt < BAUD_NUMBER){ |
lolpcc | 0:a7af7ec8b12f | 100 | lprintf("%d ",v[cnt]); |
lolpcc | 0:a7af7ec8b12f | 101 | cnt++; |
lolpcc | 0:a7af7ec8b12f | 102 | } |
lolpcc | 0:a7af7ec8b12f | 103 | lprintf("\n\r"); |
lolpcc | 0:a7af7ec8b12f | 104 | } |
lolpcc | 0:a7af7ec8b12f | 105 | |
lolpcc | 0:a7af7ec8b12f | 106 | void serial_test(int c, char **a) |
lolpcc | 0:a7af7ec8b12f | 107 | { |
lolpcc | 0:a7af7ec8b12f | 108 | char ch; |
lolpcc | 0:a7af7ec8b12f | 109 | |
lolpcc | 0:a7af7ec8b12f | 110 | rs232_output_string("Serial Test Routine\n\r"); |
lolpcc | 0:a7af7ec8b12f | 111 | |
lolpcc | 0:a7af7ec8b12f | 112 | while(1){ |
lolpcc | 0:a7af7ec8b12f | 113 | ch = rs232.getc(); |
lolpcc | 0:a7af7ec8b12f | 114 | printf("Got %c\n\r",ch); |
lolpcc | 0:a7af7ec8b12f | 115 | if(ch=='q') |
lolpcc | 0:a7af7ec8b12f | 116 | return; |
lolpcc | 0:a7af7ec8b12f | 117 | } |
lolpcc | 0:a7af7ec8b12f | 118 | } |