polish
This commit is contained in:
@@ -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 -----------------------------------
|
||||
|
||||
Reference in New Issue
Block a user