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

Add set_baud() method to UARTSerial(). #4615

Merged
merged 1 commit into from
Jul 24, 2017

Conversation

RobMeades
Copy link
Contributor

@RobMeades RobMeades commented Jun 22, 2017

Description

Add a set_baud() method to UARTSerial(), simply handing it on to SerialBase:baud(). See #4609 for reasons why this is necessary.

With this in place the CellularInterface can instantiate the file handle it requires with UARTSerial() running at a baud rate of 115200 (which all modems can be relied upon to auto-baud at). Then, once the modem is up and running, it can send the modem an AT+IPR command giving a higher baud rate that the modem supports but would not be able to auto-baud at (e.g. 460800). This way we can get nice fast connections.

This has been tested on the u-blox C030 board with a Sara-U201 modem, eventually running at 460800 bits/s.

@RobMeades
Copy link
Contributor Author

@kjbracey-arm, @hasnainvirk: thought I'd propose this, though am happy for you to propose a different solution if you prefer.

@0xc0170
Copy link
Contributor

0xc0170 commented Jul 4, 2017

@kjbracey-arm, @hasnainvirk bump

@0xc0170
Copy link
Contributor

0xc0170 commented Jul 4, 2017

retest uvisor

*
* @param baud The baud rate
*/
void set_baud(int baud);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you use the baud method from SerialBase instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kjbracey-arm: Kevin, are you OK with the convention of simply calling in the SerialBase method rather than having the intermediate that adds 'set_'?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The question is why SerialBase is inherited privately?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A philosophical/religious question for @kjbracey-arm I think...

Copy link
Contributor

@kjbracey kjbracey Jul 12, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's private because if any user messes with the underlying port while we're using it, it could break us - at least if they go anywhere near the core data functions.

This is a driver that uses the underlying serial port itself - I don't want to expose it to the users of this class so they can freely touch it. Making it a public base class would expose more than I want.

In this particular case "baud" could directly pass through, as we don't care (beyond maybe it being a good idea to drain the output buffer?).

But "set_flow_control" we would potentially want to implement ourself rather than pass through to provide XON/XOFF or manual HW control.

There's existing inconsistency on the "set_" prefix ("baud" vs "set_flow_control"), so it seems reasonable to unify on the "set_" to me.

General note - we are currently lacking is a "serial control" abstract interface for these things (baud, format, flow control, hup) - each of the buffered serial, the raw serial, and the serial mux should all be providing that as a common interface.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's existing inconsistency on the "set_" prefix ("baud" vs "set_flow_control"), so it seems reasonable to unify on the "set_" to me.

General note - we are currently lacking is a "serial control" abstract interface for these things (baud, format, flow control, hup) - each of the buffered serial, the raw serial, and the serial mux should all be providing that as a common interface.

+1

Thanks for the explanation @kjbracey-arm

Copy link
Contributor

@theotherjimmy theotherjimmy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I meant to request changes, my bad.

@RobMeades
Copy link
Contributor Author

I was sorta following the convention that UARTSerial() had adopted by having set_ in front of set things, @kjbracey-arm does a similar thing in a branch-about-to-become-a-PR-near-you.

Copy link
Contributor

@hasnainvirk hasnainvirk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Convention has been to prefix the method name by set_ , I am happy with it.

@theotherjimmy
Copy link
Contributor

/morph test

@mbed-bot
Copy link

Result: SUCCESS

Your command has finished executing! Here's what you wrote!

/morph test

Output

mbed Build Number: 827

All builds and test passed!

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

Successfully merging this pull request may close these issues.

None yet

6 participants