You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Modelbahn/server/locomotive.h

81 lines
2.0 KiB

#ifndef _LOCOMOTIVE_H_
#define _LOCOMOTIVE_H_
#include "modelbahn.h"
#include "server.h"
#define LOCO_F_REVERSE 0x0001
#define LOCO_F_CARGO 0x0010
#define LOCO_F_CANREVERSE 0x0020
#define LOCO_F_SHORTTRAIN 0x0040
#define LOCO_F_AUTO 0x0100
#define LOCO_F_RANDOM 0x0200
enum {
LOCO_INT_UNDEF = 0,
LOCO_INT_DCC14,
LOCO_INT_DCC28,
LOCO_INT_DCC128
};
struct s_Locomotive {
char name[REFERENCENAME_LEN]; // name
char ifname[REFERENCENAME_LEN]; // ref. of interface
int addr; // address on bus
int stepcode; // stepcoding LOCO_INT_DCC...
int flags; // flags
int vmin; // speed - below this we always set 0
int vslow; // speed - slow entry in trainstation
int vmid; // speed - for normal trains (max for cargo trains, on automode)
int vfast; // speed - for normal trains
int vmax; // speed - maximum speed
// dynamic data
int speed; // current speed
int64_t func; // function enabled ... light...
char blockassign; // currently assigned block [+BLOCKREFNAME ... -BLOCKREFNAME]
char blocknext; // next block to go to
char blockprev; // prev block (mostly assigned block
char blockdestination; // destination block
} typedef Locomotive;
class Locomotives {
private:
Locomotive *locomotives;
int max;
int changed;
pthread_mutex_t mtx;
int Lock();
int UnLock();
// not thread safe
JSONParse _GetJSON(int idx);
public:
Locomotives();
~Locomotives();
bool IsChanged() { return changed; }
void ClearChanged() { changed = 0; };
int Change(Locomotive *loco);
int Delete(string name);
int SetSpeed(string name, int speed);
int SetReverse(string name, int reverse);
int SetFunction(string name, int func, int value);
int SetSpeedFromBus (string ifname, int addr, int speed);
int SetFunctionFromBus (string ifname, int addr, int func);
string GetName(int idx);
JSONParse GetJSON(string name);
void GetJSONAll(JSONParse *json);
Locomotive GetLocomotiveFromJSON(JSONParse *j);
};
#endif