Incomplete emulator of Coherent Cube laser control device.

main.cpp

Committer:
daapp
Date:
2011-09-02
Revision:
0:f744b9a9caf8

File content as of revision 0:f744b9a9caf8:

#include "mbed.h"


#define EOL '\r'
#define COMMAND_SIZE 32

#define EQ(a,b) (!strcmp(a,b))

#define MAX_POWER 70.0

DigitalOut laser(LED1);

Serial port(USBTX, USBRX);

char buffer[COMMAND_SIZE];
int pos = 0;


int state_prompt = 1;
int state_delay = 0;
int state_laser = 0;
int state_external = 0;
char state_power[16];


/* return 1 if line complete, 0 - otherwise */
int read_line() {
    unsigned char ch;

    while (port.readable()) {
        if ( (ch = port.getc()) == EOL) {
            buffer[pos] = 0;
            pos = 0;
            return 1;
        } else {
            buffer[pos++] = ch;
        }
    }

    return 0;
}

void write_line(char *message) {
    port.printf("%s\r\n", message);
}

void runCommand(char *command) {
    if ( EQ(command, ">=0") ) {
        state_prompt = 0;
    } else if ( EQ(command, "CDRH=0") ) {
        state_delay = 0;
    } else if ( EQ(command, "CDRH=1") ) {
        state_delay = 1;
    } else if ( EQ(command, "L=0") ) {
        state_laser = 0;
        laser = 0;
    } else if ( EQ(command, "L=1") ) {
        state_laser = 1;
        if (state_delay) {
            wait(5);
        }
        laser = 1;
    } else if ( EQ(command, "EXT=0") ) {
        state_external = 0;
    } else if ( EQ(command, "EXT=1") ) {
        state_external = 1;
    } else if ( EQ(command, "?MAXLP") ) {
        port.printf("MAXLP=%.2f%c", MAX_POWER, EOL);
        return;
    } else if ( ! strncmp(command, "P=", 2)) {
        strcpy(state_power, &command[2]);
    } else if ( EQ(command, "?P")) {
        port.printf("P=%s%c", state_power, EOL);
        return;
    } else {
        return;
    }

    write_line(command);
}

void setup() {
    port.baud(19200);
    port.format(8, Serial::None, 1);
    
    strcpy(state_power, "");
}

int main() {

    pos = 0;

    setup();

    while (1) {
        if (read_line()) {
            runCommand(buffer);
        }
    }

    return 0;
}