49 GRTOS_USER_CRITICAL_SECTION_GET;
50 prcb = (
G_RCB *) pevent->ECB_AssocRCB;
51 prrds_buffer = pevent->ECB_RRDS;
53 if (prrds_buffer->queue_buffer.BUFFER_status == BUFFER_status_READ) {
54 if (prcb->queue.MQ_msg_seq == prrds_buffer->queue_buffer.BUFFER_msg_seq) {
56 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
61 if (peventime == (
GS_ECB *) 0) {
62 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
65 peventime->ECBValue.i64 = (
INT64) prrds_buffer->queue_buffer.BUFFER_priority.i64;
66 peventime->ECBType = G_ECBType_MESSAGE_CONSUME_WAIT;
71 GRTOS_USER_CRITICAL_SECTION_GET;
73 if (peventime->ECBType == G_ECBType_MESSAGE_CONSUME_EXPIRED) {
75 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
81 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
85 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
104 INT32 granted = G_FALSE;
108 GRTOS_USER_CRITICAL_SECTION_GET;
111 if (msg_length > prcb->queue.MQ_Buffer_Length) {
112 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
116 if (prcb->RCB_NextRCBWEL != (
struct gs_ecb *) 0) {
118 if (pevent == (
GS_ECB *) 0) {
119 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
123 if (peventime == (
GS_ECB *) 0) {
125 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
128 pevent->ECBValue.i64 = (
INT64) prcb->queue.MQ_priority_send;
129 prcb->queue.MQ_priority_send++;
132 peventime->ECBValue.i64 = (
INT64) timeout;
133 peventime->ECBType = G_ECBType_MESSAGE_SEND_WAIT;
138 GRTOS_USER_CRITICAL_SECTION_GET;
140 if (prcb->RCB_NextRCBWEL == pevent) {
147 if (granted == G_FALSE) {
148 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
154 if (prcb->RCB_NextRCBWEL == (
struct gs_ecb *) 0
155 || granted == G_TRUE) {
157 prcb->queue.MQ_Count_deliver = (
INT32) 0;
158 prcb->queue.MQ_msg_Length = msg_length;
159 prcb->queue.MQ_msg_seq++;
160 memcpy(prcb->queue.MQ_PBuffer, pmsg, msg_length);
164 pevent = prcb->RCB_NextRCBGEL;
165 while (pevent != (
GS_ECB *) 0) {
167 pevent = pevent->ECB_NextECB;
172 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
188 GRTOS_USER_CRITICAL_SECTION_GET;
190 if (prcb != (
G_RCB *) 0) {
191 prcb->RCBState = GK_RCBState_QUEUE;
192 prcb->RCBType = (
INT32) GK_RCBType_QUEUE;
193 prcb->RCBPriority.i64 = (
INT64) G_LOWEST_PRIORITY - (
INT64) 100;
194 prcb->RCBGrantedPriority.i64 = (
INT64) G_LOWEST_PRIORITY - (
INT64) 100;
195 prcb->RCBWaitingTimeout.i64 = (
INT64) G_LATEST_TIME - (
INT64) 100;
196 prcb->RCBGrantedTimeout.i64 = (
INT64) G_LATEST_TIME - (
INT64) 100;
197 prcb->RCB_NextRCBWEL = (
struct gs_ecb *) 0;
198 prcb->RCB_NextRCBGEL = (
struct gs_ecb *) 0;
199 prcb->RCB_NextRCB = (
struct g_rcb *) 0;
200 prcb->RCB_NextRCBASL = (
struct gs_scb *) 0;
202 prcb->queue.MQ_PBuffer = (
void *) pbuffer;
203 prcb->queue.MQ_Buffer_Length = buffer_length;
204 prcb->queue.MQ_Count_deliver = (
INT32) 0;
205 prcb->queue.MQ_consumer_count = (
INT32) 0;
206 prcb->queue.MQ_priority_send = (
INT32) 0;
207 prcb->queue.MQ_priority_consume = (
INT32) 0;
208 prcb->queue.MQ_msg_Length = (
INT32) 0;
209 prcb->queue.MQ_msg_seq = (
INT32) 0;
210 prcb->queue.MQ_CUR_TCB = (
struct gs_tcb *) 0;
213 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
214 return((
G_RCB *) prcb);
235 GRTOS_USER_CRITICAL_SECTION_GET;
245 if (pevent == (
GS_ECB *) 0) {
247 if (pevent == (
struct gs_ecb *) 0)
return(pevent);
249 if (prrds_buffer == (
GS_RRDS *) 0) {
253 pevent->ECB_RRDS = prrds_buffer;
259 prrds_buffer = pevent->ECB_RRDS;
262 pevent->ECBType = G_ECBType_QUEUE_CONSUME;
263 prrds_buffer->RRDS_AsocECB = pevent;
265 prrds_buffer->queue_buffer.BUFFER_status = BUFFER_status_READ;
266 prrds_buffer->queue_buffer.BUFFER_pbuffer = pbuffer;
267 prrds_buffer->queue_buffer.BUFFER_buffer_length = buffer_length;
268 prrds_buffer->queue_buffer.BUFFER_priority.i64 = (
INT64) G_LOWEST_PRIORITY - (
INT64) 100;
269 prrds_buffer->queue_buffer.BUFFER_timeout.i64 = (
INT64) timeout;
270 prrds_buffer->queue_buffer.BUFFER_current_byte_index = (
INT32) 0;
271 prrds_buffer->queue_buffer.BUFFER_msg_seq = presource->queue.MQ_msg_seq;
275 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
288 GS_TCB *ptcb = pevent->ECB_AssocTCB;
291 INT32 bytes_msg_left;
292 INT32 bytes_to_transfer;
293 void *source_address;
294 void *destination_address;
296 if (prrds_buffer->queue_buffer.BUFFER_status == BUFFER_status_NOT_READ) {
299 if (prrds_buffer->queue_buffer.BUFFER_msg_seq != prcb->queue.MQ_msg_seq) {
303 bytes_buffer = prrds_buffer->queue_buffer.BUFFER_buffer_length;
304 bytes_msg_left = prcb->queue.MQ_msg_Length - prrds_buffer->queue_buffer.BUFFER_current_byte_index;
306 if (bytes_buffer > bytes_msg_left) bytes_to_transfer = bytes_msg_left;
307 else bytes_to_transfer = bytes_buffer;
309 source_address = (
void *) (prcb->queue.MQ_PBuffer + prrds_buffer->queue_buffer.BUFFER_current_byte_index);
310 destination_address = (
void *) (prrds_buffer->queue_buffer.BUFFER_pbuffer);
312 memcpy(destination_address, source_address, bytes_to_transfer);
314 prrds_buffer->queue_buffer.BUFFER_current_byte_index += bytes_to_transfer;
315 prrds_buffer->queue_buffer.BUFFER_status = BUFFER_status_NOT_READ;
317 if (ptcb->TCBState == G_TCBState_WAITING) {
336 GRTOS_USER_CRITICAL_SECTION_GET;
338 prrds_buffer = (
GS_RRDS *) pevent->ECB_RRDS;
339 prcb = (
G_RCB *) pevent->ECB_AssocRCB;
341 prrds_buffer->queue_buffer.BUFFER_status = BUFFER_status_READ;
342 if (prrds_buffer->queue_buffer.BUFFER_current_byte_index != prcb->queue.MQ_msg_Length) {
347 prcb->queue.MQ_consumer_count++;
348 prrds_buffer->queue_buffer.BUFFER_current_byte_index = 0;
349 prrds_buffer->queue_buffer.BUFFER_msg_seq++;
352 if (prcb->queue.MQ_consumer_count == prcb->queue.MQ_Count_deliver) {
354 if (prcb->RCB_NextRCBWEL != (
struct gs_ecb *) 0) {
355 ptcb = prcb->RCB_NextRCBWEL->ECB_AssocTCB;
361 GRTOS_CMD_CRITICAL_SECTION_RELEASE;
373 peventime->ECBType = G_ECBType_MESSAGE_SEND_EXPIRED;
374 ptcb = peventime->ECB_AssocTCB;
388 peventime->ECBType = G_ECBType_MESSAGE_CONSUME_EXPIRED;
389 ptcb = peventime->ECB_AssocTCB;