MFX_SEARCH = 0x23,
MFX_ASSIGN_ADDRESS = 0x24,
MFX_PING = 0x25,
+ MFX_READ = 0x26,
MFX_SPEED = 0x28,
MFX_SPEED_FUNCS8 = 0x29,
MFX_SPEED_FUNCS16 = 0x2A,
POWER_STATE = 0xC2,
S88_DATA = 0xD0,
MFX_SEARCH_FEEDBACK = 0xD1,
- MFX_PING_FEEDBACK = 0xD2
+ MFX_PING_FEEDBACK = 0xD2,
+ MFX_READ_FEEDBACK = 0xD3
};
struct Tag
unsigned misses;
Queue<MfxInfo> queue;
+ MfxInfo *pending_info;
+ unsigned read_array;
+ unsigned read_offset;
+ unsigned read_length;
+ char read_data[0x40];
+ unsigned block_size;
+
public:
MfxSearchTask(ArduControl &);
ArduControl &control;
bool done;
std::vector<Task *> tasks;
+ unsigned cmd_rate;
+ unsigned cmd_count;
+ Msp::Time::TimeStamp cmd_rate_start;
public:
ControlThread(ArduControl &);
+ unsigned get_command_rate() const { return cmd_rate; }
+
void exit();
private:
virtual void main();
ControlThread thread;
static ProtocolInfo protocol_info[2];
- static TelemetryInfo telemetry_info[4];
+ static TelemetryInfo telemetry_info[6];
public:
ArduControl(const Options &);
virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &);
private:
MfxInfoArray::iterator add_mfx_info(const MfxInfo &);
+ MfxInfo *find_mfx_info(unsigned);
public:
virtual void remove_loco(unsigned);
virtual void set_loco_speed(unsigned, unsigned);