Beispiel #1
0
/* --------------------------------------------------
* Gets the LEDs which this element and the ones below, wants to be on
* or off. Normaly this is also the keys to react, but it doesn't have
* to be this way ...
* --------------------------------------------------*/
Leds ModeCheckBox::GetLedsStatus()
{
    if(IsReadOnly() || mChecked)
    {
        return COMBINE(NO_LED,NO_LED);
    }
    return COMBINE(NO_LED,OK_LED);
}
Beispiel #2
0
u_long Scm_EqvHash(ScmObj obj)
{
    u_long hashval;
    if (SCM_NUMBERP(obj)) {
        if (SCM_INTP(obj)) {
            SMALL_INT_HASH(hashval, SCM_INT_VALUE(obj));
        } else if (SCM_BIGNUMP(obj)) {
            u_int i;
            u_long u = 0;
            for (i=0; i<SCM_BIGNUM_SIZE(obj); i++) {
                u += SCM_BIGNUM(obj)->values[i];
            }
            SMALL_INT_HASH(hashval, u);
        } else if (SCM_FLONUMP(obj)) {
            /* TODO: I'm not sure this is a good hash. */
            hashval = (u_long)(SCM_FLONUM_VALUE(obj)*2654435761UL);
        } else if (SCM_RATNUMP(obj)) {
            /* Ratnum must be normalized, so we can simply combine
               hashvals of numerator and denominator. */
            u_long h1 = Scm_EqvHash(SCM_RATNUM_NUMER(obj));
            u_long h2 = Scm_EqvHash(SCM_RATNUM_DENOM(obj));
            hashval = COMBINE(h1, h2);
        } else {
            /* TODO: I'm not sure this is a good hash. */
            hashval = (u_long)((SCM_COMPNUM_REAL(obj)+SCM_COMPNUM_IMAG(obj))*2654435761UL);
        }
    } else {
        ADDRESS_HASH(hashval, obj);
    }
    return hashval&HASHMASK;
}
int main(void)
{
	int y1 = 5;
	int x2 = 4;
	
	//printf("y_1=%d",COMBINE(y,1));
	printf("x_2=%d",COMBINE(2));


	return 0;
}
Beispiel #4
0
/* General hash function */
u_long Scm_Hash(ScmObj obj)
{
    u_long hashval;
    if (!SCM_PTRP(obj)) {
        SMALL_INT_HASH(hashval, (u_long)SCM_WORD(obj));
        return hashval;
    } else if (SCM_NUMBERP(obj)) {
        return Scm_EqvHash(obj);
    } else if (SCM_STRINGP(obj)) {
        goto string_hash;
    } else if (SCM_PAIRP(obj)) {
        u_long h = 0, h2;
        ScmObj cp;
        SCM_FOR_EACH(cp, obj) {
            h2 = Scm_Hash(SCM_CAR(cp));
            h = COMBINE(h, h2);
        }
        h2 = Scm_Hash(cp);
        h = COMBINE(h, h2);
        return h;
    } else if (SCM_VECTORP(obj)) {
uint8_t DIA_resizeWiz(RESWIZ_FORMAT *format, RESWIZ_AR *source, RESWIZ_AR *destination)
{
uint8_t r=0;
GtkWidget *dialog=create_dialog1();
        
        

        // Initialize
#define COMBINE(x,y) gtk_combo_box_set_active(GTK_COMBO_BOX(WID(x)),(int)*y)

                COMBINE(comboboxSource,source);
                COMBINE(comboboxFinal,destination);
                COMBINE(comboboxTarget,format);

        gtk_register_dialog(dialog);
        if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_OK)
        {
                r=1;
#undef COMBINE
#define COMBINE(x) gtk_combo_box_get_active(GTK_COMBO_BOX(WID(x)));
                *format=(RESWIZ_FORMAT) COMBINE(comboboxTarget);
                *source=(RESWIZ_AR)     COMBINE(comboboxSource);
                *destination=(RESWIZ_AR)COMBINE(comboboxFinal);

        }


        gtk_unregister_dialog(dialog);
        gtk_widget_destroy(dialog);
        return r;
}
void SEARCHER::do_move(const int& move) {

	int from = m_from(move),to = m_to(move),sq;

	/*remove captured piece*/
	if(m_capture(move)) {
		if(is_ep(move)) {
			sq = to - pawn_dir[player];
		} else {
			sq = to;
		}
		pcRemove(m_capture(move),sq);
		board[sq] = empty;
	}

	/*move piece*/
	if(m_promote(move)) {
		board[to] = m_promote(move);
		board[from] = empty;
		pcAdd(m_promote(move),to);
		pcRemove(COMBINE(player,pawn),from);
	} else {
		board[to] = board[from];
		board[from] = empty;
		pcSwap(from,to);
	}

	/*move castle*/
	if(is_castle(move)) {
        int fromc,toc;
		if(to > from) {
           fromc = to + RR;
		   toc = to + LL;
		} else {
           fromc = to + 2*LL;
		   toc = to + RR;
		}
		board[toc] = board[fromc];
		board[fromc] = empty;
		pcSwap(fromc,toc);
	} 

	/*update current state*/
	epsquare = 0;
	fifty++;
	if(DECOMB(player,m_piece(move)) == pawn) {
		fifty = 0;
	    if(to - from == (2 * pawn_dir[player])) {
            epsquare = ((to + from) >> 1);
		}
Beispiel #7
0
// Processes a just-completed term
// Returns true if new sentence has just passed checksum test and is validated
bool Gps::term_complete()
{
  //Console.println("compl");
  if (_is_checksum_term)
  {
    byte checksum = (byte)(16 * from_hex(_term[0]) + from_hex(_term[1]));
    //Console.print(checksum);
    //Console.print(",");
    //Console.println(_parity);
    if (checksum == _parity)
    {
      //if (1==1)
      if (_gps_data_good)
      {
#ifndef _GPS_NO_STATS
        ++_good_sentences;
#endif
        _last_time_fix = _new_time_fix;
        _last_position_fix = _new_position_fix;

        switch (_sentence_type)
        {
          case _GPS_SENTENCE_GPRMC:
            _time = _new_time;
            _date = _new_date;
            _latitude = _new_latitude;
            _longitude = _new_longitude;
            _speed = _new_speed;
            _course = _new_course;
            break;

          case _GPS_SENTENCE_GPGGA:
            _altitude = _new_altitude;
            _time = _new_time;
            _latitude = _new_latitude;
            _longitude = _new_longitude;
            _numsats = _new_numsats;
            _hdop = _new_hdop;
            break;

          default:
            break;
        }

        return true;
      }
    }

#ifndef _GPS_NO_STATS
    else
    {
      ++_failed_checksum;
    }
#endif
    return false;
  }

  // the first term determines the sentence type
  if (_term_number == 0)
  {
    if (!gpsstrcmp(_term, _GPRMC_TERM))
    {
      _sentence_type = _GPS_SENTENCE_GPRMC;
    }
    else if (!gpsstrcmp(_term, _GPGGA_TERM))
    {
      _sentence_type = _GPS_SENTENCE_GPGGA;
    }
    else
    {
      _sentence_type = _GPS_SENTENCE_OTHER;
    }
    return false;
  }

  if (_sentence_type != _GPS_SENTENCE_OTHER && _term[0])
  {
    switch (COMBINE(_sentence_type, _term_number))
    {
      case COMBINE(_GPS_SENTENCE_GPRMC, 1): // Time in both sentences
      case COMBINE(_GPS_SENTENCE_GPGGA, 1):
        _new_time = parse_decimal();
        _new_time_fix = millis();
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 2): // GPRMC validity
        _gps_data_good = _term[0] == 'A';
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 3): // Latitude
      case COMBINE(_GPS_SENTENCE_GPGGA, 2):
        _new_latitude = parse_degrees();
        _new_position_fix = millis();
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 4): // N/S
      case COMBINE(_GPS_SENTENCE_GPGGA, 3):
        if (_term[0] == 'S')
          _new_latitude = -_new_latitude;
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 5): // Longitude
      case COMBINE(_GPS_SENTENCE_GPGGA, 4):
        _new_longitude = parse_degrees();
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 6): // E/W
      case COMBINE(_GPS_SENTENCE_GPGGA, 5):
        if (_term[0] == 'W')
          _new_longitude = -_new_longitude;
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 7): // Speed (GPRMC)
        _new_speed = parse_decimal();
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 8): // Course (GPRMC)
        _new_course = parse_decimal();
        break;

      case COMBINE(_GPS_SENTENCE_GPRMC, 9): // Date (GPRMC)
        _new_date = gpsatol(_term);
        break;

      case COMBINE(_GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA) ; 0=invalid, 1=GPS fix, 2=DGPS fix, 6=estimation
        _gps_data_good = _term[0] > '0';
        break;

      case COMBINE(_GPS_SENTENCE_GPGGA, 7): // NN-Satellites used (GPGGA): 00-12
        _new_numsats = (unsigned char)atoi(_term);
        break;

      case COMBINE(_GPS_SENTENCE_GPGGA, 8): // D.D - HDOP (GPGGA) - horizontal deviation
        _new_hdop = parse_decimal();
        break;

      case COMBINE(_GPS_SENTENCE_GPGGA, 9): // H.H - Altitude (GPGGA)
        _new_altitude = parse_decimal();
        break;

      default:
        break;
    }
  }
  return false;
}
Beispiel #8
0
const char *Console::ColourToString(char IRCColour)
{
	switch (IRCColour)
	{
		case '0':
			return COLOUR(COMBINE(LIGHT, WHITE));
		case '1':
			return COLOUR(COMBINE(DARK, BLACK));
		case '2':
			return COLOUR(COMBINE(LIGHT, RED));
		case '3':
			return COLOUR(BROWN);
		case '4':
			return COLOUR(COMBINE(LIGHT, BROWN));
		case '5':
			return COLOUR(COMBINE(LIGHT, GREEN));
		case '6':
		case '7':
			return COLOUR(GREEN);
		case '8':
			return COLOUR(COMBINE(LIGHT, CYAN));
		case '9':
			return COLOUR(COMBINE(LIGHT, BLUE));
		case ':':
			return COLOUR(BLUE);
		case ';':
			return COLOUR(MAGENTA);
		case '<':
		case '=':
			return COLOUR(COMBINE(LIGHT, MAGENTA));
		case '>':
			return COLOUR(WHITE);
		case '?':
			return COLOUR(COMBINE(DARK, WHITE));
		case '@':
			return COLOUR(COMBINE(DARK, RED));
		case 'A':
			return COLOUR(COMBINE(DARK, BROWN));
		case 'B':
			return COLOUR(BROWN);
		case 'C':
		case 'D':
		case 'E':
			return COLOUR(COMBINE(DARK, GREEN));
		case 'F':
			return COLOUR(COMBINE(DARK, CYAN));
		case 'G':
		case 'H':
			return COLOUR(COMBINE(DARK, BLUE));
		case 'I':
		case 'J':
		case 'K':
			return COLOUR(COMBINE(DARK, MAGENTA));
	}
	return "\x1B[0m";
}
Beispiel #9
0
uint8_t Nordic::term_complete() {

  uint8_t ret_val = _SENTENCE_NONE;

  // the first term determines the sentence type
  if (_term_number == 0) {
    if (!nstrcmp(_term, _LOC_TERM))
      _sentence_type = _SENTENCE_LOC;
    else if (!nstrcmp(_term, _HRM_TERM))
      _sentence_type = _SENTENCE_HRM;
    else if (!nstrcmp(_term, _CAD_TERM))
      _sentence_type = _SENTENCE_CAD;
    else if (!nstrcmp(_term, _ANCS_TERM))
      _sentence_type = _SENTENCE_ANCS;
    else if (!nstrcmp(_term, _PC_TERM))
      _sentence_type = _SENTENCE_PC;
    else if (!nstrcmp(_term, _BTN_TERM))
      _sentence_type = _SENTENCE_BTN;
    else if (!nstrcmp(_term, _DBG_TERM))
      _sentence_type = _SENTENCE_DBG;
    else
      _sentence_type = _SENTENCE_OTHER;
    return false;
  }

  if (_sentence_type != _SENTENCE_OTHER && _term[0]) {
    // on doit parser l'info (_term)
    switch (COMBINE(_sentence_type, _term_number)) {
      case COMBINE(_SENTENCE_LOC, 1):
        _sec_jour = natol(_term);
        break;
	  case COMBINE(_SENTENCE_LOC, 2):
        _lat = parse_sint();
        break;
      case COMBINE(_SENTENCE_LOC, 3):
        _lon = parse_sint();
        break;
	  case COMBINE(_SENTENCE_LOC, 4):
        _ele = parse_sint();
        break;
	  case COMBINE(_SENTENCE_LOC, 5):
        _gps_speed = parse_sint();
        ret_val = _SENTENCE_LOC;
        break;

      case COMBINE(_SENTENCE_HRM, 1):
        _bpm = natol(_term);
        break;
      case COMBINE(_SENTENCE_HRM, 2):
        _rr = natol(_term);
        ret_val = _SENTENCE_HRM;
        break;

      case COMBINE(_SENTENCE_CAD, 1):
        _rpm = natol(_term);
        break;
      case COMBINE(_SENTENCE_CAD, 2):
        _cad_speed = natol(_term);
        ret_val = _SENTENCE_CAD;
        break;

      case COMBINE(_SENTENCE_ANCS, 1):
        _ancs_type = natol(_term);
        break;
      case COMBINE(_SENTENCE_ANCS, 2):
        if (_ancs_type == 0) {
          _ancs_msg = _term;
          ret_val = _SENTENCE_ANCS;
        } else {
          _ancs_title = _term;
        }
        break;
      case COMBINE(_SENTENCE_ANCS, 3):
        _ancs_msg = _term;
        ret_val = _SENTENCE_ANCS;
        break;
		
	  case COMBINE(_SENTENCE_DBG, 1):
        _dbg_type = natol(_term);
        break;
      case COMBINE(_SENTENCE_DBG, 2):
        _dbg_code = natol(_term);
        break;
	  case COMBINE(_SENTENCE_DBG, 3):
        _dbg_line = natol(_term);
		if (_dbg_type == 0) {
          ret_val = _SENTENCE_DBG;
        }
        break;
      case COMBINE(_SENTENCE_DBG, 4):
        if (_dbg_type == 1) {
          _dbg_file = _term;
          ret_val = _SENTENCE_DBG;
        }
        break;
      
	  case COMBINE(_SENTENCE_BTN, 1):
        _btn = natol(_term) + 1;
        ret_val = _SENTENCE_BTN;
        break;
		
      case COMBINE(_SENTENCE_PC, 1):
        _pc = natol(_term);
        ret_val = _SENTENCE_PC;
        break;
    }
  }

  return ret_val;
}
Beispiel #10
0
   need_flush |= nv50_validate_tsc(nv50, 2);

   if (need_flush) {
      BEGIN_NV04(nv50->base.pushbuf, NV50_3D(TSC_FLUSH), 1);
      PUSH_DATA (nv50->base.pushbuf, 0);
   }
}

/* There can be up to 4 different MS levels (1, 2, 4, 8). To simplify the
 * shader logic, allow each one to take up 8 offsets.
 */
#define COMBINE(x, y) x, y
#define DUMMY 0, 0
static const uint32_t msaa_sample_xy_offsets[] = {
   /* MS1 */
   COMBINE(0, 0),
   DUMMY,
   DUMMY,
   DUMMY,
   DUMMY,
   DUMMY,
   DUMMY,
   DUMMY,

   /* MS2 */
   COMBINE(0, 0),
   COMBINE(1, 0),
   DUMMY,
   DUMMY,
   DUMMY,
   DUMMY,
Beispiel #11
0
#endif

typedef union {
	uint32_t w[16];
	uint64_t d[8];
#ifdef __SSE2__
	__m128i q[4];
#endif
} salsa20_blk_t;

static inline void salsa20_simd_shuffle(const salsa20_blk_t *Bin,
    salsa20_blk_t *Bout)
{
#define COMBINE(out, in1, in2) \
	Bout->d[out] = Bin->w[in1 * 2] | ((uint64_t)Bin->w[in2 * 2 + 1] << 32);
	COMBINE(0, 0, 2)
	COMBINE(1, 5, 7)
	COMBINE(2, 2, 4)
	COMBINE(3, 7, 1)
	COMBINE(4, 4, 6)
	COMBINE(5, 1, 3)
	COMBINE(6, 6, 0)
	COMBINE(7, 3, 5)
#undef COMBINE
}

static inline void salsa20_simd_unshuffle(const salsa20_blk_t *Bin,
    salsa20_blk_t *Bout)
{
#define UNCOMBINE(out, in1, in2) \
	Bout->w[out * 2] = Bin->d[in1]; \
Beispiel #12
0
// Processes a just-completed term
// Returns true if new sentence has just passed checksum test and is validated
bool TinyGPSPlus::endOfTermHandler()
{
  // If it's the checksum term, and the checksum checks out, commit
  if (isChecksumTerm)
  {
    byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]);
    if (checksum == parity)
    {
      passedChecksumCount++;
      if (sentenceHasFix)
        ++sentencesWithFixCount;

      switch(curSentenceType)
      {
      case GPS_SENTENCE_GPRMC:
        date.commit();
        time.commit();
        if (sentenceHasFix)
        {
           location.commit();
           speed.commit();
           course.commit();
        }
        break;
      case GPS_SENTENCE_GPGGA:
        time.commit();
        if (sentenceHasFix)
        {
          location.commit();
          altitude.commit();
        }
        satellites.commit();
        hdop.commit();
        break;
      }

      // Commit all custom listeners of this sentence type
      for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0; p = p->next)
         p->commit();
      return true;
    }

    else
    {
      ++failedChecksumCount;
    }

    return false;
  }

  // the first term determines the sentence type
  if (curTermNumber == 0)
  {
    if (!strcmp(term, _GPRMCterm))
      curSentenceType = GPS_SENTENCE_GPRMC;
    else if (!strcmp(term, _GPGGAterm))
      curSentenceType = GPS_SENTENCE_GPGGA;
    else
      curSentenceType = GPS_SENTENCE_OTHER;

    // Any custom candidates of this sentence type?
    for (customCandidates = customElts; customCandidates != NULL && strcmp(customCandidates->sentenceName, term) < 0; customCandidates = customCandidates->next);
    if (customCandidates != NULL && strcmp(customCandidates->sentenceName, term) > 0)
       customCandidates = NULL;

    return false;
  }

  if (curSentenceType != GPS_SENTENCE_OTHER && term[0])
    switch(COMBINE(curSentenceType, curTermNumber))
  {
    case COMBINE(GPS_SENTENCE_GPRMC, 1): // Time in both sentences
    case COMBINE(GPS_SENTENCE_GPGGA, 1):
      time.setTime(term);
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 2): // GPRMC validity
      sentenceHasFix = term[0] == 'A';
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 3): // Latitude
    case COMBINE(GPS_SENTENCE_GPGGA, 2):
      location.setLatitude(term);
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 4): // N/S
    case COMBINE(GPS_SENTENCE_GPGGA, 3):
      location.rawNewLatData.negative = term[0] == 'S';
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 5): // Longitude
    case COMBINE(GPS_SENTENCE_GPGGA, 4):
      location.setLongitude(term);
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 6): // E/W
    case COMBINE(GPS_SENTENCE_GPGGA, 5):
      location.rawNewLngData.negative = term[0] == 'W';
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 7): // Speed (GPRMC)
      speed.set(term);
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 8): // Course (GPRMC)
      course.set(term);
      break;
    case COMBINE(GPS_SENTENCE_GPRMC, 9): // Date (GPRMC)
      date.setDate(term);
      break;
    case COMBINE(GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA)
      sentenceHasFix = term[0] > '0';
      break;
    case COMBINE(GPS_SENTENCE_GPGGA, 7): // Satellites used (GPGGA)
      satellites.set(term);
      break;
    case COMBINE(GPS_SENTENCE_GPGGA, 8): // HDOP
      hdop.set(term);
      break;
    case COMBINE(GPS_SENTENCE_GPGGA, 9): // Altitude (GPGGA)
      altitude.set(term);
      break;
  }

  // Set custom values as needed
  for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0 && p->termNumber <= curTermNumber; p = p->next)
    if (p->termNumber == curTermNumber)
         p->set(term);

  return false;
}
 /*****************************************************************************
 * Function
 * DESCRIPTION:
 * Constructor
 *****************************************************************************/
 WriteValueToDataPointAtKeyPressAndJumpToSpecificDisplay::WriteValueToDataPointAtKeyPressAndJumpToSpecificDisplay(Component* pParent) : Component(pParent)
 {
   mCheckState = 0;
   mLegalKeys = MPC_OK_KEY;
   mLedsStatus = COMBINE(NO_LED,OK_LED);
 }
Beispiel #14
0
static intnat caml_ba_hash(value v)
{
  struct caml_ba_array * b = Caml_ba_array_val(v);
  intnat num_elts, n, h;
  int i;

  num_elts = 1;
  for (i = 0; i < b->num_dims; i++) num_elts = num_elts * b->dim[i];
  if (num_elts >= 50) num_elts = 50;
  h = 0;

#define COMBINE(h,v) ((h << 4) + h + (v))

  switch (b->flags & CAML_BA_KIND_MASK) {
  case CAML_BA_SINT8:
  case CAML_BA_UINT8: {
    uint8 * p = b->data;
    for (n = 0; n < num_elts; n++) h = COMBINE(h, *p++);
    break;
  }
  case CAML_BA_SINT16:
  case CAML_BA_UINT16: {
    uint16 * p = b->data;
    for (n = 0; n < num_elts; n++) h = COMBINE(h, *p++);
    break;
  }
  case CAML_BA_FLOAT32:
  case CAML_BA_COMPLEX32:
  case CAML_BA_INT32:
#ifndef ARCH_SIXTYFOUR
  case CAML_BA_CAML_INT:
  case CAML_BA_NATIVE_INT:
#endif
  {
    uint32 * p = b->data;
    for (n = 0; n < num_elts; n++) h = COMBINE(h, *p++);
    break;
  }
  case CAML_BA_FLOAT64:
  case CAML_BA_COMPLEX64:
  case CAML_BA_INT64:
#ifdef ARCH_SIXTYFOUR
  case CAML_BA_CAML_INT:
  case CAML_BA_NATIVE_INT:
#endif
#ifdef ARCH_SIXTYFOUR
  {
    uintnat * p = b->data;
    for (n = 0; n < num_elts; n++) h = COMBINE(h, *p++);
    break;
  }
#else
  {
    uint32 * p = b->data;
    for (n = 0; n < num_elts; n++) {
#ifdef ARCH_BIG_ENDIAN
      h = COMBINE(h, p[1]); h = COMBINE(h, p[0]); p += 2;
#else
      h = COMBINE(h, p[0]); h = COMBINE(h, p[1]); p += 2;
#endif
    }
    break;
  }
#endif
  }
#undef COMBINE
  return h;
}
Beispiel #15
0
void CNoiseEditor::OnPaint()
{
	ASSERT(m_pBackDC != NULL);

	CPaintDC dc(this);
	
	DrawBackground(m_pBackDC, m_iItems, false, 0);
	DrawRange(m_pBackDC, m_iItems, 0);

	// Return now if no sequence is selected
	if (!m_pSequence) {
		PaintBuffer(m_pBackDC, &dc);
		return;
	}

	// Draw items
	int Count = m_pSequence->GetItemCount();

	if (!Count) {
		PaintBuffer(m_pBackDC, &dc);
		return;
	}

	int StepWidth = GetItemWidth();
	int StepHeight = m_GraphRect.Height() / m_iItems;

	// Draw items
	for (int i = 0; i < Count; i++) {
		// Draw noise frequency
		int item = m_pSequence->GetItem(i) & 0x1F;
		int x = m_GraphRect.left + i * StepWidth + 1;
		int y = m_GraphRect.top + StepHeight * (m_iItems - item);
		int w = StepWidth;
		int h = StepHeight;//* item;
		
		if (m_iCurrentPlayPos == i)
			DrawPlayRect(m_pBackDC, x, y, w, h);
		else
			DrawRect(m_pBackDC, x, y, w, h);

		// Draw switches
		item = m_pSequence->GetItem(i);

		int Offset = h * 36 - 1;

		if (item & S5B_MODE_SQUARE) {
			static const COLORREF BUTTON_COL = COMBINE(0, 160, 160);
			int y = Offset;
			int h = 9;
			m_pBackDC->FillSolidRect(x, y, w, h, BUTTON_COL);
			m_pBackDC->Draw3dRect(x, y, w, h, BLEND(BUTTON_COL, 0xFFFFFF, 80), BLEND(BUTTON_COL, 0x000000, 80));
		}
		else {
			static const COLORREF BUTTON_COL = COMBINE(50, 50, 50);
			int y = Offset;
			int h = 9;
			m_pBackDC->FillSolidRect(x, y, w, h, BUTTON_COL);
			m_pBackDC->Draw3dRect(x, y, w, h, BLEND(BUTTON_COL, 0xFFFFFF, 80), BLEND(BUTTON_COL, 0x000000, 80));
		}

		if (item & S5B_MODE_NOISE) {
			static const COLORREF BUTTON_COL = COMBINE(160, 0, 160);
			int y = Offset + 11;
			int h = 9;
			m_pBackDC->FillSolidRect(x, y, w, h, BUTTON_COL);
			m_pBackDC->Draw3dRect(x, y, w, h, BLEND(BUTTON_COL, 0xFFFFFF, 80), BLEND(BUTTON_COL, 0x000000, 80));
		}
		else {
			static const COLORREF BUTTON_COL = COMBINE(50, 50, 50);
			int y = Offset + 11;
			int h = 9;
			m_pBackDC->FillSolidRect(x, y, w, h, BUTTON_COL);
			m_pBackDC->Draw3dRect(x, y, w, h, BLEND(BUTTON_COL, 0xFFFFFF, 80), BLEND(BUTTON_COL, 0x000000, 80));
		}
	}
	
	DrawLoopPoint(m_pBackDC, StepWidth);
	DrawReleasePoint(m_pBackDC, StepWidth);
	DrawLine(m_pBackDC);

	PaintBuffer(m_pBackDC, &dc);
}
Beispiel #16
0
// Processes a just-completed term
// Returns true if new sentence has just passed checksum test and is validated
bool ParserNMEA::term_complete()
{
	if (_is_checksum_term)
	{
		byte checksum = 16 * from_hex(_term[0]) + from_hex(_term[1]);
		if (checksum == _parity)
		{
			if (_gps_data_good)
			{
				#ifndef _GPS_NO_STATS
				++_good_sentences;
				#endif
				_last_time_fix = _new_time_fix;
				_last_position_fix = _new_position_fix;

				switch(_sentence_type)
				{
					case _GPS_SENTENCE_GPRMC:
					_time      = _new_time;
					_latitude  = _new_latitude;
					_longitude = _new_longitude;
					_speed     = _new_speed;
					break;
					case _GPS_SENTENCE_GPVTG:
					_speed     = _new_speed;
					break;
					case _GPS_SENTENCE_GPZDA:
				    _time      = _new_time;
					_day      = _new_day;
					_month    = _new_month;
					_year     = _new_year;
					break;
					case _GPS_SENTENCE_GPGGA:
					_time      = _new_time;
					_latitude  = _new_latitude;
					_longitude = _new_longitude;
					_hdop      = _new_hdop;
					break;
				}

				return true;
			}
		}

		#ifndef _GPS_NO_STATS
		else
		++_failed_checksum;
		#endif
		return false;
	}

	// the first term determines the sentence type
	if (_term_number == 0)
	{
		if (!gpsstrcmp(_term, _GPZDA_TERM))
		_sentence_type = _GPS_SENTENCE_GPZDA;
		else if (!gpsstrcmp(_term, _GPGGA_TERM))
		_sentence_type = _GPS_SENTENCE_GPGGA;
		else if (!gpsstrcmp(_term, _GPVTG_TERM))
		_sentence_type = _GPS_SENTENCE_GPVTG;
		else
		_sentence_type = _GPS_SENTENCE_OTHER;
		return false;
	}

	if (_sentence_type != _GPS_SENTENCE_OTHER && _term[0])
	switch(COMBINE(_sentence_type, _term_number))
	{
		case COMBINE(_GPS_SENTENCE_GPZDA, 1): // Time in ZDA
		_new_time = parse_decimal();
		_new_time_fix = millis();
		break;
		case COMBINE(_GPS_SENTENCE_GPRMC, 2): // GPRMC validity
		_gps_data_good = _term[0] == 'A';
		break;
		case COMBINE(_GPS_SENTENCE_GPRMC, 3): // Latitude
	    _new_latitude = parse_degrees();
		_new_position_fix = millis();
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 2):
		_new_latitude = parse_degrees();
		_new_position_fix = millis();
		break;
		case COMBINE(_GPS_SENTENCE_GPRMC, 4): // N/S
		if (_term[0] == 'S')
		_new_latitude = -_new_latitude;
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 3):
		if (_term[0] == 'S')
		_new_latitude = -_new_latitude;
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 4):
		_new_longitude = parse_degrees();
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 5):
		if (_term[0] == 'W')
		_new_longitude = -_new_longitude;
		break;
		case COMBINE(_GPS_SENTENCE_GPVTG, 5): // Speed (GPVTG)
		_new_speed = parse_decimal();
		break;
		case COMBINE(_GPS_SENTENCE_GPRMC, 8): // Course (GPRMC)
		_new_course = parse_decimal();
		break;
		case COMBINE(_GPS_SENTENCE_GPZDA, 2): // Date/day (GPZDA)
		_new_day = (unsigned char)atoi(_term);
		break;
		case COMBINE(_GPS_SENTENCE_GPZDA, 3): // Date/month (GPZDA)
		_new_month = (unsigned char)atoi(_term);
		break;
		case COMBINE(_GPS_SENTENCE_GPZDA, 4): // Date/year (GPZDA)
		 _new_year = parse_decimal() / 100;
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA)
		_gps_data_good = _term[0] > '0';
		break;
		case COMBINE(_GPS_SENTENCE_GPGGA, 8): // HDOP
		_new_hdop = parse_decimal();
		break;
	}

	return false;
}
Beispiel #17
0
// Processes a just-completed term
// Returns true if new sentence has just passed checksum test and is validated
bool TinyGPS::term_complete()
{
  if (_is_checksum_term)
  {
    byte checksum = 16 * from_hex(_term[0]) + from_hex(_term[1]);
    if (checksum == _parity)
    {
      if (_gps_data_good)
      {
#ifndef _GPS_NO_STATS
        ++_good_sentences;
#endif
        _last_time_fix = _new_time_fix;
        _last_position_fix = _new_position_fix;

        switch(_sentence_type)
        {
        case _GPS_SENTENCE_GPRMC:
          _time      = _new_time;
          _date      = _new_date;
          _latitude  = _new_latitude;
          _longitude = _new_longitude;
          _speed     = _new_speed;
          _course    = _new_course;
          break;
        case _GPS_SENTENCE_GPGGA:
          _altitude  = _new_altitude;
          _time      = _new_time;
          _latitude  = _new_latitude;
          _longitude = _new_longitude;
          _numsats   = _new_numsats;
          _hdop      = _new_hdop;
          break;
        }

        return true;
      }
    }

#ifndef _GPS_NO_STATS
    else
      ++_failed_checksum;
#endif
    return false;
  }

  // the first term determines the sentence type
  if (_term_number == 0)
  {
    if (!gpsstrcmp(_term, _GPRMC_TERM))
      _sentence_type = _GPS_SENTENCE_GPRMC;
    else if (!gpsstrcmp(_term, _GPGGA_TERM))
      _sentence_type = _GPS_SENTENCE_GPGGA;
    else
      _sentence_type = _GPS_SENTENCE_OTHER;
    return false;
  }

  if (_sentence_type != _GPS_SENTENCE_OTHER && _term[0])
    switch(COMBINE(_sentence_type, _term_number))
  {
    case COMBINE(_GPS_SENTENCE_GPRMC, 1): // Time in both sentences
    case COMBINE(_GPS_SENTENCE_GPGGA, 1):
      _new_time = parse_decimal();
      _new_time_fix = millis();
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 2): // GPRMC validity
      _gps_data_good = _term[0] == 'A';
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 3): // Latitude
    case COMBINE(_GPS_SENTENCE_GPGGA, 2):
      _new_latitude = parse_degrees();
      _new_position_fix = millis();
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 4): // N/S
    case COMBINE(_GPS_SENTENCE_GPGGA, 3):
      if (_term[0] == 'S')
        _new_latitude = -_new_latitude;
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 5): // Longitude
    case COMBINE(_GPS_SENTENCE_GPGGA, 4):
      _new_longitude = parse_degrees();
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 6): // E/W
    case COMBINE(_GPS_SENTENCE_GPGGA, 5):
      if (_term[0] == 'W')
        _new_longitude = -_new_longitude;
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 7): // Speed (GPRMC)
      _new_speed = parse_decimal();
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 8): // Course (GPRMC)
      _new_course = parse_decimal();
      break;
    case COMBINE(_GPS_SENTENCE_GPRMC, 9): // Date (GPRMC)
      _new_date = gpsatol(_term);
      break;
    case COMBINE(_GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA)
      _gps_data_good = _term[0] > '0';
      break;
    case COMBINE(_GPS_SENTENCE_GPGGA, 7): // Satellites used (GPGGA)
      _new_numsats = (unsigned char)atoi(_term);
      break;
    case COMBINE(_GPS_SENTENCE_GPGGA, 8): // HDOP
      _new_hdop = parse_decimal();
      break;
    case COMBINE(_GPS_SENTENCE_GPGGA, 9): // Altitude (GPGGA)
      _new_altitude = parse_decimal();
      break;
  }

  return false;
}
Beispiel #18
0
void parse_gps_term(void)
{
	 if (gps_checksum_term)
	 {
		 unsigned char checksum = 16 * gps_from_hex(gps_term[0]) + gps_from_hex(gps_term[1]);
		 if (checksum == gps_parity)
		 {
			 if (gps_data_good)
			 {
				gps_last_time_fix = gps_new_time_fix;
				gps_last_position_fix = gps_new_position_fix;

				 switch(gps_sentence_type)
				 {
					 case GPS_SENTENCE_GPRMC:
					 gps_time      = gps_new_time;
					 gps_date      = gps_new_date;
					 gps_latitude  = gps_new_latitude;
					 gps_longitude = gps_new_longitude;
					 gps_speed     = gps_new_speed;
					 gps_course    = gps_new_course;
					 break;
					 case GPS_SENTENCE_GPGGA:
					 gps_altitude  = gps_new_altitude;
					 gps_time      = gps_new_time;
					 gps_latitude  = gps_new_latitude;
					 gps_longitude = gps_new_longitude;
					 gps_numsats   = gps_new_numsats;
					 gps_hdop      = gps_new_hdop;
					 break;
				 }

				 return;
			 }
		 }

		 
		 return;
	 }

	 // the first term determines the sentence type
	 if (gps_term_number == 0)
	 {
		 if (!gpsstrcmp(gps_term, GPRMC_TERM))
		 gps_sentence_type = GPS_SENTENCE_GPRMC;
		 else if (!gpsstrcmp(gps_term, GPGGA_TERM))
		 gps_sentence_type = GPS_SENTENCE_GPGGA;
		 else
		 gps_sentence_type = GPS_SENTENCE_OTHER;
		 return;
	 }

	 if (gps_sentence_type != GPS_SENTENCE_OTHER && gps_term[0])
	 switch(COMBINE(gps_sentence_type, gps_term_number))
	 {
		 case COMBINE(GPS_SENTENCE_GPRMC, 1): // Time in both sentences
		 case COMBINE(GPS_SENTENCE_GPGGA, 1):
		 gps_new_time = gps_parse_decimal();
		 gps_new_time_fix = main_get_msclock_ticks();
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 2): // GPRMC validity
		 gps_data_good = gps_term[0] == 'A';
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 3): // Latitude
		 case COMBINE(GPS_SENTENCE_GPGGA, 2):
		 gps_new_latitude = gps_parse_degrees();
		 gps_new_position_fix =  main_get_msclock_ticks();
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 4): // N/S
		 case COMBINE(GPS_SENTENCE_GPGGA, 3):
		 if (gps_term[0] == 'S')
		 gps_new_latitude = -gps_new_latitude;
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 5): // Longitude
		 case COMBINE(GPS_SENTENCE_GPGGA, 4):
		 gps_new_longitude = gps_parse_degrees();
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 6): // E/W
		 case COMBINE(GPS_SENTENCE_GPGGA, 5):
		 if (gps_term[0] == 'W')
		 gps_new_longitude = -gps_new_longitude;
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 7): // Speed (GPRMC)
		 gps_new_speed = gps_parse_decimal();
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 8): // Course (GPRMC)
		 gps_new_course = gps_parse_decimal();
		 break;
		 case COMBINE(GPS_SENTENCE_GPRMC, 9): // Date (GPRMC)
		 gps_new_date = gpsatol(gps_term);
		 break;
		 case COMBINE(GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA)
		 gps_data_good = gps_term[0] > '0';
		 break;
		 case COMBINE(GPS_SENTENCE_GPGGA, 7): // Satellites used (GPGGA)
		 gps_new_numsats = (unsigned char)atoi(gps_term);
		 break;
		 case COMBINE(GPS_SENTENCE_GPGGA, 8): // HDOP
		 gps_new_hdop = gps_parse_decimal();
		 break;
		 case COMBINE(GPS_SENTENCE_GPGGA, 9): // Altitude (GPGGA)
		 gps_new_altitude = gps_parse_decimal();
		 break;
	 }

}