# OPBT_write_F1KM_example.py
import isystem.connect as ic
import time
device_family = 'F1KM' # Possible families: 'Ignore', 'F1x', 'E1x', 'E1M', 'P1x', 'D1x', 'F1H', 'F1KM', 'F1KH'
OPBTs_conf = 'FLASHMaskOptions[0]: 0xBA27FDCF, \
FLASHMaskOptions[1]: 0xFFFFFDFF, \
FLASHMaskOptions[2]: 0xFFFFFFFF, \
FLASHMaskOptions[3]: 0xFFFFFFFF, \
FLASHMaskOptions[4]: 0xFFFFFFFF, \
FLASHMaskOptions[5]: 0xFFFFFFFF, \
FLASHMaskOptions[6]: 0xFFFFFFFF, \
FLASHMaskOptions[7]: 0xFFFFFFFF, \
FLASHMaskOptions[8]: 0xFFFFFFFF, \
FLASHMaskOptions[9]: 0xFFFFFFFF, \
FLASHMaskOptions[10]:0xFFFFFFFF, \
FLASHMaskOptions[11]:0xFFFFFFFF, \
FLASHMaskOptions[12]:0xFFFFFFFF, \
FLASHMaskOptions[13]:0xFFFFFFFF, \
FLASHMaskOptions[14]:0xFFFFFFFF, \
FLASHMaskOptions[15]:0xFFFFFFFF'
class OPBT_cfg:
__default_service_call_options = 'GetSecurityMaskOptions:true'
def __init__(self,df):
self.__device_family = df
# Private Methods
def __winIDEA_supports_new_startup(self, ideCtrl):
if -1 == ideCtrl.getWinIDEAVersion().compare(ic.CWinIDEAVersion('9.21.51.0')):
return False
return True
def __get_service_call_URL(self, ideCtrl):
if -1 == ideCtrl.getWinIDEAVersion().compare(ic.CWinIDEAVersion('9.21.7.0')):
return '/IOPEN/HW.Debug.V850Fx4_FLASH' # Old URL
return '/IOPEN/HW.SoC.RH850_FP5'
def __get_service_call_options(self, ideCtrl):
service_call_Options = self.__default_service_call_options
if -1 != ideCtrl.getWinIDEAVersion().compare(ic.CWinIDEAVersion('9.21.74.0')):
service_call_Options += ', Family:' + self.__device_family
return service_call_Options
def __prepare_winIDEA(self, session, dbg, ideCtrl):
if self.__winIDEA_supports_new_startup(ideCtrl):
print('>preparing session...')
session.end()
session.begin_prepare()
else:
print('>performing debug reset...')
dbg.reset()
def __parse_output_string(self, out):
tokens = out.split(',') # convert to a readable form
parsedTokens = {}
for item in tokens:
key, value = item.split(':')
key = key.replace('[', '').replace(']', '')
value = value.strip()
key = key.strip()
if value.isdigit():
intValue = int(value)
parsedTokens[key] = format(intValue, '08X')
else:
parsedTokens[key] = value
return parsedTokens
def __check_service_call_result(self, parsedTokens):
if (parsedTokens['Result'] == 'true' or parsedTokens['Result'] == 'TRUE'):
print('>OPBTs read successfully!')
return True
else:
print('** Reading OPBTs failed! **')
if 'StrResult' in parsedTokens:
print(' Result string: ', parsedTokens['StrResult'])
return False
def __finish_session(self, session, dbg, ideCtrl) -> None:
ideCtrl.iOpenDisconnect()
if self.__winIDEA_supports_new_startup(ideCtrl):
print('>disconnecting from debug session')
session.end()
else:
print('>performing reset again to end up in debug session')
dbg.reset()
# Public methods
def write_OPBT(self,OPBTs_conf_enable):
cmgr = ic.ConnectionMgr()
cmgr.connectMRU('')
dbg = ic.CDebugFacade(cmgr)
ideCtrl = ic.CIDEController(cmgr)
session = ic.CSessionCtrl(cmgr)
self.__prepare_winIDEA(session, dbg, ideCtrl)
service_call_URL = self.__get_service_call_URL(ideCtrl)
service_call_Options = self.__get_service_call_options(ideCtrl)
print ('Setting OPBT[0-15]...')
out = ideCtrl.serviceCall(service_call_URL,
'WriteMaskOptions:TRUE, ' + OPBTs_conf_enable)
staus = None
if (out.lower().find('result: true') != -1):
print ('OPBT[0-15] programmed successfully!')
status = True
else:
print ('OPBT[0-15] programming failed!')
status = False
time.sleep(1)
self.__finish_session(session, dbg, ideCtrl)
return status
def main():
print('##################################################')
print('Starting script for writing OPBTs')
print("")
print ("___ This script is for RH850/F1KM ___")
print("")
O = OPBT_cfg(device_family)
O.write_OPBT(OPBTs_conf)
print('Script finished')
print('##################################################')
input('Press Enter to exit...')
if __name__ == '__main__':
try:
main()
except RuntimeError as ex:
print('ERROR:', ex)
|