| 979 | }; |
| 980 | |
| 981 | int modMessagePostToMachine(xsMachine *the, uint8_t *message, uint16_t messageLength, modMessageDeliver callback, void *refcon) |
| 982 | { |
| 983 | modMessageRecord msg; |
| 984 | |
| 985 | #ifdef mxDebug |
| 986 | if (0xffff == messageLength) { |
| 987 | msg.message = NULL; |
| 988 | msg.callback = callback; |
| 989 | msg.refcon = refcon; |
| 990 | msg.length = 0; |
| 991 | xQueueSendToBack(the->dbgQueue, &msg, portMAX_DELAY); |
| 992 | return 0; |
| 993 | } |
| 994 | #endif |
| 995 | |
| 996 | msg.embeddedMessage = 0; |
| 997 | if (message && messageLength) { |
| 998 | if (messageLength <= sizeof(msg.message)) { |
| 999 | msg.embeddedMessage = 1; |
| 1000 | c_memmove(&msg.message, message, messageLength); |
| 1001 | } |
| 1002 | else { |
| 1003 | msg.message = c_malloc(messageLength); |
| 1004 | if (!msg.message) return -1; |
| 1005 | |
| 1006 | c_memmove(msg.message, message, messageLength); |
| 1007 | } |
| 1008 | } |
| 1009 | else |
| 1010 | msg.message = NULL; |
| 1011 | |
| 1012 | msg.length = messageLength; |
| 1013 | msg.callback = callback; |
| 1014 | msg.refcon = refcon; |
| 1015 | |
| 1016 | if (pdTRUE == xQueueSendToBack(the->msgQueue, &msg, MODDEF_TASK_QUEUEWAIT)) |
| 1017 | return 0; |
| 1018 | |
| 1019 | if (msg.message && !msg.embeddedMessage) |
| 1020 | c_free(msg.message); |
| 1021 | |
| 1022 | return -2; |
| 1023 | } |
| 1024 | |
| 1025 | int modMessagePostToMachineFromISR(xsMachine *the, modMessageDeliver callback, void *refcon) |
| 1026 | { |
no test coverage detected