added missing function prototypes

This commit is contained in:
Markus Fröschle
2013-12-24 09:31:11 +00:00
parent 5b7e7940a9
commit 6160bc4fe8
3 changed files with 200 additions and 195 deletions

View File

@@ -1,33 +1,35 @@
/* /*
* File: net_timer.h * File: net_timer.h
* Purpose: Provide a timer use by the dBUG network as a timeout * Purpose: Provide a timer use by the dBUG network as a timeout
* indicator * indicator
* *
* Notes: * Notes:
*/ */
#ifndef _TIMER_H_ #ifndef _TIMER_H_
#define _TIMER_H_ #define _TIMER_H_
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include <stddef.h> #include <stddef.h>
typedef struct typedef struct
{ {
uint8_t ch; /* which channel is this structure for? */ uint8_t ch; /* which channel is this structure for? */
uint8_t lvl; /* Interrupt level for this channel */ uint8_t lvl; /* Interrupt level for this channel */
uint8_t pri; /* Interrupt priority for this channel */ uint8_t pri; /* Interrupt priority for this channel */
uint8_t reference; /* timeout indicator */ uint8_t reference; /* timeout indicator */
uint32_t gms; /* mode select register value */ uint32_t gms; /* mode select register value */
uint16_t pre; /* prescale value */ uint16_t pre; /* prescale value */
uint16_t cnt; /* prescaled clocks for timeout */ uint16_t cnt; /* prescaled clocks for timeout */
} NET_TIMER; } NET_TIMER;
extern bool timer_init(uint8_t, uint8_t, uint8_t); extern bool timer_init(uint8_t, uint8_t, uint8_t);
extern bool timer_set_secs(uint8_t ch, uint32_t secs);
/* Vector numbers for all the timer channels */ extern uint32_t timer_get_reference(uint8_t ch);
#define TIMER_VECTOR(x) (126-x)
/* Vector numbers for all the timer channels */
#endif /* _TIMER_H_ */ #define TIMER_VECTOR(x) (126-x)
#endif /* _TIMER_H_ */

View File

@@ -16,15 +16,16 @@
#include "bas_printf.h" #include "bas_printf.h"
#include "bas_string.h" #include "bas_string.h"
#include "net.h" #include "net.h"
#include "net_timer.h"
#define TIMER_NETWORK 0 #define TIMER_NETWORK 0
/* The one and only TFTP connection */ /* The one and only TFTP connection */
TFTP_Connection tcxn; static TFTP_Connection tcxn;
/* Progress Indicators */ /* Progress Indicators */
char hash[] = {'-','\\','|','/'}; static char hash[] = {'-','\\','|','/'};
int ihash = 0; static int ihash = 0;
static int tftp_rwrq(void) static int tftp_rwrq(void)
{ {

320
net/udp.c
View File

@@ -1,159 +1,161 @@
/* /*
* File: udp.c * File: udp.c
* Purpose: User Datagram Protocol driver * Purpose: User Datagram Protocol driver
* *
* Notes: * Notes:
* *
* Modifications: * Modifications:
* *
*/ */
#include "bas_types.h" #include "bas_types.h"
#include "net.h" #include "net.h"
#include <stddef.h> #include <stddef.h>
typedef struct typedef struct
{ {
uint16_t port; uint16_t port;
void (*handler)(NIF *, NBUF *); void (*handler)(NIF *, NBUF *);
} UDP_BOUND_PORT; } UDP_BOUND_PORT;
#define UDP_MAX_PORTS (5) /* plenty for this implementation */ #define UDP_MAX_PORTS (5) /* plenty for this implementation */
static UDP_BOUND_PORT udp_port_table[UDP_MAX_PORTS]; static UDP_BOUND_PORT udp_port_table[UDP_MAX_PORTS];
static uint16_t udp_port; static uint16_t udp_port;
void udp_init(void) void udp_init(void)
{ {
int index; int index;
for (index = 0; index < UDP_MAX_PORTS; ++index) for (index = 0; index < UDP_MAX_PORTS; ++index)
{ {
udp_port_table[index].port = 0; udp_port_table[index].port = 0;
} }
udp_port = DEFAULT_UDP_PORT; /* next free port */ udp_port = DEFAULT_UDP_PORT; /* next free port */
} }
void udp_prime_port(uint16_t init_port) void udp_prime_port(uint16_t init_port)
{ {
udp_port = init_port; udp_port = init_port;
} }
void udp_bind_port(uint16_t port, void (*handler)(NIF *, NBUF *)) void udp_bind_port(uint16_t port, void (*handler)(NIF *, NBUF *))
{ {
int index; int index;
for (index = 0; index < UDP_MAX_PORTS; ++index) for (index = 0; index < UDP_MAX_PORTS; ++index)
{ {
if (udp_port_table[index].port == 0) if (udp_port_table[index].port == 0)
{ {
udp_port_table[index].port = port; udp_port_table[index].port = port;
udp_port_table[index].handler = handler; udp_port_table[index].handler = handler;
return;
} return;
} }
} }
}
void udp_free_port(uint16_t port)
{ void udp_free_port(uint16_t port)
int index; {
int index;
for (index = 0; index < UDP_MAX_PORTS; ++index)
{ for (index = 0; index < UDP_MAX_PORTS; ++index)
if (udp_port_table[index].port == port) {
{ if (udp_port_table[index].port == port)
udp_port_table[index].port = 0; {
return; udp_port_table[index].port = 0;
}
} return;
} }
}
static void *udp_port_handler(uint16_t port) }
{
int index; static void *udp_port_handler(uint16_t port)
{
for (index = 0; index < UDP_MAX_PORTS; ++index) int index;
{
if (udp_port_table[index].port == port) for (index = 0; index < UDP_MAX_PORTS; ++index)
{ {
return (void *)udp_port_table[index].handler; if (udp_port_table[index].port == port)
} {
} return (void *)udp_port_table[index].handler;
return NULL; }
} }
return NULL;
uint16_t udp_obtain_free_port(void) }
{
uint16_t port; uint16_t udp_obtain_free_port(void)
{
port = udp_port; uint16_t port;
if (--udp_port <= 255)
udp_port = DEFAULT_UDP_PORT; port = udp_port;
if (--udp_port <= 255)
return port; udp_port = DEFAULT_UDP_PORT;
}
return port;
int udp_send(NIF *nif, uint8_t *dest, int sport, int dport, NBUF *pNbuf) }
{
/* int udp_send(NIF *nif, uint8_t *dest, int sport, int dport, NBUF *pNbuf)
* This function takes data and creates a UDP frame and {
* passes it onto the IP layer /*
*/ * This function takes data and creates a UDP frame and
udp_frame_hdr *udpframe; * passes it onto the IP layer
*/
udpframe = (udp_frame_hdr *) &pNbuf->data[UDP_HDR_OFFSET]; udp_frame_hdr *udpframe;
/* Set UDP source port */ udpframe = (udp_frame_hdr *) &pNbuf->data[UDP_HDR_OFFSET];
udpframe->src_port = (uint16_t) sport;
/* Set UDP source port */
/* Set UDP destination port */ udpframe->src_port = (uint16_t) sport;
udpframe->dest_port = (uint16_t) dport;
/* Set UDP destination port */
/* Set length */ udpframe->dest_port = (uint16_t) dport;
udpframe->length = (uint16_t) (pNbuf->length + UDP_HDR_SIZE);
/* Set length */
/* No checksum calcualation needed */ udpframe->length = (uint16_t) (pNbuf->length + UDP_HDR_SIZE);
udpframe->chksum = (uint16_t) 0;
/* No checksum calcualation needed */
/* Add the length of the UDP packet to the total length of the packet */ udpframe->chksum = (uint16_t) 0;
pNbuf->length += 8;
/* Add the length of the UDP packet to the total length of the packet */
return (ip_send(nif, dest, pNbuf->length += 8;
ip_get_myip(nif_get_protocol_info(nif, ETH_FRM_IP)),
IP_PROTO_UDP, return (ip_send(nif, dest,
pNbuf)); ip_get_myip(nif_get_protocol_info(nif, ETH_FRM_IP)),
} IP_PROTO_UDP,
pNbuf));
void udp_handler(NIF *nif, NBUF *pNbuf) }
{
/* void udp_handler(NIF *nif, NBUF *pNbuf)
* This function handles incoming UDP packets {
*/ /*
udp_frame_hdr *udpframe; * This function handles incoming UDP packets
void (*handler)(NIF *, NBUF *); */
udp_frame_hdr *udpframe;
udpframe = (udp_frame_hdr *) &pNbuf->data[pNbuf->offset]; void (*handler)(NIF *, NBUF *);
/* udpframe = (udp_frame_hdr *) &pNbuf->data[pNbuf->offset];
* Adjust the length and valid data offset of the packet we are
* passing on /*
*/ * Adjust the length and valid data offset of the packet we are
pNbuf->length -= UDP_HDR_SIZE; * passing on
pNbuf->offset += UDP_HDR_SIZE; */
pNbuf->length -= UDP_HDR_SIZE;
/* pNbuf->offset += UDP_HDR_SIZE;
* Traverse the list of bound ports to see if there is a higher
* level protocol to pass the packet on to /*
*/ * Traverse the list of bound ports to see if there is a higher
if ((handler = (void(*)(NIF*, NBUF*)) udp_port_handler(UDP_DEST(udpframe))) != NULL) * level protocol to pass the packet on to
handler(nif, pNbuf); */
else if ((handler = (void(*)(NIF*, NBUF*)) udp_port_handler(UDP_DEST(udpframe))) != NULL)
{ handler(nif, pNbuf);
xprintf("Received UDP packet for non-supported port\n"); else
nbuf_free(pNbuf); {
} xprintf("Received UDP packet for non-supported port\n");
nbuf_free(pNbuf);
return; }
}
return;
}