1
0
This repository has been archived on 2024-09-17. You can view files and clone it, but cannot push or open issues or pull requests.
tor-heredero-tokenring/mac_sender.c

152 lines
4.2 KiB
C
Raw Normal View History

2024-04-15 14:26:40 +00:00
#include "main.h"
2024-04-20 10:40:44 +00:00
#include <string.h>
uint8_t* lastToken;
osMessageQueueId_t queue_macData_id;
const osMessageQueueAttr_t queue_macData_attr = {
.name = "MAC_DATA"
};
void MacSender(void *argument) {
2024-04-15 14:26:40 +00:00
struct queueMsg_t queueMsg; // queue message
2024-04-17 15:09:48 +00:00
uint8_t* msg;
2024-04-15 14:26:40 +00:00
osStatus_t retCode; // return error code
2024-04-20 10:40:44 +00:00
lastToken = osMemoryPoolAlloc(memPool, osWaitForever);
queue_macData_id = osMessageQueueNew(4, sizeof(struct queueMsg_t), &queue_macData_attr);
2024-04-15 14:26:40 +00:00
for(;;) {
2024-04-20 16:44:37 +00:00
//--------------------------------------------------------------------------
2024-04-15 14:26:40 +00:00
// QUEUE READ
2024-04-20 16:44:37 +00:00
//--------------------------------------------------------------------------
2024-04-15 14:26:40 +00:00
retCode = osMessageQueueGet(
queue_macS_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
2024-04-20 10:40:44 +00:00
2024-04-17 15:09:48 +00:00
msg = queueMsg.anyPtr;
2024-04-15 14:26:40 +00:00
switch(queueMsg.type) {
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// TOKEN MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case TOKEN: {
// Get token and save it
memcpy(lastToken, msg, TOKENSIZE-2);
// update token
lastToken[gTokenInterface.myAddress+1] = (0x1 << TIME_SAPI) + (gTokenInterface.connected << CHAT_SAPI);
for(uint8_t i = 1; i < sizeof(gTokenInterface.station_list); i++) {
gTokenInterface.station_list[i-1] = lastToken[i];
}
// send to lcd
queueMsg.type = TOKEN_LIST;
queueMsg.anyPtr = lastToken;
retCode = osMessageQueuePut(
queue_lcd_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
// Send msg from internal queue if exist
while (osMemoryPoolGetCount(queue_macData_id) != 0) { // Message in Queue
retCode = osMessageQueueGet(
queue_macData_id,
&queueMsg,
NULL,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
queueMsg.type = TO_PHY;
retCode = osMessageQueuePut(
queue_phyS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
2024-04-17 15:09:48 +00:00
}
2024-04-20 10:40:44 +00:00
// Send token
queueMsg.anyPtr = lastToken;
2024-04-17 15:09:48 +00:00
queueMsg.type = TO_PHY;
retCode = osMessageQueuePut(
queue_phyS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// DATABACK MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case DATABACK: {
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// NEW TOKEN MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case NEW_TOKEN: {
lastToken[0] = TOKEN_TAG;
2024-04-17 15:09:48 +00:00
for(uint8_t i = 1; i < sizeof(TOKENSIZE-2); i++) {
2024-04-20 10:40:44 +00:00
lastToken[i] = 0;
2024-04-15 14:26:40 +00:00
}
2024-04-17 15:09:48 +00:00
gTokenInterface.station_list[gTokenInterface.myAddress] = (0x1 << TIME_SAPI) + (gTokenInterface.connected << CHAT_SAPI);
2024-04-20 10:40:44 +00:00
lastToken[gTokenInterface.myAddress+1] = gTokenInterface.station_list[gTokenInterface.myAddress];
2024-04-17 15:09:48 +00:00
2024-04-15 14:26:40 +00:00
queueMsg.type = TO_PHY;
2024-04-20 10:40:44 +00:00
queueMsg.anyPtr = lastToken;
2024-04-17 15:09:48 +00:00
retCode = osMessageQueuePut(
queue_phyS_id,
&queueMsg,
osPriorityNormal,
osWaitForever);
CheckRetCode(retCode, __LINE__, __FILE__, CONTINUE);
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// START MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case START: {
2024-04-20 16:44:37 +00:00
gTokenInterface.connected = true;
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// STOP MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case STOP: {
2024-04-20 16:44:37 +00:00
gTokenInterface.connected = false;
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// DATA MESSAGE
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
case DATA_IND: {
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-20 16:44:37 +00:00
//----------------------------------------------------------------------
// DEFAULT - TBD
//----------------------------------------------------------------------
2024-04-20 10:40:44 +00:00
default: {
2024-04-15 14:26:40 +00:00
break;
2024-04-20 10:40:44 +00:00
}
2024-04-15 14:26:40 +00:00
}
}
2024-04-10 17:17:57 +00:00
}