package Communication.CSMA;

module station(bool ?transreq, ?busy, ?cd, int ?station_counter,
               bool !cycle_begin, !cycle_end, !counter_reset) {

  bool trans_done, new_transmit;

  loop {
        trans_done = false;
        sender_wait: await(transreq);

        abort {
              loop {
                    abort {
                          cycle_begin = true;
                          counter_reset = true;
                          sender_transmit: await(808 == station_counter);
                          cycle_end = true;
                          trans_done = true;
                    } when (cd | busy);

                    new_transmit = false;
                    sender_retry: await (!cd);

                    weak abort {
                          counter_reset = true;
                          sender_nond_wait: await(52 == station_counter);
                          |||
                          sender_whises_trans: pause;
                          new_transmit = true;
                    } when(new_transmit);
              }
        }when (trans_done);
  }
}