def __init__(self):
     self.js = SDLJoystick()
     assert self.js.get_count()!=0, 'NOJOYSTICK'
     self.js.init_joy(0)
     self._btninfo = [{VAL:0, STATE:NORMAL, TIM:0.0} for _ in range(12)]
     self._toggle_info = {'sd':0,
                         }
     self.ctrls = {'roll':1500, 'pitch':1500, 'yaw':1500, 'throttle':1500,
                   'ctrltype':0, 'sd':0}
class JoyCtrl():
    def __init__(self):
        self.js = SDLJoystick()
        assert self.js.get_count()!=0, 'NOJOYSTICK'
        self.js.init_joy(0)
        self._btninfo = [{VAL:0, STATE:NORMAL, TIM:0.0} for _ in range(12)]
        self._toggle_info = {'sd':0,
                            }
        self.ctrls = {'roll':1500, 'pitch':1500, 'yaw':1500, 'throttle':1500,
                      'ctrltype':0, 'sd':0}
    
    def release(self):
        self.js.quit()
        
    def get_ctrl(self):
        self.refresh_event()
        self.ctrls['roll'] = +(self.js.get_axis(0)+256) / 200 + 1500
        self.ctrls['pitch'] = -(self.js.get_axis(1)+256) / 200 + 1500
        self.ctrls['yaw'] = -(self.js.get_axis(3)+256) / 200 + 1500
        self.ctrls['throttle'] = self.js.get_hat(0)[1] * 250 + 1500
        
        rst = self.get_btn()
        self.ctrls['ctrltype'] = rst[0]
        self.ctrls['sd'] = int(not self.ctrls['sd']) if self._if_rising('sd', rst[2]) else self.ctrls['sd']
        
        
        return self.ctrls
    
    def _if_rising(self, key, val):
        if self._toggle_info[key] != val:
            self._toggle_info[key] = val
            if val == 1:
                return True
            else:
                return False
        else:
            return False
    
    def refresh_event(self):
        self.js.refresh_event()
    
    def get_button(self):
        ''' 获得按钮状态,无消抖功能
        '''
        #self.refresh_event()
        rtn = [9]*12
        for i in range(12):
            val = self.js.get_button(i)
            rtn[i] = val
        return rtn
    
    def get_btn(self):
        ''' 获得按钮状态,有消抖功能
        '''
        self.refresh_event()
        rtn = [9]*12
        for i in range(12):
            val = self.js.get_button(i)
            if self._btninfo[i][STATE] == NORMAL:
                if val != self._btninfo[i][VAL]:
                    self._btninfo[i][STATE] = CHANGING
                    self._btninfo[i][TIM] = time.clock() + DELAY
            elif self._btninfo[i][STATE] == CHANGING:
                if val == self._btninfo[i][VAL]:
                    self._btninfo[i][STATE] = NORMAL
                if val != self._btninfo[i][VAL] and time.clock() >= self._btninfo[i][TIM]:
                    self._btninfo[i][STATE] = NORMAL
                    self._btninfo[i][VAL] = val
            rtn[i] = self._btninfo[i][VAL] 
        return rtn