1#!/usr/bin/env python3 2import sys 3import os 4import argparse 5 6xshome = os.environ['NOOP_HOME'] 7assert(xshome) # NOOP_HOME is set 8print('XSHOME:',xshome) 9 10xsbuild = xshome + '/build/' 11 12def find_lateset(suffix): 13 fs = [f for f in os.listdir(xsbuild) if f.endswith(suffix)] 14 fs.sort() 15 return fs[-1] 16 17def parse_db(table_name, script): 18 return (f'sqlite3 {db} "select * from (' + 19 f'select * from {table_name} ' + 20 (f'where {sql} ' if(sql != '') else '') + 21 (f'order by STAMP desc ' if(last) else '') + 22 f'limit {limit}' + 23 f') order by STAMP asc" | sh {script}') 24 25parser = argparse.ArgumentParser(description='L2DB helper') 26parser.add_argument('cmd', choices=['log', 'mp'], help='[Required] log for TLLOG; mp for L2 MainPipe') 27parser.add_argument('sql', nargs='?', default='', help='[Optional] sql query, e.g. "STAMP > 10000" or "ADDRESS=0x80000000"') 28parser.add_argument('-l', '--last', action='store_true', help='select the last N records') 29parser.add_argument('-n', '--limit', type=int, default=20, help='select N records') 30parser.add_argument('-p', '--path', default=None, help='path to db file (if not designated, use the latest in build)') 31args = parser.parse_args() 32# print(args) 33 34cmd = args.cmd 35sql = args.sql 36last = args.last 37limit = args.limit 38db = xsbuild + find_lateset('.db') if args.path == None else args.path 39print(db) 40 41line = '' 42if(cmd == 'log'): 43 line = parse_db('TLLOG', xshome + '/scripts/cache/convert_tllog.sh') 44 45elif(cmd == 'mp'): 46 line = parse_db('L2MP', xshome + '/scripts/cache/convert_mp.sh') 47 48# elif(cmd == 'clean'): 49# os.system(f'rm -rf {xsbuild}*.vcd') 50# os.system(f'rm -rf {xsbuild}*.vpd') 51# os.system(f'rm -rf {xsbuild}*.gtkw') 52# os.system(f'rm -rf {xsbuild}*.db') 53 54else: 55 print('Unknown command') 56 exit() 57 58print(line) 59os.system(line)