13.02.2012 11:18, Thomas Tsou пишет:
Each "usrp" has it's own find / make calls that are registered into the "device function registry container" before main(). That occurs with the UHD_STATIC_BLOCK macro, which is basically a memberless, constructor object. When called, the device::find and device::make iterate through the registered find / make tuples. I think 'make' uses the first discovered device if no arguments are passed in.
Thanks. It seems to "work" good enough (I mean it crashes in runtime over this and that not yet implemented :)
However there's one thing which still puzzles me:
host/lib/usrp/dboard/db_unknown.cpp contains following:
UHD_STATIC_BLOCK(reg_unknown_dboards) { dboard_manager::register_dboard(0xfff0, &make_unknown_tx, "Unknown TX"); dboard_manager::register_dboard(0xfff1, &make_unknown_rx, "Unknown RX"); }
It's pretty obvious what this code does but where do those _magic_ numbers come from? Should I burn something into particular address in dboard eeprom? Should I override some function to return special values?
Not really. For the current Ettus devices, the io_impl.cpp implementations really are different, so it doesn't make any sense.
That was just example. For instance I do not want to umtrx_iface if I could use usrp2_iface - because devices are rather close I think I can get away with this. Time will tell though.