parent
13c74ea6e6
commit
5ba23e942f
@ -0,0 +1,11 @@ |
||||
CFILES=../utils.c ../../TinyFrame.c
|
||||
INCLDIRS=-I. -I.. -I../..
|
||||
CFLAGS=-O0 -ggdb --std=gnu99 -Wno-main -Wno-unused -Wall -Wextra $(CFILES) $(INCLDIRS)
|
||||
|
||||
run: test.bin |
||||
./test.bin
|
||||
|
||||
build: test.bin |
||||
|
||||
test.bin: test.c $(CFILES) |
||||
gcc test.c $(CFLAGS) -o test.bin
|
@ -0,0 +1,28 @@ |
||||
//
|
||||
// Created by MightyPork on 2018/01/26.
|
||||
//
|
||||
|
||||
#ifndef TF_CONFIG_H |
||||
#define TF_CONFIG_H |
||||
|
||||
#include <stdint.h> |
||||
#include <stdio.h> |
||||
|
||||
#define TF_ID_BYTES 1 |
||||
#define TF_LEN_BYTES 2 |
||||
#define TF_TYPE_BYTES 1 |
||||
#define TF_CKSUM_TYPE TF_CKSUM_CUSTOM8 |
||||
#define TF_USE_SOF_BYTE 1 |
||||
#define TF_SOF_BYTE 0x01 |
||||
typedef uint16_t TF_TICKS; |
||||
typedef uint8_t TF_COUNT; |
||||
#define TF_MAX_PAYLOAD_RX 1024 |
||||
#define TF_SENDBUF_LEN 1024 |
||||
#define TF_MAX_ID_LST 10 |
||||
#define TF_MAX_TYPE_LST 10 |
||||
#define TF_MAX_GEN_LST 5 |
||||
#define TF_PARSER_TIMEOUT_TICKS 10 |
||||
|
||||
#define TF_Error(format, ...) printf("[TF] " format "\n", ##__VA_ARGS__) |
||||
|
||||
#endif //TF_CONFIG_H
|
@ -0,0 +1,88 @@ |
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include "../../TinyFrame.h" |
||||
#include "../utils.h" |
||||
|
||||
TinyFrame *demo_tf; |
||||
|
||||
bool do_corrupt = false; |
||||
|
||||
/**
|
||||
* This function should be defined in the application code. |
||||
* It implements the lowest layer - sending bytes to UART (or other) |
||||
*/ |
||||
void TF_WriteImpl(TinyFrame *tf, const uint8_t *buff, uint32_t len) |
||||
{ |
||||
printf("--------------------\n"); |
||||
printf("\033[32mTF_WriteImpl - sending frame:\033[0m\n"); |
||||
|
||||
uint8_t *xbuff = (uint8_t *)buff;
|
||||
if (do_corrupt) { |
||||
printf("(corrupting to test checksum checking...)\n"); |
||||
xbuff[8]++; |
||||
} |
||||
|
||||
dumpFrame(xbuff, len); |
||||
|
||||
// Send it back as if we received it
|
||||
TF_Accept(tf, xbuff, len); |
||||
} |
||||
|
||||
/** An example listener function */ |
||||
TF_Result myListener(TinyFrame *tf, TF_Msg *msg) |
||||
{ |
||||
dumpFrameInfo(msg); |
||||
return TF_STAY; |
||||
} |
||||
|
||||
TF_Result testIdListener(TinyFrame *tf, TF_Msg *msg) |
||||
{ |
||||
printf("OK - ID Listener triggered for msg!\n"); |
||||
dumpFrameInfo(msg); |
||||
return TF_CLOSE; |
||||
} |
||||
|
||||
void main(void) |
||||
{ |
||||
TF_Msg msg; |
||||
const char *longstr = "Lorem ipsum dolor sit amet."; |
||||
|
||||
// Set up the TinyFrame library
|
||||
demo_tf = TF_Init(TF_MASTER); // 1 = master, 0 = slave
|
||||
TF_AddGenericListener(demo_tf, myListener); |
||||
|
||||
printf("------ Simulate sending a message --------\n"); |
||||
|
||||
TF_ClearMsg(&msg); |
||||
msg.type = 0x22; |
||||
msg.data = (pu8) "Hello TinyFrame"; |
||||
msg.len = 16; |
||||
TF_Send(demo_tf, &msg); |
||||
|
||||
printf("This should fail:\n"); |
||||
|
||||
// test checksums are tested
|
||||
do_corrupt = true;
|
||||
msg.type = 0x44; |
||||
msg.data = (pu8) "Hello2"; |
||||
msg.len = 7; |
||||
TF_Send(demo_tf, &msg); |
||||
} |
||||
|
||||
|
||||
// a made up custom checksum - just to test it's used and works
|
||||
|
||||
TF_CKSUM TF_CksumStart(void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
TF_CKSUM TF_CksumAdd(TF_CKSUM cksum, uint8_t byte) |
||||
{ |
||||
return cksum ^ byte + 1; |
||||
} |
||||
|
||||
TF_CKSUM TF_CksumEnd(TF_CKSUM cksum) |
||||
{ |
||||
return ~cksum ^ 0xA5; |
||||
} |
Loading…
Reference in new issue