Skip to content

Commit

Permalink
v1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexGyver committed Jul 17, 2021
1 parent f4c573b commit 8196c8e
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 33 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ void loop() {
- v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
- v1.2 - улучшение качества связи, оптимизация работы в прерывании
- v1.3 - добавлен вывод RSSI
- v1.4 - переделан FastIO

<a id="feedback"></a>
## Баги и обратная связь
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=Gyver433
version=1.3
version=1.4
author=AlexGyver <alex@alexgyver.ru>
maintainer=AlexGyver <alex@alexgyver.ru>
sentence=Simple library for 433 MHz radio
Expand Down
28 changes: 6 additions & 22 deletions src/FastIO.h → src/FastIO_v2.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
// Быстрый IO для AVR (для остальных будет digitalxxxxx)
// v1.0
#include "FastIO_v2.h"

#ifndef FastIO_h
#define FastIO_h
#include <Arduino.h>

bool fastRead(const uint8_t pin); // быстрое чтение пина
void fastWrite(const uint8_t pin, bool val); // быстрая запись
uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); // быстрый shiftIn
void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data); // быстрый shiftOut

// ================================================================
bool fastRead(const uint8_t pin) {
bool F_fastRead(const uint8_t pin) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) return bitRead(PIND, pin);
else if (pin < 14) return bitRead(PINB, pin - 8);
Expand All @@ -32,8 +21,7 @@ bool fastRead(const uint8_t pin) {
return 0;
}


void fastWrite(const uint8_t pin, bool val) {
void F_fastWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) bitWrite(PORTD, pin, val);
else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
Expand All @@ -56,8 +44,7 @@ void fastWrite(const uint8_t pin, bool val) {
#endif
}


uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t F_fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
#if defined(AVR)
volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin));
volatile uint8_t *_dat_port = portInputRegister(digitalPinToPort(dataPin));
Expand All @@ -81,8 +68,7 @@ uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
#endif
}


void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data) {
void F_fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data) {
#if defined(AVR)
volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin));
volatile uint8_t *_dat_port = portOutputRegister(digitalPinToPort(dataPin));
Expand All @@ -104,6 +90,4 @@ void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t d
#else
shiftOut(dataPin, clockPin, bitOrder, data);
#endif
}

#endif
}
13 changes: 13 additions & 0 deletions src/FastIO_v2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Быстрый IO для AVR (для остальных будет digitalxxxxx)
// v1.0

#ifndef _FastIO_v2_h
#define _FastIO_v2_h
#include <Arduino.h>

bool F_fastRead(const uint8_t pin); // быстрое чтение пина
void F_fastWrite(const uint8_t pin, bool val); // быстрая запись
uint8_t F_fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); // быстрый shiftIn
void F_fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data); // быстрый shiftOut

#endif
21 changes: 11 additions & 10 deletions src/Gyver433.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
v1.2 - улучшение качества связи, оптимизация работы в прерывании
v1.3 - добавлен вывод RSSI
v1.4 - переделан FastIO
*/

#ifndef Gyver433_h
#define Gyver433_h
#include <Arduino.h>
#include "FastIO.h"
#include "FastIO_v2.h"

uint8_t G433_crc8(uint8_t *buffer, uint8_t size); // ручной CRC8
uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
Expand Down Expand Up @@ -107,36 +108,36 @@ class Gyver433_TX {
// отправка сырого набора байтов
void write(uint8_t* buf, uint16_t size) {
for (uint16_t i = 0; i < TRAINING_PULSES; i++) {
fastWrite(TX_PIN, 1);
F_fastWrite(TX_PIN, 1);
G433_DELAY(FRAME_TIME);
fastWrite(TX_PIN, 0);
F_fastWrite(TX_PIN, 0);
G433_DELAY(FRAME_TIME);
}
fastWrite(TX_PIN, 1); // старт
F_fastWrite(TX_PIN, 1); // старт
G433_DELAY(START_PULSE); // ждём
fastWrite(TX_PIN, 0); // старт бит
F_fastWrite(TX_PIN, 0); // старт бит

#ifdef G433_MANCHESTER
G433_DELAY(HALF_FRAME); // ждём
for (uint16_t n = 0; n < size; n++) {
uint8_t data = buf[n];
for (uint8_t b = 0; b < 8; b++) {
fastWrite(TX_PIN, !(data & 1));
F_fastWrite(TX_PIN, !(data & 1));
G433_DELAY(HALF_FRAME);
fastWrite(TX_PIN, (data & 1));
F_fastWrite(TX_PIN, (data & 1));
G433_DELAY(HALF_FRAME);
data >>= 1;
}
}
fastWrite(TX_PIN, 0); // конец передачи
F_fastWrite(TX_PIN, 0); // конец передачи
#else
bool flag = 0;
for (uint16_t n = 0; n < size; n++) {
uint8_t data = buf[n];
for (uint8_t b = 0; b < 8; b++) {
if (data & 1) G433_DELAY(FRAME_TIME);
else G433_DELAY(HALF_FRAME);
fastWrite(TX_PIN, flag = !flag);
F_fastWrite(TX_PIN, flag = !flag);
data >>= 1;
}
}
Expand Down Expand Up @@ -231,7 +232,7 @@ class Gyver433_RX {

private:
bool pinChanged() {
bit = fastRead(RX_PIN);
bit = F_fastRead(RX_PIN);
if (bit != prevBit) {
prevBit = bit;
return 1;
Expand Down

0 comments on commit 8196c8e

Please sign in to comment.