Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////
- //
- // Skeleton5.ino
- //
- // 2019-01-15 Jens Andersson
- //
- ////////////////////////////
- #include <etsf15lib.h>
- //
- // Runtime
- //
- // Predefined runtime variables
- int state = NONE;
- int seq_no;
- int selected_led;
- Shield sh; // note! no () since constructor takes no arguments
- Transmit tx;
- Receive rx;
- //////////////////////////////////////////////////////////
- //
- // Add your global constant and variabel declaretions here
- int symbol;
- byte SFD_BUFFER;
- int rx_bit;
- long ct;
- int rec_address;
- long ct1;
- int nbr_seq;
- int attempts;
- //
- //////////////////////////////////////////////////////////
- //
- // Code
- //
- void setup() {
- sh.begin();
- state = APP_PRODUCE;
- attempts = 0;
- nbr_seq = 0;
- sh.my_address = 0;
- Serial.println("[MAIN LOOP]");
- Serial.print(" My address = "); Serial.println(sh.my_address);
- //////////////////////////////////////////////////////////
- //
- // Add your init code here
- //
- //////////////////////////////////////////////////////////
- }
- void loop() {
- switch (state) {
- case L1_SEND:
- Serial.println("[State] L1_SEND");
- l1_send(tx.frame, LEN_FRAME);
- state = L1_RECEIVE;
- // ---
- break;
- case L1_RECEIVE:
- Serial.println("[State] L1_RECEIVE");
- sh.allDebsOff();
- SFD_BUFFER = 0;
- rx_bit = 0;
- rx_bit = sh.adConv(analogRead(PIN_RX));
- ct = millis();
- while (rx_bit == 0 && millis() - ct < 20000) {
- rx_bit = sh.adConv(analogRead(PIN_RX));
- }
- if ( millis() - ct > 20000) {
- Serial.println("Timeout");
- state = L2_RETRANSMIT;
- }
- while ( ((SFD_BUFFER ^ SFD_BYTE) != 0) && (millis() - ct < 20000) ) {
- ct1 = millis();
- rx_bit = sh.adConv(analogRead(PIN_RX));
- SFD_BUFFER <<= 1;
- SFD_BUFFER |= (rx_bit & 1);
- Serial.print(rx_bit);
- delay(T_S - (millis() - ct1));
- }
- if ( millis() - ct >= 20000) {
- Serial.println("Timeout efter SFD");
- state = APP_PRODUCE;
- break;
- }
- for (int i = 0; i < 32; i++) {
- ct = millis();
- rx_bit = sh.adConv(analogRead(PIN_RX));
- rx.frame[i] = rx_bit;
- delay(T_S - (millis() - ct));
- Serial.println("DONE");
- }
- state = L2_FRAME_REC;
- // ---
- break;
- case L2_DATA_SEND:
- Serial.println("[State] L2_DATA_SEND");
- // +++ add code here
- tx.frame_from = 0;
- tx.frame_to = rec_address; //ssage[MESSAGE_ADDRESS];
- tx.frame_type = FRAME_TYPE_DATA;
- if (nbr_seq >= 16) {
- nbr_seq = 0;
- }
- tx.frame_seqnum = nbr_seq;
- nbr_seq++;
- tx.frame_payload = tx.message[MESSAGE_PAYLOAD];
- tx.frame_crc = 0;
- tx.frame_generation();
- state = L1_SEND;
- break;
- case L2_RETRANSMIT:
- Serial.println("[State] L2_RETRANSMIT");
- if (attempts <= MAX_TX_ATTEMPTS) {
- attempts++;
- state = L1_SEND;
- } else {
- Serial.println("Max attempts");
- attempts = 0;
- state = APP_PRODUCE;
- }
- // ---
- break;
- case L2_FRAME_REC:
- Serial.println("[State] L2_FRAME_REC");
- rx.frame_decompose();
- if (rx.frame_to == sh.my_address) {
- Serial.println("Till oss");
- if (rx.frame_type == FRAME_TYPE_ACK) {
- state = L2_ACK_REC;
- break;
- } else {
- state = APP_PRODUCE;
- break;
- }
- } else {
- state = L1_RECEIVE;
- Serial.println("Inte till oss");
- break;
- }
- // ---
- break;
- case L2_ACK_SEND:
- Serial.println("[State] L2_ACK_SEND");
- // +++ add code here
- // ---
- break;
- case L2_ACK_REC:
- Serial.println("[State] L2_ACK_REC");
- if (rx.frame_seqnum == nbr_seq-1) {
- Serial.println("Korrekt seq");
- state = APP_PRODUCE;
- } else {
- Serial.println("Fel seqnum");
- state = L2_RETRANSMIT;
- }
- break;
- case APP_PRODUCE:
- Serial.println("[State] APP_PRODUCE");
- selected_led = sh.select_led();
- Serial.println(selected_led);
- tx.message[MESSAGE_PAYLOAD] = selected_led;
- rec_address = sh.get_address();
- tx.message[MESSAGE_ADDRESS] = rec_address;
- state = L2_DATA_SEND;
- // ---
- break;
- case APP_ACT:
- Serial.println("[State] APP_ACT");
- // +++ add code here
- // ---
- break;
- case HALT:
- Serial.println("[State] HALT");
- sh.halt();
- break;
- default:
- Serial.println("UNDEFINED STATE");
- break;
- }
- }
- void l1_send(byte l2frame[], int framelen) {
- for (int i = 0; i < LEN_PREAMBLE; i++) {
- digitalWrite(PIN_TX, PREAMBLE[i]);
- delay(T_S);
- }
- for (int i = 0; i < LEN_SFD; i++) {
- digitalWrite(PIN_TX, SFD[i]);
- delay(T_S);
- }
- for (int i = 0; i < framelen; i++) {
- digitalWrite(PIN_TX, l2frame[i]);
- delay(T_S);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement