Skip to content

Commit 21239bf

Browse files
committed
Merge remote-tracking branch 'upstream/master' into linux
2 parents d567c43 + c3cba87 commit 21239bf

File tree

7 files changed

+27
-47
lines changed

7 files changed

+27
-47
lines changed

source/SmartPortOverSlip.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ void SmartPortOverSlip::handle_prodos_read(uint8_t drive_num, std::pair<int, int
334334
auto id_connection = GetCommandListener().find_connection_with_device(device_id);
335335

336336
// Do a ReadRequest, and shove the 512 byte block into the required memory
337-
ReadBlockRequest request(Requestor::next_request_number(), id_connection.first, 512);
337+
ReadBlockRequest request(Requestor::next_request_number(), id_connection.first);
338338
// $46-47 = Block Number
339339
request.set_block_number_from_bytes(mem[0x46], mem[0x47], 0);
340340
auto response = Requestor::send_request(request, id_connection.second.get());
@@ -360,7 +360,7 @@ void SmartPortOverSlip::handle_prodos_write(uint8_t drive_num, std::pair<int, in
360360
auto device_id = drive_num == 1 ? disk_devices.first : disk_devices.second;
361361
auto id_connection = GetCommandListener().find_connection_with_device(device_id);
362362

363-
WriteBlockRequest request(Requestor::next_request_number(), id_connection.first, 512);
363+
WriteBlockRequest request(Requestor::next_request_number(), id_connection.first);
364364
// $46-47 = Block Number
365365
request.set_block_number_from_bytes(mem[0x46], mem[0x47], 0);
366366
// put data into the request we're sending
@@ -420,7 +420,7 @@ void SmartPortOverSlip::device_count(const WORD sp_payload_loc)
420420

421421
void SmartPortOverSlip::read_block(const BYTE unit_number, Connection *connection, const WORD buffer_location, const WORD block_count_address)
422422
{
423-
ReadBlockRequest request(Requestor::next_request_number(), unit_number, 512);
423+
ReadBlockRequest request(Requestor::next_request_number(), unit_number);
424424
// Assume that (cmd_list_loc + 4 == block_count_address) holds 3 bytes for the block number. If it's in the payload, this is wrong and will have to be fixed.
425425
request.set_block_number_from_ptr(mem, block_count_address);
426426
auto response = Requestor::send_request(request, connection);
@@ -440,7 +440,7 @@ void SmartPortOverSlip::read_block(const BYTE unit_number, Connection *connectio
440440

441441
void SmartPortOverSlip::write_block(const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const WORD params_loc)
442442
{
443-
WriteBlockRequest request(Requestor::next_request_number(), unit_number, 512);
443+
WriteBlockRequest request(Requestor::next_request_number(), unit_number);
444444
// Assume that (cmd_list_loc + 4 == params_loc) holds 3 bytes for the block number. The payload contains the data to write
445445
request.set_block_number_from_ptr(mem, params_loc);
446446
request.set_block_data_from_ptr(mem, sp_payload_loc);

source/devrelay/commands/ReadBlock.cpp

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
#ifdef DEV_RELAY_SLIP
22

3-
#include <iostream>
43
#include "ReadBlock.h"
4+
#include <iostream>
55

6-
ReadBlockRequest::ReadBlockRequest(const uint8_t request_sequence_number, const uint8_t device_id, uint16_t block_size) : Request(request_sequence_number, CMD_READ_BLOCK, device_id), block_number_{}, block_size_(block_size) {}
6+
ReadBlockRequest::ReadBlockRequest(const uint8_t request_sequence_number, const uint8_t device_id) : Request(request_sequence_number, CMD_READ_BLOCK, device_id), block_number_{} {}
77

88
std::vector<uint8_t> ReadBlockRequest::serialize() const
99
{
1010
std::vector<uint8_t> request_data;
1111
request_data.push_back(this->get_request_sequence_number());
1212
request_data.push_back(this->get_command_number());
1313
request_data.push_back(this->get_device_id());
14-
request_data.push_back(this->get_block_size() & 0xFF);
15-
request_data.push_back((this->get_block_size() >> 8) & 0xFF);
1614
request_data.insert(request_data.end(), block_number_.begin(), block_number_.end());
1715
return request_data;
1816
}
1917

2018
std::unique_ptr<Response> ReadBlockRequest::deserialize(const std::vector<uint8_t> &data) const
2119
{
22-
if (data.size() != (block_size_ + 2))
20+
if (data.size() != (512 + 2)) // 2 additional bytes are added to the block
2321
{
2422
std::cerr << "Not enough data to deserialize ReadBlockResponse" << std::endl;
2523
return nullptr;
2624
}
2725

28-
auto response = std::make_unique<ReadBlockResponse>(data[0], data[1], block_size_);
26+
auto response = std::make_unique<ReadBlockResponse>(data[0], data[1]);
2927
if (response->get_status() == 0)
3028
{
3129
response->set_block_data(data.begin() + 2, data.end());
@@ -35,8 +33,6 @@ std::unique_ptr<Response> ReadBlockRequest::deserialize(const std::vector<uint8_
3533

3634
const std::array<uint8_t, 3> &ReadBlockRequest::get_block_number() const { return block_number_; }
3735

38-
const uint16_t ReadBlockRequest::get_block_size() const { return block_size_; }
39-
4036
void ReadBlockRequest::set_block_number_from_ptr(const uint8_t *ptr, const size_t offset) { std::copy_n(ptr + offset, block_number_.size(), block_number_.begin()); }
4137

4238
void ReadBlockRequest::set_block_number_from_bytes(uint8_t l, uint8_t m, uint8_t h)
@@ -52,7 +48,7 @@ void ReadBlockRequest::create_command(uint8_t *cmd_data) const {
5248
}
5349

5450
std::unique_ptr<Response> ReadBlockRequest::create_response(uint8_t source, uint8_t status, const uint8_t *data, uint16_t num) const {
55-
std::unique_ptr<ReadBlockResponse> response = std::make_unique<ReadBlockResponse>(get_request_sequence_number(), status, num);
51+
std::unique_ptr<ReadBlockResponse> response = std::make_unique<ReadBlockResponse>(get_request_sequence_number(), status);
5652
// Copy the return data if the status is OK
5753
if (status == 0) {
5854
std::vector<uint8_t> data_vector(data, data + num);
@@ -62,9 +58,7 @@ std::unique_ptr<Response> ReadBlockRequest::create_response(uint8_t source, uint
6258
}
6359

6460

65-
ReadBlockResponse::ReadBlockResponse(const uint8_t request_sequence_number, const uint8_t status, uint16_t block_size) : Response(request_sequence_number, status), block_size_(block_size) {
66-
block_data_.resize(block_size_);
67-
}
61+
ReadBlockResponse::ReadBlockResponse(const uint8_t request_sequence_number, const uint8_t status) : Response(request_sequence_number, status), block_data_{} {}
6862

6963
std::vector<uint8_t> ReadBlockResponse::serialize() const
7064
{
@@ -80,11 +74,8 @@ void ReadBlockResponse::set_block_data(std::vector<uint8_t>::const_iterator begi
8074
std::copy(begin, end, block_data_.begin()); // NOLINT(performance-unnecessary-value-param)
8175
}
8276

83-
const std::vector<uint8_t>& ReadBlockResponse::get_block_data() const {
77+
const std::array<uint8_t, 512>& ReadBlockResponse::get_block_data() const {
8478
return block_data_;
8579
}
8680

87-
const uint16_t ReadBlockResponse::get_block_size() const { return block_size_; }
88-
89-
9081
#endif

source/devrelay/commands/ReadBlock.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@
1111
class ReadBlockRequest : public Request
1212
{
1313
public:
14-
ReadBlockRequest(uint8_t request_sequence_number, uint8_t device_id, uint16_t block_size);
14+
ReadBlockRequest(uint8_t request_sequence_number, uint8_t device_id);
1515
std::vector<uint8_t> serialize() const override;
1616
std::unique_ptr<Response> deserialize(const std::vector<uint8_t> &data) const override;
1717
const std::array<uint8_t, 3> &get_block_number() const;
1818
void set_block_number_from_ptr(const uint8_t *ptr, size_t offset);
1919
void set_block_number_from_bytes(uint8_t l, uint8_t m, uint8_t h);
20-
const uint16_t get_block_size() const;
2120

2221
void create_command(uint8_t *output_data) const override;
2322
void copy_payload(uint8_t *data) const override {}
@@ -26,21 +25,18 @@ class ReadBlockRequest : public Request
2625

2726
private:
2827
std::array<uint8_t, 3> block_number_;
29-
uint16_t block_size_;
3028
};
3129

3230

3331
class ReadBlockResponse : public Response
3432
{
3533
public:
36-
explicit ReadBlockResponse(uint8_t request_sequence_number, uint8_t status, uint16_t block_size);
34+
explicit ReadBlockResponse(uint8_t request_sequence_number, uint8_t status);
3735
std::vector<uint8_t> serialize() const override;
3836

3937
void set_block_data(std::vector<uint8_t>::const_iterator begin, std::vector<uint8_t>::const_iterator end);
40-
const std::vector<uint8_t>& get_block_data() const;
41-
const uint16_t get_block_size() const;
38+
const std::array<uint8_t, 512>& get_block_data() const;
4239

4340
private:
44-
std::vector<uint8_t> block_data_;
45-
uint16_t block_size_;
41+
std::array<uint8_t, 512> block_data_;
4642
};

source/devrelay/commands/WriteBlock.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44
#include <iostream>
55
#include "WriteBlock.h"
66

7-
WriteBlockRequest::WriteBlockRequest(const uint8_t request_sequence_number, const uint8_t device_id, const uint16_t block_size) : Request(request_sequence_number, CMD_WRITE_BLOCK, device_id), block_number_{}, block_data_{}, block_size_(block_size) {}
7+
WriteBlockRequest::WriteBlockRequest(const uint8_t request_sequence_number, const uint8_t device_id) : Request(request_sequence_number, CMD_WRITE_BLOCK, device_id), block_number_{}, block_data_{} {}
88

99
std::vector<uint8_t> WriteBlockRequest::serialize() const
1010
{
1111
std::vector<uint8_t> request_data;
1212
request_data.push_back(this->get_request_sequence_number());
1313
request_data.push_back(this->get_command_number());
1414
request_data.push_back(this->get_device_id());
15-
request_data.push_back(this->get_block_size() & 0xFF);
16-
request_data.push_back((this->get_block_size() >> 8) & 0xFF);
1715
request_data.insert(request_data.end(), block_number_.begin(), block_number_.end());
1816
request_data.insert(request_data.end(), block_data_.begin(), block_data_.end());
1917

@@ -34,9 +32,7 @@ std::unique_ptr<Response> WriteBlockRequest::deserialize(const std::vector<uint8
3432

3533
const std::array<uint8_t, 3> &WriteBlockRequest::get_block_number() const { return block_number_; }
3634

37-
const std::vector<uint8_t> &WriteBlockRequest::get_block_data() const { return block_data_; }
38-
39-
const uint16_t WriteBlockRequest::get_block_size() const { return block_size_; }
35+
const std::array<uint8_t, 512> &WriteBlockRequest::get_block_data() const { return block_data_; }
4036

4137
void WriteBlockRequest::set_block_number_from_ptr(const uint8_t *ptr, const size_t offset) { std::copy_n(ptr + offset, block_number_.size(), block_number_.begin()); }
4238

source/devrelay/commands/WriteBlock.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,15 @@
1111
class WriteBlockRequest : public Request
1212
{
1313
public:
14-
WriteBlockRequest(uint8_t request_sequence_number, uint8_t device_id, uint16_t block_size);
14+
WriteBlockRequest(uint8_t request_sequence_number, uint8_t device_id);
1515
std::vector<uint8_t> serialize() const override;
1616
std::unique_ptr<Response> deserialize(const std::vector<uint8_t> &data) const override;
1717
const std::array<uint8_t, 3> &get_block_number() const;
1818
void set_block_number_from_ptr(const uint8_t *ptr, size_t offset);
1919

20-
const std::vector<uint8_t> &get_block_data() const;
20+
const std::array<uint8_t, 512> &get_block_data() const;
2121
void set_block_data_from_ptr(const uint8_t *ptr, size_t offset);
2222
void set_block_number_from_bytes(uint8_t l, uint8_t m, uint8_t h);
23-
const uint16_t get_block_size() const;
2423

2524
void create_command(uint8_t *output_data) const override;
2625
void copy_payload(uint8_t *data) const override;
@@ -29,8 +28,7 @@ class WriteBlockRequest : public Request
2928

3029
private:
3130
std::array<uint8_t, 3> block_number_;
32-
std::vector<uint8_t> block_data_;
33-
uint16_t block_size_;
31+
std::array<uint8_t, 512> block_data_;
3432
};
3533

3634
class WriteBlockResponse : public Response

source/devrelay/types/Request.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,16 @@ std::unique_ptr<Request> Request::from_packet(const std::vector<uint8_t>& packet
4949
}
5050

5151
case CMD_READ_BLOCK: {
52-
auto bs = (packet[4] << 8) | packet[3];
53-
auto readBlockRequest = std::make_unique<ReadBlockRequest>(packet[0], packet[2], bs);
54-
readBlockRequest->set_block_number_from_ptr(packet.data(), 5);
52+
auto readBlockRequest = std::make_unique<ReadBlockRequest>(packet[0], packet[2]);
53+
readBlockRequest->set_block_number_from_ptr(packet.data(), 3);
5554
request = std::move(readBlockRequest);
5655
break;
5756
}
5857

5958
case CMD_WRITE_BLOCK: {
60-
auto bs = (packet[4] << 8) | packet[3];
61-
auto writeBlockRequest = std::make_unique<WriteBlockRequest>(packet[0], packet[2], bs);
62-
writeBlockRequest->set_block_number_from_ptr(packet.data(), 5);
63-
writeBlockRequest->set_block_data_from_ptr(packet.data(), 8);
59+
auto writeBlockRequest = std::make_unique<WriteBlockRequest>(packet[0], packet[2]);
60+
writeBlockRequest->set_block_number_from_ptr(packet.data(), 3);
61+
writeBlockRequest->set_block_data_from_ptr(packet.data(), 6);
6462
request = std::move(writeBlockRequest);
6563
break;
6664
}

source/devrelay/types/Request.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class Response;
1313
class Request : public Command
1414
{
1515
public:
16-
Request(uint8_t request_sequence_number, uint8_t command_number, uint8_t device_id);
16+
Request(const uint8_t request_sequence_number, const uint8_t command_number, const uint8_t device_id);
17+
1718
std::vector<uint8_t> serialize() const override = 0;
1819
virtual std::unique_ptr<Response> deserialize(const std::vector<uint8_t> &data) const = 0;
1920

0 commit comments

Comments
 (0)