Made serial in and out buffer publicly accessable

This commit is contained in:
mlenders 2011-07-25 16:14:15 +02:00
parent 0478c325c7
commit 9322071520
2 changed files with 33 additions and 11 deletions

View File

@ -27,8 +27,8 @@
char serial_reader_stack[READER_STACK_SIZE]; char serial_reader_stack[READER_STACK_SIZE];
uint16_t serial_reader_pid; uint16_t serial_reader_pid;
uint8_t border_out_buf[BORDER_BUFFER_SIZE]; uint8_t serial_out_buf[BORDER_BUFFER_SIZE];
uint8_t border_in_buf[BORDER_BUFFER_SIZE]; uint8_t serial_in_buf[BORDER_BUFFER_SIZE];
flowcontrol_stat_t slwin_stat; flowcontrol_stat_t slwin_stat;
sem_t connection_established; sem_t connection_established;
@ -63,7 +63,7 @@ ipv6_addr_t init_threeway_handshake() {
msg_receive(&m); msg_receive(&m);
syn = (border_syn_packet_t *)m.content.ptr; syn = (border_syn_packet_t *)m.content.ptr;
border_conf_header_t *synack = (border_conf_header_t *)border_out_buf; border_conf_header_t *synack = (border_conf_header_t *)get_serial_out_buffer(0);
ipv6_addr_t addr; ipv6_addr_t addr;
memcpy(&addr, &(syn->addr), sizeof (ipv6_addr_t)); memcpy(&addr, &(syn->addr), sizeof (ipv6_addr_t));
@ -123,6 +123,26 @@ uint8_t border_initialize(transceiver_type_t trans,ipv6_addr_t *border_router_ad
return SUCCESS; return SUCCESS;
} }
uint16_t border_get_serial_reader() {
return serial_reader_pid;
}
uint8_t *get_serial_out_buffer(int offset) {
if (offset > BUFFER_SIZE) {
return NULL;
}
return &(serial_out_buf[offset]);
}
uint8_t *get_serial_in_buffer(int offset) {
if (offset > BUFFER_SIZE) {
return NULL;
}
return &(serial_in_buf[offset]);
}
int readpacket(uint8_t *packet_buf, int size) { int readpacket(uint8_t *packet_buf, int size) {
uint8_t *line_buf_ptr = packet_buf; uint8_t *line_buf_ptr = packet_buf;
uint8_t byte = END+1; uint8_t byte = END+1;
@ -220,7 +240,7 @@ void serial_reader_f(void) {
while(1) { while(1) {
posix_open(uart0_handler_pid, 0); posix_open(uart0_handler_pid, 0);
bytes = readpacket(border_in_buf, BORDER_BUFFER_SIZE); bytes = readpacket(get_serial_in_buffer(0), BORDER_BUFFER_SIZE);
if (bytes < 0) { if (bytes < 0) {
switch (bytes) { switch (bytes) {
case (-SIXLOWERROR_ARRAYFULL):{ case (-SIXLOWERROR_ARRAYFULL):{
@ -235,10 +255,10 @@ void serial_reader_f(void) {
continue; continue;
} }
uart_buf = (border_packet_t*)border_in_buf; uart_buf = (border_packet_t*)get_serial_in_buffer(0);
if (uart_buf->reserved == 0) { if (uart_buf->reserved == 0) {
if (uart_buf->type == BORDER_PACKET_CONF_TYPE) { if (uart_buf->type == BORDER_PACKET_CONF_TYPE) {
border_conf_header_t *conf_packet = (border_conf_header_t*)border_in_buf; border_conf_header_t *conf_packet = (border_conf_header_t*)uart_buf;
if (conf_packet->conftype == BORDER_CONF_SYN) { if (conf_packet->conftype == BORDER_CONF_SYN) {
m.content.ptr = (char *)conf_packet; m.content.ptr = (char *)conf_packet;
msg_send(&m, main_pid, 1); msg_send(&m, main_pid, 1);
@ -340,7 +360,7 @@ void demultiplex(border_packet_t *packet, int len) {
} }
void border_send_ack(uint8_t seq_num) { void border_send_ack(uint8_t seq_num) {
border_packet_t *packet = (border_packet_t *)border_out_buf; border_packet_t *packet = (border_packet_t *)get_serial_out_buffer(0);
packet->reserved = 0; packet->reserved = 0;
packet->type = BORDER_PACKET_ACK_TYPE; packet->type = BORDER_PACKET_ACK_TYPE;
packet->seq_num = seq_num; packet->seq_num = seq_num;
@ -407,11 +427,11 @@ void flowcontrol_send_over_uart(border_packet_t *packet, int len) {
void multiplex_send_ipv6_over_uart(struct ipv6_hdr_t *packet) { void multiplex_send_ipv6_over_uart(struct ipv6_hdr_t *packet) {
border_l3_header_t *serial_buf; border_l3_header_t *serial_buf;
serial_buf = (border_l3_header_t *)border_out_buf; serial_buf = (border_l3_header_t *)get_serial_out_buffer(0);
serial_buf->reserved = 0; serial_buf->reserved = 0;
serial_buf->type = BORDER_PACKET_L3_TYPE; serial_buf->type = BORDER_PACKET_L3_TYPE;
serial_buf->ethertype = BORDER_ETHERTYPE_IPV6; serial_buf->ethertype = BORDER_ETHERTYPE_IPV6;
memcpy(border_out_buf+sizeof (border_l3_header_t), packet, IPV6_HDR_LEN + packet->length); memcpy(get_serial_in_buffer(0)+sizeof (border_l3_header_t), packet, IPV6_HDR_LEN + packet->length);
flowcontrol_send_over_uart( flowcontrol_send_over_uart(
(border_packet_t *) serial_buf, (border_packet_t *) serial_buf,
@ -422,7 +442,7 @@ void multiplex_send_ipv6_over_uart(struct ipv6_hdr_t *packet) {
void multiplex_send_addr_over_uart(ipv6_addr_t *addr) { void multiplex_send_addr_over_uart(ipv6_addr_t *addr) {
border_addr_packet_t *serial_buf; border_addr_packet_t *serial_buf;
serial_buf = (border_addr_packet_t *)border_out_buf; serial_buf = (border_addr_packet_t *)get_serial_in_buffer(0);
serial_buf->reserved = 0; serial_buf->reserved = 0;
serial_buf->type = BORDER_PACKET_CONF_TYPE; serial_buf->type = BORDER_PACKET_CONF_TYPE;
serial_buf->conftype = BORDER_CONF_IPADDR; serial_buf->conftype = BORDER_CONF_IPADDR;
@ -456,7 +476,6 @@ void border_send_ipv6_over_lowpan(struct ipv6_hdr_t *packet, uint8_t aro_flag, u
} }
lowpan_init((ieee_802154_long_t*)&(packet->destaddr.uint16[4]), (uint8_t*)packet); lowpan_init((ieee_802154_long_t*)&(packet->destaddr.uint16[4]), (uint8_t*)packet);
} }
void border_process_lowpan(void) { void border_process_lowpan(void) {

View File

@ -104,6 +104,9 @@ typedef struct flowcontrol_stat_t {
size_t frame_len; size_t frame_len;
} recv_win[BORDER_RWS]; } recv_win[BORDER_RWS];
} flowcontrol_stat_t; } flowcontrol_stat_t;
uint16_t border_get_serial_reader();
uint8_t *get_serial_out_buffer(int offset);
uint8_t *get_serial_in_buffer(int offset);
uint8_t border_initialize(transceiver_type_t trans,ipv6_addr_t *border_router_addr); uint8_t border_initialize(transceiver_type_t trans,ipv6_addr_t *border_router_addr);
void multiplex_send_ipv6_over_uart(struct ipv6_hdr_t *packet); void multiplex_send_ipv6_over_uart(struct ipv6_hdr_t *packet);