Propagating Device Changes to Board

I’m using LibrePCB 0.1.5 on a Mac running Catalina.

I found that I needed to change a physical device in my own library having already placed it a few times on my board layout. Going back to the library I updated and saved the package, then updated and saved the device. After that I returned to the board layout and tried to place an instance. The picture of the device under the “Place Devices” pane is correct, but the actual device placed does not reflect the change. What do I need to do to have the instance placement see the device as it currently exists in the library?

Thanks.

Been there done that. A brief check list. In your project:

  1. Remove any device you changed in the library from the circuit diagram.
  2. Select from the menu Project then Update Library.
  3. Re-add previous deleted parts.

Its not necessary to do this for every change to a library part but it does depend upon the degree of the change you made.

brim2full,

Thanks. Correct me if I’m wrong, but there seems to be magic when the last instance of a device type is removed. After that, one sees the updated device when placing. Seems like the program could use an option to propagate a change, and users must be alert to the fact things could break.

I appreciate your help.

I think what is happening is the following (I’m positive I will be corrected if wrong):

When you select and place a element in schematic view that element is added to a local library in the project. I say element because I’m referring to a complete copy of the item created in the main library. Multiple schematic and pwb items then use the local library.

So, when one edits the main library element it becomes out of synch with the project version. The process of updating library elements then attempts to bring them back in synch (not always successfully, it depends upon what changes were made). A pad or hole size change is generally reflected in the local library but deleting a pad and re-adding is certain to fail to be reflected. This is because the original and new pad have a different UUID and the libraries are broken. What should happen? Do you want this change in an old project for example, probably not. This is a simple case but gets complicated very quickly once you really start to think about it. In my travels I did come across a discussion, on GitHub I think, about the complexities. I’m sure someone could point you in the right direction.

The library approach is one reason I adopted LibrePCB. It Isolates your project from changes in the main library. The down side is one has to be rigorous in the work flow one follows. I’m used to it having worked in the industry for many years.

Hope this helps. By the way I’m not one of the developers just a protagonist.

My background includes writing an IC Layout editor that was schematically driven. Your discussion is absolutely on-target. That said, LibrePCB has insufficient libraries of devices (symbolic or physical) and I’ve had to create these on my own as I expect others do too. There are no good conversions from libraries of other tools that I know of. This makes the problem much bigger. I believe the right way to solve this is to have libraries integrated with source code control. A layer abstracting the interface to Git, Perforce, etc. would be needed and, to start, one implementation of a specific source code control interface. With that, one could reference a library symbol, or device at a revision level. A user selects the revision (defaulting to the newest stable version) and may change it later. A new revision choice would propagate the changes to the schematic or board and, in some cases, break the schematic or board layout. That’s OK, it would be upon a user’s request for that specific schematic or board layout only. Other schematics and boards would remain pointing to the library versions they used. If done, as software developers say, atomically, one could do and undo such a change in the LibrePCB interface. This is tried and true for software development and I’m not aware of a reason it could not apply here. It is a lot of development work, however.

I remember some discussion of Git in the documentation, but from what I can see the support for the above notions does not exist. Perhaps the developers will implement something like the above.

Thank you for your help it has saved me time knowing what I can and cannot do!

I’m not sure if you are aware that all the libraries listed in the manager (but not necessarily installed) are in fact held externally (on GitHub) to the the main tool. If you so desire, you have the option to post your libraries there and share with others.

Its obvious you are knowledgeable in such things and I know the development team are always on the search for such talented people. The project has a European bias to the libraries and perhaps you could help and provide the ANSI input. Could you be persuaded?

I have little time right now to do real more software or library development. I’m in the process of moving - a house deal closed two days ago. Maybe once I’m settled.

Thanks for the Git info. Yes, that sounds like something I had seen but did not remember where. It’s good news, but what would really be nice would be an interface in the software allowing one to fasten a project to a library to a particular version. Beyond that, supporting propagation of a version change. (I think this is not really much different than the “change device” code written. That is, it does the best it can.) Right now you have to build a new device (which might really be just a new version) in order to use the “change device” feature.