Device: Add Coremini script upload function

This commit is contained in:
Yasser Yassine
2023-03-08 18:58:38 +00:00
parent 9b46d486cb
commit bf6a059820
42 changed files with 363 additions and 55 deletions
+31 -3
View File
@@ -55,6 +55,8 @@ namespace icsneo {
class DeviceExtension;
typedef uint64_t MemoryAddress;
class Device {
public:
virtual ~Device();
@@ -135,10 +137,34 @@ public:
NoScript,
};
int8_t prepareScriptLoad();
bool startScript();
bool startScript(Disk::MemoryType memType = Disk::MemoryType::SD);
bool stopScript();
bool clearScript();
bool uploadCoremini(std::unique_ptr<std::istream>&& stream, Disk::MemoryType memType = Disk::MemoryType::SD);
virtual std::optional<MemoryAddress> getCoreminiStartAddressFlash() const {
return std::nullopt;
}
virtual std::optional<MemoryAddress> getCoreminiStartAddressSD() const {
return std::nullopt;
}
std::optional<MemoryAddress> getCoreminiStartAddress(Disk::MemoryType memType) const {
switch(memType) {
case Disk::MemoryType::Flash:
return getCoreminiStartAddressFlash();
case Disk::MemoryType::SD:
return getCoreminiStartAddressSD();
default:
break;
}
return std::nullopt;
}
// Message polling related functions
bool enableMessagePolling();
@@ -173,6 +199,8 @@ public:
virtual size_t getNetworkCountByType(Network::Type) const;
virtual Network getNetworkByNumber(Network::Type, size_t) const;
/**
* Read from the logical disk in this device, starting from byte `pos`
* and reading up to `amount` bytes.
@@ -188,7 +216,7 @@ public:
* set in icsneo::GetLastError().
*/
std::optional<uint64_t> readLogicalDisk(uint64_t pos, uint8_t* into, uint64_t amount,
std::chrono::milliseconds timeout = Disk::DefaultTimeout);
std::chrono::milliseconds timeout = Disk::DefaultTimeout, Disk::MemoryType memType = Disk::MemoryType::SD);
/**
* Write to the logical disk in this device, starting from byte `pos`
@@ -205,7 +233,7 @@ public:
* set in icsneo::GetLastError().
*/
std::optional<uint64_t> writeLogicalDisk(uint64_t pos, const uint8_t* from, uint64_t amount,
std::chrono::milliseconds timeout = Disk::DefaultTimeout);
std::chrono::milliseconds timeout = Disk::DefaultTimeout, Disk::MemoryType memType = Disk::MemoryType::SD);
/**
* Check if the logical disk is connected. This means the disk is inserted,