Moved some functions around to reduce amount of prototypes

This commit is contained in:
skarg
2004-10-03 21:48:41 +00:00
parent e5274a8881
commit b6c2937da1
2 changed files with 77 additions and 82 deletions
+74 -82
View File
@@ -128,13 +128,86 @@ const unsigned Tusage_delay = 15;
// larger values for this timeout, not to exceed 100 milliseconds.)
const unsigned Tusage_timeout = 20;
unsigned MSTP_Create_Frame(
uint8_t *buffer, // where frame is loaded
unsigned buffer_len, // amount of space available
uint8_t frame_type, // type of frame to send - see defines
uint8_t destination, // destination address
uint8_t source, // source address
uint8_t *data, // any data to be sent - may be null
unsigned data_len) // number of bytes of data (up to 501)
{
uint8_t crc8 = 0xFF; // used to calculate the crc value
uint16_t crc16 = 0xFFFF; // used to calculate the crc value
unsigned index = 0; // used to load the data portion of the frame
// not enough to do a header
if (buffer_len < 8)
return 0;
buffer[0] = 0x55;
buffer[1] = 0xFF;
buffer[2] = frame_type;
crc8 = CRC_Calc_Header(buffer[2],crc8);
buffer[3] = destination;
crc8 = CRC_Calc_Header(buffer[3],crc8);
buffer[4] = source;
crc8 = CRC_Calc_Header(buffer[4],crc8);
buffer[5] = data_len / 256;
crc8 = CRC_Calc_Header(buffer[5],crc8);
buffer[6] = data_len % 256;
crc8 = CRC_Calc_Header(buffer[6],crc8);
buffer[7] = ~crc8;
index = 8;
while (data_len && data && (index < buffer_len))
{
buffer[index] = *data;
crc16 = CRC_Calc_Data(buffer[index],crc16);
data++;
index++;
data_len--;
}
// append the data CRC if necessary
if (index > 8)
{
if ((index + 2) <= buffer_len)
{
crc16 = ~crc16;
buffer[index] = LO_BYTE(crc16);
index++;
buffer[index] = HI_BYTE(crc16);
index++;
}
else
return 0;
}
return index; // returns the frame length
}
void MSTP_Create_And_Send_Frame(
struct mstp_port_struct_t *mstp_port, // port to send from
uint8_t frame_type, // type of frame to send - see defines
uint8_t destination, // destination address
uint8_t source, // source address
uint8_t *data, // any data to be sent - may be null
unsigned data_len); // number of bytes of data (up to 501)
unsigned data_len) // number of bytes of data (up to 501)
{
uint8_t buffer[INPUT_BUFFER_SIZE] = {0};
uint16_t len = 0; // number of bytes to send
len = (uint16_t)MSTP_Create_Frame(
buffer, // where frame is loaded
sizeof(buffer), // amount of space available
frame_type, // type of frame to send - see defines
destination, // destination address
source, // source address
data, // any data to be sent - may be null
data_len); // number of bytes of data (up to 501)
RS485_Send_Frame(mstp_port, buffer, len);
}
// Millisecond Timer - called every millisecond
void MSTP_Millisecond_Timer(struct mstp_port_struct_t *mstp_port)
@@ -1120,87 +1193,6 @@ void MSTP_Init(
}
}
unsigned MSTP_Create_Frame(
uint8_t *buffer, // where frame is loaded
unsigned buffer_len, // amount of space available
uint8_t frame_type, // type of frame to send - see defines
uint8_t destination, // destination address
uint8_t source, // source address
uint8_t *data, // any data to be sent - may be null
unsigned data_len) // number of bytes of data (up to 501)
{
uint8_t crc8 = 0xFF; // used to calculate the crc value
uint16_t crc16 = 0xFFFF; // used to calculate the crc value
unsigned index = 0; // used to load the data portion of the frame
// not enough to do a header
if (buffer_len < 8)
return 0;
buffer[0] = 0x55;
buffer[1] = 0xFF;
buffer[2] = frame_type;
crc8 = CRC_Calc_Header(buffer[2],crc8);
buffer[3] = destination;
crc8 = CRC_Calc_Header(buffer[3],crc8);
buffer[4] = source;
crc8 = CRC_Calc_Header(buffer[4],crc8);
buffer[5] = data_len / 256;
crc8 = CRC_Calc_Header(buffer[5],crc8);
buffer[6] = data_len % 256;
crc8 = CRC_Calc_Header(buffer[6],crc8);
buffer[7] = ~crc8;
index = 8;
while (data_len && data && (index < buffer_len))
{
buffer[index] = *data;
crc16 = CRC_Calc_Data(buffer[index],crc16);
data++;
index++;
data_len--;
}
// append the data CRC if necessary
if (index > 8)
{
if ((index + 2) <= buffer_len)
{
crc16 = ~crc16;
buffer[index] = LO_BYTE(crc16);
index++;
buffer[index] = HI_BYTE(crc16);
index++;
}
else
return 0;
}
return index; // returns the frame length
}
void MSTP_Create_And_Send_Frame(
struct mstp_port_struct_t *mstp_port, // port to send from
uint8_t frame_type, // type of frame to send - see defines
uint8_t destination, // destination address
uint8_t source, // source address
uint8_t *data, // any data to be sent - may be null
unsigned data_len) // number of bytes of data (up to 501)
{
uint8_t buffer[INPUT_BUFFER_SIZE] = {0};
uint16_t len = 0; // number of bytes to send
len = (uint16_t)MSTP_Create_Frame(
buffer, // where frame is loaded
sizeof(buffer), // amount of space available
frame_type, // type of frame to send - see defines
destination, // destination address
source, // source address
data, // any data to be sent - may be null
data_len); // number of bytes of data (up to 501)
RS485_Send_Frame(mstp_port, buffer, len);
}
#ifdef TEST
#include <assert.h>
#include <string.h>
+3
View File
@@ -4,14 +4,17 @@
rm test.log
touch test.log
make -f crc.mak clean
make -f crc.mak
./crc >> test.log
make -f crc.mak clean
make -f ringbuf.mak clean
make -f ringbuf.mak
./ringbuf >> test.log
make -f ringbuf.mak clean
make -f mstp.mak clean
make -f mstp.mak
./mstp >> test.log
make -f mstp.mak clean