|  | @@ -1,26 +1,70 @@
 | 
	
		
			
				|  |  | -import os,network,socket,time,machine,gc
 | 
	
		
			
				|  |  | +import os,sys,network,socket,time,machine,gc,tf
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# these helper classes let us use the tf.transfer() iterator,
 | 
	
		
			
				|  |  | +# by intercepting the .write()
 | 
	
		
			
				|  |  | +class wc():
 | 
	
		
			
				|  |  | +  def __init__(self):
 | 
	
		
			
				|  |  | +    self.words=self.lines=self.bytes_=0
 | 
	
		
			
				|  |  | +  def write(self,text):
 | 
	
		
			
				|  |  | +    self.bytes_ += len(text)
 | 
	
		
			
				|  |  | +    self.lines += 1
 | 
	
		
			
				|  |  | +    self.words += len(text.split())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class lessor():
 | 
	
		
			
				|  |  | +  def __init__(self):
 | 
	
		
			
				|  |  | +    self.i=0
 | 
	
		
			
				|  |  | +  def write(self,text):
 | 
	
		
			
				|  |  | +    if self.i==-1: return
 | 
	
		
			
				|  |  | +    self.i += 1
 | 
	
		
			
				|  |  | +    sys.stdout.write(text)
 | 
	
		
			
				|  |  | +    if self.i%30==0:
 | 
	
		
			
				|  |  | +      sys.stdout.write("====> press <enter> to see more, N or Q to quit <====\n")
 | 
	
		
			
				|  |  | +      g=sys.stdin.read(1)
 | 
	
		
			
				|  |  | +      if g=='\n': g=sys.stdin.read(1)
 | 
	
		
			
				|  |  | +      if g in "nNqQ":
 | 
	
		
			
				|  |  | +        self.i=-1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# the main entry point for the extension
 | 
	
		
			
				|  |  | +# returns True if the command was interpreted
 | 
	
		
			
				|  |  |  def cmd(args):
 | 
	
		
			
				|  |  | -  if args[0]=='ifconfig':
 | 
	
		
			
				|  |  | +  cmd=args[0]
 | 
	
		
			
				|  |  | +  if cmd in ('wc','more','less','exec') and len(args)<2:
 | 
	
		
			
				|  |  | +    print("syntax: "+cmd+" <filename>")
 | 
	
		
			
				|  |  | +    return True
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if cmd in ('wc','more','less'):
 | 
	
		
			
				|  |  | +    if cmd=='wc':
 | 
	
		
			
				|  |  | +      w = wc()
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +      w = lessor()
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +      tf.transfer(args[1],w)
 | 
	
		
			
				|  |  | +      if cmd=='wc':
 | 
	
		
			
				|  |  | +        print("lines: {}\twords: {}\tbytes: {}".format(w.lines, w.words, w.bytes_))
 | 
	
		
			
				|  |  | +    except:
 | 
	
		
			
				|  |  | +      print("file not found: "+args[1])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd in ('ifconfig','ip'):
 | 
	
		
			
				|  |  |      ifc=network.WLAN().ifconfig()
 | 
	
		
			
				|  |  |      print("IP: {}\tmask: {}\tgateway: {}\tDNS: {}".format(*ifc))
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='host':
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd in ('host','nslookup','dig'):
 | 
	
		
			
				|  |  |      if len(args)<2:
 | 
	
		
			
				|  |  |        print("syntax: host <domain.name>")
 | 
	
		
			
				|  |  | -      return False
 | 
	
		
			
				|  |  | -    print("host <{}> is at {}".format(args[1],socket.getaddrinfo(args[1],80)[0][-1][0]))
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='connect':
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +      print("host <{}> is at {}".format(args[1],socket.getaddrinfo(args[1],80)[0][-1][0]))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd=='connect':
 | 
	
		
			
				|  |  |      if len(args)<3:
 | 
	
		
			
				|  |  |        print("syntax: connect <ssid> <password>")
 | 
	
		
			
				|  |  | -      return False
 | 
	
		
			
				|  |  | -    w=network.WLAN(network.STA_IF)
 | 
	
		
			
				|  |  | -    w.connect(args[1],args[2])
 | 
	
		
			
				|  |  | -    print("connecting...",end=' ')
 | 
	
		
			
				|  |  | -    time.sleep(3)
 | 
	
		
			
				|  |  | -    print(w.ifconfig() if w.isconnected() else "not yet connected; try 'ifconfig' in a few seconds")
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='scan':
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +      w=network.WLAN(network.STA_IF)
 | 
	
		
			
				|  |  | +      w.connect(args[1],args[2])
 | 
	
		
			
				|  |  | +      print("connecting...",end=' ')
 | 
	
		
			
				|  |  | +      time.sleep(3)
 | 
	
		
			
				|  |  | +      print(w.ifconfig() if w.isconnected() else "not yet connected; try 'ifconfig' in a few seconds")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd=='scan':
 | 
	
		
			
				|  |  |      w=network.WLAN(network.STA_IF)
 | 
	
		
			
				|  |  |      print("scanning...")
 | 
	
		
			
				|  |  |      s=w.scan()
 | 
	
	
		
			
				|  | @@ -29,34 +73,29 @@ def cmd(args):
 | 
	
		
			
				|  |  |        return True
 | 
	
		
			
				|  |  |      for i in s:
 | 
	
		
			
				|  |  |        print("ch: {}\tRSSI: {}\t{}\tSSID: {}".format(i[2],i[3],"open" if i[4]==0 else "",i[0]))
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='freq':
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd=='freq':
 | 
	
		
			
				|  |  |      if len(args)==1 or args[1] in ("160","80"):
 | 
	
		
			
				|  |  |        if len(args)>1:
 | 
	
		
			
				|  |  |          machine.freq(int(args[1])*1000000)
 | 
	
		
			
				|  |  |        print("master cpu frequency {}MHz".format(machine.freq()//1000000))
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  |        print("syntax: freq [ 160 | 80 ]")
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='exec':
 | 
	
		
			
				|  |  | -    if len(args)<2:
 | 
	
		
			
				|  |  | -      print("syntax: exec <python-filename>")
 | 
	
		
			
				|  |  | -    else:
 | 
	
		
			
				|  |  | -      try:
 | 
	
		
			
				|  |  | -        exec(open(args[1]).read(),globals(),globals())
 | 
	
		
			
				|  |  | -      except OSError:
 | 
	
		
			
				|  |  | -        print("file not found")
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='free':
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  elif cmd=='exec':
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +      exec(open(args[1]).read(),globals(),globals())
 | 
	
		
			
				|  |  | +    except OSError:
 | 
	
		
			
				|  |  | +      print("file not found")
 | 
	
		
			
				|  |  | +  elif cmd=='free':
 | 
	
		
			
				|  |  |      print("memory used: {}\tmemory free:{}".format(gc.mem_alloc(),gc.mem_free()))
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  elif args[0]=='help':
 | 
	
		
			
				|  |  | +  elif cmd=='help':
 | 
	
		
			
				|  |  |      print("==Extended commands")
 | 
	
		
			
				|  |  |      print("  connect <essid> <password> \tscan")
 | 
	
		
			
				|  |  | -    print("  ifconfig                   \thost <domain.name>")
 | 
	
		
			
				|  |  | -    print("  freq [ 160 | 80 ]          \texec <python-filename>")
 | 
	
		
			
				|  |  | -    print("  free")
 | 
	
		
			
				|  |  | -    return True
 | 
	
		
			
				|  |  | -  else:
 | 
	
		
			
				|  |  | +    print("  ifconfig/ip        \t\thost/dig/nslookup <domain.name>")
 | 
	
		
			
				|  |  | +    print("  freq [ 160 | 80 ]  \t\texec <python-filename>")
 | 
	
		
			
				|  |  | +    print("  free        \t\t\twc <filename>")
 | 
	
		
			
				|  |  | +    print("  less/more <filename>")
 | 
	
		
			
				|  |  | +  else: # command not found
 | 
	
		
			
				|  |  |      return False
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  return True  
 |