123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include "plt.h"
- #define NONE "\e[0m"
- #define BLACK "\e[0;30m"
- #define L_BLACK "\e[1;30m"
- #define RED "\e[0;31m"
- #define L_RED "\e[1;31m"
- #define GREEN "\e[0;32m"
- #define L_GREEN "\e[1;32m"
- #define BROWN "\e[0;33m"
- #define YELLOW "\e[1;33m"
- #define BLUE "\e[0;34m"
- #define L_BLUE "\e[1;34m"
- #define PURPLE "\e[0;35m"
- #define L_PURPLE "\e[1;35m"
- #define CYAN "\e[0;36m"
- #define L_CYAN "\e[1;36m"
- #define GRAY "\e[0;37m"
- #define WHITE "\e[1;37m"
- #define BOLD "\e[1m"
- #define UNDERLINE "\e[4m"
- #define BLINK "\e[5m"
- #define REVERSE "\e[7m"
- #define HIDE "\e[8m"
- #define CLEAR "\e[2J"
- #define CLRLINE "\r\e[K"
- /* ms */
- double sm_get_timeofday()
- {
- struct timeval tv;
- struct timezone tz;
-
- gettimeofday(&tv,&tz);
- return (double)tv.tv_sec * 1000 + (double)tv.tv_usec/1000;
- }
- void sm_reset_timing(struct statemachine_t* sm, int timing_prd, int tick_prd)
- {
- sm->timing_timer = -1;
- sm->timing_prd = timing_prd;
- sm->timing_ave = -1.0;
- sm->timing_max = -1.0;
- sm->timing_cur = -1.0;
- sm->tick_timer = 0;
- sm->tick = 0;
- sm->tick_prd = tick_prd;
- }
- void sm_cal_timing(struct statemachine_t* sm)
- {
- /* state machine timing statistics */
- double tseclipsed = 0.0;
- double ts = 0.0;
- if( sm->timing_timer < 0 ){ /* reset */
- sm->timing_timer = 0;
- sm->timing_tslastrun = sm_get_timeofday();
- sm->timing_totalcnt = 0.0;
- sm->timing_totaltime = 0.0;
- sm->timing_ave = -1.0;
- sm->timing_max = -1.0;
- sm->timing_cur = -1.0;
- }else{
- if( ++sm->timing_timer >= sm->timing_prd ){ /* cal every prd times */
- sm->timing_timer = 0;
- ts = sm_get_timeofday();
- tseclipsed = ts - sm->timing_tslastrun;
- sm->timing_totalcnt += sm->timing_prd;
- sm->timing_totaltime += tseclipsed;
- sm->timing_tslastrun = ts;
- sm->timing_ave = sm->timing_totaltime/sm->timing_totalcnt;
- sm->timing_cur = tseclipsed/sm->timing_prd;
- if( sm->timing_cur > sm->timing_max ){
- sm->timing_max = sm->timing_cur;
- }
- if( sm->timing_totalcnt > 8640000 ){ /* auto reset */
- sm->timing_timer = -1;
- }
- }
- }
-
- if( sm->tick_timer++ >= sm->tick_prd ){ //
- sm->tick_timer = 0;
- sm->tick++;
- }
- }
- void sm_set_state(struct statemachine_t* sm, int state, int err)
- {
- int i, found;
- sm->state = state;
- sm->step = 0;
- sm->count = 0;
- found = 0;
- for( i = 0; i < sm->state_nbr; i++ ){
- if( state == sm->states[i].code ){
- found = 1;
- strcpy(sm->szstate, sm->states[i].szstr);
- }
- }
- if( found != 1 ){
- strcpy(sm->szstate, "unknown");
- }
- found = 0;
- for( i = 0; i < sm->err_nbr; i++ ){
- if( err == sm->errs[i].code ){
- found = 1;
- strcpy(sm->szerrcode, sm->errs[i].szstr);
- }
- }
- if( found != 1 ){
- strcpy(sm->szerrcode, "unknown");
- }
- }
- int sm_get_state(struct statemachine_t* sm)
- {
- return sm->state;
- }
- char* sm_get_szstate(struct statemachine_t* sm)
- {
- return sm->szstate;
- }
- int sm_get_step(struct statemachine_t* sm)
- {
- return sm->step;
- }
- void sm_set_step(struct statemachine_t* sm, int step)
- {
- sm->step = step;
- }
- int sm_get_count(struct statemachine_t* sm)
- {
- return sm->count;
- }
- void sm_set_count(struct statemachine_t* sm, int val)
- {
- sm->count = val;
- }
- void sm_inc_count(struct statemachine_t* sm)
- {
- sm->count++;
- }
- void sm_get_summary(struct statemachine_t* sm, char* buf, int len)
- {
- sprintf(buf, "SM stat:" YELLOW "%s" NONE " stp:%d err:[%s] tick:%03d timing_ave(ms):%.0f cur:%.0f max:%.0f",
- sm->szstate, sm->step, sm->szerrcode, sm->tick, sm->timing_ave, sm->timing_cur, sm->timing_max);
- }
|