code: def get_mcu_definition(self, project_file):
          
          project_file = join(getcwd(), project_file)
          uvproj_dic = xmltodict.parse(file(project_file), dict_constructor=dict)
          # Generic Target, should get from Target class !
          mcu = MCU_TEMPLATE
  
          try:
              mcu['tool_specific'] = {
                  # legacy device
                  'uvision' : {
                      'TargetOption' : {
                          'Device' : [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['Device']],
                          'DeviceId' : [None if not uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['DeviceId'] else 
                              int(uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['DeviceId'])],
                          'Vendor' : [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['Vendor']],
                          'Cpu' : [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['Cpu']],
                          'FlashDriverDll' : [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['FlashDriverDll']],
                          'SFDFile' : [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['SFDFile']],
                          'RegisterFile': [uvproj_dic['Project']['Targets']['Target']['TargetOption']['TargetCommonOption']['RegisterFile']],
                      }
                  }
              }
          except KeyError:
              # validity check for uvision project
              logging.debug("The project_file %s seems to be not valid .uvproj file.")
              return mcu
  
          return mcu
docs: Parse project file to get mcu definition