mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-05-04 15:55:08 -04:00
Added basic APRS transmit
Added goertzel algo Updated binary
This commit is contained in:
parent
7fd987a2b4
commit
8573f760be
17 changed files with 376 additions and 76 deletions
|
@ -35,39 +35,42 @@ void AX25Frame::make_extended_field(char * const data, size_t length) {
|
|||
add_data((data[i] << 1) | 1);
|
||||
}
|
||||
|
||||
void AX25Frame::add_byte(uint8_t byte, bool is_flag, bool is_data) {
|
||||
size_t i;
|
||||
void AX25Frame::NRZI_add_bit(const uint32_t bit) {
|
||||
if (!bit)
|
||||
current_bit ^= 1; // Zero: flip
|
||||
|
||||
for (i = 0; i < 8; ) {
|
||||
current_byte <<= 1;
|
||||
current_byte |= current_bit;
|
||||
|
||||
bit_counter++;
|
||||
|
||||
if (bit_counter == 8) {
|
||||
bit_counter = 0;
|
||||
*bb_data_ptr = current_byte;
|
||||
bb_data_ptr++;
|
||||
}
|
||||
}
|
||||
|
||||
void AX25Frame::add_byte(uint8_t byte, bool is_flag, bool is_data) {
|
||||
uint32_t bit;
|
||||
|
||||
if (is_data)
|
||||
crc_ccitt.process_byte(byte);
|
||||
|
||||
for (uint32_t i = 0; i < 8; i++) {
|
||||
bit = (byte >> i) & 1;
|
||||
|
||||
if (!(byte & 1)) {
|
||||
current_bit ^= 1; // Zero: flip
|
||||
ones_counter = 0;
|
||||
byte >>= 1;
|
||||
i++;
|
||||
} else {
|
||||
if (bit)
|
||||
ones_counter++;
|
||||
if ((ones_counter == 5) && (!is_flag)) {
|
||||
current_bit ^= 1; // Stuff zero: flip
|
||||
ones_counter = 0;
|
||||
} else {
|
||||
byte >>= 1;
|
||||
i++;
|
||||
}
|
||||
else
|
||||
ones_counter = 0;
|
||||
|
||||
if ((ones_counter == 6) && (!is_flag)) {
|
||||
NRZI_add_bit(0);
|
||||
ones_counter = 0;
|
||||
}
|
||||
|
||||
if (is_data)
|
||||
crc_ccitt.process_bit(current_bit);
|
||||
current_byte <<= 1;
|
||||
current_byte |= current_bit;
|
||||
|
||||
if (bit_counter == 7) {
|
||||
bit_counter = 0;
|
||||
*bb_data_ptr = current_byte;
|
||||
bb_data_ptr++;
|
||||
} else {
|
||||
bit_counter++;
|
||||
}
|
||||
NRZI_add_bit(bit);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,32 +89,38 @@ void AX25Frame::add_data(uint8_t byte) {
|
|||
|
||||
void AX25Frame::add_checksum() {
|
||||
auto checksum = crc_ccitt.checksum();
|
||||
add_byte(checksum >> 8, false, false);
|
||||
add_byte(checksum, false, false);
|
||||
add_byte(checksum >> 8, false, false);
|
||||
}
|
||||
|
||||
void AX25Frame::make_ui_frame(char * const address, const uint8_t control,
|
||||
const uint8_t protocol, uint8_t * const info, size_t length) {
|
||||
const uint8_t protocol, const std::string& info) {
|
||||
|
||||
size_t i;
|
||||
|
||||
bb_data_ptr = shared_memory.bb_data.data;
|
||||
bb_data_ptr = (uint16_t*)shared_memory.bb_data.data;
|
||||
memset(bb_data_ptr, 0, sizeof(shared_memory.bb_data.data));
|
||||
bit_counter = 0;
|
||||
current_bit = 0;
|
||||
current_byte = 0;
|
||||
ones_counter = 0;
|
||||
crc_ccitt.reset();
|
||||
|
||||
add_flag();
|
||||
add_flag();
|
||||
add_flag();
|
||||
add_flag();
|
||||
|
||||
make_extended_field(address, 14);
|
||||
add_data(control);
|
||||
add_data(protocol);
|
||||
|
||||
for (i = 0; i < length; i++)
|
||||
for (i = 0; i < info.size(); i++)
|
||||
add_data(info[i]);
|
||||
|
||||
add_checksum();
|
||||
|
||||
add_flag();
|
||||
add_flag();
|
||||
|
||||
flush();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue