void Adafruit_TFTLCD::fillRect(int16_t x1, int16_t y1, int16_t w, int16_t h, 
  uint16_t fillcolor) {
  int16_t  x2, y2;

  // Initial off-screen clipping
  if( (w            <= 0     ) ||  (h             <= 0      ) ||
      (x1           >= _width) ||  (y1            >= _height) ||
     ((x2 = x1+w-1) <  0     ) || ((y2  = y1+h-1) <  0      )) return;
  if(x1 < 0) { // Clip left
    w += x1;
    x1 = 0;
  }
  if(y1 < 0) { // Clip top
    h += y1;
    y1 = 0;
  }
  if(x2 >= _width) { // Clip right
    x2 = _width - 1;
    w  = x2 - x1 + 1;
  }
  if(y2 >= _height) { // Clip bottom
    y2 = _height - 1;
    h  = y2 - y1 + 1;
  }

  setAddrWindow(x1, y1, x2, y2);
  flood(fillcolor, (uint32_t)w * (uint32_t)h);
  if(driver == ID_932X) setAddrWindow(0, 0, _width - 1, _height - 1);
  else                  setLR();
}
void Adafruit_TFTLCD::begin(uint16_t id) {
  uint8_t i = 0;

  reset();

  if((id == 0x9325) || (id == 0x9328)) {

    uint16_t a, d;
    driver = ID_932X;
    CS_ACTIVE;
    while(i < sizeof(ILI932x_regValues) / sizeof(uint16_t)) {
      a = pgm_read_word(&ILI932x_regValues[i++]);
      d = pgm_read_word(&ILI932x_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister16(a, d);
    }
    setRotation(rotation);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);

  } else if(id == 0x7575) {

    uint8_t a, d;
    driver = ID_7575;
    CS_ACTIVE;
    while(i < sizeof(HX8347G_regValues)) {
      a = pgm_read_byte(&HX8347G_regValues[i++]);
      d = pgm_read_byte(&HX8347G_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister8(a, d);
    }
    setRotation(rotation);
    setLR(); // Lower-right corner of address window

  } else {
    driver = ID_UNKNOWN;
    return;
  }
}
void Adafruit_TFTLCD::drawFastVLine(int16_t x, int16_t y, int16_t length,
  uint16_t color)
{
  int16_t y2;

  // Initial off-screen clipping
  if((length <= 0      ) ||
     (x      <  0      ) || ( x                  >= _width) ||
     (y      >= _height) || ((y2 = (y+length-1)) <  0     )) return;
  if(y < 0) {         // Clip top
    length += y;
    y       = 0;
  }
  if(y2 >= _height) { // Clip bottom
    y2      = _height - 1;
    length  = y2 - y + 1;
  }

  setAddrWindow(x, y, x, y2);
  flood(color, length);
  if(driver == ID_932X) setAddrWindow(0, 0, _width - 1, _height - 1);
  else                  setLR();
}
void Adafruit_TFTLCD::drawFastHLine(int16_t x, int16_t y, int16_t length,
  uint16_t color)
{
  int16_t x2;

  // Initial off-screen clipping
  if((length <= 0     ) ||
     (y      <  0     ) || ( y                  >= _height) ||
     (x      >= _width) || ((x2 = (x+length-1)) <  0      )) return;

  if(x < 0) {        // Clip left
    length += x;
    x       = 0;
  }
  if(x2 >= _width) { // Clip right
    x2      = _width - 1;
    length  = x2 - x + 1;
  }

  setAddrWindow(x, y, x2, y);
  flood(color, length);
  if(driver == ID_932X) setAddrWindow(0, 0, _width - 1, _height - 1);
  else                  setLR();
}
void Adafruit_TFTLCD::begin(uint16_t id) {
  uint8_t i = 0;

  reset();

  if((id == 0x9325) || (id == 0x9328)) {

    uint16_t a, d;
    driver = ID_932X;
    CS_ACTIVE;
    while(i < sizeof(ILI932x_regValues) / sizeof(uint16_t)) {
      a = pgm_read_word(&ILI932x_regValues[i++]);
      d = pgm_read_word(&ILI932x_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister16(a, d);
    }
    setRotation(rotation);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);

  } else if (id == 0x9341) {

    uint16_t a, d;
    driver = ID_9341;
    CS_ACTIVE;
    writeRegister8(ILI9341_SOFTRESET, 0);
    delay(50);
    writeRegister8(ILI9341_DISPLAYOFF, 0);

    writeRegister8(ILI9341_POWERCONTROL1, 0x23);
    writeRegister8(ILI9341_POWERCONTROL2, 0x10);
    writeRegister16(ILI9341_VCOMCONTROL1, 0x2B2B);
    writeRegister8(ILI9341_VCOMCONTROL2, 0xC0);
    writeRegister8(ILI9341_MEMCONTROL, ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR);
    writeRegister8(ILI9341_PIXELFORMAT, 0x55);
    writeRegister16(ILI9341_FRAMECONTROL, 0x001B);
    
    writeRegister8(ILI9341_ENTRYMODE, 0x07);
    /* writeRegister32(ILI9341_DISPLAYFUNC, 0x0A822700);*/

    writeRegister8(ILI9341_SLEEPOUT, 0);
    delay(150);
    writeRegister8(ILI9341_DISPLAYON, 0);
    delay(500);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);

  } else if(id == 0x7575) {

    uint8_t a, d;
    driver = ID_7575;
    CS_ACTIVE;
    while(i < sizeof(HX8347G_regValues)) {
      a = pgm_read_byte(&HX8347G_regValues[i++]);
      d = pgm_read_byte(&HX8347G_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister8(a, d);
    }
    setRotation(rotation);
    setLR(); // Lower-right corner of address window

  } else {
    driver = ID_UNKNOWN;
    return;
  }
}
Exemple #6
0
void Adafruit_TFTLCD::begin(uint16_t id) {
  uint8_t i = 0;

  reset();

  delay(200);

  if((id == 0x9325) || (id == 0x9328)) {

    uint16_t a, d;
    driver = ID_932X;
    CS_ACTIVE;
    while(i < sizeof(ILI932x_regValues) / sizeof(uint16_t)) {
      a = pgm_read_word(&ILI932x_regValues[i++]);
      d = pgm_read_word(&ILI932x_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister16(a, d);
    }
    setRotation(rotation);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);

  } else if (id == 0x9341) {
	
	// ILI9341 mcufriend
	driver = ID_9341;
	CS_ACTIVE;
	while(i < sizeof(ILI9341_regValues)) {
		uint8_t r = pgm_read_byte(&ILI9341_regValues[i++]);
		uint8_t len = pgm_read_byte(&ILI9341_regValues[i++]);
		if(r == TFTLCD_DELAY) {
			delay(len);
			} else {
			//Serial.print("Register $"); Serial.print(r, HEX);
			//Serial.print(" datalen "); Serial.println(len);

			CS_ACTIVE;
			CD_COMMAND;
			write8(r);
			CD_DATA;
			for (uint8_t d=0; d<len; d++) {
				uint8_t x = pgm_read_byte(&ILI9341_regValues[i++]);
				write8(x);
			    }
			CS_IDLE;

		    }
	    }
		
    return;

  } else if (id == 0x8357) {
    // HX8357D
    driver = ID_HX8357D;
    CS_ACTIVE;
     while(i < sizeof(HX8357D_regValues)) {
      uint8_t r = pgm_read_byte(&HX8357D_regValues[i++]);
      uint8_t len = pgm_read_byte(&HX8357D_regValues[i++]);
      if(r == TFTLCD_DELAY) {
	delay(len);
      } else {
	//Serial.print("Register $"); Serial.print(r, HEX);
	//Serial.print(" datalen "); Serial.println(len);

	CS_ACTIVE;
	CD_COMMAND;
	write8(r);
	CD_DATA;
	for (uint8_t d=0; d<len; d++) {
	  uint8_t x = pgm_read_byte(&HX8357D_regValues[i++]);
	  write8(x);
	}
	CS_IDLE;

      }
    }
     return;
     
  } else if(id == 0x7575) {

    uint8_t a, d;
    driver = ID_7575;
    CS_ACTIVE;
    while(i < sizeof(HX8347G_regValues)) {
      a = pgm_read_byte(&HX8347G_regValues[i++]);
      d = pgm_read_byte(&HX8347G_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister8(a, d);
    }
    setRotation(rotation);
    setLR(); // Lower-right corner of address window

  } else if(id == 0x0154){
  //S6D0154
   uint16_t a, d;
   driver = ID_S6D0154;
   CS_ACTIVE;
   //writeRegister16(0x80,0x008D); //Testkey
   //writeRegister16(0x92,0x0010);
   writeRegister16(0x11,0x001A);
   writeRegister16(0x12,0x3121);
   writeRegister16(0x13,0x006C);
   writeRegister16(0x14,0x4249);

   writeRegister16(0x10,0x0800);
   delay(10);
   writeRegister16(0x11,0x011A);
   delay(10);
   writeRegister16(0x11,0x031A);
   delay(10);
   writeRegister16(0x11,0x071A);
   delay(10);
   writeRegister16(0x11,0x0F1A);
   delay(20);
   writeRegister16(0x11,0x0F3A);
   delay(30);

   writeRegister16(0x01,0x0128);
   writeRegister16(0x02,0x0100);
   writeRegister16(0x03,0x1030);
   writeRegister16(0x07,0x1012);
   writeRegister16(0x08,0x0303);
   writeRegister16(0x0B,0x1100);
   writeRegister16(0x0C,0x0000);
   writeRegister16(0x0F,0x1801);
   writeRegister16(0x15,0x0020);
   /*
   writeRegister16(0x50,0x0101);
   writeRegister16(0x51,0x0603);
   writeRegister16(0x52,0x0408);
   writeRegister16(0x53,0x0000);
   writeRegister16(0x54,0x0605);
   writeRegister16(0x55,0x0406);
   writeRegister16(0x56,0x0303);
   writeRegister16(0x57,0x0303);
   writeRegister16(0x58,0x0010);
   writeRegister16(0x59,0x1000);
   */
   writeRegister16(0x07,0x0012);
   delay(40);

   writeRegister16(0x07,0x0013);/*  GRAM Address Set */
   writeRegister16(0x07,0x0017);/*  Display Control  DISPLAY ON */
   
   setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);
   
  } else if (id == 0x9327){
	// ILI9327 8 bit parallel interface
	driver = ID_ILI9327;
	CS_ACTIVE;
	while(i < sizeof(ILI9327_regValues)) {
		uint8_t r = pgm_read_byte(&ILI9327_regValues[i++]);
		uint8_t len = pgm_read_byte(&ILI9327_regValues[i++]);
		if(r == TFTLCD_DELAY) {
			delay(len);
			} else {
			//Serial.print("Register $"); Serial.print(r, HEX);
			//Serial.print(" datalen "); Serial.println(len);

			CS_ACTIVE;
			CD_COMMAND;
			write8(r);
			CD_DATA;
			for (uint8_t d=0; d<len; d++) {
				uint8_t x = pgm_read_byte(&ILI9327_regValues[i++]);
				write8(x);
			}
			CS_IDLE;

		}
	}
    return;
	
  } else if (id == 0x9488){
	// ILI9488 8 bit parallel interface 
	driver = ID_ILI9488;
	CS_ACTIVE;
	  	while(i < sizeof(ILI9488_regValues)) {
		  	uint8_t r = pgm_read_byte(&ILI9488_regValues[i++]);
		  	uint8_t len = pgm_read_byte(&ILI9488_regValues[i++]);
		  	if(r == TFTLCD_DELAY) {
			  	delay(len);
			  	} else {
			  	//Serial.print("Register $"); Serial.print(r, HEX);
			  	//Serial.print(" datalen "); Serial.println(len);

			  	CS_ACTIVE;
			  	CD_COMMAND;
			  	write8(r);
			  	CD_DATA;
			  	for (uint8_t d=0; d<len; d++) {
				  	uint8_t x = pgm_read_byte(&ILI9488_regValues[i++]);
				  	write8(x);
			  	}
			  	CS_IDLE;

		  	}
		 }
		 return; 
		 
	} else {
	driver = ID_UNKNOWN;
	return;
  }
}
void Adafruit_TFTLCD::begin(uint16_t id) {
  uint8_t i = 0;

  reset();

  delay(200);

  if((id == 0x9325) || (id == 0x9328)) {

    uint16_t a, d;
    driver = ID_932X;
    CS_ACTIVE;
    while(i < sizeof(ILI932x_regValues) / sizeof(uint16_t)) {
      a = pgm_read_word(&ILI932x_regValues[i++]);
      d = pgm_read_word(&ILI932x_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister16(a, d);
    }
    setRotation(rotation);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);

  } else if (id == 0x9341) {

    uint16_t a, d;
    driver = ID_9341;
    CS_ACTIVE;
    writeRegister8(ILI9341_SOFTRESET, 0);
    delay(50);
    writeRegister8(ILI9341_DISPLAYOFF, 0);

    writeRegister8(ILI9341_POWERCONTROL1, 0x23);
    writeRegister8(ILI9341_POWERCONTROL2, 0x10);
    writeRegister16(ILI9341_VCOMCONTROL1, 0x2B2B);
    writeRegister8(ILI9341_VCOMCONTROL2, 0xC0);
    writeRegister8(ILI9341_MEMCONTROL, ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR);
    writeRegister8(ILI9341_PIXELFORMAT, 0x55);
    writeRegister16(ILI9341_FRAMECONTROL, 0x001B);

    writeRegister8(ILI9341_ENTRYMODE, 0x07);
    /* writeRegister32(ILI9341_DISPLAYFUNC, 0x0A822700);*/

    writeRegister8(ILI9341_SLEEPOUT, 0);
    delay(150);
    writeRegister8(ILI9341_DISPLAYON, 0);
    delay(500);
    setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1);
    return;

  } else if (id == 0x8357) {
    // HX8357D
    driver = ID_HX8357D;
    CS_ACTIVE;
     while(i < sizeof(HX8357D_regValues)) {
      uint8_t r = pgm_read_byte(&HX8357D_regValues[i++]);
      uint8_t len = pgm_read_byte(&HX8357D_regValues[i++]);
      if(r == TFTLCD_DELAY) {
	delay(len);
      } else {
	//Serial.print("Register $"); Serial.print(r, HEX);
	//Serial.print(" datalen "); Serial.println(len);

	CS_ACTIVE;
	CD_COMMAND;
	write8(r);
	CD_DATA;
	for (uint8_t d=0; d<len; d++) {
	  uint8_t x = pgm_read_byte(&HX8357D_regValues[i++]);
	  write8(x);
	}
	CS_IDLE;

      }
    }
     return;

  } else if(id == 0x7575) {

    uint8_t a, d;
    driver = ID_7575;
    CS_ACTIVE;
    while(i < sizeof(HX8347G_regValues)) {
      a = pgm_read_byte(&HX8347G_regValues[i++]);
      d = pgm_read_byte(&HX8347G_regValues[i++]);
      if(a == TFTLCD_DELAY) delay(d);
      else                  writeRegister8(a, d);
    }
    setRotation(rotation);
    setLR(); // Lower-right corner of address window

  } else {
    driver = ID_UNKNOWN;
    return;
  }
}
bool bandedGlobalAlign(const int & k, const string & U, const string & V,
                       vector<int> & L, vector<int> & R,
                       vector<vector<int> > & s, vector<vector<char> > & l,
                       int & NumOfError) {
  int n = U.size();
  int m = V.size();
  int d = m >= n ? m - n : n - m;
  setLR(k, m, n, L, R);

  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < R[i] - L[i] + 1; j++) {
      s[i][j] = 0;
      l[i][j] = DIAG;
    }
  }

  s[0][0] = 0;
  for (int j = L[0]; j <= R[0]; j++) {
    s[0][slCOL(0, j)] = j * w[INDEL];
    l[0][slCOL(0, j)] = LEFT;
  }

  char maxl;
  int s1, s2, s3, s1Col, s2Col, s3Col, maxs;
  for (int i = 1; i <= n; i++) {
    s[i][0] = i * w[INDEL];
    l[i][0] = UP;
    for (int j = L[i]; j <= R[i]; j++) {
      s1 = -inf;
      s2 = -inf;
      s3 = -inf;
      s1Col = slCOL(i - 1, j) - 1;
      s2Col = slCOL(i - 1, j);
      s3Col = slCOL(i, j) - 1;

      if (j - 1 >= L[i - 1] && j - 1 <= R[i - 1]) {
        s1 = s[i - 1][s1Col] + w[charMatch(U[I], V[J])];
      }
      if (j >= L[i - 1] && j <= R[i - 1]) {
        s2 = s[i - 1][s2Col] + w[INDEL];
      }
      if (j - 1 >= L[i] && j - 1 <= R[i]) {
        s3 = s[i][s3Col] + w[INDEL];
      }

      max(s1, s2, s3, maxs, maxl);
      s[i][slCOL(i, j)] = maxs;
      l[i][slCOL(i, j)] = maxl;
    }
  }

  int nDiff = 0;
  int p = n, q = m;
  //rU.clear();
  //rV.clear();
  while (p >= 0 && q >= 0 && (p + q != 0)) {  // trace back from s[n][m] to s[0][0]
    if (l[p][slCOL(p, q)] == DIAG) {
      //rU.push_back(U[P]);
      //rV.push_back(V[Q]);
      if (U[P] != V[Q])
        nDiff++;
      p = p - 1;
      q = q - 1;
    } else if (l[p][slCOL(p, q)] == UP) {
      //rU.push_back(U[P]);
      //rV.push_back('-');
      p = p - 1;
      nDiff++;
    } else if (l[p][slCOL(p, q)] == LEFT) {
      //rU.push_back('-');
      //rV.push_back(V[Q]);
      q = q - 1;
      nDiff++;
    }

    if (nDiff > d + k) {
      return false;
    }
  }

  NumOfError = nDiff;
  return true;
}