Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ideal way to terminate gracefully #180

Open
pymenow opened this issue Apr 24, 2023 · 4 comments
Open

Ideal way to terminate gracefully #180

pymenow opened this issue Apr 24, 2023 · 4 comments

Comments

@pymenow
Copy link

pymenow commented Apr 24, 2023

With the scripts running , what would be a graceful way to terminate and exit ?
Here is what i am doing -

  1. Upon Keyboard Interrupt - disconnect device and then device.power_off().
    Any thing else I may be missing. Didnt find a suitable example for the exit sequence yet , but any refrence to read up will help.

BTW irrespective of what reason i give for the disconnect device , the disconnect reason is always 22 .

@barbibulle
Copy link
Collaborator

Disconnecting established connections and calling power_off is a good way to gracefully terminate. There should be more examples of that in the code base, I'll try to add some.
It is normal that you'd observe a reason=22 event when you disconnect: when disconnecting explicitly, you can send a reason code to the peer, and they'll see that code in their disconnection event. Then the caller gets an event for the disconnection on its end, with reason=22 (HCI_CONNECTION_TERMINATED_BY_LOCAL_HOST_ERROR), meaning that you got disconnected because you asked for it. By default, the reason you send to the peer is HCI_REMOTE_USER_TERMINATED_CONNECTION_ERROR, but you can send other reasons if you want as well.

@pymenow
Copy link
Author

pymenow commented Apr 26, 2023

Thanks, one of the reasons for asking is, after terminating the script, when I scan for devices I do see the device name in the list of devices found.

@barbibulle
Copy link
Collaborator

I just checked, and indeed, the power_off() method doesn't reset the controller, so if it was advertising, it will continue to do so, so you'll see it from other devices (but any connection attempt will fail). For now, I recommend doing a reset() before shutting down if you want to avoid that, but I really should have power_off() do the reset automatically, since it doesn't make sense to power off the device yet leave the controller in an active state. PR coming shortly.

@pymenow
Copy link
Author

pymenow commented May 4, 2023

perfect thanks ! I had included reset() , as the power_on() method calls this first .

Here is what I do for graceful exit, now.
disconnect devices if connected.
device.power_off()
device.host.reset()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants