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); }
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); }
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); }
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); }
/** 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, ¶mName); /* 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; }
// 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); }