/* WARNING: Heritage AFTER dead removal. Example location: r0x0041f010 : 0x0040853c */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

int smT_process_event(uint *param_1)

{
  uint *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint *puVar5;
  
  if (g_topo_session == 0) {
    iVar3 = 2;
  }
  else if ((param_1[1] == 0) || (iVar3 = 2, param_1[1] == g_topo_session)) {
    do {
      if (g_smT_state != 1) {
        if (g_smT_state == 0) {
          uVar4 = *param_1;
          if (uVar4 == 1) {
            if (param_1[3] != 0) {
              if (((param_1[4] == 0) &&
                  (uVar4 = (*g_discover_hdr & 0xff) << 8 | (uint)(*g_discover_hdr >> 8), uVar4 != 0)
                  ) && (g_generation != uVar4)) {
                g_generation = (ushort)uVar4;
              }
              g_smT_state = 1;
            }
          }
          else {
            if (uVar4 != 0) {
              if ((uVar4 != 3) && (uVar4 != 8)) {
                return 0;
              }
              if (param_1[1] != g_topo_session) {
                return 0;
              }
              g_ctc_bytes = 0;
              g_ctc_packets = 0;
              if (g_charge_timer != 0) {
                event_cancel();
                g_charge_timer = 0;
              }
              g_topo_session = 0;
              return 0;
            }
            if (0xc < g_opcode) {
              warn("smT (Quiescent): Ignored packet w/ unknown opcode: %d\n");
              return 2;
            }
          }
          return 0;
        }
        if (g_smT_state != 2) {
          return 2;
        }
        uVar4 = *param_1;
        if (uVar4 == 3) {
LAB_004089b8:
          iVar3 = 0;
          if (param_1[1] == g_topo_session) {
            g_emit_remaining = 0;
            g_ctc_bytes = 0;
            g_ctc_packets = 0;
            if (g_charge_timer != 0) {
              event_cancel();
              g_charge_timer = 0;
            }
            if (g_emit_timer != 0) {
              event_cancel();
              g_emit_timer = 0;
            }
            goto LAB_00408a24;
          }
        }
        else if (uVar4 < 4) {
          iVar3 = 0;
          if (uVar4 == 0) {
            if (g_opcode < 0xd) {
              uVar4 = 1 << (g_opcode & 0x1f);
              if ((uVar4 & 0x1fef) != 0) goto switchD_004085a0_caseD_4;
              if ((uVar4 & 0x10) != 0) goto switchD_004085e0_caseD_4;
            }
            iVar3 = 2;
          }
        }
        else {
          if (uVar4 == 6) {
            packetio_tx_emitee(g_emitdesc);
            g_emit_remaining = g_emit_remaining + -1;
            g_emitdesc = g_emitdesc + 0xe;
            if (g_emit_remaining == 0) {
              g_smT_state = 1;
              if (g_emit_timer != 0) {
                event_cancel();
                g_emit_timer = 0;
              }
              if (g_emit_seqnum != 0) {
                packetio_tx_ack();
                goto LAB_00408b6c;
              }
            }
            else {
              iVar2 = set_emit_timer();
              iVar3 = 1;
              if (iVar2 == 0) goto switchD_004085e0_default;
            }
            goto switchD_004085a0_caseD_4;
          }
          iVar3 = 0;
          if (uVar4 == 8) goto LAB_004089b8;
        }
        goto switchD_004085e0_default;
      }
      switch(*param_1) {
      case 0:
        iVar3 = 2;
        switch(g_opcode) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 0xc:
          goto switchD_004085a0_caseD_4;
        case 4:
switchD_004085e0_caseD_4:
          seeslist_enqueue(0,g_base_hdr + 10);
          break;
        case 6:
          packetio_tx_queryresp();
          break;
        case 9:
          FUN_00408180(g_rcvd_pkt_len);
          if (g_sequencenum != 0) {
LAB_00408b40:
            packetio_tx_flat();
LAB_00408b50:
            FUN_00408290(g_tx_len);
            break;
          }
          goto switchD_004085a0_caseD_4;
        case 0xb:
          puVar1 = &Tlvs;
          do {
            puVar5 = puVar1;
            if (*puVar5 == 0) {
              iVar3 = 0;
              goto switchD_004085e0_default;
            }
            puVar1 = puVar5 + 6;
          } while (*puVar5 != (uint)*g_qltlv_hdr);
          packetio_tx_qltlvResp
                    (g_sequencenum,puVar5,
                     (uint)CONCAT11(g_qltlv_hdr[2],g_qltlv_hdr[3]) + (uint)g_qltlv_hdr[1] * 0x10000)
          ;
          break;
        default:
          goto switchD_004085e0_default;
        }
LAB_00408b6c:
        iVar3 = 0;
        goto switchD_004085e0_default;
      case 1:
        if (((param_1[4] == 0) &&
            (uVar4 = (*g_discover_hdr & 0xff) << 8 | (uint)(*g_discover_hdr >> 8), uVar4 != 0)) &&
           (g_generation != uVar4)) {
          g_generation = (ushort)uVar4;
        }
        break;
      case 2:
        if ((1 < CONCAT11(*(undefined1 *)(g_base_hdr + 0x12),*(undefined1 *)(g_base_hdr + 0x13))) &&
           (iVar3 = 0, g_sequencenum == 0)) goto switchD_004085e0_default;
        FUN_00408180(g_rcvd_pkt_len);
        if ((g_ctc_packets < g_neededPackets) || (g_ctc_bytes < g_neededBytes)) goto LAB_00408b40;
        g_ctc_bytes = 0;
        g_ctc_packets = 0;
        if (g_charge_timer != 0) {
          event_cancel();
          g_charge_timer = 0;
        }
        memcpy(g_emitbuf,&g_rxbuf,g_rcvd_pkt_len)   //possible issue identified - semgrep
        if (g_emit_remaining != 0) {
          __assert("g_emit_remaining == 0","mapping.c",0x45);
        }
        g_emit_seqnum = g_sequencenum;
        g_emit_remaining = (short)DAT_0042af60;
        g_emitdesc = 0x42b166;
        if ((DAT_0042af60 & 0xffff) == 0) {
          if (g_sequencenum != 0) {
            packetio_tx_ack();
            goto LAB_00408b50;
          }
        }
        else {
          g_smT_state = 2;
          iVar2 = set_emit_timer();
          iVar3 = 1;
          if (iVar2 != 1) {
            g_this_event = 6;
            goto switchD_004085e0_default;
          }
        }
        break;
      case 3:
      case 8:
        iVar3 = 0;
        if (param_1[1] != g_topo_session) goto switchD_004085e0_default;
        g_ctc_bytes = 0;
        g_ctc_packets = 0;
        if (g_charge_timer != 0) {
          event_cancel();
          g_charge_timer = 0;
        }
LAB_00408a24:
        seeslist_clear();
        g_smT_state = 0;
        g_topo_session = 0;
        break;
      case 5:
        g_ctc_bytes = 0;
        g_ctc_packets = 0;
        if (g_charge_timer != 0) {
          event_cancel();
          g_charge_timer = 0;
        }
      }
switchD_004085a0_caseD_4:
      iVar3 = 0;
switchD_004085e0_default:
    } while (iVar3 == 1);
  }
  return iVar3;
}