From: ian Date: Sat, 24 May 2008 00:43:53 +0000 (+0000) Subject: fire points for 20ms; recharge for 300ms X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=f7b09dece72617e779394e969d55ced3ca5160b9;p=trains.git fire points for 20ms; recharge for 300ms --- diff --git a/detpic/points.asm b/detpic/points.asm index 4b3732c..e36ce94 100644 --- a/detpic/points.asm +++ b/detpic/points.asm @@ -22,7 +22,7 @@ ; 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 diff --git a/detpic/program.clocks b/detpic/program.clocks index fc70a0c..78c97ff 100644 --- a/detpic/program.clocks +++ b/detpic/program.clocks @@ -13,7 +13,7 @@ # M and S mean generate _{master,slave}_ respectively # T means generate _{us,ms} -points MS T3ov 10ms +points MS T3ov 20ms tick MST T2period 1ms nmra M T0ov8 58us-10cy diff --git a/hostside/commands.c b/hostside/commands.c index f590ce4..a23d4c5 100644 --- a/hostside/commands.c +++ b/hostside/commands.c @@ -280,7 +280,11 @@ static int cmd_speed(ParseState *ps, const CmdInfo *ci) { 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; } @@ -339,5 +343,6 @@ const CmdInfo toplevel_cmds[]= { { "!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 } }; diff --git a/hostside/movpos.c b/hostside/movpos.c index 8d31f08..83d4bca 100644 --- a/hostside/movpos.c +++ b/hostside/movpos.c @@ -546,7 +546,7 @@ static void fsq_all_abandon(Method *mm) { * */ -#define CDU_RECHARGE 250 /*ms*/ +#define CDU_RECHARGE 350 /*ms*/ #define POINT_MOVEMENT 50 /*ms*/ static Change *point_allocate(Method *mm, int alloc_motions) { diff --git a/hostside/safety.h b/hostside/safety.h index 64abf9e..87305c4 100644 --- a/hostside/safety.h +++ b/hostside/safety.h @@ -232,6 +232,8 @@ double speedmanager_speed_maxestimate(Train *tra, struct timeval tnow); 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 diff --git a/hostside/speed.c b/hostside/speed.c index 9341dc7..4ad15ae 100644 --- a/hostside/speed.c +++ b/hostside/speed.c @@ -6,12 +6,16 @@ #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];