tests/wiimote/py_ext_0@py_ext/pyfile.xml
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Fri, 25 Aug 2017 11:22:08 +0300
changeset 1789 492e2cd6157e
parent 1185 b36755d7c19e
permissions -rw-r--r--
fix problem when Beremiz is running without matiec installed

set matiec settings only once on first use of ProjectController class and give
user-friendly message on compilation about missing matiec
installation.


Traceback (most recent call last):
File "Beremiz.py", line 197, in <module>
beremiz.Start()
File "Beremiz.py", line 192, in Start
self.CreateApplication()
File "Beremiz.py", line 130, in CreateApplication
self.BackgroundInitialization()
File "Beremiz.py", line 137, in BackgroundInitialization
self.ImportModules()
File "Beremiz.py", line 176, in ImportModules
import BeremizIDE
File
"BeremizIDE.py", line 76, in <module>
from ProjectController import ProjectController, GetAddMenuItems,
MATIEC_ERROR_MODEL, ITEM_CONFNODE
File
"ProjectController.py", line 177, in <module>
iec2c_cfg = Iec2CSettings()
File
"ProjectController.py", line 101, in __init__
self.ieclib_c_path = self.findLibCPath()
File
"ProjectController.py", line 135, in findLibCPath
os.path.join(self.ieclib_path, "C"),
File "/usr/lib/python2.7/posixpath.py", line 70, in join
elif path == '' or path.endswith('/'):
AttributeError: 'NoneType' object has no attribute 'endswith'
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PyFile>
  <variables>
    <variable name="WiiNunchuckStickX" type="INT"/>
    <variable name="WiiNunchuckStickY" type="INT"/>
    <variable name="WiiNunchuckAccX" type="INT"/>
    <variable name="WiiNunchuckAccY" type="INT"/>
    <variable name="WiiNunchuckAccZ" type="INT"/>
    <variable name="WiiNunchuckButtons" type="WORD"/>
    <variable name="WiiButtons" type="WORD"/>
  </variables>
  <globals>
<![CDATA[
import cwiid,commands,sys,re,os,time

wiimote = None
WIIMOTE_ADDR_MODEL = re.compile("((?:[0-9A-F]{2})(?::[0-9A-F]{2}){5})\s*Nintendo")
nunchuckzero = None

def Wiimote_cback(messages, time):
    global nunchuckzero
    state = dict(messages)
    bts = state.get(cwiid.MESG_BTN, None)
    if bts is not None:
        PLCGlobals.WiiButtons = bts
    nunchuck = state.get(cwiid.MESG_NUNCHUK, None)
    if nunchuck is not None:
        PLCGlobals.WiiNunchuckButtons = nunchuck['buttons']
        X,Y = nunchuck['stick']
        PLCGlobals.WiiNunchuckAccX = nunchuck['acc'][cwiid.X]
        PLCGlobals.WiiNunchuckAccY = nunchuck['acc'][cwiid.Y]
        PLCGlobals.WiiNunchuckAccZ = nunchuck['acc'][cwiid.Z]
        if nunchuckzero is None:
            nunchuckzero = X,Y
        (PLCGlobals.WiiNunchuckStickX,
         PLCGlobals.WiiNunchuckStickY) = X-nunchuckzero[0],Y-nunchuckzero[1]

def Connect_Wiimote(connected_callback):
    global wiimote,nunchuckzero
    mac_addr = ''
    try:
        mac_addr = file("wiimac.txt","rt").read()
    except:
        PLCObject.LogMessage("Wiimote MAC unknown, scanning bluetooth")
        output = commands.getoutput("hcitool scan")
        result = WIIMOTE_ADDR_MODEL.search(output)
        if result is not None:
            mac_addr = result.group(1)
            PLCObject.LogMessage("Found Wiimote with MAC %s"%mac_addr)
            file("wiimac.txt","wt").write(mac_addr)
 
    # Connect to wiimote
    if not mac_addr:
        PLCObject.LogMessage("Connection to unknown Wiimote...")
        wiimote = cwiid.Wiimote()
    else:
        PLCObject.LogMessage("Connection to Wiimote %s..."%mac_addr)
        wiimote = cwiid.Wiimote(mac_addr)

    if wiimote is not None:
        nunchuckzero = None
        wiimote.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_EXT
        # use the callback interface
        wiimote.mesg_callback = Wiimote_cback
        wiimote.enable(cwiid.FLAG_MESG_IFC)
        connected_callback(mac_addr)
        PLCObject.LogMessage("Wiimote %s Connected"%mac_addr)
    else:
        PLCObject.LogMessage("Wiimote %s not found"%mac_addr)
        os.remove("wiimac.txt")
        connected_callback(None)

def Disconnect_Wiimote():
  global wiimote
  if wiimote is not None:
    wiimote.disable(cwiid.FLAG_MESG_IFC)
    time.sleep(0.1)
    wiimote.close()
    wiimote = None
    PLCObject.LogMessage("Wiimote disconnected")

]]>
  </globals>
  <init>
<![CDATA[
]]>
  </init>
  <cleanup>
<![CDATA[
Disconnect_Wiimote()

]]>
  </cleanup>
  <start>
<![CDATA[
]]>
  </start>
  <stop>
<![CDATA[
]]>
  </stop>
</PyFile>