#!/usr/bin/awk -f function get_type(field) { switch(field) { case /Control Transfer/: return "ControlTransfer"; case /Bulk/: return "BULK"; default: return; } } function get_direction(field) { switch(field) { case "in": return "<<<"; case "out": return ">>>"; default: return "---"; } } # USBLyzer C:I:E field function get_cie(field) { ret = split(field,element,":",seps); if(ret==3) return strtonum(element[3]); } function get_elapsed(field) { return strtonum(field)*1000; } function get_duration(field) { if(field!="") { split(field,element," ",seps); num = strtonum(element[1]); switch(element[2]) { case "us": num*1; case "ms": num*1000; default: break; } return num; } else return 0; } function get_bytes(field) { ret = split(field,element," ",seps); if(ret==3) return strtonum(element[1]); } BEGIN { FS=","; myNR=0; flip_header=1; } { if($6 ~ /Control Transfer/ || ($6 ~ /Bulk/ && $7 ~ /data/)) myNR++; } ($6 ~ /Control Transfer/ || ($6 ~ /Bulk/ && $7 ~ /data/)) { type = get_type($6); direction = get_direction($9); cie = get_cie($10); elapsed = get_elapsed($4); duration = get_duration($5); bytes = get_bytes($7); if(type == "BULK") { if(flip_header) { flip_header=0; printf("%06d: URB_FUNCTION_SELECT_CONFIGURATION\n",myNR++); } # (%02d bytes) printf("%06d: OUT: %07d us %07d ms BULK[%05d] %s %s\n",myNR,duration,elapsed,cie,direction,tolower($16)); } if(type == "ControlTransfer") printf("%06d: OUT: %07d us %07d ms ControlTransfer %s %s\n",myNR,duration,elapsed,direction,tolower($16)); }