void CallEvent(BaseComponent *object, Events event) { if (EventFactory::connections.count(object) > 0) { if (EventFactory::connections[object].count(event) > 0) { auto& connectionList = EventFactory::connections[object][event]; for (auto& connection : connectionList) { auto slot = connection.getSlot(); if (slot && slot->useable()) { slot->_func(); } } } } }
int main(int argc, char** argv) { if (argc < 2) { std::cerr << "usage: " << argv[0] << " OUTPUTFILE.data\n"; return 1; } ach_channel_t chan_hubo_state; ach_status_t r; r = ach_open(&chan_hubo_state, HUBO_CHAN_STATE_NAME, NULL); if (r != ACH_OK) { std::cerr << "error opening state channel: " << ach_result_to_string(r) << "\n"; return 1; } LogWriter writer(argv[1], 200); struct hubo_state H_state; JointInfoArray jinfo; buildJointTable(jinfo); writer.add(&H_state.time, "state.time", "s"); for (size_t i=0; i<jinfo.size(); ++i) { const std::string& name = jinfo[i].second; const size_t index = jinfo[i].first; writer.add(&H_state.joint[index].ref, "state.joint." + name + ".ref", "rad"); writer.add(&H_state.joint[index].pos, "state.joint." + name + ".pos", "rad"); writer.add(&H_state.joint[index].cur, "state.joint." + name + ".cur", "amp"); writer.add(&H_state.joint[index].vel, "state.joint." + name + ".vel", "rad/s"); writer.add(&H_state.joint[index].duty, "state.joint." + name + ".duty"); writer.add(&H_state.joint[index].heat, "state.joint." + name + ".heat", "J"); writer.add(&H_state.joint[index].active, "state.joint." + name + ".active"); writer.add(&H_state.joint[index].zeroed, "state.joint." + name + ".zeroed"); } for (int i=0; i<4; ++i) { std::ostringstream ostr; ostr << "state.imu" << i; std::string imustr = ostr.str(); writer.add(&H_state.imu[i].a_x, imustr+".a_x"); writer.add(&H_state.imu[i].a_y, imustr+".a_y"); writer.add(&H_state.imu[i].a_z, imustr+".a_z"); writer.add(&H_state.imu[i].w_x, imustr+".w_x"); writer.add(&H_state.imu[i].w_y, imustr+".w_y"); writer.add(&H_state.imu[i].w_z, imustr+".w_z"); } for (int i=0; i<4; ++i) { std::ostringstream ostr; ostr << "state.ft" << i; std::string ftstr = ostr.str(); writer.add(&H_state.ft[i].m_x, ftstr+".m_x"); writer.add(&H_state.ft[i].m_y, ftstr+".m_y"); writer.add(&H_state.ft[i].f_z, ftstr+".f_z"); } writer.sortChannels(); writer.writeHeader(); std::cout << "Opened " << argv[1] << " for output, Ctrl+C to halt logging.\n"; signal(SIGINT, interruptHandler); while (!interrupted) { bool write = false; size_t fs; r = ach_get( &chan_hubo_state, &H_state, sizeof(H_state), &fs, NULL, ACH_O_WAIT ); if (useable(r)) { write = true; } else { std::cout << "warning: ach returned " << ach_result_to_string(r) << " for state\n"; } if (write) { writer.writeSample(); } } std::cout << "Successfully wrote " << argv[1] << "\n"; return 0; }