Watch out for the local variables. You have a race condition in your Default, 0 case. Will the Reply Bytes Received be initialized as an empty array first, or come out of the subVI first then get initialized back to empty.
Since the only difference between all the buttons is the number that gets passed on, then my example in reply 6 directly cleans up all those mini case structures. Since many of your cases are identical, except for the number you pass into the subVI, you could probably merge many of the case together and just pass in a wire from the case selector to the subVI. Where a few cases have different code, then you can leave them as separate cases in the case structure.