#!python
#-*- coding:utf-8 -*-
from __future__ import print_function
import time

mgpslist = [
'BTpPS:B1P',
'BTpPS:QXD1P',
'BTpPS:VX03P',
'BTpPS:QXF1P',
'BTpPS:HX03P',
'BTpPS:QXD2P',
'BTpPS:VX04P',
'BTpPS:HX04P',
'BTpPS:QXF2P',
'BTpPS:B2P_1_2',
'BTpPS:HX041P',
'BTpPS:VX05P',
'BTpPS:QXD3P',
'BTpPS:HX05P',
'BTpPS:QXF3P',
'BTpPS:VX06P',
'BTpPS:QXD4P',
'BTpPS:HX06P',
'BTpPS:QXF4P',
'BTpPS:VX07P',
'BTpPS:QXD5P',
'BTpPS:B3P_1_3',
'BTpPS:HX07P',
'BTpPS:QXF5P',
'BTpPS:HX071P',
'BTpPS:HX072P',
'BTpPS:QXD6P',
'BTpPS:VX08P',
'BTpPS:HX08P',
'BTpPS:QXF6P',
'BTpPS:VX09P',
'BTpPS:QXD7P',
'BTpPS:HX09P',
'BTpPS:QWFP_1_4',
'BTpPS:VW10P',
'BTpPS:QWDP_1_3',
'BTpPS:HW10P',
'BTpPS:VW11P',
'BTpPS:HW11P',
'BTpPS:VW12P',
'BTpPS:HW12P',
'BTpPS:VW13P',
'BTpPS:QAD1P',
'BTpPS:BH1AP',
'BTpPS:BH1P_1_9',
'BTpPS:HA121P',
'BTpPS:QAF2P',
'BTpPS:VA14P',
'BTpPS:QAD3P',
'BTpPS:QAF4P',
'BTpPS:HA122P',
'BTpPS:VA15P',
'BTpPS:QAD5P',
'BTpPS:QAF6P',
'BTpPS:BH1P_10_17',
'BTpPS:HA123P',
'BTpPS:VA16P',
'BTpPS:QAD7P',
'BTpPS:QAF8P',
'BTpPS:HA124P',
'BTpPS:VA17P',
'BTpPS:QAD9P',
'BTpPS:BH2P_1_7',
'BTpPS:QAF10P',
'BTpPS:BH1BP',
'BTpPS:HA125P',
'BTpPS:VA18P',
'BTpPS:QAD11P',
'BTpPS:BH1CP',
'BTpPS:HA126P',
'BTpPS:QTF1P',
'BTpPS:BV1P_1_2',
'BTpPS:VT201P',
'BTpPS:QTD2P',
'BTpPS:VT19P',
'BTpPS:HT13P',
'BTpPS:QTF3P',
'BTpPS:VT20P',
'BTpPS:QTD4P',
'BTpPS:HT14P',
'BTpPS:QBF1P',
'BTpPS:VB21P',
'BTpPS:QBD2P',
'BTpPS:HB15P',
'BTpPS:QBF3P',
'BTpPS:VB22P',
'BTpPS:QBD4P',
'BTpPS:HB16P',
'BTpPS:QCF1P',
'BTpPS:BH3P_1_3',
'BTpPS:BH3P_8_11',
'BTpPS:VC23P',
'BTpPS:QCD2P',
'BTpPS:QCF3P',
'BTpPS:BH3P_4_7',
'BTpPS:HM19P',
'BTpPS:HC161P',
'BTpPS:VC24P',
'BTpPS:QCD4P',
'BTpPS:QCF5P',
'BTpPS:HC162P',
'BTpPS:VC25P',
'BTpPS:QCD6P',
'BTpPS:BV2P_1_2',
'BTpPS:VM271P',
'BTpPS:QMF1P_1_3',
'BTpPS:HM17P',
'BTpPS:VM26P',
'BTpPS:QMD2P_1_2',
'BTpPS:HM18P',
'BTpPS:VM27P',
'BTpPS:VM28P',
'BTpPS:QMD3P',
'BTpPS:HM20P',
'BTpPS:QMF4P',
'BTpPS:VM29P',
'BTpPS:QMD5P',
'BTpPS:QMF6P',
'BTpPS:BH4P_1_10',
'BTpPS:HM201P',
'BTpPS:VM30P',
'BTpPS:QMD7P',
'BTpPS:HM202P',
'BTpPS:QMF8P',
'BTpPS:BH4P_5',
'BTpPS:VM31P',
'BTpPS:QMD9P',
'BTpPS:HM203P',
'BTpPS:QMF10P',
'BTpPS:VM32P',
'BTpPS:QMD11P',
'BTpPS:HM21P',
'BTpPS:QMF12P',
'BTpPS:VM33P',
'BTpPS:QMD13P',
'BTePS:QX1E',
'BTePS:HX01E',
'BTePS:VX01E',
'BTePS:QX2E',
'BTePS:B0E',
'BTePS:HX02E',
'BTePS:QX3E',
'BTePS:BV1E_1_4',
'BTePS:VX012E',
'BTePS:QX4E',
'BTePS:HX03E',
'BTePS:QX5E',
'BTePS:B1E_1_3',
'BTePS:QXD1E',
'BTePS:VX011E',
'BTePS:VX013E',
'BTePS:HX04E',
'BTePS:QXF1E',
'BTePS:VX02E',
'BTePS:QXD2E',
'BTePS:HX05E',
'BTePS:QXF2E',
'BTePS:HX051E',
'BTePS:VX03E',
'BTePS:QXD3E',
'BTePS:HX052E',
'BTePS:HX06E',
'BTePS:QXF3E',
'BTePS:VX04E',
'BTePS:QXD4E',
'BTePS:HX07E',
'BTePS:QXF4E',
'BTePS:VX05E',
'BTePS:QXD5E',
'BTePS:B1E_4_6',
'BTePS:HX08E',
'BTePS:QXF5E',
'BTePS:HX081E',
'BTePS:HX082E',
'BTePS:QXD6E',
'BTePS:VX06E',
'BTePS:HX09E',
'BTePS:QXF6E',
'BTePS:VX07E',
'BTePS:QXD7E',
'BTePS:HX10E',
'BTePS:QWFE_1_3',
'BTePS:VW08E',
'BTePS:QWDE_1_3',
'BTePS:HW11E',
'BTePS:VW09E',
'BTePS:HW12E',
'BTePS:VW10E',
'BTePS:HW13E',
'BTePS:QAF1E',
'BTePS:BH1AE',
'BTePS:HA131E',
'BTePS:VA11E',
'BTePS:BH1E_1_5',
'BTePS:QAD2E',
'BTePS:QAF3E',
'BTePS:VA12E',
'BTePS:QAD4E',
'BTePS:BH1E_6_10',
'BTePS:HA132E',
'BTePS:HA133E',
'BTePS:QAF5E',
'BTePS:VA13E',
'BTePS:QAD6E',
'BTePS:BH1E_11_15',
'BTePS:HA134E',
'BTePS:QAF7E',
'BTePS:VA14E',
'BTePS:QAD8E',
'BTePS:HA135E',
'BTePS:QAF9E',
'BTePS:BH1E_16_19',
'BTePS:VA15E',
'BTePS:QAD10E',
'BTePS:HA136E',
'BTePS:QTF1E',
'BTePS:VT16E',
'BTePS:QTD2E',
'BTePS:QTF3E',
'BTePS:HT14E',
'BTePS:VT17E',
'BTePS:QTD4E',
'BTePS:BH2E_1_5',
'BTePS:HT141E',
'BTePS:QBF1E',
'BTePS:VB18E',
'BTePS:QBD2E',
'BTePS:BH2E_6_9',
'BTePS:HB142E',
'BTePS:QBF3E',
'BTePS:VB19E',
'BTePS:QBD4E',
'BTePS:BH3E_1',
'BTePS:HC143E',
'BTePS:BH3E_2_5',
'BTePS:HC144E',
'BTePS:QCF1E',
'BTePS:VC20E',
'BTePS:QCD2E',
'BTePS:BH3E_6_10',
'BTePS:HC145E',
'BTePS:QCF3E',
'BTePS:VC21E',
'BTePS:QCD4E',
'BTePS:HC146E',
'BTePS:QCF5E',
'BTePS:BV2E_1_4',
'BTePS:VM211E',
'BTePS:VM22E',
'BTePS:QMD1E_1_3',
'BTePS:HM15E',
'BTePS:QMF2E_1_2',
'BTePS:VM23E',
'BTePS:HM16E',
'BTePS:VM24E',
'BTePS:HM17E',
'BTePS:QMF3E',
'BTePS:VM241E',
'BTePS:BV2E_4',
'BTePS:VM242E',
'BTePS:VM25E',
'BTePS:QMD4E',
'BTePS:QMF5E',
'BTePS:BH4E_1_9',
'BTePS:HM171E',
'BTePS:VM26E',
'BTePS:QMD6E',
'BTePS:QMF7E',
'BTePS:HM172E',
'BTePS:VM27E',
'BTePS:QMD8E',
'BTePS:HM173E',
'BTePS:QMF9E',
'BTePS:BH4E_10_11',
'BTePS:VM28E',
'BTePS:QMD10E',
'BTaPS:BHR1E_1_4',
'BTaPS:BVRE_1_4',
'BTaPS:BHR2E_1_14',
'BTaPS:BHR3E',
'BTaPS:QRD1_1_2',
'BTaPS:QRF2',
'BTaPS:QRF3',
'BTaPS:QRD4_1_2',
'BTaPS:QRF5',
'BTaPS:QRF6',
'BTaPS:QRO1',
'BTaPS:QRO2',
'BTaPS:QROF3',
'BTaPS:QROD3',
'BTaPS:HR001E',
'BTaPS:HR01E',
'BTaPS:HR011E',
'BTaPS:HR02E',
'BTaPS:HR021E',
'BTaPS:HR022E',
'BTaPS:HR023E',
'BTaPS:HR024E',
'BTaPS:HR025E',
'BTaPS:HR026E',
'BTaPS:VR01E',
'BTaPS:VR02E',
'BTaPS:VR021E',
'BTaPS:VR022E',
'BTaPS:VR03E',
'BTaPS:VR04E',
'BTaPS:VR05E',
'BTaPS:VR06E',
'BTaPS:BLPS1',
'BTaPS:BLPS2',
'BTaPS:BLPS3',
'BTaPS:BLPS4'
]

import ca,sys,_thread

class newchannel:
    def __init__(self, name) :
        self.ch=ca.channel(name,self.conn_cb, noflush=True)
        self.lock=_thread.allocate_lock()
        self.lock.acquire()
        #thread.start_new_thread(self.wait,())

    def wait(self):
        while 1:
            self.lock.acquire()
            self.ch.update_info()
            print(".", end=' ')

    def conn_cb(self,):
        #self.ch.update_info()
        if self.lock.locked:
            self.lock.release()
        #print ".",
        pass

def test():

    chlist = []
    proplist=('ALARM','SHREG','STATE','REQSTAT','IRB','IMON')
    cnt=0

    print('Step 1')
    for chname in ("%s:%s"%(fullname, prop) for prop in proplist 
                   for fullname in mgpslist ):
        cnt +=1
        ch = newchannel(chname)
        chlist.append(ch)
    ca.flush()
    print("waiting for connection ")
    chlist[-1].ch.wait_conn()
    for ch in chlist:
        _thread.start_new_thread(ch.wait,())
        print(ch.ch.name, ch.ch.get_info())

    print('Step 2')
    ca.pend_event(3)

    print('wait key input')
    input()
    print('End')

def genRec(chname):
    print("record(ai, \"%s\"){}"%chname)

def genDB():
    chlist = []

    for fullname in mgpslist :
        for prop in ('ALARM','SHREG','STATE','REQSTAT','IRB','IMON') :
            chname = fullname+':'+prop
            ch = genRec(chname)
            #chlist.append(ch)

if __name__ == "__main__":
    test()
