30 |
30 |
#define HRTMSG 00
|
31 |
31 |
#define SRTMSG 01
|
32 |
32 |
#define NRTMSG 11
|
|
33 |
#define SLEEPTIME 20
|
33 |
34 |
|
34 |
35 |
static THD_WORKING_AREA(myThreadWorkingArea, 128);
|
35 |
36 |
|
... | ... | |
67 |
68 |
}else{
|
68 |
69 |
prevElem->next = msg;
|
69 |
70 |
msgqueue->tail = msg;
|
|
71 |
msgqueue->size++;
|
70 |
72 |
return true;
|
71 |
73 |
}
|
72 |
74 |
}
|
... | ... | |
102 |
104 |
if(!msgqueueEmpty(msgqueue)){
|
103 |
105 |
rtcan_msg_t *elem = msgqueue->head;
|
104 |
106 |
msgqueue->head = elem->next;
|
|
107 |
msgqueue->size--;
|
105 |
108 |
return elem;
|
106 |
109 |
}
|
107 |
110 |
return NULL;
|
... | ... | |
120 |
123 |
|
121 |
124 |
// Handling Message Queues
|
122 |
125 |
|
123 |
|
bool enqueueMsg(uint8_t *payload, uint8_t msgType, systime_t deadline){
|
|
126 |
bool enqueueMsg(uint8_t *payload, uint8_t msgType, aos_timestamp_t deadline){
|
124 |
127 |
static rtcan_msg_t msg;
|
125 |
128 |
msg.payload = payload;
|
126 |
129 |
msg.msgType = msgType;
|
... | ... | |
135 |
138 |
return false;
|
136 |
139 |
}
|
137 |
140 |
|
|
141 |
u_int32_t createId(rtcan_msg_t *msg, uint8_t msgType){
|
|
142 |
// first 6 bit laxity
|
|
143 |
// 6-21 id
|
|
144 |
// 21-29 fragment
|
|
145 |
u_int32_t id = 0;
|
|
146 |
aos_timestamp_t uptime;
|
|
147 |
aosSysGetUptime(&uptime);
|
|
148 |
|
|
149 |
uint32_t uptimeMcs = (uint32_t)(uptime / MICROSECONDS_PER_DAY);
|
|
150 |
|
|
151 |
|
|
152 |
}
|
|
153 |
|
138 |
154 |
|
139 |
155 |
/**
|
140 |
156 |
* @brief schedule rtcan messages into mailboxes
|
... | ... | |
146 |
162 |
int nextSlot; // set by while loop from calendar
|
147 |
163 |
|
148 |
164 |
while (true){
|
|
165 |
// send Frame of Timeslot
|
149 |
166 |
// iterate over calendar(bitmask)
|
150 |
167 |
rtcan_msg_t *nextMsg;
|
151 |
|
chThdSleepMilliseconds( 20 );
|
|
168 |
chThdSleepMilliseconds( SLEEPTIME );
|
152 |
169 |
if(nextSlot == 1){
|
153 |
170 |
nextMsg = popRTCanMsg(&hrtQueue);
|
154 |
171 |
}else{
|
... | ... | |
158 |
175 |
nextMsg = popRTCanMsg(&nrtQueue);
|
159 |
176 |
}
|
160 |
177 |
}
|
161 |
|
// Take next element from queue
|
162 |
|
// create frame
|
163 |
|
// place it in buffer to be sent in next time slot
|
164 |
|
chThdSleepMilliseconds( 20 );
|
|
178 |
if(nextMsg != NULL){
|
|
179 |
// create frame
|
|
180 |
// frame needs id, payload(later) and ___
|
|
181 |
// place it in Mailbox to be sent in next time slot
|
|
182 |
}
|
|
183 |
// maybe send empty message if no message to reduce jitter????
|
|
184 |
chThdSleepMilliseconds( SLEEPTIME );
|
165 |
185 |
}
|
166 |
186 |
|
167 |
187 |
return 0;
|