Title: Use canopen with externally provided bus and notifier · Issue #556 · canopen-python/canopen · GitHub
Open Graph Title: Use canopen with externally provided bus and notifier · Issue #556 · canopen-python/canopen
X Title: Use canopen with externally provided bus and notifier · Issue #556 · canopen-python/canopen
Description: I have a use-case where canopen have to live next to another protocol (using only extendedids). The (physical) can bus interface cannot have multiple instances and the same can.Bus() interface. It and and the can.Notifier() instance must...
Open Graph Description: I have a use-case where canopen have to live next to another protocol (using only extendedids). The (physical) can bus interface cannot have multiple instances and the same can.Bus() interface. It ...
X Description: I have a use-case where canopen have to live next to another protocol (using only extendedids). The (physical) can bus interface cannot have multiple instances and the same can.Bus() interface. It ...
Opengraph URL: https://github.com/canopen-python/canopen/issues/556
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Use canopen with externally provided bus and notifier","articleBody":"I have a use-case where canopen have to live next to another protocol (using only extendedids). The (physical) can bus interface cannot have multiple instances and the same `can.Bus()` interface. It and and the `can.Notifier()` instance must be shared with both protocols. `Network.connect()` makes it a bit cumbersome to define bus and notifier from the outside.\n\nhttps://github.com/christiansandberg/canopen/blob/ae71853be7fb42870bb5763066b0c3c50d015669/canopen/network.py#L83-L112\n\nThere are several things that can be done here to make it more consistent. I'm interested in hearing what opinions there might be for how to improve this:\n\n### Option 1\n\nBe able to support a provided notifier, similar to what's done with `bus`:\n\n```py\n# L111 in network.py\nif self.notifier is None:\n self.notifier = can.Notifier(self.bus, [], self.NOTIFIER_CYCLE, **kwargs_notifier)\nfor listener in self.listeners:\n self.notifier.add_listener(listener)\n```\n\nTo use your own:\n\n```py\nnetwork = canopen.Network()\nnetwork.bus = mybus\nnetwork.notifier = mynotifier\nnetwork.connect()\n```\n\n### Option2 \n\nExtend arguments to `connect()`:\n\n```py\nbus = kwargs.pop(\"bus\", None)\nnotifier = kwargs.pop(\"notifier\", None)\nif self.bus is None:\n self.bus = bus or can.Bus(*args, *kwargs)\nlogger.info(\"Connected to '%s'\", self.bus.channel_info)\nif self.notifier is None:\n self.notifier = notifier or can.Notifier(self.bus, [], self.NOTIFIER_CYCLE)\nfor listener in self.listeners:\n self.notifier.add_listener(listener)\n```\n\nThis allows the usage:\n\n```py\nnetwork = canopen.Network()\nnetwork.connect(bus=mybus, notifier=mynotifier)\n```\n\nPS! `Network.disconnect()` doesn't really play nice with externally provided bus and notifier either and should be looked at.\n\n### * EDIT * \n\nI think also the init of `Network` should be extended:\n\n```py\ndef __init__(self, bus: Optional[can.BusABC] = None, notifier: Optional[can.Notifier] = None):\n```","author":{"url":"https://github.com/sveinse","@type":"Person","name":"sveinse"},"datePublished":"2025-01-25T18:51:42.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":8},"url":"https://github.com/556/canopen/issues/556"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:17e944a5-eb44-ead7-a6cd-fb30728fa138 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9BB8:1E1EE3:67A27CC:8E89B9B:6A5E8EFE |
| html-safe-nonce | 18105e5e484b19438513c6182aaf25a15b999932b63f7db3c83de88eb0597da6 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QkI4OjFFMUVFMzo2N0EyN0NDOjhFODlCOUI6NkE1RThFRkUiLCJ2aXNpdG9yX2lkIjoiNDkzOTExNTU3MDczNjgyODE1OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 2422d1b6ffbede66d08dcf45b08ee9e13c5e40fdd36b250639e59c1e814af8f9 |
| hovercard-subject-tag | issue:2811127377 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/canopen-python/canopen/556/issue_layout |
| twitter:image | https://opengraph.githubassets.com/0f26cbaeb31bc7583617e5f7331b11554247c7601c023142cfeec933ebee4023/canopen-python/canopen/issues/556 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/0f26cbaeb31bc7583617e5f7331b11554247c7601c023142cfeec933ebee4023/canopen-python/canopen/issues/556 |
| og:image:alt | I have a use-case where canopen have to live next to another protocol (using only extendedids). The (physical) can bus interface cannot have multiple instances and the same can.Bus() interface. It ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | sveinse |
| hostname | github.com |
| expected-hostname | github.com |
| None | 6846168613b61074bf9dc18814ffe7596f4950f1f3b3070cfea5af602ccb3327 |
| turbo-cache-control | no-preview |
| go-import | github.com/canopen-python/canopen git https://github.com/canopen-python/canopen.git |
| octolytics-dimension-user_id | 200581454 |
| octolytics-dimension-user_login | canopen-python |
| octolytics-dimension-repository_id | 68737600 |
| octolytics-dimension-repository_nwo | canopen-python/canopen |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 68737600 |
| octolytics-dimension-repository_network_root_nwo | canopen-python/canopen |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 5d2e2a84380a21e7a59801a38bee3d8a5f0e822d |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width