From 8d5fc18076945b31d0f325833d218255eb6c5064 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Mon, 21 Nov 2016 12:48:29 +0100 Subject: [PATCH 01/10] Uart part of arduino wrapper done --- software/Arduino/.clang_complete | 4 ++ software/Arduino/ardusss7.cpp | 71 ++++++++++++++++++++++++++++++++ software/Arduino/ardusss7.h | 33 +++++++++++++++ software/sss7core/sss7.h | 2 +- 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 software/Arduino/.clang_complete create mode 100644 software/Arduino/ardusss7.cpp create mode 100644 software/Arduino/ardusss7.h diff --git a/software/Arduino/.clang_complete b/software/Arduino/.clang_complete new file mode 100644 index 0000000..be23e0c --- /dev/null +++ b/software/Arduino/.clang_complete @@ -0,0 +1,4 @@ +-I../sss7core +-I/usr/avr/include +-D__AVR_ATmega2560__ +-DF_CPU=16000000 diff --git a/software/Arduino/ardusss7.cpp b/software/Arduino/ardusss7.cpp new file mode 100644 index 0000000..cd13535 --- /dev/null +++ b/software/Arduino/ardusss7.cpp @@ -0,0 +1,71 @@ +#include "ardusss7.h" + +#include +#include + +SSS7Wrapper SSS7; + +SSS7Wrapper::SSS7Wrapper() { + sss7_init(); + + this->setupUart(); + this->setupTimer(); +} + +uint8_t SSS7Wrapper::canSend() { + return sss7_can_send(); +} + +void SSS7Wrapper::send(uint8_t msg[SSS7_PAYLOAD_SIZE]) { + return sss7_send(msg); +} + +uint8_t SSS7Wrapper::sendFailed() { + return sss7_send_failed(); +} +uint8_t SSS7Wrapper::hasReceived() { + return sss7_has_received(); +} + +void SSS7Wrapper::getReceived(uint8_t msg[SSS7_PAYLOAD_SIZE]) { + sss7_get_received(msg); +} + + +void SSS7Wrapper::setupUart() { + UBRR1H = UBRR_VAL >> 8; // Setting baudrate + UBRR1L = UBRR_VAL & 0xFF; + + UCSR1B = (1 << TXEN1) | (1 << RXEN1); // Enable TX and RX + UCSR1C = (1 << UCSZ11) | (1 << UCSZ10); // Asynchronous 8N1 + + // flush UDR + do + { + UDR1; + } + while (UCSR1A & (1 << RXC1)); + + // reset tx and rx complete flags + UCSR1A = (1 << RXC1) | (1 << TXC1); + + UCSR1B |= (1 << TXCIE1) | (1 << RXCIE1); // enable tx and rx interrupts +} + +void uart_put_byte(uint8_t byte) { + UDR1 = byte; +} + +uint8_t uart_get_byte() { + return UDR1; +} + +ISR(USART_RXC1_vect) { + sss7_process_rx(); +} + +ISR(USART_TXC1_vect) { + sss7_process_tx(); +} + +//TODO: Setup Timer diff --git a/software/Arduino/ardusss7.h b/software/Arduino/ardusss7.h new file mode 100644 index 0000000..404e6e0 --- /dev/null +++ b/software/Arduino/ardusss7.h @@ -0,0 +1,33 @@ +#ifndef _ARDUSSS7_H_ +#define _ARDUSSS7_H_ + +#include "sss7.h" + +class SSS7Wrapper { + public: + SSS7Wrapper(); + uint8_t canSend(); + void send(uint8_t msg[SSS7_PAYLOAD_SIZE]); + uint8_t sendFailed(); + uint8_t hasReceived(); + void getReceived(uint8_t msg[SSS7_PAYLOAD_SIZE]); + + private: + void setupUart(); + void setupTimer(); +} + +extern SSS7Wrapper SSS7; + +#define BAUD 9600UL + +// Some calculations ... +#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // Rounding magic +#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Real baudrate +#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Error in 0.1% + +#if ((BAUD_ERROR<950) || (BAUD_ERROR>1050)) // Make sure our UBRR_VAL will work + #error Baudrate error is bigger then 1% ! +#endif + +#endif diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index 7e82f8e..f92e33b 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -1,7 +1,7 @@ #ifndef _SSS7_H_ #define _SSS7_H_ -#include "stdint.h" +#include enum sss7State { SSS7_IDLE, From d0af74c7de15e89d17ea4b6c10ffe0bf8d9f5e40 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Mon, 21 Nov 2016 13:10:14 +0100 Subject: [PATCH 02/10] Added timer code for timeouts --- software/Arduino/ardusss7.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/software/Arduino/ardusss7.cpp b/software/Arduino/ardusss7.cpp index cd13535..9962df9 100644 --- a/software/Arduino/ardusss7.cpp +++ b/software/Arduino/ardusss7.cpp @@ -68,4 +68,15 @@ ISR(USART_TXC1_vect) { sss7_process_tx(); } -//TODO: Setup Timer + +void SSS7Wrapper::setupTimer() { + TCNT4 = 65535 - 16000; //Preload for 16000 ticks to overflow + TIMSK4 |= (1 << TOIE0); + TCCR4B = (1 << CS40); // Prescaler 1 +} + +ISR(TIMER4_OVF_vect) { + TCNT4 = 65535 - 16000; //Preload for 16000 ticks to overflow + + sss7_process_ticks(sss7_timeout_increment); +} From ff0c438fe79becb0d2ba194485b51dec0849791f Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Tue, 22 Nov 2016 08:57:08 +0100 Subject: [PATCH 03/10] Fixed makefile branding --- software/AVR8/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/software/AVR8/Makefile b/software/AVR8/Makefile index 6c182ac..4db3589 100644 --- a/software/AVR8/Makefile +++ b/software/AVR8/Makefile @@ -28,8 +28,8 @@ all: start $(OBJDIR)/$(AVRMCU)/$(TARGET).hex size @echo ":: Done !" start: - @echo "AS5043 demo version $(VERSION)" - @echo "==============================" + @echo "SSS7 AVR port $(VERSION)" + @echo "========================" @echo ":: Building for $(AVRMCU)" @echo ":: MCU operating frequency is $(F_CPU)Hz" From 07a52f566d56cb023f8d757d170924116eb88112 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 18:27:04 +0100 Subject: [PATCH 04/10] Added a makefile to compile with Arduino libraries Added a extern "C" to sss7.h --- software/Arduino/.clang_complete | 1 + software/Arduino/.gitignore | 2 + software/Arduino/Makefile | 111 +++++++++++++++++++++++++++++++ software/Arduino/ardusss7.cpp | 4 +- software/Arduino/ardusss7.h | 2 +- software/Arduino/main.cpp | 10 +++ software/sss7core/sss7.h | 9 +++ 7 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 software/Arduino/.gitignore create mode 100644 software/Arduino/Makefile create mode 100644 software/Arduino/main.cpp diff --git a/software/Arduino/.clang_complete b/software/Arduino/.clang_complete index be23e0c..d4055d8 100644 --- a/software/Arduino/.clang_complete +++ b/software/Arduino/.clang_complete @@ -1,4 +1,5 @@ -I../sss7core -I/usr/avr/include +-I./arduino-1.6.13/hardware/arduino/avr/cores/arduino/ -D__AVR_ATmega2560__ -DF_CPU=16000000 diff --git a/software/Arduino/.gitignore b/software/Arduino/.gitignore new file mode 100644 index 0000000..632e324 --- /dev/null +++ b/software/Arduino/.gitignore @@ -0,0 +1,2 @@ +arduino-1.6.13 +bin diff --git a/software/Arduino/Makefile b/software/Arduino/Makefile new file mode 100644 index 0000000..6d67175 --- /dev/null +++ b/software/Arduino/Makefile @@ -0,0 +1,111 @@ +AVRMCU ?= atmega2560 +F_CPU ?= 16000000 +ISPPORT ?= /dev/ttyUSB0 + +VERSION = 0.1 + +HEADERS = ardusss7.h ../sss7core/sss7.h +SRC_C = ../sss7core/sss7.c +SRC_CPP = main.cpp ardusss7.cpp +TARGET = sss7 +OBJDIR = bin +ARDUINO_DIR = ./arduino-1.6.13 +ARDUINO_BOARD = mega + +CC = avr-gcc +CPP = avr-g++ +AR = avr-ar +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size + +SRC_C_TMP = $(subst ../,,$(SRC_C)) +OBJ = $(SRC_C_TMP:%.c=$(OBJDIR)/$(AVRMCU)/%.o) +OBJ += $(SRC_CPP:%.cpp=$(OBJDIR)/$(AVRMCU)/%.o) + +ARDU_HEADERS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h \ + new.h Printable.h Print.h Server.h \ + Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h \ + wiring_private.h WString.h + +ARDU_C_SRC = WInterrupts.c wiring_digital.c wiring_analog.c wiring_pulse.c \ + wiring.c wiring_shift.c + +ARDU_CPP_SRC = CDC.cpp new.cpp HardwareSerial0.cpp PluggableUSB.cpp \ + HardwareSerial1.cpp Print.cpp HardwareSerial2.cpp Stream.cpp \ + HardwareSerial3.cpp Tone.cpp HardwareSerial.cpp USBCore.cpp \ + IPAddress.cpp WMath.cpp main.cpp WString.cpp \ + +ARDU_FULL_DIR = $(ARDUINO_DIR)/hardware/arduino/avr/cores/arduino +ARDU_VARIANT_DIR = $(ARDUINO_DIR)/hardware/arduino/avr/variants/$(ARDUINO_BOARD) +ARDU_FULL_HEADERS = $(ARDU_HEADERS:%.h=$(ARDU_FULL_DIR)/%.h) +ARDU_FULL_HEADERS += $(ARDU_VARIANT_DIR)/pins_arduino.h +ARDU_OBJS = $(ARDU_C_SRC:%.c=$(OBJDIR)/$(AVRMCU)/arduino/%.o) +ARDU_OBJS += $(ARDU_CPP_SRC:%.cpp=$(OBJDIR)/$(AVRMCU)/arduino/%.o) + +CFLAGS = -I $(ARDU_FULL_DIR) -I $(ARDU_VARIANT_DIR) -I ../sss7core/ -Os -Wall -Wstrict-prototypes +CFLAGS += -ffunction-sections -fdata-sections +CFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields +CFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION) + +CPPFLAGS = -I $(ARDU_FULL_DIR) -I $(ARDU_VARIANT_DIR) -I ../sss7core/ -Os +CPPFLAGS += -ffunction-sections -fdata-sections +CPPFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields +CPPFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION) + +LDFLAGS = -mmcu=$(AVRMCU) -Wl,--gc-sections + +all: start $(OBJDIR)/$(AVRMCU)/$(TARGET).hex size + @echo ":: Done !" + +start: + @echo "SSS7 AVR port $(VERSION)" + @echo "========================" + @echo ":: Building for $(AVRMCU)" + @echo ":: MCU operating frequency is $(F_CPU)Hz" + + +$(OBJDIR)/$(AVRMCU)/%.o : %.c $(HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/$(AVRMCU)/%.o : %.cpp $(HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CPP) $(CPPFLAGS) -c $< -o $@ + +$(OBJDIR)/$(AVRMCU)/sss7core/%.o : ../sss7core/%.c $(HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/$(AVRMCU)/arduino/%.o : $(ARDU_FULL_DIR)/%.c $(ARDU_FULL_HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/$(AVRMCU)/arduino/%.o : $(ARDU_FULL_DIR)/%.cpp $(ARDU_FULL_HEADERS) Makefile + @mkdir -p $$(dirname $@) + $(CPP) $(CPPFLAGS) -c $< -o $@ + +$(OBJDIR)/$(AVRMCU)/arduino/libarduino.a: $(ARDU_OBJS) + ${AR} crs $@ $+ + +$(OBJDIR)/$(AVRMCU)/$(TARGET).elf : $(OBJ) $(OBJDIR)/$(AVRMCU)/arduino/libarduino.a + $(CC) $(LDFLAGS) $+ -o $@ + +$(OBJDIR)/$(AVRMCU)/$(TARGET).hex : $(OBJDIR)/$(AVRMCU)/$(TARGET).elf + $(OBJCOPY) -O ihex $< $@ + +size : $(OBJDIR)/$(AVRMCU)/$(TARGET).elf + @echo + @$(SIZE) --mcu=$(AVRMCU) -C $(OBJDIR)/$(AVRMCU)/$(TARGET).elf + @echo + +clean : + @rm -rf $(OBJDIR) + +flash : all + avrdude -c stk500v2 \ + -p $(AVRMCU) -P $(ISPPORT) -D \ + -U flash:w:$(OBJDIR)/$(AVRMCU)/$(TARGET).hex + +test : flash + screen $(ISPPORT) 38400 diff --git a/software/Arduino/ardusss7.cpp b/software/Arduino/ardusss7.cpp index 9962df9..d40dbbd 100644 --- a/software/Arduino/ardusss7.cpp +++ b/software/Arduino/ardusss7.cpp @@ -60,11 +60,11 @@ uint8_t uart_get_byte() { return UDR1; } -ISR(USART_RXC1_vect) { +ISR(USART1_RX_vect) { sss7_process_rx(); } -ISR(USART_TXC1_vect) { +ISR(USART1_TX_vect) { sss7_process_tx(); } diff --git a/software/Arduino/ardusss7.h b/software/Arduino/ardusss7.h index 404e6e0..56f6fd4 100644 --- a/software/Arduino/ardusss7.h +++ b/software/Arduino/ardusss7.h @@ -15,7 +15,7 @@ class SSS7Wrapper { private: void setupUart(); void setupTimer(); -} +}; extern SSS7Wrapper SSS7; diff --git a/software/Arduino/main.cpp b/software/Arduino/main.cpp new file mode 100644 index 0000000..a93bd52 --- /dev/null +++ b/software/Arduino/main.cpp @@ -0,0 +1,10 @@ +#include + +void setup() { + +}; + + +void loop() { + +}; diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index f92e33b..bf3ddae 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -1,6 +1,11 @@ #ifndef _SSS7_H_ #define _SSS7_H_ +#ifdef __cplusplus +extern "C" { +#endif + + #include enum sss7State { @@ -53,4 +58,8 @@ static inline uint8_t sss7_has_received(void) { void sss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]); +#ifdef __cplusplus +} +#endif + #endif From b14d45e4843fb3f7fca3b5cb1de69a33ab2a2a6d Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 20:14:37 +0100 Subject: [PATCH 05/10] Switched to UART2 as UART1 does not work on my board Tested sending and Timeouts, looks good so far --- software/Arduino/Makefile | 2 +- software/Arduino/ardusss7.cpp | 27 ++++++++++++++------------- software/Arduino/ardusss7.h | 2 +- software/Arduino/main.cpp | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/software/Arduino/Makefile b/software/Arduino/Makefile index 6d67175..bfd1165 100644 --- a/software/Arduino/Makefile +++ b/software/Arduino/Makefile @@ -108,4 +108,4 @@ flash : all -U flash:w:$(OBJDIR)/$(AVRMCU)/$(TARGET).hex test : flash - screen $(ISPPORT) 38400 + screen $(ISPPORT) 9600 diff --git a/software/Arduino/ardusss7.cpp b/software/Arduino/ardusss7.cpp index d40dbbd..a1967be 100644 --- a/software/Arduino/ardusss7.cpp +++ b/software/Arduino/ardusss7.cpp @@ -5,7 +5,7 @@ SSS7Wrapper SSS7; -SSS7Wrapper::SSS7Wrapper() { +void SSS7Wrapper::init() { sss7_init(); this->setupUart(); @@ -33,38 +33,39 @@ void SSS7Wrapper::getReceived(uint8_t msg[SSS7_PAYLOAD_SIZE]) { void SSS7Wrapper::setupUart() { - UBRR1H = UBRR_VAL >> 8; // Setting baudrate - UBRR1L = UBRR_VAL & 0xFF; + UBRR2H = UBRR_VAL >> 8; // Setting baudrate + UBRR2L = UBRR_VAL & 0xFF; - UCSR1B = (1 << TXEN1) | (1 << RXEN1); // Enable TX and RX - UCSR1C = (1 << UCSZ11) | (1 << UCSZ10); // Asynchronous 8N1 + UCSR2B = (1 << TXEN2) | (1 << RXEN2); // Enable TX and RX + UCSR2C = (1 << UCSZ21) | (1 << UCSZ20); // Asynchronous 8N1 // flush UDR do { - UDR1; + UDR2; } - while (UCSR1A & (1 << RXC1)); + while (UCSR2A & (1 << RXC2)); // reset tx and rx complete flags - UCSR1A = (1 << RXC1) | (1 << TXC1); + UCSR2A = (1 << RXC2) | (1 << TXC2); - UCSR1B |= (1 << TXCIE1) | (1 << RXCIE1); // enable tx and rx interrupts + UCSR2B |= (1 << TXCIE2) | (1 << RXCIE2); // enable tx and rx interrupts } void uart_put_byte(uint8_t byte) { - UDR1 = byte; + UDR2 = byte; } uint8_t uart_get_byte() { - return UDR1; + return UDR2; } -ISR(USART1_RX_vect) { +ISR(USART2_RX_vect) { + //PORTB ^= (1 << PB7); sss7_process_rx(); } -ISR(USART1_TX_vect) { +ISR(USART2_TX_vect) { sss7_process_tx(); } diff --git a/software/Arduino/ardusss7.h b/software/Arduino/ardusss7.h index 56f6fd4..98007fc 100644 --- a/software/Arduino/ardusss7.h +++ b/software/Arduino/ardusss7.h @@ -5,7 +5,7 @@ class SSS7Wrapper { public: - SSS7Wrapper(); + void init(); uint8_t canSend(); void send(uint8_t msg[SSS7_PAYLOAD_SIZE]); uint8_t sendFailed(); diff --git a/software/Arduino/main.cpp b/software/Arduino/main.cpp index a93bd52..29b636a 100644 --- a/software/Arduino/main.cpp +++ b/software/Arduino/main.cpp @@ -1,10 +1,45 @@ #include +#include "ardusss7.h" void setup() { + Serial.begin(9600); + + Serial.print("Initializing SSS7..."); + SSS7.init(); + Serial.println("Done !"); }; void loop() { + uint8_t msg[SSS7_PAYLOAD_SIZE]; + memset(msg, 0, SSS7_PAYLOAD_SIZE); + msg[0] = 'H'; + msg[1] = 'e'; + msg[2] = 'l'; + msg[3] = 'l'; + msg[4] = 'o'; + msg[5] = ' '; + msg[6] = 'W'; + msg[7] = 'o'; + msg[8] = 'r'; + msg[9] = 'l'; + msg[10] = 'd'; + + + while(1) { + + Serial.println("Waiting to send"); + while(!SSS7.canSend()); + Serial.println("Sending ..."); + SSS7.send(msg); + while(!SSS7.canSend()); + //Serial.println("Finished Sending"); + if(SSS7.sendFailed()) { + Serial.println("Send failed"); + } + + _delay_ms(1000); + } }; From 93fbf663509e69f6333df3022494e5ed4040a07a Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 22:39:44 +0100 Subject: [PATCH 06/10] Fixed sss7_has_received() --- software/sss7core/sss7.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index bf3ddae..47d66b6 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -53,7 +53,7 @@ static inline uint8_t sss7_send_failed(void) { } static inline uint8_t sss7_has_received(void) { - return sss7_rx_oldest_buffer < sss7_rx_active_buffer; + return sss7_rx_oldest_buffer != sss7_rx_active_buffer; } void sss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]); From 33a3dccbf0067472f78da809c77a8b7f7d3a2ac3 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 22:42:19 +0100 Subject: [PATCH 07/10] Fixed sniff.py for fragments --- software/testutils/sniff.py | 1 + 1 file changed, 1 insertion(+) diff --git a/software/testutils/sniff.py b/software/testutils/sniff.py index 3fe2b82..7539a44 100644 --- a/software/testutils/sniff.py +++ b/software/testutils/sniff.py @@ -28,6 +28,7 @@ def main(): if len(data) != 19: print "No Frame:\t" + hexdump(data) + continue header_ok = data.startswith(chr(0xAA) + chr(0xFE)) From be5d5ddf1e054059b39ad143b6e071d7d2552f65 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 22:44:56 +0100 Subject: [PATCH 08/10] Fixed timeout timers --- software/Arduino/ardusss7.cpp | 9 +++++++-- software/Arduino/main.cpp | 9 ++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/software/Arduino/ardusss7.cpp b/software/Arduino/ardusss7.cpp index a1967be..2fe4b56 100644 --- a/software/Arduino/ardusss7.cpp +++ b/software/Arduino/ardusss7.cpp @@ -61,7 +61,6 @@ uint8_t uart_get_byte() { } ISR(USART2_RX_vect) { - //PORTB ^= (1 << PB7); sss7_process_rx(); } @@ -71,9 +70,15 @@ ISR(USART2_TX_vect) { void SSS7Wrapper::setupTimer() { + TCCR4B = 0; TCNT4 = 65535 - 16000; //Preload for 16000 ticks to overflow - TIMSK4 |= (1 << TOIE0); + + // Take the Timer by force ... + TCCR4A = 0; TCCR4B = (1 << CS40); // Prescaler 1 + TCCR4C = 0; + + TIMSK4 = (1 << TOIE4); } ISR(TIMER4_OVF_vect) { diff --git a/software/Arduino/main.cpp b/software/Arduino/main.cpp index 29b636a..c2864c8 100644 --- a/software/Arduino/main.cpp +++ b/software/Arduino/main.cpp @@ -28,7 +28,6 @@ void loop() { while(1) { - Serial.println("Waiting to send"); while(!SSS7.canSend()); Serial.println("Sending ..."); @@ -39,6 +38,14 @@ void loop() { Serial.println("Send failed"); } + + if(SSS7.hasReceived()) { + uint8_t msg1[SSS7_PAYLOAD_SIZE]; + SSS7.getReceived(msg1); + Serial.print("Got data:"); + Serial.println((char*)msg1); + } + _delay_ms(1000); } From 2d5aa1dd07a1dbbb32987be90b1a76b090a71611 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 22:39:44 +0100 Subject: [PATCH 09/10] Fixed sss7_has_received() --- software/sss7core/sss7.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index 7e82f8e..d3fca59 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -48,7 +48,7 @@ static inline uint8_t sss7_send_failed(void) { } static inline uint8_t sss7_has_received(void) { - return sss7_rx_oldest_buffer < sss7_rx_active_buffer; + return sss7_rx_oldest_buffer != sss7_rx_active_buffer; } void sss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]); From c1253e3c15b3d008406e6ff3a28259f823cfeed3 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 26 Nov 2016 22:42:19 +0100 Subject: [PATCH 10/10] Fixed sniff.py for fragments --- software/testutils/sniff.py | 1 + 1 file changed, 1 insertion(+) diff --git a/software/testutils/sniff.py b/software/testutils/sniff.py index 3fe2b82..7539a44 100644 --- a/software/testutils/sniff.py +++ b/software/testutils/sniff.py @@ -28,6 +28,7 @@ def main(): if len(data) != 19: print "No Frame:\t" + hexdump(data) + continue header_ok = data.startswith(chr(0xAA) + chr(0xFE))