Skip to content
Permalink
Browse files

reinsert BEES' serial protocol with libavr32

  • Loading branch information
boqs committed Nov 6, 2017
1 parent e16255b commit 6348fda9a304488def1869d65cd75313a97d23a0
Showing with 47 additions and 41 deletions.
  1. +4 −5 apps/bees/src/ser.c
  2. +37 −34 avr32/src/serial.c
  3. +5 −1 avr32/src/serial.h
  4. +1 −1 libavr32
@@ -27,11 +27,8 @@

static u16 serial_read_pos = 0;
void serial_init(void) {
// FIXME some extra stuff had to be added to BEES' serial code in
// order to get remote serial control working. merge that stuff
// back in to new avr32lib & uncomment these lines!
/* serial_rx_flow_control = true; */
/* serial_delimiter = END_FLAG; */
serial_rx_flow_control = true;
serial_delimiter = END_FLAG;
}

void serial_putc(char c) {
@@ -327,6 +324,7 @@ int serial_bfinDscBuf_idx;
#define MAX_SERIAL_DSC_SIZE (256 * 1024)

void serial_bfinProgStart() {
pause_timers();
if(serial_bfinHexBuf == NULL)
serial_bfinHexBuf = alloc_mem(MAX_SERIAL_HEX_SIZE);
serial_bfinHexBuf_idx = 0;
@@ -379,6 +377,7 @@ void serial_bfinProgEnd() {
bfin_enable();
app_resume();

start_timers();
}


@@ -6,48 +6,51 @@
#include "bfin.h"
#include "events.h"
#include "serial.h"
#include "delay.h"
#include <stdbool.h>

//----------------------------
//----- extern vatrs
volatile u8 serial_buffer[SERIAL_BUFFER_SIZE];
volatile char serial_delimiter = 13;//Decimal 13 is carriage return
volatile bool serial_rx_flow_control = true;

static u16 serial_write_pos = 0;
static u16 last_serial_write_pos = 0;
static event_t e;

void serial_send_start(u8 index) { usart_putchar(DBG_USART, index); }

void serial_send_byte(u8 data) {
// FIXME this is slow
if (data == 0 || data == 27 || data == 31) { usart_putchar(DBG_USART, 27); }
usart_putchar(DBG_USART, data);
}

void serial_send_long(u32 data) {
serial_send_byte((u8)data);
serial_send_byte((u8)data >> 8);
serial_send_byte((u8)data >> 16);
serial_send_byte((u8)data >> 24);
}

void serial_send_separator(void) { usart_putchar(DBG_USART, 31); }

void serial_send_end(void) { usart_putchar(DBG_USART, 0); }
static u16 chars_since_last_event = 0;

void serial_store() {
// process_serial_t serial_decode = &serial_decode_dummy;
int c;

// buffer, try to grab more than one byte if available
while (usart_read_char(DEV_USART, &c) == USART_SUCCESS) {
// TEST LIB LOOPBACK
// usart_putchar(DBG_USART,c);
// print_dbg_char(c);

serial_buffer[serial_write_pos] = c;
serial_write_pos++;
if (serial_write_pos == SERIAL_BUFFER_SIZE) serial_write_pos = 0;
// process_serial_t serial_decode = &serial_decode_dummy;
int c;

//buffer, try to grab more than one byte if available
while(usart_read_char(DEV_USART,&c) == USART_SUCCESS) {
// TEST LIB LOOPBACK
// usart_putchar(DBG_USART,c);
// print_dbg_char(c);

last_serial_write_pos = serial_write_pos;
serial_buffer[serial_write_pos] = c;
serial_write_pos++;
if(serial_write_pos == SERIAL_BUFFER_SIZE)
serial_write_pos = 0;
if(serial_rx_flow_control) {
chars_since_last_event++;
// Trigger event if buffer is 1/2 full
// or if the serial delimiter char has been received
if (chars_since_last_event >= (SERIAL_BUFFER_SIZE >> 1) ||
serial_buffer[last_serial_write_pos] == serial_delimiter) {
chars_since_last_event = 0;
e.type = kEventSerial;
e.data = serial_write_pos;
event_post(&e);
}
} else {
e.type = kEventSerial;
e.data = serial_write_pos;
event_post(&e);
}
e.type = kEventSerial;
e.data = serial_write_pos;
event_post(&e);
}
}

@@ -1,10 +1,14 @@
#include "types.h"
#include <stdbool.h>

#define SERIAL_BUFFER_SIZE 64
#define SERIAL_BUFFER_SIZE 256

// typedef void(*process_serial_t)(u16);

extern volatile u8 serial_buffer[SERIAL_BUFFER_SIZE];
extern volatile char serial_delimiter;
extern volatile bool serial_rx_flow_control;

// extern volatile u16 serial_read_pos;

extern void serial_store(void);
Submodule libavr32 updated 2 files
+8 −0 src/timers.c
+3 −0 src/timers.h

0 comments on commit 6348fda

Please sign in to comment.