// Show info about the received packets. // This is only for debugging and only few messages are supported. The definition // of all packets must be known at the PC program that's processing the data. void decode_data(uint8_t len) { uint32_t u32, messagegroupid, messageid; uint16_t u16; pkg_header_adjust_offset(); uint16_t senderid = pkg_header_get_senderid(); uint32_t packetcounter = pkg_header_get_packetcounter(); MessageTypeEnum messagetype = pkg_header_get_messagetype(); UART_PUTF("Packet Data: SenderID=%u;", senderid); UART_PUTF("PacketCounter=%lu;", packetcounter); UART_PUTF("MessageType=%u;", messagetype); // show ReceiverID for all requests if ((messagetype == MESSAGETYPE_GET) || (messagetype == MESSAGETYPE_SET) || (messagetype == MESSAGETYPE_SETGET)) { uint16_t receiverid = pkg_headerext_common_get_receiverid(); UART_PUTF("ReceiverID=%u;", receiverid); } uint16_t acksenderid = 65000; uint32_t ackpacketcounter = 0; // show AckSenderID, AckPacketCounter and Error for "Ack" and "AckStatus" if ((messagetype == MESSAGETYPE_ACK) || (messagetype == MESSAGETYPE_ACKSTATUS)) { acksenderid = pkg_headerext_common_get_acksenderid(); ackpacketcounter = pkg_headerext_common_get_ackpacketcounter(); uint8_t error = pkg_headerext_common_get_error(); UART_PUTF("AckSenderID=%u;", acksenderid); UART_PUTF("AckPacketCounter=%lu;", ackpacketcounter); UART_PUTF("Error=%u;", error); } // show MessageGroupID and MessageID for all MessageTypes except "Ack" if (messagetype != MESSAGETYPE_ACK) { messagegroupid = pkg_headerext_common_get_messagegroupid(); messageid = pkg_headerext_common_get_messageid(); UART_PUTF("MessageGroupID=%u;", messagegroupid); UART_PUTF("MessageID=%u;", messageid); } // show raw message data for all MessageTypes with data (= all except "Get" and "Ack") if ((messagetype != MESSAGETYPE_GET) && (messagetype != MESSAGETYPE_ACK)) { uint8_t i; uint8_t start = __HEADEROFFSETBITS / 8; uint8_t shift = __HEADEROFFSETBITS % 8; uint16_t count = (((uint16_t)len * 8) - __HEADEROFFSETBITS + 7) / 8; //UART_PUTF4("\r\n\r\nLEN=%u, START=%u, SHIFT=%u, COUNT=%u\r\n\r\n", len, start, shift, count); UART_PUTS("MessageData="); for (i = start; i < start + count; i++) { UART_PUTF("%02x", array_read_UIntValue8(i, shift, 8, 0, 255, bufx)); } UART_PUTS(";"); // additionally decode the message data for a small number of messages switch (messagegroupid) { case MESSAGEGROUP_GENERIC: switch (messageid) { case MESSAGEID_GENERIC_VERSION: UART_PUTF("Major=%u;", msg_generic_version_get_major()); UART_PUTF("Minor=%u;", msg_generic_version_get_minor()); UART_PUTF("Patch=%u;", msg_generic_version_get_patch()); UART_PUTF("Hash=%08lx;", msg_generic_version_get_hash()); break; case MESSAGEID_GENERIC_BATTERYSTATUS: UART_PUTF("Percentage=%u;", msg_generic_batterystatus_get_percentage()); break; /*DateTime Status: UART_PUTS("Command Name=DateTime Status;"); UART_PUTF3("Date=%u-%02u-%02u;", bufx[6] + 2000, bufx[7], bufx[8]); UART_PUTF3("Time=%02u:%02u:%02u", bufx[9], bufx[10], bufx[11]);*/ default: break; } break; case MESSAGEGROUP_WEATHER: switch (messageid) { case MESSAGEID_WEATHER_TEMPERATURE: UART_PUTS("Temperature="); print_signed(msg_weather_temperature_get_temperature()); UART_PUTS(";"); break; case MESSAGEID_WEATHER_HUMIDITYTEMPERATURE: u16 = msg_weather_humiditytemperature_get_humidity(); UART_PUTF2("Humidity=%u.%u;Temperature=", u16 / 10, u16 % 10); print_signed(msg_weather_humiditytemperature_get_temperature()); UART_PUTS(";"); break; case MESSAGEID_WEATHER_BAROMETRICPRESSURETEMPERATURE: u32 = msg_weather_barometricpressuretemperature_get_barometricpressure(); UART_PUTF("Pressure=%ld;Temperature=", u32); print_signed(msg_weather_barometricpressuretemperature_get_temperature()); UART_PUTS(";"); break; default: break; } break; case MESSAGEGROUP_POWERSWITCH: switch (messageid) { case MESSAGEID_POWERSWITCH_SWITCHSTATE: UART_PUTF("On=%u;", msg_powerswitch_switchstate_get_on()); UART_PUTF("TimeoutSec=%u;", msg_powerswitch_switchstate_get_timeoutsec()); break; default: break; } break; default: break; } } UART_PUTS("\r\n"); // Detect and process Acknowledges to base station, whose requests have to be removed from the request queue if ((messagetype == MESSAGETYPE_ACK) || (messagetype == MESSAGETYPE_ACKSTATUS)) { if (acksenderid == device_id) // request sent from base station { remove_request(senderid, device_id, ackpacketcounter); } } }
void printall() { cprintf("$ \n"); cprintf("\\text{Principal } 1 == A \\\\ \n"); cprintf("\\text{Principal } 2 == B \\\\ \n"); cprintf("\\text{Principal } 3 == C \\\\ \n"); cprintf("\\text{Principal } 4 == D \\\\ \n"); cprintf("\\text{Principal } 5 == E \\\\ \n"); cprintf("\\text{Principal } 6 == F \\\\ \n"); cprintf("\\text{Principal } 7 == G \\\\ \n"); cprintf("\\text{Predicate } 99 == OK \\\\ \n"); cprintf("\\text{Predicate } 100 == ALRIGHT \\\\\\\\ \n"); cprintf("\\text{PRINTING FORMULAE} \\\\\\\\ \n"); print_pred(); freeall(); cprintf(" \\\\\\\\ \n"); print_impl(); freeall(); cprintf(" \\\\\\\\ \n"); print_signed(); freeall(); cprintf(" \\\\\\\\ \n"); print_says(); freeall(); cprintf(" \\\\\\\\ \n"); print_confirms(); freeall(); cprintf(" \\\\\\\\ \n"); print_abs(); freeall(); cprintf(" \\\\\\\\ \n"); cprintf("\\text{PRINTING CONTEXT} \\\\\\\\ \n"); print_context(); freeall(); cprintf(" \\\\\\\\ \n"); cprintf("\\text{PRINTING PROOFS} \\\\\\\\ \n"); print_signed_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_confirms_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_assump_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_tauto_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_weaken_impl_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_impl_p(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_says_confirms(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_says_signed(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_says_says(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); print_says_spec(); freeall(); cprintf(" \\\\\\\\\\\\\\\\ \n"); cprintf("$ \n"); freeall(); cprintf("\\begin{landscape} \n $"); print_delegation(); freeall(); cprintf("$ \n \\end{landscape} \n "); }