AnalogsTable AnalogsTableGenerator::generateTable(const int &groupNum, const int &analogsNum, const int &maxProdNumFromSHG) { if(groupNum <= 0 || analogsNum<= 0 || maxProdNumFromSHG<= 0) { return AnalogsTable(); } int maxProdNum = maxProdNumFromSHG; if(groupNum * (analogsNum + 1) > maxProdNumFromSHG) { qWarning() << "Warning in AnalogsTableGenerator::generateTable " << "maxProdNumFromSHG is small for this groupNum and analogsNum"; maxProdNum = groupNum * (analogsNum + 1); qWarning() << "set maxProdNum = " << maxProdNum; } const QString prodPrefix = "prod_"; AnalogsTable table; QList<int> past; for(int group = 0; group < groupNum; group++) { int randProdNum = 0; while(true) { randProdNum = rand() % maxProdNum; if(!past.contains(randProdNum)) { past.append(randProdNum); break; } } Analogs analogs(ID(prodPrefix + QString::number(randProdNum))); for(int an = 0; an < analogsNum; an++) { int randAnNum = 0; while(true) { randAnNum = rand() % maxProdNum; if(!past.contains(randAnNum)) { past.append(randAnNum); break; } } analogs.addAnalog(ID(prodPrefix + QString::number(randAnNum))); } table.addAnalogs(analogs); } return table; }
bool Vrpn::sample() { if ( mTrackerNumber > 0 ) { std::vector<PositionData> positions(mTrackerNumber); vpr::Guard<vpr::Mutex> g(mTrackerMutex); for ( int i = 0; i < mTrackerNumber; ++i ) { gmtl::Matrix44f pos; gmtl::setRot(pos, mQuats[i]); gmtl::setTrans(pos, mPositions[i]); positions[i].setValue(pos); positions[i].setTime(); } addPositionSample(positions); } if ( mButtonNumber > 0 ) { std::vector<DigitalData> buttons(mButtonNumber); vpr::Guard<vpr::Mutex> g(mButtonMutex); for ( int i = 0; i < mButtonNumber; ++i ) { buttons[i] = mButtons[i]; buttons[i].setTime(); } addDigitalSample(buttons); } if ( mAnalogNumber > 0 ) { std::vector<AnalogData> analogs(mAnalogNumber); vpr::Guard<vpr::Mutex> g(mAnalogMutex); for ( int i = 0; i < mAnalogNumber; ++i ) { analogs[i] = mAnalogs[i]; analogs[i].setTime(); } addAnalogSample(analogs); } return true; }
int jvs_device::handle_message(const UINT8 *send_buffer, UINT32 send_size, UINT8 *&recv_buffer) { UINT32 old_reset_counter = jvs_reset_counter; jvs_reset_counter = 0; switch(send_buffer[0]) { case 0xf0: if(send_size < 2 || send_buffer[1] != 0xd9) return 0; // Reset, must be sent twice jvs_reset_counter = old_reset_counter+1; if(jvs_reset_counter == 2) device_reset(); return 2; case 0x10: { const char *id = device_id(); int len = strlen(id)+1; *recv_buffer++ = 0x01; memcpy(recv_buffer, id, len); recv_buffer += len; return 1; } case 0x11: *recv_buffer++ = 0x01; *recv_buffer++ = command_format_version(); return 1; case 0x12: *recv_buffer++ = 0x01; *recv_buffer++ = jvs_standard_version(); return 1; case 0x13: *recv_buffer++ = 0x01; *recv_buffer++ = comm_method_version(); return 1; case 0x14: *recv_buffer++ = 0x01; function_list(recv_buffer); *recv_buffer++ = 0x00; return 1; case 0x20: if(send_size < 3) return 0; *recv_buffer++ = 0x01; return switches(recv_buffer, send_buffer[1], send_buffer[2]) ? 3 : 0; case 0x21: if(send_size < 2) return 0; *recv_buffer++ = 0x01; return coin_counters(recv_buffer, send_buffer[1]) ? 2 : 0; case 0x22: if(send_size < 2) return 0; *recv_buffer++ = 0x01; return analogs(recv_buffer, send_buffer[1]) ? 2 : 0; case 0x30: if(send_size < 4) return 0; *recv_buffer++ = 0x01; return coin_add(send_buffer[1], -((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0; case 0x31: if(send_size < 4) return 0; *recv_buffer++ = 0x01; return coin_add(send_buffer[1], ((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0; case 0x32: if(send_size < 2 || send_size < 2+send_buffer[1]) return 0; *recv_buffer++ = 0x01; return swoutputs(send_buffer[1], send_buffer+2) ? 2+send_buffer[1] : 0; case 0x38: if(send_size < 3) return 0; *recv_buffer++ = 0x01; return swoutputs(send_buffer[1], send_buffer[2]) ? 3 : 0; default: logerror("JVSDEV: unhandled command %02x\n", send_buffer[0]); return 0; } return -1; }