void frudp_sedp_init() { FREERTPS_INFO("sedp init\r\n"); for (int i = 0; i < FRUDP_MAX_SUBS; i++) { frudp_submsg_data_t *d = (frudp_submsg_data_t *)&g_sedp_sub_writer_data_buf[i * SEDP_MSG_BUF_LEN]; d->writer_sn = g_frudp_sn_unknown; g_sedp_sub_writer_data_submsgs[i] = d; } for (int i = 0; i < FRUDP_MAX_PUBS; i++) { frudp_submsg_data_t *d = (frudp_submsg_data_t *)&g_sedp_pub_writer_data_buf[i * SEDP_MSG_BUF_LEN]; d->writer_sn = g_frudp_sn_unknown; g_sedp_pub_writer_data_submsgs[i] = d; } g_sedp_sub_pub = frudp_create_pub( NULL, // no topic name NULL, // no type name g_sedp_sub_writer_id, g_sedp_sub_writer_data_submsgs, FRUDP_MAX_SUBS); g_sedp_pub_pub = frudp_create_pub( NULL, // no topic name NULL, // no type name g_sedp_pub_writer_id, g_sedp_pub_writer_data_submsgs, FRUDP_MAX_PUBS); frudp_sub_t sedp_sub_sub; sedp_sub_sub.topic_name = NULL; sedp_sub_sub.type_name = NULL; sedp_sub_sub.reader_eid = g_sedp_sub_reader_id; sedp_sub_sub.data_cb = frudp_sedp_rx_sub_data; sedp_sub_sub.msg_cb = NULL; sedp_sub_sub.reliable = true; frudp_add_sub(&sedp_sub_sub); frudp_sub_t sedp_pub_sub; // subscribe to the publisher announcers sedp_pub_sub.topic_name = NULL; sedp_pub_sub.type_name = NULL; sedp_pub_sub.reader_eid = g_sedp_pub_reader_id; sedp_pub_sub.data_cb = frudp_sedp_rx_pub_data; sedp_pub_sub.msg_cb = NULL; sedp_pub_sub.reliable = true; frudp_add_sub(&sedp_pub_sub); }
void frudp_add_user_sub(const char *topic_name, const char *type_name, freertps_msg_cb_t msg_cb) { frudp_eid_t sub_eid = frudp_create_user_id (FRUDP_ENTITY_KIND_USER_READER_NO_KEY); printf("frudp_add_user_sub(%s, %s) on EID 0x%08x\r\n", topic_name, type_name, (unsigned)freertps_htonl(sub_eid.u)); frudp_sub_t sub; // for now, just copy the pointers. maybe in the future we can/should have // an option for storage of various kind (static, malloc, etc.) for copies. sub.topic_name = topic_name; sub.type_name = type_name; sub.reader_eid = sub_eid; sub.msg_cb = msg_cb; sub.data_cb = NULL; sub.reliable = false; frudp_add_sub(&sub); //sedp_publish_sub(&sub); // can't do this yet; spdp hasn't started bcast }