Incomplete emulator of Coherent Cube laser control device.

Committer:
daapp
Date:
Fri Sep 02 14:04:37 2011 +0000
Revision:
0:f744b9a9caf8

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }