; cducharging only counts if the cdu is enabled
; (according to CDU Enable LAT bit)
-cdu_timeout equ 200 ; ms
+cdu_timeout equ 300 ; ms
cdu_inittimeout equ 750 ; ms
ptix2latbit equ 0x300 ; has to be a multiple of 0x100
# M and S mean generate <name>_{master,slave}_<things> respectively
# T means generate <name>_{us,ms}
-points MS T3ov 10ms
+points MS T3ov 20ms
tick MST T2period 1ms
nmra M T0ov8 58us-10cy
MUSTECR( ps_neednumber(ps,&speed,0,126,"speed step") );
MUSTECR( ps_neednoargs(ps) );
- MUSTECRPREDICT( speedmanager_speedchange_request(tra,speed,CMDPPC) );
+ if (ci->xarg & CIXF_FORCE) {
+ actual_speed(tra,speed);
+ } else {
+ MUSTECRPREDICT( speedmanager_speedchange_request(tra,speed,CMDPPC) );
+ }
return 0;
}
{ "!movpos", cmd_movpos, CIXF_ANYSTA|CIXF_FORCE },
{ "!invert", cmd_invert, CIXF_ANYSTA|CIXF_FORCE },
{ "speed", cmd_speed },
+ { "!speed", cmd_speed, CIXF_ANYSTA|CIXF_FORCE },
{ 0 }
};
*
*/
-#define CDU_RECHARGE 250 /*ms*/
+#define CDU_RECHARGE 350 /*ms*/
#define POINT_MOVEMENT 50 /*ms*/
static Change *point_allocate(Method *mm, int alloc_motions) {
double speedmanager_stoppingdistance(Train *tra, struct timeval tnow);
int speedmanager_stopping(Train *tra);
+void actual_speed(Train *tra, int step);
+
/*========== actual.c ==========*/
/* actual.c should only be called from safety.c.
* It is responsible for communicating with the PICs, including
#include "realtime.h"
#include "nmra.h"
-static void xmit(Train *tra) {
+void actual_speed(Train *tra, int step) {
Nmra n;
- enco_nmra_speed126(&n, tra->addr, tra->speed.step, tra->backwards);
+ enco_nmra_speed126(&n, tra->addr, step, tra->backwards);
retransmit_urgent_requeue(&tra->speed.rn, &n);
}
+static void xmit(Train *tra) {
+ actual_speed(tra,tra->speed.step);
+}
+
static void decel_done(TimeoutEvent *toev) {
Train *tra= (void*)((char*)toev - offsetof(Train, speed.decel));
tra->speed.speed= tra->speedcurve[tra->speed.step];