⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commands.py

📁 nesC写的heed算法
💻 PY
字号:
from Message import *from Comm import *from random import *from config import configseed()class FieldMsg (Message):  sender = Message.data  cmdId = Message.data + 2  cmd = Message.data + 4  def __init__(self, dest, cmd):    Message.__init__(self)    self.set16(dest, Message.addr)    self.set8(121, Message.type)    self.set16(config.local_id, self.sender)    self.setstring(cmd, self.cmd)class FieldReplyMsg (Message):  sender = Message.data + 0  cmdId = Message.data + 2  error = Message.data + 4  response = Message.data + 6    def __init__(self, msg):    Message.__init__(self, msg)class Command:  def __init__(self, master, comm, receiver, motelist):    self.comm = comm    self.master = master    self.motelist = motelist    self.cmdid = int(random() * 65536)    self.commands = {}    self.sending = []    receiver.sethandler(122, self.fieldreply)  def fieldreply(self, msg):    msg = FieldReplyMsg(msg)    sender = msg.getu16(FieldReplyMsg.sender)    self.motelist.awake(sender)    cmdId = msg.getu16(msg.cmdId)    if cmdId != 0:      try:        self.commands[cmdId](sender, msg)      except KeyError:        print "unknown command " + `cmdId`  def sendn(self, msg, count):    if self.sending == []:      self.master.after(config.send_period, self.sendnext)    self.sending.extend([ msg ] * count)  def sendnext(self):    self.comm.send(self.sending[0])    del self.sending[0]    if self.sending != []:      self.master.after(config.send_period, self.sendnext)  def send(self, msg, replyhandler):    size = msg.offset - Message.data    msg.set8(size, msg.length)    msg.set16(self.cmdid, msg.cmdId)    self.commands[self.cmdid] = replyhandler    self.cmdid = self.cmdid + 1    self.sendn(msg, config.send_count)    #self.comm.send(msg)class SimpleCommand:  def __init__(self, comm):    self.comm = comm  def result(self, response):    return "done"  def run(self, dest, output):    def receive(sender, response, self=self, output=output):      output.add(sender, self.result(response))    self.comm.send(self.cmd(dest), receive)  class Green (SimpleCommand):  name = "green"  def cmd(self, dest):    return FieldMsg(dest, "SetLedG").set8(2)class Beep (SimpleCommand):  name = "beep"  def cmd(self, dest):    return FieldMsg(dest, "SetSnd").set16(500)    class Reset (SimpleCommand):  name = "reset"  def cmd(self, dest):    return FieldMsg(dest, "Reset")    class Ping (SimpleCommand):  name = "ping"  def result(self, response):    response.setoffset(FieldReplyMsg.response)    parent = response.getu16()    freeram = response.getu16()    voltage = response.getu16() / 1024.0 * 3.3    qlen = response.getu8()    mhqlen = response.getu8()    depth = response.getu8()    qual = response.getu8()    qid1 = response.getu8()    qid2 = response.getu8()    return "%.1fV Parent %d, RAM %d, qln %d, mhq %d, dpth %d, qual %d, q1 %d, q2 %d" % (voltage, parent, freeram, qlen, mhqlen, depth, qual, qid1, qid2)    def cmd(self, dest):    return FieldMsg(dest, "Ping")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -