diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2012-08-14 13:57:53 +0200 |
---|---|---|
committer | Paul Kocialkowski <contact@paulk.fr> | 2012-08-14 13:57:53 +0200 |
commit | 76f203a125733a30964c5696e4dcb60c152db675 (patch) | |
tree | 60f2289ef5c28bcd85a6c86706c129810bc3de1e | |
parent | 9a5827778189b7e0f91879430a4e160567ee6bbd (diff) | |
download | bcm4751-76f203a125733a30964c5696e4dcb60c152db675.tar.gz bcm4751-76f203a125733a30964c5696e4dcb60c152db675.tar.bz2 bcm4751-76f203a125733a30964c5696e4dcb60c152db675.zip |
MEIF: Added NACK structure and a few reasons
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-rw-r--r-- | meif.c | 26 | ||||
-rw-r--r-- | meif.h | 13 |
2 files changed, 37 insertions, 2 deletions
@@ -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"); @@ -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]; |