summaryrefslogtreecommitdiff
path: root/VisualState/sub/Topstate1.vsr.bk1
blob: 6baabb52528be87521b76a1d3516dc316c7ff3fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
@visualSTATE @RuleBase @Format2 "NoName"

@Directives

  @visualSTATE 5-4-0-1273;
  @Date 2008-02-15;
  @Time 11:49:24;
  [[ Expl = "This is the main FSM." ]]


@Declaration

  @ActionFunction
    VS_VOID cp_station_set_assoc_status(VS_BOOL associated),
    VS_VOID cp_station_set_auth_status(VS_BOOL is_authenticated),
    VS_VOID cp_station_set_cco_status(VS_BOOL is_cco)
      [[ Expl = "the station leave the cco state." ]],
    VS_VOID init_system()
      [[ File = "cp/station/inc/station_events.h" ]],
    VS_VOID launch_bbt_timer()
      [[ File = "cp/station/inc/station_events.h" ]],
    VS_VOID launch_beacon_timer()
      [[ File = "cp/station/inc/station_events.h" ]],
    VS_VOID launch_ustt_timer()
      [[ File = "cp/station/inc/station_events.h" ]],
    VS_VOID process_cc_assoc_cnf(VS_VOIDPTR mme_address),
    VS_VOID process_cc_assoc_req(VS_VOIDPTR mme_address),
    VS_VOID process_cc_set_tei_map_ind(VS_VOIDPTR mme_address),
    VS_VOID process_cc_set_tei_map_req(VS_VOIDPTR mme_address),
    VS_VOID process_drv_set_avln_hfid(VS_VOIDPTR msg),
    VS_VOID process_drv_set_cco_preference(VS_VOIDPTR msg),
    VS_VOID process_drv_set_dpw_req(VS_VOIDPTR msg),
    VS_VOID process_drv_set_m_sta_hfid(VS_VOIDPTR msg),
    VS_VOID process_drv_set_mac_address(VS_VOIDPTR msg),
    VS_VOID process_drv_set_nid(VS_VOIDPTR msg),
    VS_VOID process_drv_set_npw(VS_VOIDPTR msg),
    VS_VOID process_drv_set_sl(VS_VOIDPTR msg),
    VS_VOID process_drv_set_snid(VS_VOIDPTR msg),
    VS_VOID process_drv_set_tonemask(VS_VOIDPTR msg),
    VS_VOID process_drv_set_u_sta_hfid(VS_VOIDPTR msg),
    VS_VOID process_drv_set_was_cco(VS_VOIDPTR msg),
    VS_VOID process_drv_start_mac_req(VS_VOIDPTR msg),
    VS_VOID process_usta_mme(VS_VOIDPTR mme_address),
    VS_VOID record_usta_mme(VS_VOIDPTR mme_address),
    VS_VOID send_discover_beacon_as_ucco()
      [[ Expl = "this function will send a discover beacon, and relaunch a timer of 10ms 0x0d0x0afor the next discover beacon."
          ]],
    VS_VOID station_bbt_expires(),
    VS_VOID trace_cco(),
    VS_VOID trace_pond(),
    VS_VOID trace_sta(),
    VS_VOID trace_ucco(),
    VS_VOID trace_usta(),
    VS_VOID transmit_unassoc_sta_mme(),
    VS_VOID try_associate(VS_VOIDPTR beacon_address)
      [[ Expl = "see fig 7-76 and 7-770x0d0x0athe station had received a beacon, so it will check the NID, and if if match,0x0d0x0asend a CC_ASSOC.REQ to try to associate with the detected CCO."
          ]];


@Definition

  @Event
    AUTHENTIFIE_STA(),
    BBT_EXPIRES(),
    BEACON_DETECTED(VS_VOIDPTR beacon_address),
    BEACON_TIMER_EXPIRES(),
    BECOME_BACKUP_CCO(),
    BECOME_PCO(),
    HANDOVER_DONE(),
    JOIN_WAIT_TIMER_EXPIRES(),
    LEAVE_BACKUP_CCO(),
    LEAVE_PCO(),
    POND_TO_UCCO(),
    RECEIVE_CC_ASSOC_CNF(VS_VOIDPTR mme_address),
    RECEIVE_CC_ASSOC_REQ(VS_VOIDPTR mme_address),
    RECEIVE_CC_SET_TEI_MAP_IND(VS_VOIDPTR mme_address)
      [[ Expl = "11.2.35" ]],
    RECEIVE_CC_SET_TEI_MAP_REQ(VS_VOIDPTR mme_address)
      [[ Expl = "11.2.34" ]],
    RECEIVE_DRV_MAC_START_REQ(VS_VOIDPTR msg),
    RECEIVE_DRV_MAC_STOP_IND(),
    RECEIVE_DRV_SET_AVLN_HFID(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_CCO_PREFERENCE_REQ(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_DPW_REQ(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_MAC_ADDRESS(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_M_STA_HFID(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_NID(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_NPW_REQ(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_SL(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_SNID(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_TONEMASK(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_U_STA_HFID(VS_VOIDPTR msg),
    RECEIVE_DRV_SET_WAS_CCO(VS_VOIDPTR msg),
    RECEIVE_USTA_MME(VS_VOIDPTR mme_address),
    SC_ADD(),
    SC_JOIN(),
    SC_TIMER_EXPIRES(),
    TO_CCO(),
    TO_HANDOVER(),
    TO_HANDOVER_IN_PROGRESS(),
    TO_STA(),
    TO_USTA(),
    UCCO_MAX_DISCOVER_EXPIRES()
      [[ Expl = "as UCCO, we must send a discover beacon every MaxDiscoverPeriod."
          ]],
    UNAUTHENTIFIE_STA(),
    USTT_EXPIRES();

  @EventGroup
    USTA_TO_CCO(TO_CCO, SC_ADD)
      [[ Expl = "this will trigger when the station should become CCo, 0x0d0x0aor when it is usta and in sc-add state (see 7.4.1, last 0xa7)"
          ]];


@Implementation

  @StateMachine StateMachineSpec_10 =

    @State;

    @StateRegion;

    @Entry
      #launch_beacon_timer();

    @Exit;

    @Do;

    @InternalRule;

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_9 =

    @State;

    @StateRegion;

    @Entry;

    @Exit
      #cp_station_set_cco_status(0);

    @Do;

    @InternalRule;

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_8 =

    @State;

    @StateRegion;

    @Entry
      #trace_usta();

    @Exit;

    @Do;

    @InternalRule
      RECEIVE_USTA_MME(mme_address) : #process_usta_mme(mme_address);

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_7 =

    @State;

    @StateRegion;

    @Entry
      #launch_bbt_timer(),
      #trace_pond();

    @Exit;

    @Do;

    @InternalRule
      BBT_EXPIRES() : #station_bbt_expires(),
      RECEIVE_USTA_MME(mme_address) : #record_usta_mme(mme_address);

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_6 =

    @State;

    @StateRegion;

    @Entry
      #trace_ucco(),
      #send_discover_beacon_as_ucco();

    @Exit;

    @Do;

    @InternalRule
      UCCO_MAX_DISCOVER_EXPIRES() : #send_discover_beacon_as_ucco();

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_5 (@State StateArgument_13, 
    @State StateArgument_6) =

    @State
      NORMAL
        [[ Pos440 = "226 96 318 121 16 1 1638401" ]],
      @Initial _InitialState5
        [[ Pos440 = "130 96 150 116 114689" ]],
      HANDOVER
        [[ Expl = "A handover will happend, and the station is part of it. If it is STA, it will become CCO and if it is CCO, it will become STA."
           , Pos440 = "410 66 502 91 16 1 1638401" ]],
      HANDOVER_IN_PROGRESS
        [[ Expl = "The handover countdown (in beacon) is running, so some messages are not allowed. The STA is not implied in the current handover."
           , Pos440 = "417 132 640 157 16 1 1638401" ]],
      NO_AVLN_TO_TRACK
        [[ Pos440 = "210 244 356 318 16 1 1638401" ]],
      AVLN_TO_TRACK = StateMachineSpec_10
        [[ Pos440 = "464 244 610 318 16 1 1638401" ]],
      @Initial _InitialState6
        [[ Pos440 = "94 272 114 292 114689" ]],
      NOT_PCCO
        [[ Pos440 = "237 493 329 518 16 1 1638401" ]],
      @Initial _InitialState7
        [[ Pos440 = "145 493 165 513 114689" ]],
      PCCO
        [[ Pos440 = "401 493 493 518 16 1 1638401" ]],
      BACKUP_CCO
        [[ Pos440 = "446 660 572 685 16 1 1638401" ]],
      NOT_BACKUP
        [[ Pos440 = "202 660 328 685 16 1 1638401" ]],
      @Initial _InitialState8
        [[ Pos440 = "125 657 145 677 114689" ]],
      SC_NONE
        [[ Pos440 = "226 858 329 894 16 1 1638401" ]],
      SC_ADD
        [[ Pos440 = "392 858 495 894 16 1 1638401" ]],
      SC_JOIN
        [[ Pos440 = "392 964 495 1000 16 1 1638401" ]],
      @Initial _InitialState9
        [[ Pos440 = "267 773 287 793 114689" ]];

    @StateRegion
      Handover_Region (NORMAL, _InitialState5, HANDOVER, HANDOVER_IN_PROGRESS)
        [[ Pos440 = "0 0 683 148" ]],
      AVLN_Tracking (NO_AVLN_TO_TRACK, AVLN_TO_TRACK, _InitialState6)
        [[ Pos440 = "0 1 683 234" ]],
      Proxy_CCO (NOT_PCCO, _InitialState7, PCCO)
        [[ Pos440 = "0 2 683 173" ]],
      BackupCCO (BACKUP_CCO, NOT_BACKUP, _InitialState8)
        [[ Pos440 = "0 3 683 168" ]],
      SC_Level (SC_NONE, SC_ADD, SC_JOIN, _InitialState9)
        [[ Pos440 = "0 4 683 265" ]];

    @Entry;

    @Exit;

    @Do;

    @InternalRule;

    @TransitionRule
      TO_HANDOVER_IN_PROGRESS() @Src NORMAL : @Dest HANDOVER_IN_PROGRESS
        [[ Pos440 = "388 110 601 131 0 809894016 92 19 0 5" ]],
      TO_HANDOVER() @Src NORMAL : @Dest HANDOVER
        [[ Pos440 = "272 40 432 70 1 809894017 76 0 343 75 0 0" ]],
      @NoEvent @Src _InitialState5 : @Dest NORMAL
        [[ Pos440 = "150 76 230 106 0 809894016 20 10 0 10" ]],
      HANDOVER_DONE() @Src HANDOVER : @Dest NORMAL
        [[ Pos440 = "380 91 531 121 1 809894017 0 17 368 102 92 12" ]],
      HANDOVER_DONE() @Src HANDOVER_IN_PROGRESS : @Dest NORMAL
        [[ Pos440 = "256 145 395 175 0 809894016 0 20 62 25" ]],
      BEACON_DETECTED(beacon_address) @Src NO_AVLN_TO_TRACK : @Dest 
        AVLN_TO_TRACK
        [[ Pos440 = "356 249 483 279 0 809894016 146 35 0 35" ]],
      BEACON_DETECTED(beacon_address) @Src AVLN_TO_TRACK : @Dest AVLN_TO_TRACK
        [[ Pos440 = "558 325 704 355 1 809894017 146 13 633 276 146 59" ]],
      BEACON_TIMER_EXPIRES() @Src AVLN_TO_TRACK : @Dest NO_AVLN_TO_TRACK
        [[ Pos440 = "317 383 505 402 1 809894017 75 74 394 379 64 74" ]],
      @NoEvent @Src _InitialState6 : @Dest NO_AVLN_TO_TRACK
        [[ Pos440 = "114 252 194 282 0 809894016 20 10 0 38" ]],
      BECOME_PCO() @Src NOT_PCCO : @Dest PCCO
        [[ Pos440 = "274 442 408 465 1 809894017 76 0 354 472 0 0" ]],
      @NoEvent @Src _InitialState7 : @Dest NOT_PCCO
        [[ Pos440 = "165 473 245 503 0 809894016 20 10 0 10" ]],
      LEAVE_PCO() @Src PCCO : @Dest NOT_PCCO
        [[ Pos440 = "318 538 443 568 1 809894017 4 25 363 538 84 25" ]],
      LEAVE_BACKUP_CCO() @Src BACKUP_CCO : @Dest NOT_BACKUP
        [[ Pos440 = "292 705 463 735 1 809894017 5 25 383 705 115 25" ]],
      BECOME_BACKUP_CCO() @Src NOT_BACKUP !StateArgument_13 : @Dest BACKUP_CCO
        [[ Expl = "This transition will fire for message CC_BACKUP_APPOINT_REQ.0x0d0x0asee 11.2.3"
           , Pos440 = "295 608 411 638 1 809894017 104 0 375 638 0 0" ]],
      @NoEvent @Src _InitialState8 : @Dest NOT_BACKUP
        [[ Pos440 = "145 637 225 667 0 809894016 20 10 0 10" ]],
      SC_ADD() @Src SC_NONE : @Dest SC_ADD
        [[ Pos440 = "310 832 429 855 0 809894016 103 9 0 9" ]],
      SC_JOIN() @Src SC_NONE : @Dest SC_JOIN
        [[ Pos440 = "281 933 404 963 1 809894017 51 36 307 960 0 17" ]],
      SC_TIMER_EXPIRES() @Src SC_ADD : @Dest SC_NONE
        [[ Pos440 = "295 891 461 921 0 809894016 0 25 103 25" ]],
      TO_CCO() @Src SC_JOIN StateArgument_6 : @Dest SC_ADD
        [[ Expl = "see 7.3.4.4 two unassociated sta, both in SC-Join0x0d0x0a\"If it is the one to become CCo, it shall change it state to SC-Add\""
           , Pos440 = "448 917 624 940 0 809894016 50 0 50 36" ]],
      SC_TIMER_EXPIRES() @Src SC_JOIN : @Dest SC_NONE
        [[ Pos440 = "229 998 402 1028 1 809894017 0 29 297 971 34 36" ]],
      @NoEvent @Src _InitialState9 : @Dest SC_NONE
        [[ Pos440 = "277 763 357 793 0 809894016 10 20 51 0" ]];

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_4 =

    @State;

    @StateRegion
      Region1
        [[ Pos440 = "0 0 152 59" ]];

    @Entry
      #cp_station_set_auth_status(1);

    @Exit
      #cp_station_set_auth_status(0);

    @Do;

    @InternalRule;

    @TransitionRule;

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_3 =

    @State
      UNAUTHENTICATED
        [[ Pos440 = "111 705 263 730 16 1 1638401" ]],
      @Initial _InitialState3
        [[ Pos440 = "113 668 133 688 114689" ]],
      AUTHENTICATED = StateMachineSpec_4
        [[ Pos440 = "111 761 263 893 73 1 1638401" ]];

    @StateRegion
      Region1 (UNAUTHENTICATED, _InitialState3, AUTHENTICATED)
        [[ Pos440 = "0 0 181 243" ]];

    @Entry
      #trace_sta();

    @Exit;

    @Do;

    @InternalRule;

    @TransitionRule
      AUTHENTIFIE_STA() @Src UNAUTHENTICATED : @Dest AUTHENTICATED
        [[ Pos440 = "105 735 185 754 0 809894016 22 25 22 0" ]],
      @NoEvent @Src _InitialState3 : @Dest UNAUTHENTICATED
        [[ Pos440 = "107 676 187 706 0 809894016 9 20 10 0" ]],
      UNAUTHENTIFIE_STA() @Src AUTHENTICATED : @Dest UNAUTHENTICATED
        [[ Pos440 = "206 735 286 765 0 809894016 111 0 111 25" ]];

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_2 (@State StateArgument_47, 
    @State StateArgument_58, @State StateArgument_59, @State StateArgument_54)
     =

    @State
      CCO = StateMachineSpec_9
        [[ Pos440 = "570 711 751 895 16 1 1638401" ]],
      @Initial _InitialState2
        [[ Pos440 = "102 593 122 613 114689" ]],
      ASSOCIATED_STA = StateMachineSpec_3
        [[ Pos440 = "100 633 281 908 32 1 114689" ]],
      @Junction _JunctionState0
        [[ Pos440 = "639 664 659 684 1" ]],
      @ConnectorStart from_CCO
        [[ Pos440 = "645 918 747 938 114689" ]],
      @ConnectorEnd to_CCO
        [[ Pos440 = "633 946 737 966 114689" ]],
      @ConnectorStart from_STA
        [[ Pos440 = "201 917 283 937 114689" ]],
      @ConnectorEnd to_STA
        [[ Pos440 = "198 948 280 968 114689" ]];

    @StateRegion
      Region1 (CCO, _InitialState2, ASSOCIATED_STA, _JunctionState0, 
      @ConnectorStart from_CCO, @ConnectorEnd to_CCO, @ConnectorStart from_STA
      , @ConnectorEnd to_STA)
        [[ Pos440 = "0 0 684 397" ]];

    @Entry
      #cp_station_set_assoc_status(1);

    @Exit
      #cp_station_set_assoc_status(0);

    @Do;

    @InternalRule;

    @TransitionRule
      HANDOVER_DONE() @Src CCO StateArgument_47 : @Dest 
        ASSOCIATED_STA.AUTHENTICATED
        [[ Pos440 = "281 807 546 827 1 809894016 0 112 440 823 152 62" ]],
      @NoEvent @Src CCO : @Dest from_CCO
        [[ Pos440 = "622 926 702 956 1 809894018 55 184 622 926 0 9" ]],
      @NoEvent @Src _InitialState2 : @Dest ASSOCIATED_STA
        [[ Pos440 = "112 583 192 613 0 809894016 10 20 12 0" ]],
      BEACON_TIMER_EXPIRES() @Src ASSOCIATED_STA StateArgument_58 : @Dest 
        _JunctionState0
        [[ Pos440 = "330 657 609 679 0 809894016 181 42 0 11" ]],
      HANDOVER_DONE() @Src ASSOCIATED_STA StateArgument_47 : @Dest 
        _JunctionState0
        [[ Pos440 = "326 634 586 660 1 809894018 181 16 544 652 9 0" ]],
      @NoEvent @Src ASSOCIATED_STA : @Dest from_STA
        [[ Pos440 = "175 926 255 956 1 809894018 75 275 175 926 0 9" ]],
      @NoEvent @Src _JunctionState0 : @Dest CCO StateArgument_59 
        StateArgument_54 #cp_station_set_cco_status(1) #trace_cco()
        [[ Pos440 = "662 686 742 709 0 809894016 12 20 81 0" ]],
      @NoEvent @Src to_CCO : @Dest CCO
        [[ Pos440 = "544 939 624 969 1 809894018 0 8 597 952 27 184" ]],
      @NoEvent @Src to_STA : @Dest ASSOCIATED_STA
        [[ Pos440 = "156 925 236 955 1 809894018 0 9 156 955 56 275" ]];

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_1 (@State StateArgument_51) =

    @State
      POND = StateMachineSpec_7
        [[ Pos440 = "114 245 368 324 16 1 1638401" ]],
      USTA = StateMachineSpec_8
        [[ Pos440 = "476 245 730 324 16 1 1638401" ]],
      @Initial _InitialState1
        [[ Pos440 = "95 219 115 239 114689" ]];

    @StateRegion
      Region1 (POND, USTA, _InitialState1)
        [[ Pos440 = "0 0 684 142" ]];

    @Entry
      #launch_ustt_timer();

    @Exit;

    @Do;

    @InternalRule
      USTT_EXPIRES() : #launch_ustt_timer(),
      USTT_EXPIRES() StateArgument_51 : #transmit_unassoc_sta_mme(),
      BEACON_DETECTED(beacon_address) : #try_associate(beacon_address),
      RECEIVE_CC_ASSOC_CNF(mme_address) : #process_cc_assoc_cnf(mme_address);

    @TransitionRule
      TO_USTA() @Src POND : @Dest USTA
        [[ Pos440 = "370 260 473 282 0 809894016 254 36 0 36" ]],
      @NoEvent @Src _InitialState1 : @Dest POND
        [[ Pos440 = "157 215 179 239 0 809894016 20 15 23 0" ]];

    @TerminationRule;

  @End;

  @StateMachine StateMachineSpec_0 (@State StateArgument_51, 
    @State StateArgument_50, @State StateArgument_47, @State StateArgument_58, 
    @State StateArgument_59, @State StateArgument_54) =

    @State
      UCCO = StateMachineSpec_6
        [[ Pos440 = "250 441 768 499 16 1 1638401" ]],
      POND_OR_USTA = StateMachineSpec_1 (StateArgument_51)
        [[ Pos440 = "84 157 768 355 56 1 114689" ]],
      STA_OR_CCO = StateMachineSpec_2 (StateArgument_47, StateArgument_58, 
      StateArgument_59, StateArgument_54)
        [[ Pos440 = "84 548 768 981 36 1 114689" ]],
      @Initial _InitialState4
        [[ Pos440 = "27 166 47 186 114689" ]];

    @StateRegion
      Region1 (UCCO, POND_OR_USTA, STA_OR_CCO, _InitialState4)
        [[ Pos440 = "0 0 779 879" ]];

    @Entry;

    @Exit;

    @Do;

    @InternalRule;

    @TransitionRule
      BEACON_DETECTED(beacon_address) @Src UCCO : @Dest POND_OR_USTA.USTA
        [[ Pos440 = "527 389 707 412 0 809894016 366 0 140 79" ]],
      RECEIVE_CC_ASSOC_REQ(mme_address) @Src UCCO : @Dest 
        STA_OR_CCO._JunctionState0 #process_cc_assoc_req(mme_address)
        [[ Pos440 = "562 506 748 529 0 809894016 425 58 20 7" ]],
      USTA_TO_CCO() @Src POND_OR_USTA : @Dest STA_OR_CCO._JunctionState0
        [[ Pos440 = "571 422 748 444 0 809894016 567 198 12 0" ]],
      TO_STA() @Src POND_OR_USTA : @Dest STA_OR_CCO
        [[ Pos440 = "108 366 287 387 0 809894016 112 198 112 0" ]],
      POND_TO_UCCO() @Src POND_OR_USTA.POND StateArgument_50 : @Dest UCCO
        [[ Pos440 = "244 357 420 377 0 809894016 225 79 89 0" ]],
      BEACON_TIMER_EXPIRES() @Src POND_OR_USTA.USTA : @Dest UCCO
        [[ Pos440 = "452 364 585 384 0 809894016 19 79 245 0" ]],
      JOIN_WAIT_TIMER_EXPIRES() @Src STA_OR_CCO.CCO StateArgument_50 : @Dest 
        UCCO
        [[ Pos440 = "639 618 814 637 0 809894016 162 0 482 58" ]],
      JOIN_WAIT_TIMER_EXPIRES() @Src STA_OR_CCO.CCO StateArgument_51 : @Dest 
        POND_OR_USTA.USTA
        [[ Pos440 = "609 581 790 611 0 809894016 134 0 229 79" ]],
      BEACON_TIMER_EXPIRES() @Src STA_OR_CCO.ASSOCIATED_STA !StateArgument_58 :
         @Dest POND_OR_USTA.POND
        [[ Pos440 = "80 407 236 430 0 809894016 57 0 43 79" ]],
      TO_USTA() @Src STA_OR_CCO.ASSOCIATED_STA : @Dest POND_OR_USTA.USTA
        [[ Pos440 = "244 514 398 535 0 809894016 160 0 0 79" ]],
      @NoEvent @Src _InitialState4 : @Dest POND_OR_USTA
        [[ Pos440 = "47 146 127 176 0 809894016 20 10 0 19" ]];

    @TerminationRule;

  @End;

  @TopStateMachine Station =

    @State
      @Initial _InitialState0
        [[ Pos440 = "6 6 44 44 114689" ]],
      ON = StateMachineSpec_0 (SMALL_FSM.AVLN_TO_TRACK, 
      SMALL_FSM.NO_AVLN_TO_TRACK, SMALL_FSM.HANDOVER, SMALL_FSM.BACKUP_CCO, 
      SMALL_FSM.NOT_BACKUP, SMALL_FSM.NOT_PCCO)
        [[ Pos440 = "6 110 785 1020 31 1 114689" ]],
      @ConnectorEnd from_CCO
        [[ Pos440 = "808 16 897 41 114689" ]],
      @ConnectorStart to_CCO
        [[ Pos440 = "1494 16 1573 41 114689" ]],
      @Junction _JunctionState1
        [[ Pos440 = "842 75 862 95 1" ]],
      @Junction _JunctionState2
        [[ Pos440 = "1523 75 1543 95 1" ]],
      @ConnectorEnd from_STA
        [[ Pos440 = "8 1061 89 1081 114689" ]],
      @ConnectorStart to_STA
        [[ Pos440 = "685 1061 766 1081 114689" ]],
      @Junction _JunctionState3
        [[ Pos440 = "38 1121 58 1141 1" ]],
      @Junction _JunctionState4
        [[ Pos440 = "715 1121 735 1141 1" ]],
      INIT_SYSTEM
        [[ Pos440 = "200 26 593 76 16 1 1638401" ]],
      @ConnectorStart from_INIT
        [[ Pos440 = "632 28 738 48 114689" ]],
      @ConnectorEnd from_INIT
        [[ Pos440 = "824 1069 944 1089 114689" ]],
      @ConnectorEnd to_INIT
        [[ Pos440 = "624 54 735 74 114689" ]],
      @ConnectorStart to_INIT
        [[ Pos440 = "1402 1066 1492 1086 114689" ]],
      @Junction _JunctionState5
        [[ Pos440 = "869 1135 889 1155 1" ]],
      @Junction _JunctionState6
        [[ Pos440 = "1437 1131 1457 1151 1" ]],
      SMALL_FSM = StateMachineSpec_5 (ON.STA_OR_CCO.CCO, ON.POND_OR_USTA)
        [[ Pos440 = "26 17 709 1021 16 1 114689" ]];

    @StateRegion
      @OffPage Station (_InitialState0, ON, @ConnectorEnd from_CCO, 
      @ConnectorStart to_CCO, _JunctionState1, _JunctionState2, @ConnectorEnd 
      from_STA, @ConnectorStart to_STA, _JunctionState3, _JunctionState4, 
      INIT_SYSTEM, @ConnectorStart from_INIT, @ConnectorEnd from_INIT, 
      @ConnectorEnd to_INIT, @ConnectorStart to_INIT, _JunctionState5, 
      _JunctionState6)
        [[ Pos440 = "0 0 318 50", TextDisplayNote = "Preserve", 
           TextDisplayState = "Preserve", TextDisplayTransDesc = "Preserve", 
           View = "2 2 7" ]],
      @OffPage Small_FSMs (SMALL_FSM)
        [[ Pos440 = "1 0 148 50", TextDisplayNote = "Preserve", 
           TextDisplayState = "Preserve", TextDisplayTransDesc = "Preserve", 
           View = "2 2 7" ]];

    @Entry;

    @Exit;

    @Do;

    @InternalRule;

    @TransitionRule
      @NoEvent @Src _InitialState0 : @Dest INIT_SYSTEM #init_system()
        [[ Pos440 = "160 -114 284 -100 2 809894017 38 18 121 43 0 25" ]],
      RECEIVE_DRV_MAC_STOP_IND() @Src ON : @Dest INIT_SYSTEM
        [[ Pos440 = "61 86 295 104 0 809894016 280 0 86 50" ]],
      @NoEvent @Src from_CCO : @Dest _JunctionState1
        [[ Pos440 = "851 41 931 71 0 809894016 43 25 9 0" ]],
      RECEIVE_CC_ASSOC_REQ(mme_address) @Src _JunctionState1 : @Dest 
        _JunctionState2 #process_cc_assoc_req(mme_address)
        [[ Pos440 = "914 90 1485 120 1 809894018 20 11 884 110 0 9" ]],
      RECEIVE_CC_SET_TEI_MAP_REQ(mme_address) @Src _JunctionState1 : @Dest 
        _JunctionState2 #process_cc_set_tei_map_req(mme_address)
        [[ Pos440 = "908 128 1473 158 1 809894018 20 11 868 148 4 20" ]],
      @NoEvent @Src _JunctionState2 : @Dest to_CCO
        [[ Pos440 = "1531 45 1611 75 0 809894016 8 0 35 25" ]],
      @NoEvent @Src from_STA : @Dest _JunctionState3
        [[ Pos440 = "45 1051 125 1081 0 809894016 37 20 7 0" ]],
      RECEIVE_CC_SET_TEI_MAP_IND(mme_address) @Src _JunctionState3 : @Dest 
        _JunctionState4 #process_cc_set_tei_map_ind(mme_address)
        [[ Pos440 = "101 1144 671 1174 1 809894018 20 10 81 1164 0 20" ]],
      @NoEvent @Src _JunctionState4 : @Dest to_STA
        [[ Pos440 = "724 1121 804 1151 0 809894016 9 0 39 20" ]],
      RECEIVE_DRV_MAC_START_REQ(msg) @Src INIT_SYSTEM : @Dest ON
         #process_drv_start_mac_req(msg)
        [[ Pos440 = "517 83 779 108 0 809894016 309 50 503 0" ]],
      @NoEvent @Src INIT_SYSTEM : @Dest from_INIT
        [[ Pos440 = "593 3 673 33 0 809894016 393 7 0 9" ]],
      @NoEvent @Src from_INIT : @Dest _JunctionState5
        [[ Pos440 = "801 1059 881 1089 0 809894016 57 20 9 0" ]],
      @NoEvent @Src to_INIT : @Dest INIT_SYSTEM
        [[ Pos440 = "575 12 655 42 0 809894016 0 9 393 37" ]],
      RECEIVE_DRV_SET_MAC_ADDRESS(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_mac_address(msg)
        [[ Pos440 = "916 1153 1420 1183 1 809894018 7 20 876 1183 1447 1174 8 20"
            ]],
      RECEIVE_DRV_SET_CCO_PREFERENCE_REQ(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_cco_preference(msg)
        [[ Pos440 = "922 1211 1402 1241 1 809894018 0 12 893 1238 10 20" ]],
      RECEIVE_DRV_SET_WAS_CCO(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_was_cco(msg)
        [[ Pos440 = "919 1257 1426 1287 1 809894018 9 0 891 1285 20 11" ]],
      RECEIVE_DRV_SET_NPW_REQ(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_npw(msg)
        [[ Pos440 = "896 1311 1437 1341 1 809894018 12 20 953 1344 11 20" ]],
      RECEIVE_DRV_SET_DPW_REQ(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_dpw_req(msg)
        [[ Pos440 = "896 1363 1443 1393 1 809894018 0 10 948 1394 14 20" ]],
      RECEIVE_DRV_SET_M_STA_HFID(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_m_sta_hfid(msg)
        [[ Pos440 = "895 1423 1429 1453 1 809894018 7 20 887 1449 10 20" ]],
      RECEIVE_DRV_SET_U_STA_HFID(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_u_sta_hfid(msg)
        [[ Pos440 = "913 1463 1421 1493 1 809894018 12 20 909 1493 8 20" ]],
      RECEIVE_DRV_SET_AVLN_HFID(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_avln_hfid(msg)
        [[ Pos440 = "913 1516 1432 1546 1 809894018 20 7 908 1545 20 11" ]],
      RECEIVE_DRV_SET_SL(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_sl(msg)
        [[ Pos440 = "889 1570 1434 1600 1 809894018 0 13 984 1596 20 11" ]],
      RECEIVE_DRV_SET_TONEMASK(msg) @Src _JunctionState5 : @Dest 
        _JunctionState6 #process_drv_set_tonemask(msg)
        [[ Pos440 = "909 1618 1434 1648 1 809894018 7 20 884 1647 20 10" ]],
      RECEIVE_DRV_SET_NID(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_nid(msg)
        [[ Pos440 = "906 1662 1434 1692 1 809894018 10 0 921 1696 1448 1677 0 8"
            ]],
      RECEIVE_DRV_SET_SNID(msg) @Src _JunctionState5 : @Dest _JunctionState6
         #process_drv_set_snid(msg)
        [[ Pos440 = "891 1713 1431 1743 1 809894018 0 6 898 1744 1457 1738 20 10"
            ]],
      @NoEvent @Src _JunctionState6 : @Dest to_INIT
        [[ Pos440 = "1367 1131 1447 1161 0 809894016 10 0 65 20" ]];

    @TerminationRule;

    [[ Pos440 = "10 10 476 76 16 1 114689" ]]

  @End;