Peter Cooper
/
Dome
Geodesic Light Dome Controller Program
main.cpp@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 "main.h" |
lolpcc | 0:a7af7ec8b12f | 3 | #include "cmd.h" |
lolpcc | 0:a7af7ec8b12f | 4 | #include "i2c.h" |
lolpcc | 0:a7af7ec8b12f | 5 | #include "serial.h" |
lolpcc | 0:a7af7ec8b12f | 6 | #include "scripting.h" |
lolpcc | 0:a7af7ec8b12f | 7 | #include "breakup.h" |
lolpcc | 0:a7af7ec8b12f | 8 | #include "local_defines.h" |
lolpcc | 0:a7af7ec8b12f | 9 | |
lolpcc | 0:a7af7ec8b12f | 10 | Serial pc(USBTX, USBRX); // tx, rx |
lolpcc | 0:a7af7ec8b12f | 11 | |
lolpcc | 0:a7af7ec8b12f | 12 | int sys_state = 0; |
lolpcc | 0:a7af7ec8b12f | 13 | int var[MAX_VAR]; |
lolpcc | 0:a7af7ec8b12f | 14 | |
lolpcc | 0:a7af7ec8b12f | 15 | int main() |
lolpcc | 0:a7af7ec8b12f | 16 | { |
lolpcc | 0:a7af7ec8b12f | 17 | char buf[0x20]; /* input buffer */ |
lolpcc | 0:a7af7ec8b12f | 18 | int r; /* general int */ |
lolpcc | 0:a7af7ec8b12f | 19 | |
lolpcc | 0:a7af7ec8b12f | 20 | sys_state = TO_RS232; |
lolpcc | 0:a7af7ec8b12f | 21 | |
lolpcc | 0:a7af7ec8b12f | 22 | exec_profile(); |
lolpcc | 0:a7af7ec8b12f | 23 | |
lolpcc | 0:a7af7ec8b12f | 24 | // relay_operate(0); |
lolpcc | 0:a7af7ec8b12f | 25 | // init_pca9685(0xb8); |
lolpcc | 0:a7af7ec8b12f | 26 | // init_pca9685(0xba); |
lolpcc | 0:a7af7ec8b12f | 27 | |
lolpcc | 0:a7af7ec8b12f | 28 | pc.printf("\n\rDome Controler\n\n\r\r"); |
lolpcc | 0:a7af7ec8b12f | 29 | rs232_opener(); |
lolpcc | 0:a7af7ec8b12f | 30 | pc.printf("\n\rCMD > "); |
lolpcc | 0:a7af7ec8b12f | 31 | while(1){ /* Command Loop */ |
lolpcc | 0:a7af7ec8b12f | 32 | r = 0; |
lolpcc | 0:a7af7ec8b12f | 33 | while(r==0){ |
lolpcc | 0:a7af7ec8b12f | 34 | if(pc.readable()){ |
lolpcc | 0:a7af7ec8b12f | 35 | sys_state = TO_USB; |
lolpcc | 0:a7af7ec8b12f | 36 | r = usb_gets(buf,sizeof(buf)); |
lolpcc | 0:a7af7ec8b12f | 37 | } else if(rs232_readable()){ |
lolpcc | 0:a7af7ec8b12f | 38 | sys_state = TO_RS232; |
lolpcc | 0:a7af7ec8b12f | 39 | r = rs232_gets(buf,sizeof(buf)); |
lolpcc | 0:a7af7ec8b12f | 40 | } |
lolpcc | 0:a7af7ec8b12f | 41 | } |
lolpcc | 0:a7af7ec8b12f | 42 | if(r>2){ |
lolpcc | 0:a7af7ec8b12f | 43 | find_cmd(buf); |
lolpcc | 0:a7af7ec8b12f | 44 | } |
lolpcc | 0:a7af7ec8b12f | 45 | if (sys_state & TO_USB) |
lolpcc | 0:a7af7ec8b12f | 46 | pc_output_string("\n\rCMD > "); |
lolpcc | 0:a7af7ec8b12f | 47 | if (sys_state & TO_RS232) |
lolpcc | 0:a7af7ec8b12f | 48 | rs232_output_string("\n\rCMD > "); |
lolpcc | 0:a7af7ec8b12f | 49 | sys_state = 0; |
lolpcc | 0:a7af7ec8b12f | 50 | } |
lolpcc | 0:a7af7ec8b12f | 51 | } |
lolpcc | 0:a7af7ec8b12f | 52 | |
lolpcc | 0:a7af7ec8b12f | 53 | int usb_gets(char *s,int len) |
lolpcc | 0:a7af7ec8b12f | 54 | { |
lolpcc | 0:a7af7ec8b12f | 55 | char c; |
lolpcc | 0:a7af7ec8b12f | 56 | int cnt=0; |
lolpcc | 0:a7af7ec8b12f | 57 | |
lolpcc | 0:a7af7ec8b12f | 58 | while ((c = pc.getc()) != 0) { |
lolpcc | 0:a7af7ec8b12f | 59 | if ((c == 0x0a) || (c==0x0d)) { |
lolpcc | 0:a7af7ec8b12f | 60 | pc.printf("\n\r"); |
lolpcc | 0:a7af7ec8b12f | 61 | *s++ = '\0'; |
lolpcc | 0:a7af7ec8b12f | 62 | return(cnt); /* Return length */ |
lolpcc | 0:a7af7ec8b12f | 63 | } else if (c==0x7f) { /* Delete */ |
lolpcc | 0:a7af7ec8b12f | 64 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 65 | pc.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 66 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 67 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 68 | *s--; |
lolpcc | 0:a7af7ec8b12f | 69 | } else if (c==0x08) { /* BS */ |
lolpcc | 0:a7af7ec8b12f | 70 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 71 | pc.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 72 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 73 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 74 | *s--; |
lolpcc | 0:a7af7ec8b12f | 75 | } else if (c==025) { /* CTRL-U */ |
lolpcc | 0:a7af7ec8b12f | 76 | while (cnt!=0) { |
lolpcc | 0:a7af7ec8b12f | 77 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 78 | pc.putc(0x20); |
lolpcc | 0:a7af7ec8b12f | 79 | pc.putc(0x08); |
lolpcc | 0:a7af7ec8b12f | 80 | cnt--; |
lolpcc | 0:a7af7ec8b12f | 81 | *s--; |
lolpcc | 0:a7af7ec8b12f | 82 | } |
lolpcc | 0:a7af7ec8b12f | 83 | } else { |
lolpcc | 0:a7af7ec8b12f | 84 | *s++ = c; |
lolpcc | 0:a7af7ec8b12f | 85 | pc.putc(c); |
lolpcc | 0:a7af7ec8b12f | 86 | cnt++; |
lolpcc | 0:a7af7ec8b12f | 87 | } |
lolpcc | 0:a7af7ec8b12f | 88 | } |
lolpcc | 0:a7af7ec8b12f | 89 | return(cnt); |
lolpcc | 0:a7af7ec8b12f | 90 | } |
lolpcc | 0:a7af7ec8b12f | 91 | |
lolpcc | 0:a7af7ec8b12f | 92 | void pc_output_string(char *buf) |
lolpcc | 0:a7af7ec8b12f | 93 | { |
lolpcc | 0:a7af7ec8b12f | 94 | int a = 0; |
lolpcc | 0:a7af7ec8b12f | 95 | while(a != strlen(buf)){ |
lolpcc | 0:a7af7ec8b12f | 96 | pc.putc(buf[a]); |
lolpcc | 0:a7af7ec8b12f | 97 | if(buf[a]=='\n') |
lolpcc | 0:a7af7ec8b12f | 98 | pc.putc('\r'); |
lolpcc | 0:a7af7ec8b12f | 99 | a++; |
lolpcc | 0:a7af7ec8b12f | 100 | } |
lolpcc | 0:a7af7ec8b12f | 101 | } |
lolpcc | 0:a7af7ec8b12f | 102 | |
lolpcc | 0:a7af7ec8b12f | 103 | void exec_profile(void) |
lolpcc | 0:a7af7ec8b12f | 104 | { |
lolpcc | 0:a7af7ec8b12f | 105 | char *a[2] = {"exec","profile.cmd"}; |
lolpcc | 0:a7af7ec8b12f | 106 | exec_file(2,a); |
lolpcc | 0:a7af7ec8b12f | 107 | } |
lolpcc | 0:a7af7ec8b12f | 108 |