int main(int argc, char** argv) { if(argc < 2) // insuficient arguments exit(1); if(!open_input(argv[1])) // couldn't open input file exit(1); initMe(); yyparse(); initSemanticAnalyzer(); first_pass(root); verify(root); int eCount = getErrorCount(); if(eCount > 0) { fprintf(stderr,"%d semantic errors\n", eCount); exit(3); } close_input(); exit(0); }
void UavcanNode::print_info() { if (!_instance) { warnx("not running, start first"); } (void)pthread_mutex_lock(&_node_mutex); // Memory status printf("Pool allocator status:\n"); printf("\tCapacity hard/soft: %u/%u blocks\n", _pool_allocator.getBlockCapacityHardLimit(), _pool_allocator.getBlockCapacity()); printf("\tReserved: %u blocks\n", _pool_allocator.getNumReservedBlocks()); printf("\tAllocated: %u blocks\n", _pool_allocator.getNumAllocatedBlocks()); // UAVCAN node perfcounters printf("UAVCAN node status:\n"); printf("\tInternal failures: %llu\n", _node.getInternalFailureCount()); printf("\tTransfer errors: %llu\n", _node.getDispatcher().getTransferPerfCounter().getErrorCount()); printf("\tRX transfers: %llu\n", _node.getDispatcher().getTransferPerfCounter().getRxTransferCount()); printf("\tTX transfers: %llu\n", _node.getDispatcher().getTransferPerfCounter().getTxTransferCount()); // CAN driver status for (unsigned i = 0; i < _node.getDispatcher().getCanIOManager().getCanDriver().getNumIfaces(); i++) { printf("CAN%u status:\n", unsigned(i + 1)); auto iface = _node.getDispatcher().getCanIOManager().getCanDriver().getIface(i); printf("\tHW errors: %llu\n", iface->getErrorCount()); auto iface_perf_cnt = _node.getDispatcher().getCanIOManager().getIfacePerfCounters(i); printf("\tIO errors: %llu\n", iface_perf_cnt.errors); printf("\tRX frames: %llu\n", iface_perf_cnt.frames_rx); printf("\tTX frames: %llu\n", iface_perf_cnt.frames_tx); } // ESC mixer status printf("ESC actuators control groups: sub: %u / req: %u / fds: %u\n", (unsigned)_groups_subscribed, (unsigned)_groups_required, _poll_fds_num); printf("ESC mixer: %s\n", (_mixers == nullptr) ? "NONE" : "OK"); if (_outputs.noutputs != 0) { printf("ESC output: "); for (uint8_t i = 0; i < _outputs.noutputs; i++) { printf("%d ", (int)(_outputs.output[i] * 1000)); } printf("\n"); // ESC status int esc_sub = orb_subscribe(ORB_ID(esc_status)); struct esc_status_s esc; memset(&esc, 0, sizeof(esc)); orb_copy(ORB_ID(esc_status), esc_sub, &esc); printf("ESC Status:\n"); printf("Addr\tV\tA\tTemp\tSetpt\tRPM\tErr\n"); for (uint8_t i = 0; i < _outputs.noutputs; i++) { printf("%d\t", esc.esc[i].esc_address); printf("%3.2f\t", (double)esc.esc[i].esc_voltage); printf("%3.2f\t", (double)esc.esc[i].esc_current); printf("%3.2f\t", (double)esc.esc[i].esc_temperature); printf("%3.2f\t", (double)esc.esc[i].esc_setpoint); printf("%d\t", esc.esc[i].esc_rpm); printf("%d", esc.esc[i].esc_errorcount); printf("\n"); } orb_unsubscribe(esc_sub); } // Sensor bridges auto br = _sensor_bridges.getHead(); while (br != nullptr) { printf("Sensor '%s':\n", br->get_name()); br->print_status(); printf("\n"); br = br->getSibling(); } (void)pthread_mutex_unlock(&_node_mutex); }
int SetColorSpecimen::rate() { return getErrorCount(); }
void UavcanNode::print_info() { if (!_instance) { warnx("not running, start first"); } (void)pthread_mutex_lock(&_node_mutex); // Memory status printf("Pool allocator status:\n"); printf("\tCapacity hard/soft: %u/%u blocks\n", _pool_allocator.getBlockCapacityHardLimit(), _pool_allocator.getBlockCapacity()); printf("\tReserved: %u blocks\n", _pool_allocator.getNumReservedBlocks()); printf("\tAllocated: %u blocks\n", _pool_allocator.getNumAllocatedBlocks()); // UAVCAN node perfcounters printf("UAVCAN node status:\n"); printf("\tInternal failures: %llu\n", _node.getInternalFailureCount()); printf("\tTransfer errors: %llu\n", _node.getDispatcher().getTransferPerfCounter().getErrorCount()); printf("\tRX transfers: %llu\n", _node.getDispatcher().getTransferPerfCounter().getRxTransferCount()); printf("\tTX transfers: %llu\n", _node.getDispatcher().getTransferPerfCounter().getTxTransferCount()); // CAN driver status for (unsigned i = 0; i < _node.getDispatcher().getCanIOManager().getCanDriver().getNumIfaces(); i++) { printf("CAN%u status:\n", unsigned(i + 1)); auto iface = _node.getDispatcher().getCanIOManager().getCanDriver().getIface(i); printf("\tHW errors: %llu\n", iface->getErrorCount()); auto iface_perf_cnt = _node.getDispatcher().getCanIOManager().getIfacePerfCounters(i); printf("\tIO errors: %llu\n", iface_perf_cnt.errors); printf("\tRX frames: %llu\n", iface_perf_cnt.frames_rx); printf("\tTX frames: %llu\n", iface_perf_cnt.frames_tx); } // ESC mixer status printf("ESC actuators control groups: sub: %u / req: %u / fds: %u\n", (unsigned)_groups_subscribed, (unsigned)_groups_required, _poll_fds_num); printf("ESC mixer: %s\n", (_mixers == nullptr) ? "NONE" : "OK"); if (_outputs.noutputs != 0) { printf("ESC output: "); for (uint8_t i = 0; i < _outputs.noutputs; i++) { printf("%d ", (int)(_outputs.output[i] * 1000)); } printf("\n"); // ESC status int esc_sub = orb_subscribe(ORB_ID(esc_status)); struct esc_status_s esc; memset(&esc, 0, sizeof(esc)); orb_copy(ORB_ID(esc_status), esc_sub, &esc); printf("ESC Status:\n"); printf("Addr\tV\tA\tTemp\tSetpt\tRPM\tErr\n"); for (uint8_t i = 0; i < _outputs.noutputs; i++) { const float temp_celsius = (esc.esc[i].esc_temperature > 0) ? (esc.esc[i].esc_temperature - 273.15F) : 0.0F; printf("%d\t", esc.esc[i].esc_address); printf("%3.2f\t", (double)esc.esc[i].esc_voltage); printf("%3.2f\t", (double)esc.esc[i].esc_current); printf("%3.2f\t", (double)temp_celsius); printf("%3.2f\t", (double)esc.esc[i].esc_setpoint); printf("%d\t", esc.esc[i].esc_rpm); printf("%d", esc.esc[i].esc_errorcount); printf("\n"); } orb_unsubscribe(esc_sub); } // Sensor bridges auto br = _sensor_bridges.getHead(); while (br != nullptr) { printf("Sensor '%s':\n", br->get_name()); br->print_status(); printf("\n"); br = br->getSibling(); } // Printing all nodes that are online std::printf("Online nodes (Node ID, Health, Mode):\n"); _node_status_monitor.forEachNode([](uavcan::NodeID nid, uavcan::NodeStatusMonitor::NodeStatus ns) { static constexpr const char* HEALTH[] = { "OK", "WARN", "ERR", "CRIT" }; static constexpr const char* MODES[] = { "OPERAT", "INIT", "MAINT", "SW_UPD", "?", "?", "?", "OFFLN" }; std::printf("\t% 3d %-10s %-10s\n", int(nid.get()), HEALTH[ns.health], MODES[ns.mode]); }); (void)pthread_mutex_unlock(&_node_mutex); }