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; }
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; }
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; }
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; }
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; }