18#include <radio_tool/radio/tyt_radio.hpp>
19#include <radio_tool/dfu/dfu.hpp>
20#include <radio_tool/dfu/tyt_dfu.hpp>
21#include <radio_tool/fw/tyt_fw.hpp>
22#include <radio_tool/util/flash.hpp>
33 std::stringstream out;
38 out <<
"== TYT Radio Info ==" << std::endl
39 <<
"Radio: " << model << std::endl
40 <<
"RTC: " << (time == -1 ?
"N/A" : ctime(&time));
47 constexpr auto TransferSize = 1024u;
53 dfu.SendTYTCommand(dfu::TYTCommand::FirmwareUpgrade);
54 for (
auto& r : fw.GetDataSegments())
58 std::cerr <<
"Erasing: 0x" << std::setw(8) << std::setfill(
'0') << std::hex << addr
59 <<
" [Size=0x" << std::hex << size <<
"]" << std::endl
60 <<
"-- " << sector.ToString() << std::endl;
67 [&dfu, &r, &TransferSize, &b_offset](
const uint32_t& addr,
const uint32_t& size,
const flash::FlashSector&) {
68 const auto& binary_data = r.data;
69 const auto blocks = (int)ceil(size / (double)TransferSize);
71 std::cerr <<
"Writing: 0x" << std::setw(8) << std::setfill(
'0') << std::hex << addr
72 <<
" [Size=0x" << std::hex << size <<
"]" << std::endl;
74 for (auto wValue = 0; wValue < blocks; wValue++)
76 auto block_offset = b_offset + (TransferSize * wValue);
77 auto to_write = std::vector<uint8_t>(
78 binary_data.begin() + block_offset,
79 binary_data.begin() + block_offset + std::min(TransferSize, r.size - block_offset)
86 dfu.Download(to_write, 2 + wValue);