static void moninj_monitor(const ip_addr_t *addr, u16_t port) { struct monitor_reply reply; int i; struct pbuf *reply_p; reply.ttl_levels = 0; reply.ttl_oes = 0; reply.ttl_overrides = 0; for(i=0;i<CONFIG_RTIO_REGULAR_TTL_COUNT;i++) { rtio_moninj_mon_chan_sel_write(i); rtio_moninj_mon_probe_sel_write(0); rtio_moninj_mon_value_update_write(1); if(rtio_moninj_mon_value_read()) reply.ttl_levels |= 1LL << i; rtio_moninj_mon_probe_sel_write(1); rtio_moninj_mon_value_update_write(1); if(rtio_moninj_mon_value_read()) reply.ttl_oes |= 1LL << i; rtio_moninj_inj_chan_sel_write(i); rtio_moninj_inj_override_sel_write(MONINJ_TTL_OVERRIDE_ENABLE); if(rtio_moninj_inj_value_read()) reply.ttl_overrides |= 1LL << i; } #if ((defined CONFIG_RTIO_DDS_COUNT) && (CONFIG_RTIO_DDS_COUNT > 0)) int j; reply.dds_rtio_first_channel = CONFIG_RTIO_FIRST_DDS_CHANNEL; reply.dds_channels_per_bus = CONFIG_DDS_CHANNELS_PER_BUS; for(j=0;j<CONFIG_RTIO_DDS_COUNT;j++) { rtio_moninj_mon_chan_sel_write(CONFIG_RTIO_FIRST_DDS_CHANNEL+j); for(i=0;i<CONFIG_DDS_CHANNELS_PER_BUS;i++) { rtio_moninj_mon_probe_sel_write(i); rtio_moninj_mon_value_update_write(1); reply.dds_ftws[CONFIG_DDS_CHANNELS_PER_BUS*j+i] = rtio_moninj_mon_value_read(); } } #else reply.dds_rtio_first_channel = 0; reply.dds_channels_per_bus = 0; #endif reply_p = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct monitor_reply), PBUF_RAM); if(!reply_p) { core_log("Failed to allocate pbuf for monitor reply\n"); return; } memcpy(reply_p->payload, &reply, sizeof(struct monitor_reply)); udp_sendto(listen_pcb, reply_p, addr, port); pbuf_free(reply_p); }
static void moninj_monitor(const ip_addr_t *addr, u16_t port) { struct monitor_reply reply; int i; struct pbuf *reply_p; reply.ttl_levels = 0; reply.ttl_oes = 0; reply.ttl_overrides = 0; for(i=0;i<CONFIG_RTIO_REGULAR_TTL_COUNT;i++) { rtio_moninj_mon_chan_sel_write(i); rtio_moninj_mon_probe_sel_write(0); rtio_moninj_mon_value_update_write(1); if(rtio_moninj_mon_value_read()) reply.ttl_levels |= 1LL << i; rtio_moninj_mon_probe_sel_write(1); rtio_moninj_mon_value_update_write(1); if(rtio_moninj_mon_value_read()) reply.ttl_oes |= 1LL << i; rtio_moninj_inj_chan_sel_write(i); rtio_moninj_inj_override_sel_write(MONINJ_TTL_OVERRIDE_ENABLE); if(rtio_moninj_inj_value_read()) reply.ttl_overrides |= 1LL << i; } rtio_moninj_mon_chan_sel_write(CONFIG_RTIO_DDS_CHANNEL); for(i=0;i<CONFIG_DDS_CHANNEL_COUNT;i++) { rtio_moninj_mon_probe_sel_write(i); rtio_moninj_mon_value_update_write(1); reply.dds_ftws[i] = rtio_moninj_mon_value_read(); } reply_p = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct monitor_reply), PBUF_RAM); if(!reply_p) { log("Failed to allocate pbuf for monitor reply"); return; } memcpy(reply_p->payload, &reply, sizeof(struct monitor_reply)); udp_sendto(listen_pcb, reply_p, addr, port); pbuf_free(reply_p); }