1
0
This commit is contained in:
2024-05-01 16:09:03 +02:00
parent bfdc39ece1
commit b2bec39caf
6 changed files with 290 additions and 118 deletions

View File

@@ -4,29 +4,43 @@
#include <cstdint>
#include <stdint.h>
/**
* @brief Senda copy of DATA_IND to the right application queue
*
* @param source source Address (addr, sapi)
* @param destination destination Address (addr, sapi)
* @param dataFramePtr pointer to the data frame
*/
void send_DATA_IND(Adresse source, Adresse destination, uint8_t* dataFramePtr) {
struct queueMsg_t queueMsg; // queue message
osStatus_t retCode; // return error code
char* strPtr;
queueMsg.type = DATA_IND;
queueMsg.addr = source.addr;
queueMsg.sapi = source.sapi;
char* strPtr; // string pointer of the message
// Get memmory for new message and test if succed
strPtr = osMemoryPoolAlloc(memPool, 0);
if(strPtr == NULL) {
assert(false);
}
// Copy data from dataFramePtr to strPtrt8_t* dataFramePtr) {
for(uint8_t i = 0; i < dataFramePtr[2]; i++) {
strPtr[i] = (char)dataFramePtr[3+i];
}
strPtr[dataFramePtr[2]] = '\0'; // null-terminate string
queueMsg.anyPtr = strPtr;
//retCode = osMemoryPoolFree(memPool, dataFramePtr);
//CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
// add null-terminate string
strPtr[dataFramePtr[2]] = '\0';
// Define data in queueMsg struct
queueMsg.type = DATA_IND;
queueMsg.addr = source.addr;
queueMsg.sapi = source.sapi;
queueMsg.anyPtr = strPtr;
// Test distination
switch (destination.sapi) {
// Send to right application queue
case TIME_SAPI:
retCode = osMessageQueuePut(
queue_timeR_id,
@@ -48,30 +62,37 @@ void send_DATA_IND(Adresse source, Adresse destination, uint8_t* dataFramePtr) {
}
}
/**
* @brief Send DATABACK to MAC sender
*
* @param source source Address (addr, sapi)
* @param destination destination Address (addr, sapi)
* @param dataFramePtr pointer to the data frame
*/
void send_DATABACK(Adresse source, Adresse destination, uint8_t* dataFramePtr) {
struct queueMsg_t queueMsg; // queue message
osStatus_t retCode; // return error code
// Define data in queueMsg struct
queueMsg.type = DATABACK;
queueMsg.anyPtr = dataFramePtr;
queueMsg.addr = source.addr;
queueMsg.sapi = source.sapi;
// Put on MAC sender queue
retCode = osMessageQueuePut(
queue_macS_id,
&queueMsg,
osPriorityNormal,
0);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
}
void MacReceiver(void *argument) {
struct queueMsg_t queueMsg; // queue message
Adresse src;
Adresse dst;
Adresse src; // source Address (addr, sapi)
Adresse dst; // destination Address (addr, sapi)
uint8_t length;
Status status;
uint8_t* msg;
@@ -82,6 +103,7 @@ void MacReceiver(void *argument) {
// QUEUE READ
//--------------------------------------------------------------------------
{
// Get message from queue, test retCode and get msg
retCode = osMessageQueueGet(
queue_macR_id,
&queueMsg,
@@ -91,6 +113,10 @@ void MacReceiver(void *argument) {
msg = queueMsg.anyPtr;
}
//--------------------------------------------------------------------------
// SWITCH ON MESSAGE TYPE
//--------------------------------------------------------------------------
switch (queueMsg.type) {
//----------------------------------------------------------------------
@@ -101,6 +127,7 @@ void MacReceiver(void *argument) {
//--------------------------------------------------------------
// TOKEN
//--------------------------------------------------------------
// Send token to MAC sender
queueMsg.type = TOKEN;
retCode = osMessageQueuePut(
queue_macS_id,
@@ -113,6 +140,7 @@ void MacReceiver(void *argument) {
//--------------------------------------------------------------
// MESSAGE
//--------------------------------------------------------------
// Get source Addresse, destination Addresse, length and status
src.raw = msg[0];
dst.raw = msg[1];
length = msg[2];
@@ -125,6 +153,7 @@ void MacReceiver(void *argument) {
dst.addr == BROADCAST_ADDRESS ) {
if((Checksum(msg) & 0x3F) == status.checksum) {
// Checksum OK -----------------------------------------
status.ack = 1;
if(dst.sapi == CHAT_SAPI && gTokenInterface.connected ||
@@ -135,7 +164,7 @@ void MacReceiver(void *argument) {
} else {
status.read = 0;
}
msg[3+length] = status.raw;
msg[3+length] = status.raw; // Add status to message
if(src.addr == gTokenInterface.myAddress) { // For me, from me
// Send DATABACK -----------------------------------