10b156638307db890e5539b52521fd24beb3440cbDavid Pursell/*
20b156638307db890e5539b52521fd24beb3440cbDavid Pursell * Copyright (C) 2015 The Android Open Source Project
30b156638307db890e5539b52521fd24beb3440cbDavid Pursell *
40b156638307db890e5539b52521fd24beb3440cbDavid Pursell * Licensed under the Apache License, Version 2.0 (the "License");
50b156638307db890e5539b52521fd24beb3440cbDavid Pursell * you may not use this file except in compliance with the License.
60b156638307db890e5539b52521fd24beb3440cbDavid Pursell * You may obtain a copy of the License at
70b156638307db890e5539b52521fd24beb3440cbDavid Pursell *
80b156638307db890e5539b52521fd24beb3440cbDavid Pursell *      http://www.apache.org/licenses/LICENSE-2.0
90b156638307db890e5539b52521fd24beb3440cbDavid Pursell *
100b156638307db890e5539b52521fd24beb3440cbDavid Pursell * Unless required by applicable law or agreed to in writing, software
110b156638307db890e5539b52521fd24beb3440cbDavid Pursell * distributed under the License is distributed on an "AS IS" BASIS,
120b156638307db890e5539b52521fd24beb3440cbDavid Pursell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130b156638307db890e5539b52521fd24beb3440cbDavid Pursell * See the License for the specific language governing permissions and
140b156638307db890e5539b52521fd24beb3440cbDavid Pursell * limitations under the License.
150b156638307db890e5539b52521fd24beb3440cbDavid Pursell */
160b156638307db890e5539b52521fd24beb3440cbDavid Pursell
170b156638307db890e5539b52521fd24beb3440cbDavid Pursell#ifndef TRANSPORT_H_
180b156638307db890e5539b52521fd24beb3440cbDavid Pursell#define TRANSPORT_H_
190b156638307db890e5539b52521fd24beb3440cbDavid Pursell
204f71319df011d796a60a43fc1bc68e16fbf7d321Elliott Hughes#include <android-base/macros.h>
210b156638307db890e5539b52521fd24beb3440cbDavid Pursell
220b156638307db890e5539b52521fd24beb3440cbDavid Pursell// General interface to allow the fastboot protocol to be used over different
230b156638307db890e5539b52521fd24beb3440cbDavid Pursell// types of transports.
240b156638307db890e5539b52521fd24beb3440cbDavid Pursellclass Transport {
250b156638307db890e5539b52521fd24beb3440cbDavid Pursell  public:
260b156638307db890e5539b52521fd24beb3440cbDavid Pursell    Transport() = default;
270b156638307db890e5539b52521fd24beb3440cbDavid Pursell    virtual ~Transport() = default;
280b156638307db890e5539b52521fd24beb3440cbDavid Pursell
290b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // Reads |len| bytes into |data|. Returns the number of bytes actually
300b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // read or -1 on error.
310b156638307db890e5539b52521fd24beb3440cbDavid Pursell    virtual ssize_t Read(void* data, size_t len) = 0;
320b156638307db890e5539b52521fd24beb3440cbDavid Pursell
330b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // Writes |len| bytes from |data|. Returns the number of bytes actually
340b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // written or -1 on error.
350b156638307db890e5539b52521fd24beb3440cbDavid Pursell    virtual ssize_t Write(const void* data, size_t len) = 0;
360b156638307db890e5539b52521fd24beb3440cbDavid Pursell
370b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // Closes the underlying transport. Returns 0 on success.
380b156638307db890e5539b52521fd24beb3440cbDavid Pursell    virtual int Close() = 0;
390b156638307db890e5539b52521fd24beb3440cbDavid Pursell
400b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // Blocks until the transport disconnects. Transports that don't support
410b156638307db890e5539b52521fd24beb3440cbDavid Pursell    // this will return immediately. Returns 0 on success.
420b156638307db890e5539b52521fd24beb3440cbDavid Pursell    virtual int WaitForDisconnect() { return 0; }
430b156638307db890e5539b52521fd24beb3440cbDavid Pursell
440b156638307db890e5539b52521fd24beb3440cbDavid Pursell  private:
450b156638307db890e5539b52521fd24beb3440cbDavid Pursell    DISALLOW_COPY_AND_ASSIGN(Transport);
460b156638307db890e5539b52521fd24beb3440cbDavid Pursell};
470b156638307db890e5539b52521fd24beb3440cbDavid Pursell
480b156638307db890e5539b52521fd24beb3440cbDavid Pursell#endif  // TRANSPORT_H_
49