VectorFormat.h

Committer:
daan
Date:
2011-12-16
Revision:
1:578d6bbe9f09
Parent:
0:01be2d5eaf72
Child:
2:ce4c7e5ab241

File content as of revision 1:578d6bbe9f09:

#ifndef OLC_VECTOR_H
#define OLC_VECTOR_H

#include "stdint.h"

namespace olc {
  
#define OLC_DEVICE_RECEIVING_PORT 3000
#define OLC_DEVICE_SENDING_PORT 3001  
  
  /**
   *   the protocol so far.
   *
   *   it is packet based. packets should not be longer than 1024 bytes due to hardware
   *   restrictions. We assume udp should be error free enough being the only device on the
   *   cable.
   
   *   MOVE_TO  move mirrors to position x,y
   *   LINE_TO  move mirrors to position x,y and laser on
   *   these commands are 5 bytes long  (uint8 opcode, uint16 x, uint16 y)
   
   *   H_MOVE_TO move mirror horizontaly to position x
   *   use imagination for V_MOVE_TO, H_LINE_TO, V_LINE_TO
   *   these commands are 3 bytes long (uint8 opcode, uint16 l)
   
   *   LASER_POWER sets the laser intensity (uint8 opcode, uint16 power)
   *   we can extend if we need color.
   
   *   (not implemented) FAST_MODE (uint8) Sets the laser in fast mode.
   in fast mode, the motion commands will be set, and the galvo goes to the new position
   as fast as possible.
   // i guess we should have a precise timing parameters.
   
   ----- slow speed ------
   *   (not implemented) SLOW_MODE (uint8 opcode) (default) Sets the laser in slow mode.
   in slow mode means that we go step for step over each pixel with a line raster algorithm.
   
   
   *   STEP_SIZE (uint8 opcode, uint16 size) sets the galvo step size when drawing lines.
   using cheap optics and a short throw the laser spot size is probably a few orders of
   maginitude larger than the theoretical step size of the galvo. This parameter allows
   you to control the step size when going slow.
   
   *   STEP_DELAY (uint8 opcode, uint16 delay) sets an optional delay when drawing each pixels.
   this is sometimes neccesairy for extra illumination of the surface.
   */
  
  // bit 7 (128) means pen_down
  // 
  // laser_power r,g,b
  
  
  enum PathCommands {
    E_STOP = 0,         // 1 uint8 opcode
    PEN_DOWN = 128,     // 1 uint8 opcode

    
    MOVE_TO   = 1,     // 5 uint8 opcode, uint16 x, uint16 y
    H_MOVE_TO = 2,     // 3 uint8 opcode, uint16 x
    V_MOVE_TO = 3,     // 3 uint8 opcode, uint16 y
    
    STEP_SIZE   = 10,   // 3 uint8 opcode, uint16 step_size
    STEP_DELAY  = 11,    // 3 uint8 opcode, uint16 step_delay

    PEN_UP = 15,     // 1 uint8 opcode
    READY = 16,      // 1 uint8 opcode
    
    CALIBRATION_SCAN = 17, // 1 uint8 opcode uint16 top_x, uint16 left_y, uint16 bottom_x, uint16 right_y
    POINT = 18, // 1 unit8 opcode uint16 x, uint16 y
    
    READ_RGB = 19, // 1 uint8 opcode uint8
    
    MESSAGE = 20, // 3+x uint8 opcode, level, length of message, x bytes
    BUFFER_LEFT_REPORT = 21, // opcode, uint16_t
    WAIT = 22, // opcode, uint16t time
    AYT = 23, // are you there
        
    REPORT_RGB = 25, // 1 + 3 x uint8    
        
    LINE_TO   = PEN_DOWN + MOVE_TO,   // 5 uint8 opcode, uint16 x, uint16 y
    H_LINE_TO = PEN_DOWN + H_MOVE_TO, // 3 uint8 opcode, uint16 x
    V_LINE_TO = PEN_DOWN + H_MOVE_TO, // 3 uint8 opcode, uint16 y
    
    LASER_POWER = 100,        // 3 uint8 opcode, uint16 power
    LASER_POWER_RGB = 101,    // 4 uint8 opcode, 3x uint8 power r,g,b
    
    // writing bitmaps. horizontally. based on step_size.   
    BITMAPU8 = 150,     // variable uint8 opcode, uint8 size, max 256 uint8 power
    //  BITMAP16_RGB = 151, // 49 uint8 opcode, 16 x 3 x uint8 power r,g,b
    
    NOTHING = 255
  };
  
}; // end namespace

#endif