summaryrefslogtreecommitdiffstats
path: root/net/802/pseudo/pseudocode
blob: f91978ef713e0d367af1ed4a686dacfa25f933c0 (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
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
;============================================================================
;
; translate this with 
; 	cat pseudocode | sed -f act2num |  awk -f compile.awk >pseudocode.h
;
; actionname	pseudocode
;
;============================================================================
ADM1		SEND_SABME_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=0
		S_FLAG:=0
;
; instructions in ADM2 have been changed:
; 1. 	P_FLAG:=P is probably wrong in doc...
; 	I think it should be F_FLAG:=P the way it is in CONN3
; 2.	CONNECT_RESPONSE has been wired in here,
;	CONN1 is no longer referenced
;
ADM2		F_FLAG:=P
		SEND_UA_RSP(F=X)
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		P_FLAG:=0
		REMOTE_BUSY:=0
		CONNECT_INDICATION
ADM3		SEND_DM_RSP(F=X)
ADM4		SEND_DM_RSP(F=X)
ADM5		NOP
;============================================================================
;CONN1		SEND_UA_RSP(F=X)
;		V(S):=0
;		V(R):=0
;		RETRY_COUNT:=0
;		P_FLAG:=0
;		REMOTE_BUSY:=0
CONN2		SEND_DM_RSP(F=X)
CONN3		F_FLAG:=P
CONN4		DISCONNECT_INDICATION
CONN5		NOP
;============================================================================
RESWAIT1	SEND_SABME_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=0
RESWAIT2	SEND_UA_RSP(F=X)
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		P_FLAG:=0
		REMOTE_BUSY:=0
		RESET_CONFIRM
RESWAIT3	SEND_DISC_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=0
RESWAIT4	SEND_DM_RSP(F=X)		
RESWAIT5	DISCONNECT_INDICATION
RESWAIT6	S_FLAG:=1
		F_FLAG:=P
RESWAIT7	SEND_DM_RSP(F=X)
		DISCONNECT_INDICATION
RESWAIT8	NOP
;============================================================================
RESCHK1		SEND_UA_RSP(F=X)
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		P_FLAG:=0
		REMOTE_BUSY:=0
RESCHK2		SEND_DM_RSP(F=X)
RESCHK3		DISCONNECT_INDICATION
RESCHK4		F_FLAG:=P
RESCHK5		SEND_DM_RSP(F=X)
		DISCONNECT_INDICATION
RESCHK6		NOP
;============================================================================
SETUP1		SEND_UA_RSP(F=X)
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		S_FLAG:=1
SETUP2		STOP_ACK_TIMER
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		UPDATE_P_FLAG
		CONNECT_CONFIRM
		REMOTE_BUSY:=0
SETUP3		P_FLAG:=0
		CONNECT_CONFIRM
		REMOTE_BUSY:=0
SETUP4		SEND_DM_RSP(F=X)
		DISCONNECT_INDICATION
		STOP_ACK_TIMER
SETUP5		DISCONNECT_INDICATION
		STOP_ACK_TIMER
SETUP6		NOP
SETUP7		SEND_SABME_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
SETUP8		DISCONNECT_INDICATION
;============================================================================
RESET1		SEND_UA_RSP(F=X)
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		S_FLAG:=1
RESET2		STOP_ACK_TIMER
		V(S):=0
		V(R):=0
		RETRY_COUNT:=0
		UPDATE_P_FLAG
		RESET_CONFIRM
		REMOTE_BUSY:=0
RESET3		P_FLAG:=0
		RESET_CONFIRM
		REMOTE_BUSY:=0
RESET4		SEND_DM_RSP(F=X)
		DISCONNECT_INDICATION
		STOP_ACK_TIMER
RESET5		DISCONNECT_INDICATION
		STOP_ACK_TIMER
RESET6		NOP
RESET7		SEND_SABME_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
RESET8		DISCONNECT_INDICATION
;============================================================================
D_CONN1		SEND_DM_RSP(F=X)
		STOP_ACK_TIMER
D_CONN2		STOP_ACK_TIMER
D_CONN3		SEND_UA_RSP(F=X)
D_CONN4		STOP_ACK_TIMER
D_CONN5		NOP
D_CONN6		SEND_DISC_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
D_CONN7		NOP
;============================================================================
ERR1		RESET_INDICATION(REMOTE)
		STOP_ACK_TIMER
		F_FLAG:=P
ERR2		SEND_UA_RSP(F=X)
		DISCONNECT_INDICATION
		STOP_ACK_TIMER
ERR3		DISCONNECT_INDICATION
		STOP_ACK_TIMER
ERR4		RESET_INDICATION(LOCAL)
		STOP_ACK_TIMER
		REPORT_STATUS(FRMR_RECEIVED)
		S_FLAG:=0
ERR5		RE-SEND_FRMR_RSP(F=P)
		START_ACK_TIMER
ERR6		NOP
ERR7		RE-SEND_FRMR_RSP(F=0)
		START_ACK_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
ERR8		S_FLAG:=0
		RESET_INDICATION(LOCAL)
;============================================================================
; the shared actions are common to states NORMAL, BUSY, REJECT,
; AWAIT, AWAIT_BUSY and AWAIT_REJECT.
;============================================================================
SH1		SEND_DISC_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
SH2		SEND_SABME_CMD(P=X)
		P_FLAG:=P
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
		S_FLAG:=0
SH3		RESET_INDICATION(REMOTE)
		F_FLAG:=P
		STOP_ALL_TIMERS
SH4		SEND_UA_RSP(F=X)
		DISCONNECT_INDICATION
		STOP_ALL_TIMERS
SH5		STOP_ALL_TIMERS
		RESET_INDICATION(LOCAL)
		REPORT_STATUS(FRMR_RECEIVED)
		S_FLAG:=0
SH6		DISCONNECT_INDICATION
		STOP_ALL_TIMERS
SH7		SEND_FRMR_RSP(F=X)
		REPORT_STATUS(FRMR_SENT)
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
SH8		SEND_FRMR_RSP(F=0)
		REPORT_STATUS(FRMR_SENT)
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
SH9		SEND_FRMR_RSP(F=0)
		REPORT_STATUS(FRMR_SENT)
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
SH10		SEND_FRMR_RSP(F=X)
		REPORT_STATUS(FRMR_SENT)
		START_ACK_TIMER
		STOP_OTHER_TIMERS
		RETRY_COUNT:=0
SH11		STOP_ALL_TIMERS
		RESET_INDICATION(LOCAL)
		S_FLAG:=0
;============================================================================
NORMAL1		SEND_I_CMD(P=1)
		START_P_TIMER
		START_ACK_TIMER_IF_NOT_RUNNING
;		SEND_I_XXX(X=0)
;		START_ACK_TIMER_IF_NOT_RUNNING
NORMAL2		SEND_I_XXX(X=0)
		START_ACK_TIMER_IF_NOT_RUNNING
NORMAL3		SEND_RNR_CMD(F=1)
		START_P_TIMER
		DATA_FLAG:=0
;		SEND_RNR_XXX(X=0)
;		DATA_FLAG:=0
NORMAL4		SEND_RNR_XXX(X=0)
		DATA_FLAG:=0
NORMAL5		SEND_REJ_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		UPDATE_P_FLAG
		START_REJ_TIMER
		IF_F=1_CLEAR_REMOTE_BUSY
;		SEND_REJ_CMD(P=1)
;		UPDATE_N(R)_RECEIVED
;		START_P_TIMER
;		START_REJ_TIMER
;		IF_F=1_CLEAR_REMOTE_BUSY
NORMAL6		SEND_REJ_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		START_REJ_TIMER
NORMAL7		SEND_REJ_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		START_REJ_TIMER
;
; the order of opcodes in NORMAL8 is changed.
; the transition table will execute NORMAL8A for incomming pdus
; with p/f 1, pdus with pf 0 are treated in NORMAL8B.
;   
NORMAL8A	V(R):=V(R)+1
		SEND_ACKNOWLEDGE_CMD(P=1)
		START_P_TIMER
		UPDATE_N(R)_RECEIVED
		IF_F=1_CLEAR_REMOTE_BUSY
		DATA_INDICATION
;
NORMAL8B	V(R):=V(R)+1
		UPDATE_P_FLAG
		SEND_ACKNOWLEDGE_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		IF_F=1_CLEAR_REMOTE_BUSY
		DATA_INDICATION
;
; the order of opcodes in NORMAL9 is changed 
NORMAL9		V(R):=V(R)+1
		SEND_ACKNOWLEDGE_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
;
; the order of opcodes in NORMAL10 is changed 
NORMAL10	V(R):=V(R)+1
		SEND_ACKNOWLEDGE_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
NORMAL11	UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
NORMAL12	SEND_ACKNOWLEDGE_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
NORMAL13	UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
NORMAL14	SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
NORMAL15	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		UPDATE_P_FLAG
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		V(S):=N(R)
;		UPDATE_N(R)_RECEIVED
;		START_P_TIMER
;		RE-SEND_I_CMD(P=1)
;		CLEAR_REMOTE_BUSY
NORMAL16	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
NORMAL17	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		RE-SEND_I_RSP(F=1)
		CLEAR_REMOTE_BUSY
NORMAL18	SEND_RR_CMD(P=1)
		START_P_TIMER
NORMAL19	P_FLAG:=0
;		SEND_RR_CMD(P=1)
;		START_P_TIMER
;		RETRY_COUNT:=RETRY_COUNT+1
NORMAL20	SEND_RR_CMD(P=1)
		START_P_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
BUSY1		SEND_I_CMD(P=1)
		START_P_TIMER
		START_ACK_TIMER_IF_NOT_RUNNING
;		SEND_I_XXX(X=0)
;		START_ACK_TIMER_IF_NOT_RUNNING
BUSY2		SEND_I_XXX(X=0)
		START_ACK_TIMER_IF_NOT_RUNNING
BUSY3		SEND_REJ_CMD(P=1)
		START_REJ_TIMER
		START_P_TIMER
;		SEND_REJ_XXX(X=0)
;		START_REJ_TIMER
BUSY4		SEND_REJ_XXX(X=0)
		START_REJ_TIMER
BUSY5		SEND_RR_CMD(P=1)
		START_P_TIMER
		SEND_RR_XXX(X=0)
BUSY6		SEND_RR_XXX(X=0)
BUSY7		SEND_RR_CMD(P=1)
		START_P_TIMER
		SEND_RR_XXX(X=0)
BUSY8		SEND_RR_XXX(X=0)
BUSY9		OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
		IF_F=1_CLEAR_REMOTE_BUSY
;		SEND_RNR_CMD(P=1)
;		START_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
;		IF_F=1_CLEAR_REMOTE_BUSY
BUSY10		OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
BUSY11		SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
BUSY12		SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG=2_STOP_REJ_TIMER
		DATA_FLAG:=1
;		V(R):=V(R)+1
;		DATA_INDICATION
;		SEND_RNR_RSP(F=1)
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG=2_STOP_REJ_TIMER
;		DATA_FLAG:=0
BUSY13		OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG=2_STOP_REJ_TIMER
		DATA_FLAG:=1
		IF_F=1_CLEAR_REMOTE_BUSY
;		SEND_RNR_CMD(F=1)
;		START_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG=2_STOP_REJ_TIMER
;		DATA_FLAG:=1
;		IF_F=1_CLEAR_REMOTE_BUSY
;		V(R):=V(R)+1
;		DATA_INDICATION
;		SEND_RNR_CMD(F=1)
;		START_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG=2_STOP_REJ_TIMER
;		DATA_FLAG:=0
;		IF_F=1_CLEAR_REMOTE_BUSY
;		V(R):=V(R)+1
;		DATA_INDICATION
;		UPDATE_P_FLAG
;		OPTIONAL_SEND_RNR_XXX(X=0)
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG=2_STOP_REJ_TIMER
;		DATA_FLAG:=0
;		IF_F=1_CLEAR_REMOTE_BUSY
BUSY14		OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		IF_DATA_FLAG=2_STOP_REJ_TIMER
		DATA_FLAG:=1
;		V(R):=V(R)+1
;		DATA_INDICATION
;		OPTIONAL_SEND_RNR_XXX(X=0)
;		UPDATE_N(R)_RECEIVED
;		IF_DATA_FLAG=2_STOP_REJ_TIMER
;		DATA_FLAG:=0
BUSY15		UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
BUSY16		SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
BUSY17		UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
BUSY18		SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
BUSY19		V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		UPDATE_P_FLAG
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		V(S):=N(R)
;		UPDATE_N(R)_RECEIVED
;		RE-SEND_I_CMD(P=1)
;		CLEAR_REMOTE_BUSY
BUSY20		V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
BUSY21		V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		SEND_RNR_RSP(F=1)
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
BUSY22		SEND_RNR_CMD(F=1)
		START_P_TIMER
BUSY23		P_FLAG:=0
;		SEND_RNR_CMD(F=1)
;		START_P_TIMER
;		RETRY_COUNT:=RETRY_COUNT+1
BUSY24		SEND_RNR_CMD(F=1)
		START_P_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
BUSY25		DATA_FLAG:=1
;		SEND_RNR_CMD(F=1)
;		START_P_TIMER
;		RETRY_COUNT:=RETRY_COUNT+1
;		DATA_FLAG:=1
BUSY26		DATA_FLAG:=1
;============================================================================
REJECT1		SEND_I_CMD(P=1)
		START_P_TIMER
		START_ACK_TIMER_IF_NOT_RUNNING
;		SEND_I_XXX(X=0)
;		START_ACK_TIMER_IF_NOT_RUNNING
REJECT2		SEND_I_XXX(X=0)
		START_ACK_TIMER_IF_NOT_RUNNING
REJECT3		SEND_RNR_CMD(F=1)
		START_P_TIMER
		DATA_FLAG:=2
;		SEND_RNR_XXX(X=0)
;		DATA_FLAG:=2
REJECT4		SEND_RNR_XXX(X=0)
		DATA_FLAG:=2
REJECT5		UPDATE_N(R)_RECEIVED
		UPDATE_P_FLAG
		IF_F=1_CLEAR_REMOTE_BUSY
REJECT6		SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
;
; order of opcodes in REJECT7 is changed 
REJECT7		V(R):=V(R)+1
		SEND_ACKNOWLEDGE_CMD(P=1)
		START_P_TIMER
		UPDATE_N(R)_RECEIVED
		IF_F=1_CLEAR_REMOTE_BUSY
		STOP_REJ_TIMER
		DATA_INDICATION
;		V(R):=V(R)+1
;		DATA_INDICATION
;		UPDATE_P_FLAG
;		SEND_ACKNOWLEDGE_XXX(X=0)
;		UPDATE_N(R)_RECEIVED
;		IF_F=1_CLEAR_REMOTE_BUSY
;		STOP_REJ_TIMER
;
; order of opcodes in REJECT8 is changed 
REJECT8		V(R):=V(R)+1
		SEND_ACKNOWLEDGE_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		STOP_REJ_TIMER
		DATA_INDICATION
;
; order of opcodes in REJECT9 is changed 
REJECT9		V(R):=V(R)+1
		SEND_ACKNOWLEDGE_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		STOP_REJ_TIMER
		DATA_INDICATION
REJECT10	UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
REJECT11	SEND_ACKNOWLEDGE_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
REJECT12	UPDATE_P_FLAG
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
REJECT13	SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
REJECT14	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		UPDATE_P_FLAG
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		V(S):=N(R)
;		UPDATE_N(R)_RECEIVED
;		RE-SEND_I_CMD(P=1)
;		START_P_TIMER
;		CLEAR_REMOTE_BUSY
REJECT15	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
REJECT16	V(S):=N(R)
		UPDATE_N(R)_RECEIVED
		RE-SEND_I_RSP(F=1)
		CLEAR_REMOTE_BUSY
REJECT17	SEND_RR_CMD(P=1)
		START_P_TIMER
REJECT18	SEND_REJ_CMD(P=1)
		START_P_TIMER
		START_REJ_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
REJECT19	P_FLAG:=0
;		SEND_RR_CMD(P=1)
;		START_P_TIMER
;		START_REJ_TIMER
;		RETRY_COUNT:=RETRY_COUNT+1
REJECT20	SEND_RR_CMD(P=1)
		START_P_TIMER
		START_REJ_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT1		SEND_RNR_XXX(X=0)
		DATA_FLAG:=0
AWAIT2		SEND_REJ_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		RE-SEND_I_XXX(X=0)
		START_REJ_TIMER
		CLEAR_REMOTE_BUSY
;		SEND_REJ_CMD(P=1)
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_XXX(X=0)
;		START_P_TIMER
;		START_REJ_TIMER
;		CLEAR_REMOTE_BUSY
AWAIT3		SEND_REJ_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		START_REJ_TIMER
AWAIT4		SEND_REJ_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		START_REJ_TIMER
;
; order of opcode in AWAIT5 changed
AWAIT5		V(R):=V(R)+1
		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		RE-SEND_I_CMD(P=1)_OR_SEND_RR
		START_P_TIMER
		CLEAR_REMOTE_BUSY
		DATA_INDICATION
;		V(R):=V(R)+1
;		DATA_INDICATION
;		STOP_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_XXX(X=0)_OR_SEND_RR
;		CLEAR_REMOTE_BUSY
;
; order of opcode in AWAIT6 changed
AWAIT6		V(R):=V(R)+1
		SEND_RR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
;
; order of opcode in AWAIT7 changed
AWAIT7		V(R):=V(R)+1
		SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
AWAIT8		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_CMD(P=1)
;		START_P_TIMER
;		CLEAR_REMOTE_BUSY
AWAIT9		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT10		SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT11		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		SET_REMOTE_BUSY
AWAIT12		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT13		SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT14		SEND_RR_CMD(P=1)
		START_P_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT_BUSY1	SEND_REJ_XXX(X=0)
		START_REJ_TIMER		
AWAIT_BUSY2	SEND_RR_XXX(X=0)
AWAIT_BUSY3	SEND_RR_XXX(X=0)
AWAIT_BUSY4	OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		DATA_FLAG:=1
		CLEAR_REMOTE_BUSY
		RE-SEND_I_XXX(X=0)
;		SEND_RNR_CMD(F=1)
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		START_P_TIMER
;		DATA_FLAG:=1
;		CLEAR_REMOTE_BUSY
;		RE-SEND_I_XXX(X=0)
AWAIT_BUSY5	OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		DATA_FLAG:=1
AWAIT_BUSY6	SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		DATA_FLAG:=1
AWAIT_BUSY7	OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		DATA_FLAG:=1
		STOP_P_TIMER
		CLEAR_REMOTE_BUSY
		RE-SEND_I_XXX(X=0)
;		SEND_RNR_CMD(F=1)
;		V(R):=V(R)+1
;		DATA_INDICATION
;		START_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		DATA_FLAG:=0
;		CLEAR_REMOTE_BUSY
;		RE-SEND_I_XXX(X=0)
;		OPTIONAL_SEND_RNR_XXX(X=0)
;		V(R):=V(R)+1
;		DATA_INDICATION
;		STOP_P_TIMER
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		DATA_FLAG:=0
;		CLEAR_REMOTE_BUSY
;		RE-SEND_I_XXX(X=0)
AWAIT_BUSY8	OPTIONAL_SEND_RNR_XXX(X=0)
		UPDATE_N(R)_RECEIVED
		DATA_FLAG:=1
;		OPTIONAL_SEND_RNR_XXX(X=0)
;		V(R):=V(R)+1
;		DATA_INDICATION
;		UPDATE_N(R)_RECEIVED
;		DATA_FLAG:=0
AWAIT_BUSY9	SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		DATA_FLAG:=1
;		SEND_RNR_RSP(F=1)
;		V(R):=V(R)+1
;		DATA_INDICATION
;		UPDATE_N(R)_RECEIVED
;		DATA_FLAG:=0
AWAIT_BUSY10	UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_CMD(P=1)
;		START_P_TIMER
;		CLEAR_REMOTE_BUSY
AWAIT_BUSY11	UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT_BUSY12	SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT_BUSY13	UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		SET_REMOTE_BUSY
AWAIT_BUSY14	UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT_BUSY15	SEND_RNR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT_BUSY16	SEND_RNR_CMD(F=1)
		START_P_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT_REJECT1	SEND_RNR_XXX(X=0)
		DATA_FLAG:=2
AWAIT_REJECT2	UPDATE_N(R)_RECEIVED
AWAIT_REJECT3	SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
;
; order of opcodes in AWAIT_REJECT4 changed
AWAIT_REJECT4	V(R):=V(R)+1
		UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		RE-SEND_I_CMD(P=1)_OR_SEND_RR
		START_P_TIMER
		STOP_REJ_TIMER
		CLEAR_REMOTE_BUSY
		DATA_INDICATION
;		V(R):=V(R)+1
;		DATA_INDICATION
;		STOP_P_TIMER
;		STOP_REJ_TIMER
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_CMD(P=1)_OR_SEND_RR
;		CLEAR_REMOTE_BUSY
;
; order of opcodes in AWAIT_REJECT5 changed
AWAIT_REJECT5	V(R):=V(R)+1
		SEND_RR_XXX(X=0)
		STOP_REJ_TIMER
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
;
; order of opcodes in AWAIT_REJECT6 changed
AWAIT_REJECT6	V(R):=V(R)+1
		SEND_RR_RSP(F=1)
		STOP_REJ_TIMER
		UPDATE_N(R)_RECEIVED
		DATA_INDICATION
AWAIT_REJECT7	UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		RE-SEND_I_XXX(X=0)
		CLEAR_REMOTE_BUSY
;		UPDATE_N(R)_RECEIVED
;		V(S):=N(R)
;		RE-SEND_I_CMD(P=1)
;		START_P_TIMER
;		CLEAR_REMOTE_BUSY
AWAIT_REJECT8	UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT_REJECT9	SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		CLEAR_REMOTE_BUSY
AWAIT_REJECT10	UPDATE_N(R)_RECEIVED
		V(S):=N(R)
		STOP_P_TIMER
		SET_REMOTE_BUSY
AWAIT_REJECT11	UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT_REJECT12	SEND_RR_RSP(F=1)
		UPDATE_N(R)_RECEIVED
		SET_REMOTE_BUSY
AWAIT_REJECT13	SEND_REJ_CMD(P=1)
		START_P_TIMER
		RETRY_COUNT:=RETRY_COUNT+1
;============================================================================