From 76f203a125733a30964c5696e4dcb60c152db675 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Tue, 14 Aug 2012 13:57:53 +0200 Subject: MEIF: Added NACK structure and a few reasons Signed-off-by: Paul Kocialkowski --- meif.c | 26 +++++++++++++++++++++++++- meif.h | 13 ++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/meif.c b/meif.c index 4858550..39e9f62 100644 --- a/meif.c +++ b/meif.c @@ -431,6 +431,7 @@ int meif_send_patch(int stage) int meif_dispatch(struct meif_message *meif_message) { struct meif_config_values *config_values; + struct meif_nack *nack; static int patch_send_stage = 0; switch(meif_message->command) { @@ -441,13 +442,36 @@ int meif_dispatch(struct meif_message *meif_message) patch_send_stage = 2; meif_send_patch(patch_send_stage); } else if(patch_send_stage == 2) { + patch_send_stage = 3; printf("Ready to switch protocol!\n"); return -1; } break; case MEIF_NACK_MSG: - printf("Got a NACK message\n\n"); + printf("Got a NACK message\n"); + + if(meif_message->data != NULL && meif_message->length >= sizeof(struct meif_nack)) { + nack = (struct meif_nack *) meif_message->data; + switch(nack->reason) { + case MEIF_NACK_GARBAGE_RECEIVED: + printf("Reason is: MEIF_NACK_GARBAGE_RECEIVED\n"); + break; + case MEIF_NACK_CHECKSUM_ERROR: + printf("Reason is: MEIF_NACK_CHECKSUM_ERROR\n"); + if(patch_send_stage > 0) { + patch_send_stage = 0; + printf("Patch send request failed, aborting!\n"); + } + break; + default: + printf("Reason is: MEIF_NACK_UNKNOWN\n"); + break; + } + } + + printf("\n"); + break; case MEIF_STATE_REPORT_MSG: printf("Got a STATE_REPORT message\n\n"); diff --git a/meif.h b/meif.h index 7dbb6da..eca8c45 100644 --- a/meif.h +++ b/meif.h @@ -42,12 +42,16 @@ * Data */ +#define MEIF_NACK_GARBAGE_RECEIVED 0x0003 +#define MEIF_NACK_CHECKSUM_ERROR 0x0102 + #define MEIF_PATCH_FILE "/data/bcm4751.fw" #define MEIF_PATCH_LENGTH 2738 #define MEIF_PATCH_PART1_O 0 #define MEIF_PATCH_PART1_L 2042 #define MEIF_PATCH_PART2_O 2044 #define MEIF_PATCH_PART2_L (MEIF_PATCH_LENGTH - MEIF_PATCH_PART2_O) + /* * Structures */ @@ -64,8 +68,15 @@ struct meif_message { void *data; } __attribute__((__packed__)); +struct meif_nack { + uint16_t seq; + uint16_t reason; + uint16_t unknown; +} __attribute__((__packed__)); + struct meif_config_values { - uint8_t unknown1[36]; + uint16_t seq; + uint8_t unknown1[34]; char vendor[16]; char product[16]; uint8_t unknown2[2]; -- cgit v1.2.3