// class cl_cmdline *cmdline, class cl_console *con)
COMMAND_DO_WORK_UC(cl_timer_cmd)
{
- char *s;
-
- if (cmdline->param(0) == 0)
+ class cl_cmd_arg *params[4]= { cmdline->param(0),
+ cmdline->param(1),
+ cmdline->param(2),
+ cmdline->param(3) };
+
+ if (!params[0])
{
- if (long_help)
- con->dd_printf("%s\n", long_help);
- else
- con->dd_printf("What to do?\n");
- return(0);
+ con->dd_printf("Timer id is missing.");
+ return(DD_FALSE);
}
- if ((s= cmdline->param(0)->get_svalue()))
+ if (params[0]->as_number())
{
- if (cmdline->param(1) == 0)
+ as_nr= DD_TRUE;
+ id_nr= params[0]->value.number;
+ if (id_nr <= 0)
{
- con->dd_printf("Timer number is missing\n");
- return(0);
+ con->dd_printf("Error: "
+ "Timer id must be greater than zero or a string\n");
+ return(DD_TRUE);
}
- set_ticker(uc, cmdline->param(1));
- if (strstr(s, "c") == s ||
- strstr(s, "m") == s ||
- strstr(s, "a") == s)
- return(add(uc, cmdline, con));
- else if (strstr(s, "d") == s)
- return(del(uc, cmdline, con));
- else if (strstr(s, "g") == s)
- return(get(uc, cmdline, con));
- else if (strstr(s, "r") == s)
- return(run(uc, cmdline, con));
- else if (strstr(s, "s") == s)
- return(stop(uc, cmdline, con));
- else if (strstr(s, "v") == s)
- return(val(uc, cmdline, con));
- else
- con->dd_printf("Undefined timer command: \"%s\". Try \"help timer\"\n",
- s);
+ ticker= uc->get_counter(id_nr);
}
- return(0);
-}
-
-void
-cl_timer_cmd::set_ticker(class cl_uc *uc,
- class cl_cmd_arg *param)
-{
- if ((name= param->get_svalue()))
- ticker= uc->get_counter(name);
else
- if (param->get_ivalue(&what))
- ticker= uc->get_counter(what);
+ {
+ as_nr= DD_FALSE;
+ id_str= params[0]->s_value;
+ ticker= uc->get_counter(id_str);
+ }
+ cmdline->shift();
+ return(DD_FALSE);
}
+
/*
+ * Command: timer add
+ *-----------------------------------------------------------------------------
* Add a new timer to the list
*/
-int
-cl_timer_cmd::add(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_add_cmd)
+ //add(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
class cl_cmd_arg *params[4]= { cmdline->param(0),
cmdline->param(1),
cmdline->param(2),
cmdline->param(3) };
long dir= +1, in_isr= 0;
-
- if (!name &&
- what < 1)
+
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
+ if (ticker)
{
- con->dd_printf("Error: "
- "Timer id must be greater then zero or a string\n");
+ if (!as_nr)
+ con->dd_printf("Error: Timer \"%s\" already exists\n", id_str);
+ else
+ con->dd_printf("Error: Timer %d already exists\n", id_nr);
return(DD_FALSE);
}
- if (ticker)
+
+ if (cmdline->nuof_params() > 0)
{
- if (name)
- con->dd_printf("Error: Timer \"%s\" already exists\n", name);
- else
- con->dd_printf("Error: Timer %d already exists\n", what);
- return(0);
+ if (cmdline->syntax_match(uc, NUMBER))
+ dir= params[0]->value.number;
+ else if (cmdline->syntax_match(uc, NUMBER NUMBER))
+ {
+ dir= params[0]->value.number;
+ in_isr= params[1]->value.number;
+ }
}
- if (params[2])
- if (!params[2]->get_ivalue(&dir))
- {
- con->dd_printf("Error: Wrong direction\n");
- return(DD_FALSE);
- }
- if (params[3])
- if (!params[3]->get_ivalue(&in_isr))
- {
- con->dd_printf("Error: Wrong parameter\n");
- return(DD_FALSE);
- }
- if (name)
+ if (!as_nr)
{
- ticker= new cl_ticker(dir, in_isr, name);
- uc->add_counter(ticker, name);
+ ticker= new cl_ticker(dir, in_isr, id_str);
+ uc->add_counter(ticker, id_str);
}
else
{
ticker= new cl_ticker(dir, in_isr, 0);
- uc->add_counter(ticker, what);
+ uc->add_counter(ticker, id_nr);
}
return(DD_FALSE);
}
/*
+ * Command: timer delete
+ *-----------------------------------------------------------------------------
* Delete a timer from the list
*/
-int
-cl_timer_cmd::del(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_delete_cmd)
+ //del(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
if (!ticker)
{
- if (name)
- con->dd_printf("Timer \"%s\" does not exist\n", name);
+ if (!as_nr)
+ con->dd_printf("Timer \"%s\" does not exist\n", id_str);
else
- con->dd_printf("Timer %d does not exist\n", what);
- return(0);
+ con->dd_printf("Timer %d does not exist\n", id_nr);
+ return(DD_FALSE);
}
- if (name)
- uc->del_counter(name);
+ if (!as_nr)
+ uc->del_counter(id_str);
else
- uc->del_counter(what);
+ uc->del_counter(id_nr);
- return(0);
+ return(DD_FALSE);
}
/*
+ * Command: timer get
+ *-----------------------------------------------------------------------------
* Get the value of just one timer or all of them
*/
-int
-cl_timer_cmd::get(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_get_cmd)
+ //get(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
+ if (cmdline->nuof_params())
+ {
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
+ }
+ else
+ ticker= 0;
if (ticker)
- ticker->dump(what, uc->xtal, con);
+ ticker->dump(id_nr, uc->xtal, con);
else
{
uc->ticks->dump(0, uc->xtal, con);
uc->isr_ticks->dump(0, uc->xtal, con);
uc->idle_ticks->dump(0, uc->xtal, con);
- for (what= 0; what < uc->counters->count; what++)
+ for (id_nr= 0; id_nr < uc->counters->count; id_nr++)
{
- ticker= uc->get_counter(what);
+ ticker= uc->get_counter(id_nr);
if (ticker)
- ticker->dump(what, uc->xtal, con);
+ ticker->dump(id_nr, uc->xtal, con);
}
}
- return(0);
+ return(DD_FALSE);
}
/*
+ * Command: timer run
+ *-----------------------------------------------------------------------------
* Allow a timer to run
*/
-int
-cl_timer_cmd::run(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_run_cmd)
+ //run(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
if (!ticker)
{
- if (name)
- con->dd_printf("Timer %d does not exist\n", name);
+ if (!as_nr)
+ con->dd_printf("Timer %d does not exist\n", id_str);
else
- con->dd_printf("Timer %d does not exist\n", what);
+ con->dd_printf("Timer %d does not exist\n", id_nr);
return(0);
}
ticker->options|= TICK_RUN;
- return(0);
+ return(DD_FALSE);
}
/*
+ * Command: timer stop
+ *-----------------------------------------------------------------------------
* Stop a timer
*/
-int
-cl_timer_cmd::stop(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_stop_cmd)
+ //stop(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
+
if (!ticker)
{
- if (name)
- con->dd_printf("Timer %d does not exist\n", name);
+ if (!as_nr)
+ con->dd_printf("Timer %d does not exist\n", id_str);
else
- con->dd_printf("Timer %d does not exist\n", what);
- return(0);
+ con->dd_printf("Timer %d does not exist\n", id_nr);
+ return(DD_FALSE);
}
ticker->options&= ~TICK_RUN;
- return(0);
+ return(DD_FALSE);
}
/*
+ * Command: timer value
+ *-----------------------------------------------------------------------------
* Set a timer to a specified value
*/
-int
-cl_timer_cmd::val(class cl_uc *uc,
- class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK_UC(cl_timer_value_cmd)
+ //val(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con)
{
class cl_cmd_arg *params[4]= { cmdline->param(0),
cmdline->param(1),
cmdline->param(2),
cmdline->param(3) };
+ if (cl_timer_cmd::do_work(uc, cmdline, con))
+ return(DD_FALSE);
if (!ticker)
{
- if (name)
- con->dd_printf("Error: Timer %d does not exist\n", name);
+ if (!as_nr)
+ con->dd_printf("Error: Timer %d does not exist\n", id_str);
else
- con->dd_printf("Error: Timer %d does not exist\n", what);
- return(0);
+ con->dd_printf("Error: Timer %d does not exist\n", id_nr);
+ return(DD_FALSE);
}
if (params[2])
{