00001 #!/usr/local/bin/python 00002 # 00003 # Copyright 2004 00004 # by 00005 # The Board of Trustees of the 00006 # Leland Stanford Junior University. 00007 # All rights reserved. 00008 # 00009 00010 00011 __facility__ = "Online" 00012 __abstract__ = "GLAST PDU functional block" 00013 __author__ = "Selim Tuvi <stuvi@slac.stanford.edu> SLAC - GLAST LAT I&T/Online" 00014 __date__ = ("$Date: 2006/07/20 22:21:30 $").split(' ')[1] 00015 __version__ = "$Revision: 2.14 $" 00016 __release__ = "$Name: R04-12-00 $" 00017 __credits__ = "SLAC" 00018 00019 import LATTE.copyright_SLAC 00020 00021 import time 00022 import struct 00023 import gDb 00024 import gAttr 00025 import LATTE.client.gRegister as gRegister 00026 import LATTE.client.gException as gException 00027 00028 class GPDU(gDb.Gdb): 00029 """\brief PDU Controller. 00030 00031 Valid Registers: 00032 - \c configuration 00033 - \c address 00034 - \c cr_statistics 00035 - \c crates 00036 - \c tems 00037 - \c acd 00038 - \c monitor 00039 00040 Dataless commands: 00041 - \c cmd_nop 00042 - \c cmd_reset 00043 00044 """ 00045 __attrs = [ 00046 # Registers 00047 gAttr.GattrReg('configuration', 0, 4), 00048 gAttr.GattrReg('address', 1, 4), 00049 gAttr.GattrReg('cr_statistics', 2, 4), 00050 gAttr.GattrReg('crates', 3, 4), 00051 gAttr.GattrReg('tems', 4, 4), 00052 gAttr.GattrReg('acd', 5, 4), 00053 gAttr.GattrReg('monitor', 6, 4), 00054 # Dataless commands 00055 gAttr.GattrDlc('cmd_nop', 0, 0), 00056 gAttr.GattrDlc('cmd_reset', 1, 0), 00057 ] 00058 00059 __MONITOR = 6 00060 00061 def __init__(self, client, parent, id): 00062 """\brief Initialize valid registers as Gattrs. 00063 00064 Assign default values to members 00065 """ 00066 if id < gDb.Lem.NPDUS: 00067 addr = gDb.Lem.ADDR_PDU_BASE+id 00068 else: 00069 raise KeyError("*** gPDU: GPDU id %d is invalid" %(id)) 00070 self.PEQ = None 00071 flags = {'CmdrspFabric': 'On'} 00072 gDb.Gdb.__init__(self, client, parent, id, self.__attrs, addr, flags) 00073 00074 def read(self, reg): 00075 return self.cmdrsp('PDU_read', self.addr(), reg, '!I') 00076 00077 def load(self, reg, value): 00078 return self.cmdrsp('PDU_load', self.addr(), reg, value) 00079 00080 def send(self, cmd): 00081 return self.cmdrsp('PDU_cmd', self.addr(), cmd) 00082 00083 def downPEQ(self): 00084 """\brief Navigate to the GPEQ (PDU environmental monitors) 00085 00086 \return A GPEQ object instance 00087 """ 00088 return self.PEQ 00089 00090 def existsPEQ(self): 00091 """\brief Check if the GPEQ instance exists in the schema. 00092 00093 \return 1 if it exists, 0 if it doesn't. 00094 """ 00095 return self.PEQ != None 00096 00097 ## private: 00098 def __removePEQ(self): 00099 self.PEQ = None 00100 00101 def __addPEQ(self): 00102 self.PEQ = GPEQ(self.client(), self) 00103 return self.PEQ 00104 00105 00106 class GPEQ(gDb.Gdb): 00107 """\brief PDU Environmental Monitors. 00108 00109 Has GPEQ specific registers and dataless commands. 00110 00111 Valid Registers: 00112 - \c adcs_00_07 00113 - \c adcs_08_15 00114 - \c adcs_16_19 00115 """ 00116 __attrs = [ 00117 # Registers 00118 gAttr.GattrReg('adcs_00_07', 0, 12, gAttr.REG_READ_ONLY), 00119 gAttr.GattrReg('adcs_08_15', 1, 12, gAttr.REG_READ_ONLY), 00120 gAttr.GattrReg('adcs_16_19', 2, 12, gAttr.REG_READ_ONLY), 00121 00122 # group 0 00123 gAttr.GattrReg('spare_v_0', 10, 2, gAttr.REG_READ_ONLY), 00124 gAttr.GattrReg('tem_v_12', 11, 2, gAttr.REG_READ_ONLY), 00125 gAttr.GattrReg('tem_v_02', 12, 2, gAttr.REG_READ_ONLY), 00126 gAttr.GattrReg('tem_t_08', 13, 2, gAttr.REG_READ_ONLY), 00127 gAttr.GattrReg('tem_t_12', 14, 2, gAttr.REG_READ_ONLY), 00128 gAttr.GattrReg('epu_t_2', 15, 2, gAttr.REG_READ_ONLY), 00129 gAttr.GattrReg('epu_t_0', 16, 2, gAttr.REG_READ_ONLY), 00130 gAttr.GattrReg('tem_t_06', 17, 2, gAttr.REG_READ_ONLY), 00131 gAttr.GattrReg('py_vchp_xlhp_intf_t_4', 18, 2, gAttr.REG_READ_ONLY), 00132 gAttr.GattrReg('spare_rtd_0', 19, 2, gAttr.REG_READ_ONLY), 00133 gAttr.GattrReg('spare_rtd_1', 20, 2, gAttr.REG_READ_ONLY), 00134 gAttr.GattrReg('spare_rtd_2', 21, 2, gAttr.REG_READ_ONLY), 00135 gAttr.GattrReg('spare_rtd_3', 22, 2, gAttr.REG_READ_ONLY), 00136 gAttr.GattrReg('spare_t_1', 23, 2, gAttr.REG_READ_ONLY), 00137 gAttr.GattrReg('py_grid_rad_intf_t_0', 24, 2, gAttr.REG_READ_ONLY), 00138 gAttr.GattrReg('my_grid_rad_intf_t_0', 25, 2, gAttr.REG_READ_ONLY), 00139 gAttr.GattrReg('grid_t_06', 26, 2, gAttr.REG_READ_ONLY), 00140 gAttr.GattrReg('grid_t_09', 27, 2, gAttr.REG_READ_ONLY), 00141 gAttr.GattrReg('grid_t_00', 28, 2, gAttr.REG_READ_ONLY), 00142 gAttr.GattrReg('grid_t_03', 29, 2, gAttr.REG_READ_ONLY), 00143 00144 # group 1 00145 gAttr.GattrReg('spare_v_1', 30, 2, gAttr.REG_READ_ONLY), 00146 gAttr.GattrReg('tem_v_13', 31, 2, gAttr.REG_READ_ONLY), 00147 gAttr.GattrReg('tem_v_03', 32, 2, gAttr.REG_READ_ONLY), 00148 gAttr.GattrReg('tem_t_09', 33, 2, gAttr.REG_READ_ONLY), 00149 gAttr.GattrReg('tem_t_13', 34, 2, gAttr.REG_READ_ONLY), 00150 gAttr.GattrReg('spare_t_0', 35, 2, gAttr.REG_READ_ONLY), 00151 gAttr.GattrReg('epu_t_1', 36, 2, gAttr.REG_READ_ONLY), 00152 gAttr.GattrReg('tem_t_07', 37, 2, gAttr.REG_READ_ONLY), 00153 gAttr.GattrReg('py_vchp_xlhp_intf_t_5', 38, 2, gAttr.REG_READ_ONLY), 00154 gAttr.GattrReg('py_rad_antifrz_htr_t_00', 39, 2, gAttr.REG_READ_ONLY), 00155 gAttr.GattrReg('acd_shell_t_0', 40, 2, gAttr.REG_READ_ONLY), 00156 gAttr.GattrReg('my_rad_antifrz_htr_t_00', 41, 2, gAttr.REG_READ_ONLY), 00157 gAttr.GattrReg('acd_shell_t_1', 42, 2, gAttr.REG_READ_ONLY), 00158 gAttr.GattrReg('spare_t_2', 43, 2, gAttr.REG_READ_ONLY), 00159 gAttr.GattrReg('py_grid_rad_intf_t_1', 44, 2, gAttr.REG_READ_ONLY), 00160 gAttr.GattrReg('my_grid_rad_intf_t_1', 45, 2, gAttr.REG_READ_ONLY), 00161 gAttr.GattrReg('grid_t_07', 46, 2, gAttr.REG_READ_ONLY), 00162 gAttr.GattrReg('grid_t_10', 47, 2, gAttr.REG_READ_ONLY), 00163 gAttr.GattrReg('grid_t_01', 48, 2, gAttr.REG_READ_ONLY), 00164 gAttr.GattrReg('grid_t_04', 49, 2, gAttr.REG_READ_ONLY), 00165 00166 # group 2 00167 gAttr.GattrReg('spare_v_2', 50, 2, gAttr.REG_READ_ONLY), 00168 gAttr.GattrReg('tem_v_14', 51, 2, gAttr.REG_READ_ONLY), 00169 gAttr.GattrReg('tem_v_04', 52, 2, gAttr.REG_READ_ONLY), 00170 gAttr.GattrReg('tem_t_10', 53, 2, gAttr.REG_READ_ONLY), 00171 gAttr.GattrReg('tem_t_14', 54, 2, gAttr.REG_READ_ONLY), 00172 gAttr.GattrReg('tem_t_00', 55, 2, gAttr.REG_READ_ONLY), 00173 gAttr.GattrReg('tem_t_03', 56, 2, gAttr.REG_READ_ONLY), 00174 gAttr.GattrReg('tem_ps_t_06', 57, 2, gAttr.REG_READ_ONLY), 00175 gAttr.GattrReg('my_vchp_xlhp_intf_t_0', 58, 2, gAttr.REG_READ_ONLY), 00176 gAttr.GattrReg('py_rad_t_0', 59, 2, gAttr.REG_READ_ONLY), 00177 gAttr.GattrReg('py_vchp_rsvr_htr_t_0', 60, 2, gAttr.REG_READ_ONLY), 00178 gAttr.GattrReg('my_rad_t_0', 61, 2, gAttr.REG_READ_ONLY), 00179 gAttr.GattrReg('my_vchp_rsvr_htr_t_0', 62, 2, gAttr.REG_READ_ONLY), 00180 gAttr.GattrReg('acd_pmt_rail_t_0', 63, 2, gAttr.REG_READ_ONLY), 00181 gAttr.GattrReg('py_vchp_dshp_intf_t_0', 64, 2, gAttr.REG_READ_ONLY), 00182 gAttr.GattrReg('my_vchp_dshp_intf_t_0', 65, 2, gAttr.REG_READ_ONLY), 00183 gAttr.GattrReg('grid_t_08', 66, 2, gAttr.REG_READ_ONLY), 00184 gAttr.GattrReg('grid_t_11', 67, 2, gAttr.REG_READ_ONLY), 00185 gAttr.GattrReg('grid_t_02', 68, 2, gAttr.REG_READ_ONLY), 00186 gAttr.GattrReg('grid_t_05', 69, 2, gAttr.REG_READ_ONLY), 00187 00188 # group 3 00189 gAttr.GattrReg('spare_v_3', 70, 2, gAttr.REG_READ_ONLY), 00190 gAttr.GattrReg('tem_v_15', 71, 2, gAttr.REG_READ_ONLY), 00191 gAttr.GattrReg('tem_v_05', 72, 2, gAttr.REG_READ_ONLY), 00192 gAttr.GattrReg('tem_t_11', 73, 2, gAttr.REG_READ_ONLY), 00193 gAttr.GattrReg('tem_t_15', 74, 2, gAttr.REG_READ_ONLY), 00194 gAttr.GattrReg('tem_t_01', 75, 2, gAttr.REG_READ_ONLY), 00195 gAttr.GattrReg('tem_t_04', 76, 2, gAttr.REG_READ_ONLY), 00196 gAttr.GattrReg('tem_ps_t_07', 77, 2, gAttr.REG_READ_ONLY), 00197 gAttr.GattrReg('my_vchp_xlhp_intf_t_1', 78, 2, gAttr.REG_READ_ONLY), 00198 gAttr.GattrReg('py_rad_t_1', 79, 2, gAttr.REG_READ_ONLY), 00199 gAttr.GattrReg('py_vchp_rsvr_htr_t_1', 80, 2, gAttr.REG_READ_ONLY), 00200 gAttr.GattrReg('my_rad_t_1', 81, 2, gAttr.REG_READ_ONLY), 00201 gAttr.GattrReg('my_vchp_rsvr_htr_t_1', 82, 2, gAttr.REG_READ_ONLY), 00202 gAttr.GattrReg('acd_pmt_rail_t_1', 83, 2, gAttr.REG_READ_ONLY), 00203 gAttr.GattrReg('py_vchp_dshp_intf_t_1', 84, 2, gAttr.REG_READ_ONLY), 00204 gAttr.GattrReg('my_vchp_dshp_intf_t_1', 85, 2, gAttr.REG_READ_ONLY), 00205 gAttr.GattrReg('cal_baseplate_t_08', 86, 2, gAttr.REG_READ_ONLY), 00206 gAttr.GattrReg('cal_baseplate_t_12', 87, 2, gAttr.REG_READ_ONLY), 00207 gAttr.GattrReg('cal_baseplate_t_00', 88, 2, gAttr.REG_READ_ONLY), 00208 gAttr.GattrReg('cal_baseplate_t_04', 89, 2, gAttr.REG_READ_ONLY), 00209 00210 # group 4 00211 gAttr.GattrReg('tem_v_08', 90, 2, gAttr.REG_READ_ONLY), 00212 gAttr.GattrReg('epu_v_2', 91, 2, gAttr.REG_READ_ONLY), 00213 gAttr.GattrReg('tem_v_06', 92, 2, gAttr.REG_READ_ONLY), 00214 gAttr.GattrReg('tem_ps_t_08', 93, 2, gAttr.REG_READ_ONLY), 00215 gAttr.GattrReg('tem_ps_t_12', 94, 2, gAttr.REG_READ_ONLY), 00216 gAttr.GattrReg('tem_t_02', 95, 2, gAttr.REG_READ_ONLY), 00217 gAttr.GattrReg('tem_t_05', 96, 2, gAttr.REG_READ_ONLY), 00218 gAttr.GattrReg('py_vchp_xlhp_intf_t_0', 97, 2, gAttr.REG_READ_ONLY), 00219 gAttr.GattrReg('my_vchp_xlhp_intf_t_2', 98, 2, gAttr.REG_READ_ONLY), 00220 gAttr.GattrReg('py_rad_t_2', 99, 2, gAttr.REG_READ_ONLY), 00221 gAttr.GattrReg('py_vchp_rsvr_htr_t_2', 100, 2, gAttr.REG_READ_ONLY), 00222 gAttr.GattrReg('my_rad_t_2', 101, 2, gAttr.REG_READ_ONLY), 00223 gAttr.GattrReg('my_vchp_rsvr_htr_t_2', 102, 2, gAttr.REG_READ_ONLY), 00224 gAttr.GattrReg('acd_pmt_rail_t_2', 103, 2, gAttr.REG_READ_ONLY), 00225 gAttr.GattrReg('py_vchp_dshp_intf_t_2', 104, 2, gAttr.REG_READ_ONLY), 00226 gAttr.GattrReg('my_vchp_dshp_intf_t_2', 105, 2, gAttr.REG_READ_ONLY), 00227 gAttr.GattrReg('cal_baseplate_t_09', 106, 2, gAttr.REG_READ_ONLY), 00228 gAttr.GattrReg('cal_baseplate_t_13', 107, 2, gAttr.REG_READ_ONLY), 00229 gAttr.GattrReg('cal_baseplate_t_01', 108, 2, gAttr.REG_READ_ONLY), 00230 gAttr.GattrReg('cal_baseplate_t_05', 109, 2, gAttr.REG_READ_ONLY), 00231 00232 # group 5 00233 gAttr.GattrReg('tem_v_09', 110, 2, gAttr.REG_READ_ONLY), 00234 gAttr.GattrReg('spare_v_4', 111, 2, gAttr.REG_READ_ONLY), 00235 gAttr.GattrReg('tem_v_07', 112, 2, gAttr.REG_READ_ONLY), 00236 gAttr.GattrReg('tem_ps_t_09', 113, 2, gAttr.REG_READ_ONLY), 00237 gAttr.GattrReg('tem_ps_t_13', 114, 2, gAttr.REG_READ_ONLY), 00238 gAttr.GattrReg('tem_ps_t_00', 115, 2, gAttr.REG_READ_ONLY), 00239 gAttr.GattrReg('tem_ps_t_03', 116, 2, gAttr.REG_READ_ONLY), 00240 gAttr.GattrReg('py_vchp_xlhp_intf_t_1', 117, 2, gAttr.REG_READ_ONLY), 00241 gAttr.GattrReg('my_vchp_xlhp_intf_t_3', 118, 2, gAttr.REG_READ_ONLY), 00242 gAttr.GattrReg('py_rad_t_3', 119, 2, gAttr.REG_READ_ONLY), 00243 gAttr.GattrReg('py_vchp_rsvr_htr_t_3', 120, 2, gAttr.REG_READ_ONLY), 00244 gAttr.GattrReg('my_rad_t_3', 121, 2, gAttr.REG_READ_ONLY), 00245 gAttr.GattrReg('my_vchp_rsvr_htr_t_3', 122, 2, gAttr.REG_READ_ONLY), 00246 gAttr.GattrReg('acd_pmt_rail_t_3', 123, 2, gAttr.REG_READ_ONLY), 00247 gAttr.GattrReg('py_vchp_dshp_intf_t_5', 124, 2, gAttr.REG_READ_ONLY), 00248 gAttr.GattrReg('my_vchp_dshp_intf_t_5', 125, 2, gAttr.REG_READ_ONLY), 00249 gAttr.GattrReg('cal_baseplate_t_15', 126, 2, gAttr.REG_READ_ONLY), 00250 gAttr.GattrReg('cal_baseplate_t_14', 127, 2, gAttr.REG_READ_ONLY), 00251 gAttr.GattrReg('cal_baseplate_t_07', 128, 2, gAttr.REG_READ_ONLY), 00252 gAttr.GattrReg('cal_baseplate_t_06', 129, 2, gAttr.REG_READ_ONLY), 00253 00254 # group 6 00255 gAttr.GattrReg('tem_v_10', 130, 2, gAttr.REG_READ_ONLY), 00256 gAttr.GattrReg('tem_v_00', 131, 2, gAttr.REG_READ_ONLY), 00257 gAttr.GattrReg('epu_v_0', 132, 2, gAttr.REG_READ_ONLY), 00258 gAttr.GattrReg('tem_ps_t_10', 133, 2, gAttr.REG_READ_ONLY), 00259 gAttr.GattrReg('tem_ps_t_14', 134, 2, gAttr.REG_READ_ONLY), 00260 gAttr.GattrReg('tem_ps_t_01', 135, 2, gAttr.REG_READ_ONLY), 00261 gAttr.GattrReg('tem_ps_t_04', 136, 2, gAttr.REG_READ_ONLY), 00262 gAttr.GattrReg('py_vchp_xlhp_intf_t_2', 137, 2, gAttr.REG_READ_ONLY), 00263 gAttr.GattrReg('my_vchp_xlhp_intf_t_4', 138, 2, gAttr.REG_READ_ONLY), 00264 gAttr.GattrReg('py_rad_t_4', 139, 2, gAttr.REG_READ_ONLY), 00265 gAttr.GattrReg('py_vchp_rsvr_htr_t_4', 140, 2, gAttr.REG_READ_ONLY), 00266 gAttr.GattrReg('my_rad_t_4', 141, 2, gAttr.REG_READ_ONLY), 00267 gAttr.GattrReg('my_vchp_rsvr_htr_t_4', 142, 2, gAttr.REG_READ_ONLY), 00268 gAttr.GattrReg('acd_bea_grid_intf_t_0', 143, 2, gAttr.REG_READ_ONLY), 00269 gAttr.GattrReg('py_vchp_dshp_intf_t_4', 144, 2, gAttr.REG_READ_ONLY), 00270 gAttr.GattrReg('my_vchp_dshp_intf_t_4', 145, 2, gAttr.REG_READ_ONLY), 00271 gAttr.GattrReg('cal_baseplate_t_11', 146, 2, gAttr.REG_READ_ONLY), 00272 gAttr.GattrReg('cal_baseplate_t_10', 147, 2, gAttr.REG_READ_ONLY), 00273 gAttr.GattrReg('cal_baseplate_t_03', 148, 2, gAttr.REG_READ_ONLY), 00274 gAttr.GattrReg('cal_baseplate_t_02', 149, 2, gAttr.REG_READ_ONLY), 00275 00276 # group 7 00277 gAttr.GattrReg('tem_v_11', 150, 2, gAttr.REG_READ_ONLY), 00278 gAttr.GattrReg('tem_v_01', 151, 2, gAttr.REG_READ_ONLY), 00279 gAttr.GattrReg('epu_v_1', 152, 2, gAttr.REG_READ_ONLY), 00280 gAttr.GattrReg('tem_ps_t_11', 153, 2, gAttr.REG_READ_ONLY), 00281 gAttr.GattrReg('tem_ps_t_15', 154, 2, gAttr.REG_READ_ONLY), 00282 gAttr.GattrReg('tem_ps_t_02', 155, 2, gAttr.REG_READ_ONLY), 00283 gAttr.GattrReg('tem_ps_t_05', 156, 2, gAttr.REG_READ_ONLY), 00284 gAttr.GattrReg('py_vchp_xlhp_intf_t_3', 157, 2, gAttr.REG_READ_ONLY), 00285 gAttr.GattrReg('my_vchp_xlhp_intf_t_5', 158, 2, gAttr.REG_READ_ONLY), 00286 gAttr.GattrReg('py_rad_t_5', 159, 2, gAttr.REG_READ_ONLY), 00287 gAttr.GattrReg('py_vchp_rsvr_htr_t_5', 160, 2, gAttr.REG_READ_ONLY), 00288 gAttr.GattrReg('my_rad_t_5', 161, 2, gAttr.REG_READ_ONLY), 00289 gAttr.GattrReg('my_vchp_rsvr_htr_t_5', 162, 2, gAttr.REG_READ_ONLY), 00290 gAttr.GattrReg('acd_bea_grid_intf_t_1', 163, 2, gAttr.REG_READ_ONLY), 00291 gAttr.GattrReg('py_vchp_dshp_intf_t_3', 164, 2, gAttr.REG_READ_ONLY), 00292 gAttr.GattrReg('my_vchp_dshp_intf_t_3', 165, 2, gAttr.REG_READ_ONLY), 00293 gAttr.GattrReg('spare_t_3', 166, 2, gAttr.REG_READ_ONLY), 00294 gAttr.GattrReg('spare_t_4', 167, 2, gAttr.REG_READ_ONLY), 00295 gAttr.GattrReg('spare_t_5', 168, 2, gAttr.REG_READ_ONLY), 00296 gAttr.GattrReg('spare_t_6', 169, 2, gAttr.REG_READ_ONLY), 00297 ] 00298 00299 __ADCS_BASE = 10 00300 __STALE_TMO = 1.0 00301 00302 def __init__(self, client, parent): 00303 """\brief Initialize valid registers as Gattrs. 00304 00305 Assign default values to members 00306 """ 00307 self.__adcs = 8*[(None, 0)] # [gRegister.Register, time.time()] 00308 gDb.Gdb.__init__(self, client, parent, 0, self.__attrs) 00309 00310 def read(self, reg): 00311 if reg < GPEQ.__ADCS_BASE: 00312 rsp = self.cmdrsp('PDU_ENV_read', self.up().addr(), reg, '!III') 00313 payloads = (rsp.payloads()[2], rsp.payloads()[1], rsp.payloads()[0]) 00314 return gRegister.Register(rsp.timestamp(), rsp.status(), payloads, 'III') 00315 else: 00316 return self.__fetchReg(reg) 00317 00318 def __fetchReg(self, reg): 00319 group = (reg - GPEQ.__ADCS_BASE) / 20 00320 which = (reg - GPEQ.__ADCS_BASE) % 20 00321 now = time.time() 00322 (rsp, rt) = self.__adcs[group] 00323 if ((rsp is None) or (now - rt) > GPEQ.__STALE_TMO): 00324 rsp = self.cmdrsp('PDU_ENV_acquire', self.up().addr(), group, '!III', '!III', '!III') 00325 for pos in [0, 3, 6]: 00326 grp = (rsp.payloads()[pos]>>20)&0x7 00327 notready = (rsp.payloads()[pos]>>20)&0x8 00328 tmo = (rsp.payloads()[pos]>>24)&0x7f 00329 if notready: 00330 status = gException.LATInterfaceStatus.status('OCS_BDADC') 00331 raise gException.LATInterfaceException(status) 00332 if tmo: 00333 status = gException.LATInterfaceStatus.status('OCS_TMOADC') 00334 raise gException.LATInterfaceException(status) 00335 if grp != group: 00336 status = gException.LATInterfaceStatus.status('OCS_GRPADC') 00337 raise gException.LATInterfaceException(status) 00338 self.__adcs[group] = (rsp, now) 00339 payloads = rsp.payloads() 00340 pos = (which/7)*3 00341 payload = (long(payloads[pos]) << 64) | (long(payloads[pos+1]) << 32) | payloads[pos+2] 00342 timestamp = rsp.timestamp() 00343 status = rsp.status() 00344 value = int((payload >> (12 * (which % 7))) & 0xfff) 00345 payloads = [value] 00346 return gRegister.Register(timestamp, status, payloads, 'H')