Esempio n. 1
0
asynStatus ddriveController::writeParameter(int idx, double value) {
  if (idx < 0 || idx > dd_param_count_)
    return asynError;

  const DDParam *param = &ddparams_[idx];
  return writeParameter(param, value);
}
Esempio n. 2
0
asynStatus ddriveAxis::writeParameter(int idx, int value) {
  if (idx < 0 || idx > pc_->dd_param_count_)
    return asynError;
  
  const DDParam *param = &pc_->ddparams_[idx];
  param_num_ = idx - 1; // query this parameter the next time
  return writeParameter(param, value);
}
Esempio n. 3
0
void ILI9163::drawPixel(uint8_t x, uint8_t y, uint16_t colour) {
    // Horizontal Address Start Position
    writeCommand(SET_COLUMN_ADDRESS);
    writeParameter(0x00);
    writeParameter(x);
    writeParameter(0x00);
    writeParameter(0x7f);
  
    // Vertical Address end Position
    writeCommand(SET_PAGE_ADDRESS);
    writeParameter(0x00);
    writeParameter(y);
    writeParameter(0x00);
    writeParameter(0x7f);

    // Plot the point
    writeCommand(WRITE_MEMORY_START);
    writeData(colour);
}
Esempio n. 4
0
void ILI9163::clear(uint16_t colour) {
    uint16_t pixel;
  
    // Set the column address to 0-127
    writeCommand(SET_COLUMN_ADDRESS);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x7f);

    // Set the page address to 0-127
    writeCommand(SET_PAGE_ADDRESS);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x7f);
  
    // Plot the pixels
    writeCommand(WRITE_MEMORY_START);
    for(pixel = 0; pixel < 16385; pixel++) writeData(colour);
}
Esempio n. 5
0
/** Called when asyn clients call pasynFloat64->write().
  * Extracts the function and axis number from pasynUser.
  * Sets the value in the parameter library.
  * If the function is motorSetClosedLoop_ then it turns the drive power on or off.
  * If the function is ddriveReadBinaryIO_ then it reads the binary I/O registers on the controller.
  * For all other functions it calls asynMotorController::writeFloat64.
  * Calls any registered callbacks for this pasynUser->reason and address.  
  * \param[in] pasynUser asynUser structure that encodes the reason and address.
  * \param[in] value     Value to write. */
asynStatus ddriveController::writeFloat64(asynUser *pasynUser, epicsFloat64 value)
{
  int function = pasynUser->reason;
  asynStatus status = asynSuccess;
  ddriveAxis *pAxis = getAxis(pasynUser);
  const char *paramName = "(unset)";

  /* Fetch the parameter string name for possible use in debugging */
  getParamName(function, &paramName);

  /* Set the parameter and readback in the parameter library.  This may be overwritten when we read back the
   * status at the end, but that's OK */
  status = setDoubleParam(pAxis->axisNo_, function, value);

  const DDParam *ddp = DDParamFromIndex(function);

  if (ddp && ddp->type == asynParamFloat64) {
    if (ddp->global) {
        status = writeParameter(ddp, value);
    } else {
        status = pAxis->writeParameter(ddp, value);
    }
  } else if (function == param_move_timeout_) {
    position_move_timeout_ = value;
    printf("Move timeout set to: %g\n", value);
  } else {
    /* Call base class method */
    status = asynMotorController::writeFloat64(pasynUser, value);
  }
  
  /* Do callbacks so higher layers see any changes */
  callParamCallbacks(pAxis->axisNo_);
  if (status) 
    asynPrint(pasynUser, ASYN_TRACE_ERROR, 
        "%s:%s: error, status=%d function=%s (%d), value=%d\n", 
        driverName, __func__, status, paramName, function, value);
  else    
    asynPrint(pasynUser, ASYN_TRACEIO_DRIVER, 
        "%s:%s: function=%s (%d), value=%d\n", 
        driverName, __func__, paramName, function, value);
  return status;
}
Esempio n. 6
0
// Initialise the display with the require screen orientation
void ILI9163::init(uint8_t orientation) {
    m_cs->write(1);
    m_sck->write(0);
    m_reset->write(1);
   
    // Hardware reset the LCD
    reset();
    
    writeCommand(EXIT_SLEEP_MODE);
    _delay_ms(5); // Wait for the screen to wake up
    
    writeCommand(SET_PIXEL_FORMAT);
    writeParameter(0x05); // 16 bits per pixel
   
    writeCommand(SET_GAMMA_CURVE);
    writeParameter(0x04); // Select gamma curve 3
    
    writeCommand(GAM_R_SEL);
    writeParameter(0x01); // Gamma adjustment enabled
    
    writeCommand(POSITIVE_GAMMA_CORRECT);
    writeParameter(0x3f); // 1st Parameter
    writeParameter(0x25); // 2nd Parameter
    writeParameter(0x1c); // 3rd Parameter
    writeParameter(0x1e); // 4th Parameter
    writeParameter(0x20); // 5th Parameter
    writeParameter(0x12); // 6th Parameter
    writeParameter(0x2a); // 7th Parameter
    writeParameter(0x90); // 8th Parameter
    writeParameter(0x24); // 9th Parameter
    writeParameter(0x11); // 10th Parameter
    writeParameter(0x00); // 11th Parameter
    writeParameter(0x00); // 12th Parameter
    writeParameter(0x00); // 13th Parameter
    writeParameter(0x00); // 14th Parameter
    writeParameter(0x00); // 15th Parameter
     
    writeCommand(NEGATIVE_GAMMA_CORRECT);
    writeParameter(0x20); // 1st Parameter
    writeParameter(0x20); // 2nd Parameter
    writeParameter(0x20); // 3rd Parameter
    writeParameter(0x20); // 4th Parameter
    writeParameter(0x05); // 5th Parameter
    writeParameter(0x00); // 6th Parameter
    writeParameter(0x15); // 7th Parameter
    writeParameter(0xa7); // 8th Parameter
    writeParameter(0x3d); // 9th Parameter
    writeParameter(0x18); // 10th Parameter
    writeParameter(0x25); // 11th Parameter
    writeParameter(0x2a); // 12th Parameter
    writeParameter(0x2b); // 13th Parameter
    writeParameter(0x2b); // 14th Parameter
    writeParameter(0x3a); // 15th Parameter
    
    writeCommand(FRAME_RATE_CONTROL1);
    writeParameter(0x08); // DIVA = 8
    writeParameter(0x08); // VPA = 8
    
    writeCommand(DISPLAY_INVERSION);
    writeParameter(0x07); // NLA = 1, NLB = 1, NLC = 1 (all on Frame Inversion)
   
    writeCommand(POWER_CONTROL1);
    writeParameter(0x0a); // VRH = 10:  GVDD = 4.30
    writeParameter(0x02); // VC = 2: VCI1 = 2.65
      
    writeCommand(POWER_CONTROL2);
    writeParameter(0x02); // BT = 2: AVDD = 2xVCI1, VCL = -1xVCI1, VGH = 5xVCI1, VGL = -2xVCI1

    writeCommand(VCOM_CONTROL1);
    writeParameter(0x50); // VMH = 80: VCOMH voltage = 4.5
    writeParameter(0x5b); // VML = 91: VCOML voltage = -0.225
    
    writeCommand(VCOM_OFFSET_CONTROL);
    writeParameter(0x40); // nVM = 0, VMF = 64: VCOMH output = VMH, VCOML output = VML
    
    writeCommand(SET_COLUMN_ADDRESS);
    writeParameter(0x00); // XSH
    writeParameter(0x00); // XSL
    writeParameter(0x00); // XEH
    writeParameter(0x7f); // XEL (128 pixels x)
   
    writeCommand(SET_PAGE_ADDRESS);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x00);
    writeParameter(0x7f); // 128 pixels y
    
    // Select display orientation
    writeCommand(SET_ADDRESS_MODE);
    writeParameter(orientation);

    // Set the display to on
    writeCommand(SET_DISPLAY_ON);
    writeCommand(WRITE_MEMORY_START);
}