Thanks. that helps.
For now I did this.
Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes(vbCrLf + cmdCamera + vbCrLf + vbCrLf)
I added another Carriage Return at the end of the command sequence.
It came to me in my sleep. Good thing cause I didn't want to think about it all weekend since I won't be able to work on it.
Now in the mean time to speed up my code. I am thinking of moving this function into the loop function. Would that make a difference?
Actually, I'd have to recommend the opposite. Your code is a bit too disorganized and redundant. You have a getMessage function that does a lot more than just get a Message. It gets it, and conditionally processes based on the first character. Actually, it doesn't even get the whole message first. You also have two separate blocks of code that both are reading in the serial data, and then processing it. That's just a bad design and prone to errors.
You really should refactor your code. First, modify getMessage so it does just one single thing. Get an entire message. Don't look at what's in the message. Just get the entire string (without code duplication), ideally with both a start and end character, but still workable with just an end character.
After you have your entire message, then you can parse and process it. Check the first character, if it's your 'command' character, send the string to a separate command process function. If it isn't, send it to your speech processing function.
The overhead involved with function calls is effectively non-existent when dealing with serial data. You aren't going to see any sort of performance gain by eliminating a few functions, but you will significantly impact code readability and the likelihood of introducing more bugs into your code.