コード例 #1
0
def subseq__traffic(seq, pf, container, udd):
    steps_pf = SEQ_STEP_MAP[pf].step_module
    traf_seq = seq.add_sequence('TRAFFIC TESTS')
    traf_seq.add_step(steps_pf.goto_mode, name='MODE STARDUST PRETRAF', kwargs={'mode': 'STARDUST'})
    traf_seq.add_step(steps_pf.diags_sysinit, name='DIAG SYSINIT PRETRAF')
    dynamic_sequence_builder.build_traffic_cases_subseq(traffic_seq=traf_seq, container=container, udd=udd, step_module=steps_pf, category=None, enabled=True)
    return seq
コード例 #2
0
ファイル: assy.py プロジェクト: setlu/entsw_dev
def standard_switch_sequence_definition():
    try:
        container = aplib.get_my_container_key()
    except Exception:
        raise Exception("Cannot use this Apollo version!")
    udd = aplib.get_cached_data('{0}_uut_descriptor'.format(container))
    pf = udd.get('product_family').upper()
    pc = udd.get('product_codename').upper()
    psd = udd.get('uut_config', {}).get('prod_seq_def', {})
    area = __area__  # udd.get('test_area', None)
    seq = aplib.get_sequence_definition('{0} {1} {2} {3} SEQ'.format(
        __product_line__, pf, pc, area),
                                        jump_on_error='FINAL')

    # ------------------------------------------------------------------------------------------------------------------
    # Init
    init_seq = seq.add_sequence('INITIALIZATION')
    init_seq.add_step(steps_nyquist.init, name='INIT', kwargs={})
    init_seq.add_step(steps_nyquist.ud_retrieve,
                      name="RETRIEVE UUT DESCRIPTOR")
    init_seq.add_step(steps_nyquist.ud_print_uut_descriptor,
                      name='PRINT DESCRIPTOR')
    init_seq.add_step(steps_nyquist.ud_print_uut_config,
                      name='PRINT UUT CONFIG')

    # Area Check
    seq.add_step(steps_nyquist.process_area_check,
                 name='AREACHECK',
                 kwargs={},
                 enabled=True)

    # Power ON & Boot
    # Unit should already be powered up from pre-sequence auto-discovery.
    # seq.add_step(steps_nyquist.power_cycle_on, name='POWER ON BOOT', group_level=5, enabled=False)

    # Basic Mode
    seq.add_step(steps_nyquist.goto_mode,
                 name='MODE BTLDR',
                 kwargs={'mode': 'BTLDR'})

    # ------------------------------------------------------------------------------------------------------------------
    # PCAMAP
    pcamap_seq = seq.add_sequence('PCAMAP PROGRAMMING', enabled=True)
    # Verify CMPD
    # TODO: waiting Trac #5852
    pcamap_seq.add_step(steps_nyquist.process_verify_cmpd,
                        name='VERIFY CMPD SPROM',
                        enabled=False,
                        kwargs={
                            'force': False,
                            'cmpd_description': 'SPROM',
                            'uut_type_key': 'MODEL_NUM',
                            'part_number_key': 'TAN_NUM',
                            'part_revision_key': 'TAN_REVISION_NUMBER',
                            'eco_type': 'VERIFICATION'
                        })

    # PCAMAP Program
    pcamap_seq.add_step(steps_nyquist.pcamap_write_uut,
                        name='PCAMAP PROGRAM',
                        kwargs={
                            'device_instance': 0,
                            'memory_type': 'vb'
                        })

    # PIDVID Verify
    seq.add_step(steps_nyquist.process_verify_pidvid,
                 name='PIDVID VERIFY',
                 jump_on_error='CLEAN UP')

    # ------------------------------------------------------------------------------------------------------------------
    # Diag Testing
    diag_seq = seq.add_sequence('DIAGNOSTIC TESTS', enabled=True)
    diag_seq.add_step(steps_nyquist.goto_mode,
                      name='MODE STARDUST',
                      kwargs={'mode': 'STARDUST'})
    diag_seq.add_step(steps_nyquist.diags_sysinit, name='SYSINIT')
    diag_seq.add_step(steps_nyquist.diags_psu_check,
                      name='PSU CHECK',
                      kwargs={})

    # Diag Testlist build-out
    dynamic_sequence_builder.build_diag_testlist_subseq(
        diag_seq=diag_seq,
        container=container,
        udd=udd,
        step_module=steps_nyquist,
        category=None,
        enabled=True)

    # ------------------------------------------------------------------------------------------------------------------
    # Traffic Testing
    traf_seq = seq.add_sequence('TRAFFIC TESTS', enabled=True)
    traf_seq.add_step(steps_nyquist.goto_mode,
                      name='MODE STARDUST PRETRAF',
                      kwargs={'mode': 'STARDUST'})
    traf_seq.add_step(steps_nyquist.diags_sysinit, name='DIAG SYSINIT PRETRAF')
    dynamic_sequence_builder.build_traffic_cases_subseq(
        traffic_seq=traf_seq,
        container=container,
        udd=udd,
        step_module=steps_nyquist,
        category=None,
        enabled=True)

    # ------------------------------------------------------------------------------------------------------------------
    # Power OFF
    seq.add_step(steps_nyquist.power_off, name='POWER OFF', group_level=1000)

    # Clean up
    final_seq = seq.add_sequence('FINAL', finalization=True)
    final_seq.add_step(steps_nyquist.power_off,
                       name='POWER OFF',
                       kwargs={},
                       group_level=1000)
    final_seq.add_step(steps_nyquist.clean_up, name='CLEAN UP')
    final_seq.add_step(steps_nyquist.final, name='END')

    return seq
コード例 #3
0
def standard_switch_common(profile_type):
    """ 2C/4C Run Sequence that includes:
        1) setup
        2) area check
        3) chamber startup
        4) corner buildup
        5) chamber wrapup
        5) power off
        6) cleanup

    :return: seq
    """
    try:
        container = aplib.get_my_container_key()
    except Exception:
        raise Exception("Cannot use this Apollo version!")
    udd = aplib.get_cached_data('{0}_uut_descriptor'.format(container))
    pf = udd.get('product_family').upper()
    pc = udd.get('product_codename').upper()
    seq = aplib.get_sequence_definition('{0} {1} {2} {3} SEQ'.format(
        __product_line__, pf, pc, __area__),
                                        jump_on_error='FINAL')

    # Enable CATS
    # seq.adt_enabled = ['cats']
    # ------------------------------------------------------------------------------------------------------------------
    # Init
    init_seq = seq.add_sequence('INITIALIZATION')
    init_seq.add_step(steps_nyquist.init, name='INIT', kwargs={})
    init_seq.add_step(steps_nyquist.ud_retrieve,
                      name="RETRIEVE UUT DESCRIPTOR")
    init_seq.add_step(steps_nyquist.ud_print_uut_descriptor,
                      name='PRINT DESCRIPTOR')
    init_seq.add_step(steps_nyquist.ud_print_uut_config,
                      name='PRINT UUT CONFIG')

    # Chamber Init
    # TODO: Trac#6087
    seq.add_step(steps_ess_chamber.step__chamber_init,
                 name='CHAMBER INIT',
                 kwargs={
                     'profile_type': profile_type,
                     'fi_action': 'nopause',
                     'first_init': False
                 })
    # Area Check
    seq.add_step(steps_nyquist.process_area_check,
                 name='AREACHECK',
                 kwargs={'previous_area': 'ICT'},
                 enabled=True)

    # MAC Verify Only
    seq.add_step(steps_nyquist.process_assign_verify_mac,
                 name='VERIFY MAC',
                 kwargs={'assign': False})

    # ------------------------------------------------------------------------------------------------------------------
    # PCAMAP
    pcamap_seq = seq.add_sequence('PCAMAP PROGRAMMING', enabled=True)
    # Verify CMPD
    # TODO: waiting Trac #5852
    pcamap_seq.add_step(steps_nyquist.process_verify_cmpd,
                        name='VERIFY CMPD SPROM',
                        kwargs={
                            'force': False,
                            'cmpd_description': 'SPROM',
                            'uut_type_key': 'MODEL_NUM',
                            'part_number_key': 'MOTHERBOARD_ASSEMBLY_NUM',
                            'part_revision_key': 'MOTHERBOARD_REVISION_NUM',
                            'previous_area': 'PCBST',
                            'eco_type': 'VERIFICATION'
                        },
                        enabled=False)

    # Chamber Start
    seq.add_step(steps_ess_chamber.step__chamber_start,
                 name='CHAMBER START',
                 kwargs={})

    # --------------------------------------------------------------------------------------------------------------
    # Build All Corners
    # Example corners = OrderedDict([('NTNV', ('AMBIENT', 'NOMINAL', False)),
    #                                ('HTLV', ('HOT', 'LOW', True)),
    #                                ('LTLV', ('COLD', 'LOW', True))])
    if True:  # Logic branch for chamber debug (if needed)
        corners = steps_ess_chamber.get_global_corners()
        for i, corner in enumerate(corners):
            temperature = corners[corner][0]
            voltage = corners[corner][1]
            adt_flag = corners[corner][2]
            corner_seq = seq.add_sequence('{0} CORNER'.format(corner),
                                          adt_enabled=adt_flag)
            corner_seq.add_step(steps_ess_chamber.step__chamber_ramp,
                                name='CHAMBER RAMP {0}'.format(temperature),
                                kwargs={'action': temperature})
            corner_seq_sublevel1 = corner_seq.add_sequence('UUT-MONITOR GROUP',
                                                           parallel_steps=True)
            corner_seq_sublevel1.add_step(
                steps_ess_chamber.step__chamber_start_monitor,
                name="CHAMBER MONITOR START {0}".format(i))
            corner_seq_sublevel2 = corner_seq_sublevel1.add_sequence(
                'UUT AT {0} VOLT'.format(voltage))
            corner_seq_sublevel3 = corner_seq_sublevel2.add_sequence(
                'UUT TESTS',
                adt_enabled=adt_flag,
                jump_on_error="CHAMBER MONITOR STOP {0}".format(i))
            corner_seq_sublevel3.add_step(steps_nyquist.power_cycle_on,
                                          name='POWER ON BOOT',
                                          group_level=5)
            if True:  # Logic branch for chamber debug (if needed)
                corner_seq_sublevel3.add_step(steps_nyquist.goto_mode,
                                              name='MODE STARDUST',
                                              kwargs={'mode': 'STARDUST'})
                corner_seq_sublevel3.add_step(
                    steps_nyquist.diags_switch_mcu_mode,
                    name='MCU MODE IOS',
                    kwargs={'kkmode': 'IOS'})
                corner_seq_sublevel3.add_step(steps_nyquist.diags_sysinit,
                                              name='DIAG SYSINIT')
                corner_seq_sublevel3.add_step(steps_nyquist.diags_vmargin_test,
                                              name='VOLTAGE MARGIN',
                                              kwargs={
                                                  'device_instance': 0,
                                                  'margin_level': voltage
                                              })
                corner_seq_sublevel3.add_step(
                    steps_nyquist.diags_temperature_test,
                    name='UUT TEMPERATURES',
                    kwargs={
                        'temperature_corner': temperature,
                        'operational_state': 'idle'
                    })
                corner_seq_sublevel3.add_step(steps_nyquist.diags_psu_check,
                                              name='PSU CHECK',
                                              kwargs={})
                corner_seq_sublevel3.add_step(
                    steps_nyquist.diags_stackrac_test,
                    name='STACKRAC TEST',
                    kwargs={})
                corner_seq_sublevel3.add_step(
                    steps_nyquist.diags_serdeseye_sif_test,
                    name='SERDES EYE SIF TEST',
                    kwargs={})
                corner_seq_sublevel3.add_step(
                    steps_nyquist.diags_serdeseye_nif_test,
                    name='SERDES EYE NIF TEST',
                    kwargs={})
                # Diag Testlist build-out
                corner_seq_sublevel3_diag = corner_seq_sublevel3.add_sequence(
                    'DIAG TESTS')
                corner_seq_sublevel3_diag.add_step(steps_nyquist.goto_mode,
                                                   name='MODE DIAG',
                                                   kwargs={'mode': 'DIAG'})
                dynamic_sequence_builder.build_diag_testlist_subseq(
                    diag_seq=corner_seq_sublevel3_diag,
                    container=container,
                    udd=udd,
                    step_module=steps_nyquist,
                    category=None,
                    enabled=True)
                # Traffic Testlist build-out
                corner_seq_sublevel3_traf = corner_seq_sublevel3.add_sequence(
                    'TRAF TESTS')
                corner_seq_sublevel3_traf.add_step(steps_nyquist.goto_mode,
                                                   name='MODE STARDUST',
                                                   kwargs={'mode': 'STARDUST'})
                dynamic_sequence_builder.build_traffic_cases_subseq(
                    traffic_seq=corner_seq_sublevel3_traf,
                    container=container,
                    udd=udd,
                    step_module=steps_nyquist,
                    category=None,
                    enabled=True)
            # Corner wrap-up
            corner_seq_sublevel2.add_step(
                steps_ess_chamber.step__chamber_stop_monitor,
                name="CHAMBER MONITOR STOP {0}".format(i),
                kwargs={},
                group_level=aplib.FINALIZATION - 2)
            corner_seq.add_step(steps_nyquist.power_off,
                                name='POWER OFF',
                                group_level=aplib.FINALIZATION - 1)

    # ------------------------------------------------------------------------------------------------------------------
    # Chamber Wrap-Up
    #   1. Chamber Stop will sync all containers AND return chamber to ambient.
    #   2. Power off each UUT.
    #   3. Clean Up (remove classes and clean userdict)
    final_seq = seq.add_sequence('FINAL', finalization=True)
    final_seq.add_step(steps_ess_chamber.step__chamber_final,
                       name="CHAMBER STOP",
                       kwargs={},
                       group_level=aplib.FINALIZATION - 3)
    final_seq.add_step(steps_nyquist.power_off,
                       name='POWER OFF',
                       group_level=aplib.FINALIZATION - 2)
    final_seq.add_step(steps_nyquist.clean_up,
                       name='CLEAN UP',
                       group_level=aplib.FINALIZATION - 1)

    return seq
コード例 #4
0
def standard_switch_sequence_definition():
    try:
        container = aplib.get_my_container_key()
    except Exception:
        raise Exception("Cannot use this Apollo version!")
    udd = aplib.get_cached_data('{0}_uut_descriptor'.format(container))
    pf = udd.get('product_family').upper()
    pc = udd.get('product_codename').upper()
    psd = udd.get('uut_config', {}).get('prod_seq_def', {})
    area = __area__  # udd.get(test_area, None)
    seq = aplib.get_sequence_definition('{0} {1} {2} {3} SEQ'.format(
        __product_line__, pf, pc, area),
                                        jump_on_error='FINAL')

    # Enable CATS
    # seq.adt_enabled = ['cats']
    # ------------------------------------------------------------------------------------------------------------------
    # Init
    init_seq = seq.add_sequence('INITIALIZATION')
    init_seq.add_step(steps_franklin.init, name='INIT', kwargs={})
    init_seq.add_step(steps_franklin.ud_retrieve,
                      name="RETRIEVE UUT DESCRIPTOR")
    init_seq.add_step(steps_franklin.ud_print_uut_descriptor,
                      name='PRINT DESCRIPTOR')
    init_seq.add_step(steps_franklin.ud_print_uut_config,
                      name='PRINT UUT CONFIG')

    # Area Check
    seq.add_step(steps_franklin.process_area_check,
                 name='AREACHECK',
                 kwargs={},
                 enabled=True)

    # Power ON & Boot
    # Unit should already be powered up from pre-sequence auto-discovery.
    # seq.add_step(steps_franklin.power_cycle_on, name='POWER ON BOOT', group_level=5, enabled=False)

    # Basic Mode
    seq.add_step(steps_franklin.goto_mode,
                 name='MODE BTLDR',
                 kwargs={'mode': 'BTLDR'})

    # MAC Verify Only
    seq.add_step(steps_franklin.process_assign_verify_mac,
                 name='VERIFY MAC',
                 kwargs={'assign': False})

    # Get RFID Data
    seq.add_step(steps_franklin.process_get_rfid_db,
                 name='GET RFID TID',
                 enabled=True,
                 kwargs={})

    # ------------------------------------------------------------------------------------------------------------------
    # PCAMAP
    pcamap_seq = seq.add_sequence('PCAMAP PROGRAMMING', enabled=True)
    # Verify CMPD
    # TODO: waiting Trac #5852
    pcamap_seq.add_step(steps_franklin.process_verify_cmpd,
                        name='VERIFY CMPD SPROM',
                        enabled=False,
                        kwargs={
                            'force': False,
                            'cmpd_description': 'SPROM',
                            'uut_type_key': 'MODEL_NUM',
                            'part_number_key': 'TAN_NUM',
                            'part_revision_key': 'TAN_REVISION_NUMBER',
                            'eco_type': 'VERIFICATION'
                        })

    # PCAMAP Program
    pcamap_seq.add_step(steps_franklin.pcamap_write_uut,
                        name='PCAMAP PROGRAM',
                        kwargs={
                            'device_instance': 0,
                            'memory_type': 'vb'
                        })

    # PIDVID Verify
    seq.add_step(steps_franklin.process_verify_pidvid,
                 name='PIDVID VERIFY',
                 jump_on_error='CLEAN UP')

    # ------------------------------------------------------------------------------------------------------------------
    # Load Images
    image_load_seq = seq.add_sequence('IMAGE LOADING', enabled=True)
    image_load_seq.add_step(steps_franklin.goto_mode,
                            name='MODE LINUX',
                            kwargs={'mode': 'LINUX'})
    image_load_seq.add_step(steps_franklin.linux_set_network_interface,
                            name='SET LINUX NET INTF')
    image_load_seq.add_step(
        steps_franklin.load_hw_images,
        name='LOAD HW IMAGES',
        kwargs={
            'master_list':
            ['btldr', 'linux', 'diag', 'fpga', 'mcu', 'nic', 'SBC_CFG'],
            'force':
            False
        },
        enabled=False)
    image_load_seq.add_step(steps_franklin.ios_install_supplemental_images,
                            name='LOAD IOS SUPPLEMENTAL IMAGES',
                            enabled=True)

    # ------------------------------------------------------------------------------------------------------------------
    # Update any Images via stardust
    # SBC update will ALWAYS program; turn off for FST.
    image_seq = seq.add_sequence('DEVICE IMAGE PROGRAMMING', enabled=True)
    image_secboot_seq = image_seq.add_sequence(
        'DEVICE IMAGE PROGRAMMING SECBOOT')
    image_secboot_seq.add_step(steps_franklin.goto_mode,
                               name='MODE BTLDR',
                               kwargs={'mode': 'BTLDR'})
    image_secboot_seq.add_step(steps_franklin.upgrade_btldr, name='PROG BTLDR')
    image_secboot_seq.add_step(steps_franklin.goto_mode,
                               name='MODE STARDUST',
                               kwargs={'mode': 'STARDUST'})
    image_secboot_seq.add_step(steps_franklin.upgrade_fpga, name='PROG FPGA')
    image_secboot_seq.add_step(steps_franklin.power_cycle_on,
                               name='POWER ON REBOOT',
                               kwargs={'contingent': True},
                               group_level=5)
    image_mcu_seq = image_seq.add_sequence('DEVICE IMAGE PROGRAMMING MCU')
    image_mcu_seq.add_step(steps_franklin.goto_mode,
                           name='MODE STARDUST',
                           kwargs={'mode': 'STARDUST'})
    image_mcu_seq.add_step(steps_franklin.diags_switch_mcu_mode,
                           name='MCU MODE IOS',
                           kwargs={'kkmode': 'IOS'})
    image_mcu_seq.add_step(steps_franklin.upgrade_mcu,
                           name='PROG MCU',
                           enabled=False)
    image_nic_seq = image_seq.add_sequence('DEVICE IMAGE PROGRAMMING NIC')
    image_nic_seq.add_step(steps_franklin.goto_mode,
                           name='MODE LINUX',
                           kwargs={'mode': 'LINUX'})
    image_nic_seq.add_step(steps_franklin.upgrade_nic,
                           name='PROG NIC',
                           enabled=True)
    image_sbc_seq = image_seq.add_sequence('DEVICE IMAGE PROGRAMMING SBC')
    image_sbc_seq.add_step(steps_franklin.goto_mode,
                           name='MODE STARDUST',
                           kwargs={'mode': 'STARDUST'})
    image_sbc_seq.add_step(steps_franklin.update_sbc,
                           name='PROG SBC',
                           enabled=False)

    # ------------------------------------------------------------------------------------------------------------------
    # Identity Protection Programming
    idpro_seq = seq.add_sequence('IDENTITY PROTECTION')
    idpro_main_subseq = idpro_seq.add_sequence('IDENTITY PROTECTION MAINBOARD',
                                               enabled=True)
    idpro_main_subseq.add_step(steps_franklin.power_cycle_on,
                               name='POWER ON REBOOT',
                               group_level=5)
    idpro_main_subseq.add_step(steps_franklin.goto_mode,
                               name='MODE STARDUST',
                               kwargs={'mode': 'STARDUST'})
    idpro_main_subseq.add_step(steps_franklin.diags_sysinit,
                               name='DIAG SYSINIT')
    idpro_main_subseq.add_step(steps_franklin.x509sudi_sign_certificate,
                               name='X509 SHA1',
                               kwargs={'x509_sudi_hash': 'SHA1'},
                               enabled=True)
    idpro_main_subseq.add_step(steps_franklin.act2_sign_chip,
                               name='ACT2',
                               kwargs={
                                   'device_instance': 0,
                                   'keytype': 'ACT2-RSA'
                               },
                               enabled=True)
    idpro_main_subseq.add_step(steps_franklin.act2_sign_chip,
                               name='ACT2 2099',
                               kwargs={
                                   'device_instance': 0,
                                   'keytype': 'ACT2-HARSA'
                               },
                               enabled=True)
    idpro_main_subseq.add_step(steps_franklin.x509sudi_sign_certificate,
                               name='X509 SHA256',
                               kwargs={
                                   'x509_sudi_hash': 'SHA256',
                                   'keytype': 'ACT2-RSA'
                               },
                               enabled=True)
    idpro_main_subseq.add_step(steps_franklin.x509sudi_sign_certificate,
                               name='X509 SHA256 2099',
                               kwargs={
                                   'x509_sudi_hash': 'CMCA3',
                                   'keytype': 'ACT2-HARSA'
                               },
                               enabled=False)

    # Peripherals for special builds only (i.e. proto, etc.).
    if psd.get(area, {}).get('idpro_periphs', False):
        idpro_peripheral_subseq = idpro_seq.add_sequence(
            'IDENTITY PROTECTION PERIPHERALS', enabled=True)
        idpro_peripheral_subseq.add_step(steps_franklin.goto_mode,
                                         name='MODE STARDUST',
                                         kwargs={'mode': 'STARDUST'})
        idpro_peripheral_subseq.add_step(steps_franklin.diags_sysinit,
                                         name='DIAG SYSINIT')
        idpro_peripheral_subseq.add_step(steps_franklin.act2_sign_chip,
                                         name='ACT2 1',
                                         kwargs={
                                             'device_instance': 1,
                                             'keytype': 'ACT2-RSA'
                                         },
                                         enabled=True)
        idpro_peripheral_subseq.add_step(steps_franklin.act2_sign_chip,
                                         name='ACT2 2',
                                         kwargs={
                                             'device_instance': 2,
                                             'keytype': 'ACT2-RSA'
                                         },
                                         enabled=True)
        idpro_peripheral_subseq.add_step(steps_franklin.act2_sign_chip,
                                         name='ACT2 3',
                                         kwargs={
                                             'device_instance': 3,
                                             'keytype': 'ACT2-RSA'
                                         },
                                         enabled=True)
        idpro_peripheral_subseq.add_step(steps_franklin.act2_sign_chip,
                                         name='ACT2 4',
                                         kwargs={
                                             'device_instance': 4,
                                             'keytype': 'ACT2-RSA'
                                         },
                                         enabled=True)

    # IOS Boot Test and IdPro Check
    idpro_seq.add_step(steps_franklin.goto_mode,
                       name='MODE IOSE',
                       kwargs={'mode': 'IOSE'})
    idpro_seq.add_step(steps_franklin.ios_verify_idpro,
                       name='ID PRO VERIFICATION',
                       kwargs={})
    idpro_seq.add_step(steps_franklin.goto_mode,
                       name='MODE BTLDR',
                       kwargs={'mode': 'BTLDR'})
    idpro_seq.add_step(steps_franklin.process_assign_verify_mac,
                       name='VERIFY MAC',
                       kwargs={'assign': False})

    # ------------------------------------------------------------------------------------------------------------------
    # Power Cycle Testing
    seq.add_step(steps_franklin.power_power_cycle_testing,
                 name='POWER CYCLE TEST')

    # ==================================================================================================================
    # Main Loop Tests
    # ------------------------------------------------------------------------------------------------------------------
    fst_loop_seq = seq.add_sequence('SYSTEM LOOP TESTS',
                                    iterations=(aplib.ITERATION_TIME, 30))
    fst_loop_seq.iterations.type = aplib.ITERATION_TIME
    fst_loop_seq.iterations.value = psd.get(area, {}).get(
        'total_loop_time_secs', 1) if psd else 1
    fst_loop_seq.add_step(steps_franklin.loop_marker,
                          name='FST LOOP',
                          kwargs={'title': 'FST'})

    # ------------------------------------------------------------------------------------------------------------------
    # Diag Testing
    diag_seq = fst_loop_seq.add_sequence('DIAGNOSTIC TESTS', enabled=True)
    diag_seq.add_step(steps_franklin.goto_mode,
                      name='MODE STARDUST',
                      kwargs={'mode': 'STARDUST'})
    diag_seq.add_step(steps_franklin.diags_sysinit, name='SYSINIT')
    diag_seq.add_step(steps_franklin.diags_rtc_chkset_test,
                      name='RTC CHK SET TEST',
                      kwargs={})
    diag_seq.add_step(steps_franklin.diags_psu_check,
                      name='PSU CHECK',
                      kwargs={})
    diag_seq.add_step(steps_franklin.diags_update_mcu_settings,
                      name='MCU SETTINGS',
                      kwargs={})
    diag_seq.add_step(steps_franklin.diags_temperature_test,
                      name='TEMPERATURE TEST',
                      kwargs={'operational_state': 'diag'},
                      enabled=True)
    diag_seq.add_step(steps_franklin.diags_vmargin_test,
                      name='VMARGIN TEST',
                      kwargs={
                          'device_instance': 0,
                          'margin_level': 'NOMINAL'
                      },
                      enabled=True)
    diag_seq.add_step(steps_franklin.diags_fan_test,
                      name='FAN TEST',
                      kwargs={},
                      enabled=True)
    diag_seq.add_step(steps_franklin.diags_stackrac_test,
                      name='STACKRAC TEST',
                      kwargs={},
                      enabled=True)
    diag_seq.add_step(steps_franklin.diags_serdeseye_sif_test,
                      name='SERDES EYE SIF TEST',
                      kwargs={},
                      enabled=True)
    diag_seq.add_step(steps_franklin.diags_serdeseye_nif_test,
                      name='SERDES EYE NIF TEST',
                      kwargs={},
                      enabled=True)
    # Diag Testlist build-out
    dynamic_sequence_builder.build_diag_testlist_subseq(
        diag_seq=diag_seq,
        container=container,
        udd=udd,
        step_module=steps_franklin,
        category=None,
        enabled=True)

    # ------------------------------------------------------------------------------------------------------------------
    # Traffic Testing
    traf_seq = fst_loop_seq.add_sequence('TRAFFIC TESTS', enabled=True)
    traf_seq.add_step(steps_franklin.goto_mode,
                      name='MODE STARDUST PRETRAF',
                      kwargs={'mode': 'STARDUST'})
    traf_seq.add_step(steps_franklin.diags_sysinit,
                      name='DIAG SYSINIT PRETRAF')
    dynamic_sequence_builder.build_traffic_cases_subseq(
        traffic_seq=traf_seq,
        container=container,
        udd=udd,
        step_module=steps_franklin,
        category=None,
        enabled=True)

    seq.add_step(steps_franklin.loop_marker,
                 name='FST LOOPS DONE',
                 kwargs={
                     'title': 'FST (Loops completed)',
                     'close_loop': True
                 })
    # ==================================================================================================================

    # ------------------------------------------------------------------------------------------------------------------
    # Power OFF
    seq.add_step(steps_franklin.power_off, name='POWER OFF', group_level=1000)

    # Clean up
    final_seq = seq.add_sequence('FINAL', finalization=True)
    final_seq.add_step(steps_franklin.power_off,
                       name='POWER OFF',
                       kwargs={},
                       group_level=1000)
    final_seq.add_step(steps_franklin.clean_up, name='CLEAN UP')
    final_seq.add_step(steps_franklin.final, name='END')

    return seq