// Copyright (C) 2014 Michael McMaster // // This file is part of SCSI2SD. // // SCSI2SD is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // SCSI2SD is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with SCSI2SD. If not, see . #ifndef SCSI2SD_Bootloader_H #define SCSI2SD_Bootloader_H extern "C" { #include "cybtldr_api.h" #include "cybtldr_api2.h" #include "hidapi.h" } #if __cplusplus >= 201103L #include #else #include #endif #include namespace SCSI2SD { class Bootloader { public: static const uint16_t VENDOR_ID = 0x04B4; // Cypress static const uint16_t PRODUCT_ID = 0xB71D; // Default PSoC3/5LP Bootloader static const size_t HID_PACKET_SIZE = 64; struct OperationScope { public: OperationScope(); ~OperationScope(); }; static Bootloader* Open(); ~Bootloader(); struct HWInfo { std::string desc; std::string version; std::string firmwareName; }; HWInfo getHWInfo() const; // USB HID data std::string getDevicePath() const; std::wstring getManufacturer() const; std::wstring getProductString() const; bool isCorrectFirmware(const std::string& path) const; // progress function accepts flash array ID and row Number void load(const std::string& path, void (*progress)(uint8_t, uint16_t)); // Check the connection to the bootloader is valid. bool ping() const; CyBtldr_CommunicationsData getCyBtldr(); private: Bootloader(hid_device_info* hidInfo); hid_device_info* myHidInfo; hid_device* myBootloaderHandle; }; } // namespace #endif