Alexander Danilov
/
coherentcube
Incomplete emulator of Coherent Cube laser control device.
main.cpp@0:f744b9a9caf8, 2011-09-02 (annotated)
- Committer:
- daapp
- Date:
- Fri Sep 02 14:04:37 2011 +0000
- Revision:
- 0:f744b9a9caf8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daapp | 0:f744b9a9caf8 | 1 | #include "mbed.h" |
daapp | 0:f744b9a9caf8 | 2 | |
daapp | 0:f744b9a9caf8 | 3 | |
daapp | 0:f744b9a9caf8 | 4 | #define EOL '\r' |
daapp | 0:f744b9a9caf8 | 5 | #define COMMAND_SIZE 32 |
daapp | 0:f744b9a9caf8 | 6 | |
daapp | 0:f744b9a9caf8 | 7 | #define EQ(a,b) (!strcmp(a,b)) |
daapp | 0:f744b9a9caf8 | 8 | |
daapp | 0:f744b9a9caf8 | 9 | #define MAX_POWER 70.0 |
daapp | 0:f744b9a9caf8 | 10 | |
daapp | 0:f744b9a9caf8 | 11 | DigitalOut laser(LED1); |
daapp | 0:f744b9a9caf8 | 12 | |
daapp | 0:f744b9a9caf8 | 13 | Serial port(USBTX, USBRX); |
daapp | 0:f744b9a9caf8 | 14 | |
daapp | 0:f744b9a9caf8 | 15 | char buffer[COMMAND_SIZE]; |
daapp | 0:f744b9a9caf8 | 16 | int pos = 0; |
daapp | 0:f744b9a9caf8 | 17 | |
daapp | 0:f744b9a9caf8 | 18 | |
daapp | 0:f744b9a9caf8 | 19 | int state_prompt = 1; |
daapp | 0:f744b9a9caf8 | 20 | int state_delay = 0; |
daapp | 0:f744b9a9caf8 | 21 | int state_laser = 0; |
daapp | 0:f744b9a9caf8 | 22 | int state_external = 0; |
daapp | 0:f744b9a9caf8 | 23 | char state_power[16]; |
daapp | 0:f744b9a9caf8 | 24 | |
daapp | 0:f744b9a9caf8 | 25 | |
daapp | 0:f744b9a9caf8 | 26 | /* return 1 if line complete, 0 - otherwise */ |
daapp | 0:f744b9a9caf8 | 27 | int read_line() { |
daapp | 0:f744b9a9caf8 | 28 | unsigned char ch; |
daapp | 0:f744b9a9caf8 | 29 | |
daapp | 0:f744b9a9caf8 | 30 | while (port.readable()) { |
daapp | 0:f744b9a9caf8 | 31 | if ( (ch = port.getc()) == EOL) { |
daapp | 0:f744b9a9caf8 | 32 | buffer[pos] = 0; |
daapp | 0:f744b9a9caf8 | 33 | pos = 0; |
daapp | 0:f744b9a9caf8 | 34 | return 1; |
daapp | 0:f744b9a9caf8 | 35 | } else { |
daapp | 0:f744b9a9caf8 | 36 | buffer[pos++] = ch; |
daapp | 0:f744b9a9caf8 | 37 | } |
daapp | 0:f744b9a9caf8 | 38 | } |
daapp | 0:f744b9a9caf8 | 39 | |
daapp | 0:f744b9a9caf8 | 40 | return 0; |
daapp | 0:f744b9a9caf8 | 41 | } |
daapp | 0:f744b9a9caf8 | 42 | |
daapp | 0:f744b9a9caf8 | 43 | void write_line(char *message) { |
daapp | 0:f744b9a9caf8 | 44 | port.printf("%s\r\n", message); |
daapp | 0:f744b9a9caf8 | 45 | } |
daapp | 0:f744b9a9caf8 | 46 | |
daapp | 0:f744b9a9caf8 | 47 | void runCommand(char *command) { |
daapp | 0:f744b9a9caf8 | 48 | if ( EQ(command, ">=0") ) { |
daapp | 0:f744b9a9caf8 | 49 | state_prompt = 0; |
daapp | 0:f744b9a9caf8 | 50 | } else if ( EQ(command, "CDRH=0") ) { |
daapp | 0:f744b9a9caf8 | 51 | state_delay = 0; |
daapp | 0:f744b9a9caf8 | 52 | } else if ( EQ(command, "CDRH=1") ) { |
daapp | 0:f744b9a9caf8 | 53 | state_delay = 1; |
daapp | 0:f744b9a9caf8 | 54 | } else if ( EQ(command, "L=0") ) { |
daapp | 0:f744b9a9caf8 | 55 | state_laser = 0; |
daapp | 0:f744b9a9caf8 | 56 | laser = 0; |
daapp | 0:f744b9a9caf8 | 57 | } else if ( EQ(command, "L=1") ) { |
daapp | 0:f744b9a9caf8 | 58 | state_laser = 1; |
daapp | 0:f744b9a9caf8 | 59 | if (state_delay) { |
daapp | 0:f744b9a9caf8 | 60 | wait(5); |
daapp | 0:f744b9a9caf8 | 61 | } |
daapp | 0:f744b9a9caf8 | 62 | laser = 1; |
daapp | 0:f744b9a9caf8 | 63 | } else if ( EQ(command, "EXT=0") ) { |
daapp | 0:f744b9a9caf8 | 64 | state_external = 0; |
daapp | 0:f744b9a9caf8 | 65 | } else if ( EQ(command, "EXT=1") ) { |
daapp | 0:f744b9a9caf8 | 66 | state_external = 1; |
daapp | 0:f744b9a9caf8 | 67 | } else if ( EQ(command, "?MAXLP") ) { |
daapp | 0:f744b9a9caf8 | 68 | port.printf("MAXLP=%.2f%c", MAX_POWER, EOL); |
daapp | 0:f744b9a9caf8 | 69 | return; |
daapp | 0:f744b9a9caf8 | 70 | } else if ( ! strncmp(command, "P=", 2)) { |
daapp | 0:f744b9a9caf8 | 71 | strcpy(state_power, &command[2]); |
daapp | 0:f744b9a9caf8 | 72 | } else if ( EQ(command, "?P")) { |
daapp | 0:f744b9a9caf8 | 73 | port.printf("P=%s%c", state_power, EOL); |
daapp | 0:f744b9a9caf8 | 74 | return; |
daapp | 0:f744b9a9caf8 | 75 | } else { |
daapp | 0:f744b9a9caf8 | 76 | return; |
daapp | 0:f744b9a9caf8 | 77 | } |
daapp | 0:f744b9a9caf8 | 78 | |
daapp | 0:f744b9a9caf8 | 79 | write_line(command); |
daapp | 0:f744b9a9caf8 | 80 | } |
daapp | 0:f744b9a9caf8 | 81 | |
daapp | 0:f744b9a9caf8 | 82 | void setup() { |
daapp | 0:f744b9a9caf8 | 83 | port.baud(19200); |
daapp | 0:f744b9a9caf8 | 84 | port.format(8, Serial::None, 1); |
daapp | 0:f744b9a9caf8 | 85 | |
daapp | 0:f744b9a9caf8 | 86 | strcpy(state_power, ""); |
daapp | 0:f744b9a9caf8 | 87 | } |
daapp | 0:f744b9a9caf8 | 88 | |
daapp | 0:f744b9a9caf8 | 89 | int main() { |
daapp | 0:f744b9a9caf8 | 90 | |
daapp | 0:f744b9a9caf8 | 91 | pos = 0; |
daapp | 0:f744b9a9caf8 | 92 | |
daapp | 0:f744b9a9caf8 | 93 | setup(); |
daapp | 0:f744b9a9caf8 | 94 | |
daapp | 0:f744b9a9caf8 | 95 | while (1) { |
daapp | 0:f744b9a9caf8 | 96 | if (read_line()) { |
daapp | 0:f744b9a9caf8 | 97 | runCommand(buffer); |
daapp | 0:f744b9a9caf8 | 98 | } |
daapp | 0:f744b9a9caf8 | 99 | } |
daapp | 0:f744b9a9caf8 | 100 | |
daapp | 0:f744b9a9caf8 | 101 | return 0; |
daapp | 0:f744b9a9caf8 | 102 | } |