Beispiel #1
0
arxstatus_t ARXClientTest::parseOptions(int argc, char *argv[])
{
    int numOptions = 11;
    option_t *opts = (option_t *)calloc(numOptions, sizeof(option_t));
    if (opts == NULL) {
        return NOMEMORY;
    }

    for (int i = 0; i < numOptions; i++) {
        opts[i].type = OPTION_TYPE_INT;
        opts[i].size = sizeof(int);
    }

    int index = 0;
    opts[index].datum = &mCamWidth;
    opts[index++].short_switch = "-w";

    opts[index].datum = &mCamHeight;
    opts[index++].short_switch = "-h";

    opts[index].datum = &mSecCamWidth;
    opts[index++].short_switch = "-cw";

    opts[index].datum = &mSecCamHeight;
    opts[index++].short_switch = "-ch";

    opts[index].datum = &mCamId;
    opts[index++].short_switch = "-c";

    opts[index].datum = &mCamFPS;
    opts[index++].short_switch = "-fps";

    opts[index].datum = &mCamMirror;
    opts[index++].short_switch = "-mir";

    opts[index].datum = &mSecCamMirror;
    opts[index++].short_switch = "-mir2";

    opts[index].datum = &mEnableSec;
    opts[index++].short_switch = "-rc2";

    opts[index].datum = &mTimeToRun;
    opts[index++].short_switch = "-t";

    opts[index].datum = &mComputeBufOut;
    opts[index++].short_switch = "-o";

    option_process(argc, argv, opts, numOptions);

    free(opts);

    return NOERROR;
}
Beispiel #2
0
Datei: thread.c Projekt: aosp/dvp
bool_e thread_unittest(int argc, char *argv[])
{
    uint32_t i, counter = 10;
    pingpongevent_t events;
    int numErrors = 0;
    bool_e verbose = false_e;
    option_t hash_opts[] = {
        {OPTION_TYPE_BOOL, &verbose, sizeof(bool_e), "-v", "--verbose", "Used to print out debugging information"},
    };
    msg_t msgs[] = {{3}, {9283}, {27}, {42}}; // last value == TEST_RET_VALUE
    msg_thread_t msgt;
    thread_t t;
    thread_ret_t r;

    option_process(argc, argv, hash_opts, dimof(hash_opts));

    if (verbose) {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "===THREAD TEST===\n");
    }

    // simple start, stop test
    t = thread_create(thread_test, &counter);
    r = thread_join(t);
    if (r != TEST_RET_VALUE)
        numErrors++;

    if (verbose) {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "===PING PONG TEST===\n");
    }

    // event test across threads
    event_init(&events.ping, false_e);
    event_init(&events.pong, false_e);

    t = thread_create(thread_test_events, &events);
    if (verbose) {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "Test is waiting for thread to wakeup!\n");
    }
    if (event_wait(&events.ping, 500))
    {
        if (verbose)
            SOSAL_PRINT(SOSAL_ZONE_THREAD, "Received Event from Thread!\n");
    }
    else
    {
        if (verbose)
            SOSAL_PRINT(SOSAL_ZONE_THREAD, "ERROR! Thread Message Timedout!\n");
    }
    if (verbose) SOSAL_PRINT(SOSAL_ZONE_THREAD, "Sending Event to Thread!\n");

    event_set(&events.pong);

    r = thread_join(t);
    SOSAL_PRINT(SOSAL_ZONE_THREAD, "=== THREAD JOIN exit = "THREAD_RET_FMT" ===\n", r);
    if (r != TEST_RET_VALUE)
        numErrors++;
    event_deinit(&events.ping);
    event_deinit(&events.pong);

    if (verbose) {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "===QUEUE TEST===\n");
    }

    msgt.msgs = queue_create(2, sizeof(msg_t));
    msgt.running = true_e;
    event_init(&msgt.signal, false_e);
    t = thread_create(thread_test_msgs, &msgt);
    if (verbose)
    {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "Waiting for thread to start!\n");
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "Thread Started?(%s!)\n", (event_wait(&msgt.signal, 1000)?"true":"false"));
    }
    for (i = 0; i < dimof(msgs); i++) {
        if (queue_write(msgt.msgs, true_e, &msgs[i]) == false_e) {
            SOSAL_PRINT(SOSAL_ZONE_ERROR, "ERROR! Failed to write to queue!\n");
        } else {
            if (verbose) SOSAL_PRINT(SOSAL_ZONE_THREAD, "Wrote message "FMT_SIZE_T" to the Queue!\n", msgs[i].code);
        }
    }
    r = thread_join(t);
    SOSAL_PRINT(SOSAL_ZONE_THREAD, "=== THREAD JOIN exit = "THREAD_RET_FMT" ===\n", r);
    queue_destroy(msgt.msgs);
    event_deinit(&msgt.signal);

    if (verbose) {
        SOSAL_PRINT(SOSAL_ZONE_THREAD, "===THREAD TEST EXIT Errors=%d ===\n", numErrors);
    }

    if (numErrors > 0)
        return false_e;
    else
        return true_e;
}
Beispiel #3
0
int collect_process(struct collect_state *cs, gnuplot_ctrl *bsln_disp[4], int *real_raw, int *imag_raw)
{
	struct header_poco *hp;
	struct option_poco *op;
	unsigned int options, base, payload, i;
	int wr, or, result;
	int j, k;
	unsigned int value, compare, flag;

	result = 0;
	compare = 0;

	if(cs->c_have < 8){
		fprintf(stderr, "process: short packet (len=%u)\n", cs->c_have);
		return -1;
	}

	hp = (struct header_poco *) cs->c_buffer;

	if(hp->h_magic != htons(MAGIC_HEADER_POCO)){
		fprintf(stderr, "process: bad header magic 0x%04x\n", hp->h_magic);
		cs->c_errors++;
		return -1;
	}


	if(hp->h_version != htons(VERSION_HEADER_POCO)){
		fprintf(stderr, "process: odd version %d\n", ntohs(hp->h_version));
		cs->c_errors++;
		return -1;
	}

	options = ntohs(hp->h_options);
	base = (options + 1) * 8;

	if(base > cs->c_have){
		fprintf(stderr, "process: options larger than packet itself\n");
		cs->c_errors++;
		return -1;
	}

	payload = cs->c_have - base;

	if(cs->c_meta){
		fprintf(cs->c_meta, "frame %lu: options %u, length %u, payload %u\n", cs->c_rxp, options, cs->c_have, payload);
	}

	for(i = 0; i < options; i++){
		op = (struct option_poco *)(cs->c_buffer + ((i + 1) * 8));
		or = option_process(cs, op);
		if(or){
			result = or;
		}
	}

	cs->c_rxopts += options;

	/* at this point we have the number of data bytes in payload, and the start of data at at cp->c_bufer + base */

	if(payload){
		wr = write(cs->c_ffd, cs->c_buffer + base, payload);
		if(wr < payload){
			fprintf(stderr, "process: unable to write payload of %d\n", payload);
			return -1;
		}

		cs->c_rxdata += payload;

		/*This is lame but i think it works*/
		if(!cs->c_offset){
			cs->c_tracker = 0;
			cs->c_tracker += payload;
		}
		else{
			cs->c_tracker += payload;
		}

		/*Check for lost packets*/
		if((cs->c_tracker-payload) != cs->c_offset){
			cs->c_lostpackets++;
			cs->lost_flag = 1;
		}
		fprintf(stderr, "%lu %lu %d->%d\n", cs->c_rxdata, (cs->c_tracker-payload) , cs->c_offset, cs->lost_flag);


		if(cs->c_text != NULL){
			/* TODO: maybe write data out in human readable form to cs->c_text ? */
			/* fprintf(cs->c_text, "..."); */

			if(cs->c_new){
				collect_precalculate(cs);
				cs->c_new = 0;
			}

#ifdef DEBUG
			fprintf(stderr, "base=%d, payload=%d, size=%d\n", base, payload, cs->c_size);
#endif

			for(j = base; j < (base + payload); j += cs->c_size){
				value = 0;
				compare = cs->c_buffer[base + cs->c_extra];
				if(compare & 0x80){
					flag = 1;
				}
				for(k = 0; k < cs->c_size; k++){
					value *= 256;
					value += cs->c_buffer[j + cs->c_extra + (cs->c_direction * k)];
				}
				/*Check for data type:unsigned,signed or float*/
				if(!cs->c_datatype){
					fprintf(cs->c_text,"%u%c", value, (cs->c_cnt == 0 || cs->c_cnt % 23 != 0 ) ? ',' : '\n');
				}
				else if(cs->c_datatype == 1){
					if(flag){
						value = (value | cs->c_mask);
					}
					if((cs->c_cnt % 2) == 0){
						real_raw[(cs->c_counter * 12) + (cs->c_cnt / 2)] = value;
					}
					else{
						imag_raw[(cs->c_counter * 12) + (cs->c_cnt / 2)] = value;
					}
					fprintf(cs->c_text,"%d%c", value, (cs->c_cnt == 0 || cs->c_cnt % 23 != 0) ? ',' : '\n');
				}
				else{
					/*TODO:Floating point case*/
				}
				flag = 0;

				cs->c_cnt++;

				if(cs->c_cnt == 24){
					cs->c_cnt = 0;
					cs->c_counter++;
				}

				if(cs->c_counter == 512 ){
					if(!cs->lost_flag){
						/*Display real time power and phase plots*/
						if(display_baseline(cs->c_baseline, bsln_disp, real_raw, imag_raw) < 0){
							fprintf(stderr,"main: error getting and displaying baseline %d\n", cs->c_baseline);
							return -1;
						}
					}
					cs->c_counter = 0;
					cs->lost_flag = 0;

				}
			}
		}
	}

	return result;
}
Beispiel #4
0
arxstatus_t ARXMainClientTest::parseOptions(int argc, char *argv[])
{
    arxstatus_t ret = ARXClientTest::parseOptions(argc, argv);
    if (ret != NOERROR) {
        return ret;
    }

    int numOptions = 11;
    option_t *opts = (option_t *)calloc(numOptions, sizeof(option_t));
    if (opts == NULL) {
        return NOMEMORY;
    }

    for (int i = 0; i < numOptions; i++) {
        opts[i].type = OPTION_TYPE_BOOL;
        opts[i].size = sizeof(bool_e);
    }

    int index = 0;
    opts[index].datum = &mEnableSobel;
    opts[index++].short_switch = "-rs";

    opts[index].datum = &mEnableFD;
    opts[index++].short_switch = "-rf";

    opts[index].datum = &mEnableFDSync;
    opts[index++].short_switch = "-fdsync";

    opts[index].datum = &mEnableHarris;
    opts[index++].short_switch = "-rh";

    opts[index].datum = &mEnableGrad;
    opts[index++].short_switch = "-rg";

    opts[index].datum = &mEnableFP;
    opts[index++].short_switch = "-rp";

    opts[index].datum = &mLogFP;
    opts[index++].short_switch = "-wp";

    opts[index].datum = &mEnableFPFilter;
    opts[index++].short_switch = "-fpdf";

    opts[index].datum = &mConfThresh;
    opts[index].type = OPTION_TYPE_INT;
    opts[index].size = sizeof(int);
    opts[index++].short_switch = "-conf";

    opts[index].datum = &mMinMove;
    opts[index].type = OPTION_TYPE_INT;
    opts[index].size = sizeof(int);
    opts[index++].short_switch = "-mnm";

    opts[index].datum = &mMaxMove;
    opts[index].type = OPTION_TYPE_INT;
    opts[index].size = sizeof(int);
    opts[index++].short_switch = "-mxm";

    option_process(argc, argv, opts, numOptions);

    free(opts);

    ARX_PRINT(ARX_ZONE_ALWAYS, "FD:%d, FDSync:%d, Sobel:%d, Harris:%d, Gradient:%d, Facial Parts:%d, Confidence Threshold:%d, Min Move:%d, Max Move:%d",
            mEnableFD,
            mEnableFDSync,
            mEnableSobel,
            mEnableHarris,
            mEnableGrad,
            mEnableFP,
            mConfThresh,
            mMinMove,
            mMaxMove);
    return NOERROR;
}
Beispiel #5
0
int collect_process(struct collect_state *cs)
{
  struct header_poco *hp;
  struct option_poco *op;
  unsigned int options, base, payload, i;
  int wr, or, result;
  int j, k;
  unsigned int value, compare, flag;
  unsigned int cnt = 1;

  result = 0;
  compare = 0;

  if(cs->c_have < 8){
    fprintf(stderr, "process: short packet (len=%u)\n", cs->c_have);
    return -1;
  }

  hp = (struct header_poco *) cs->c_buffer;

  if(hp->h_magic != htons(MAGIC_HEADER_POCO)){
    fprintf(stderr, "process: bad header magic 0x%04x\n", hp->h_magic);
    cs->c_errors++;
    return -1;
  }


  if(hp->h_version != htons(VERSION_HEADER_POCO)){
    fprintf(stderr, "process: odd version %d\n", ntohs(hp->h_version));
    cs->c_errors++;
    return -1;
  }

  options = ntohs(hp->h_options);
  base = (options + 1) * 8;

  if(base > cs->c_have){
    fprintf(stderr, "process: options larger than packet itself\n");
    cs->c_errors++;
    return -1;
  }

  payload = cs->c_have - base;

  if(cs->c_meta){
    fprintf(cs->c_meta, "frame %lu: options %u, length %u, payload %u\n", cs->c_rxp, options, cs->c_have, payload);
  }

  for(i = 0; i < options; i++){
    op = (struct option_poco *)(cs->c_buffer + ((i + 1) * 8));
    or = option_process(cs, op);
    if(or){
      result = or;
    }
  }

  cs->c_rxopts += options;

  /* at this point we have the number of data bytes in payload, and the start of data at at cp->c_bufer + base */

  if(payload){
    wr = write(cs->c_ffd, cs->c_buffer + base, payload);
    if(wr < payload){
      fprintf(stderr, "process: unable to write payload of %d\n", payload);
      return -1;
    }

    cs->c_rxdata += payload;

    if(cs->c_text != NULL){
      /* TODO: maybe write data out in human readable form to cs->c_text ? */
      /* fprintf(cs->c_text, "..."); */

      if(cs->c_new){
        collect_precalculate(cs);
        cs->c_new = 0;
      }

#ifdef DEBUG
      fprintf(stderr, "base=%d, payload=%d, size=%d\n", base, payload, cs->c_size);
#endif

      for(j = base; j < (base + payload); j += cs->c_size){
        value = 0;
        compare = cs->c_buffer[base + cs->c_extra];
        if(compare & 0x80){
          flag = 1;
        }
        for(k = 0; k < cs->c_size; k++){
          value *= 256;
          value += cs->c_buffer[j + cs->c_extra + (cs->c_direction * k)];
        }
        /*Check for data type:unsigned,signed or float*/
        if(!cs->c_datatype){
          fprintf(cs->c_text,"%u%c", value, (cnt % 24 != 0) ? ' ' : '\n');
        }
        else if(cs->c_datatype == 1){
          if(flag){
            value = (value | cs->c_mask);
          }
          fprintf(cs->c_text,"%d%c", value, (cnt % 24 != 0) ? ' ' : '\n');
        }
        else{
          /*TODO:Floating point case*/
        }
        flag = 0;
        cnt++;

        if(cnt == 24){
          cnt = 0;
        }
      }
    }
  }

  return result;
}