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