Use identifiers instead of the magic numbers of kboot_driver.[ch]

This commit is contained in:
László Monda
2018-01-06 21:21:36 +01:00
parent f318c6872e
commit fcd75b2af2
2 changed files with 39 additions and 20 deletions

View File

@@ -4,7 +4,7 @@
kboot_driver_state_t KbootDriverState;
static uint8_t rxBuffer[MAX_KBOOT_COMMAND_LENGTH];
static uint8_t rxBuffer[KBOOT_PACKAGE_MAX_LENGTH];
static uint8_t pingCommand[] = {0x5a, 0xa6};
static uint8_t resetCommand[] = {0x5a, 0xa4, 0x04, 0x00, 0x6f, 0x46, 0x0b, 0x00, 0x00, 0x00};
static uint8_t ackMessage[] = {0x5a, 0xa1};
@@ -32,43 +32,45 @@ status_t KbootSlaveDriver_Update(uint8_t kbootInstanceId)
break;
case KbootCommand_Ping:
switch (KbootDriverState.phase) {
case 0:
case KbootPhase_SendPing:
status = tx(pingCommand, sizeof(pingCommand));
KbootDriverState.phase++;
KbootDriverState.phase = KbootPhase_CheckPingStatus;
break;
case 1:
case KbootPhase_CheckPingStatus:
KbootDriverState.status = Slaves[SlaveId_KbootDriver].previousStatus;
KbootDriverState.phase = KbootDriverState.status == kStatus_Success ? 2 : 0;
KbootDriverState.phase = KbootDriverState.status == kStatus_Success
? KbootPhase_ReceivePingResponse
: KbootPhase_SendPing;
return kStatus_Uhk_IdleCycle;
case 2:
status = rx(10);
KbootDriverState.phase++;
case KbootPhase_ReceivePingResponse:
status = rx(KBOOT_PACKAGE_LENGTH_PING_RESPONSE);
KbootDriverState.phase = KbootPhase_CheckPingResponseStatus;
break;
case 3:
case KbootPhase_CheckPingResponseStatus:
KbootDriverState.status = Slaves[SlaveId_KbootDriver].previousStatus;
if (KbootDriverState.status == kStatus_Success) {
KbootDriverState.commandType = KbootCommand_Idle;
} else {
KbootDriverState.phase = 0;
KbootDriverState.phase = KbootPhase_SendPing;
return kStatus_Uhk_IdleCycle;
}
}
break;
case KbootCommand_Reset:
switch (KbootDriverState.phase) {
case 0:
case KbootPhase_SendReset:
status = tx(resetCommand, sizeof(resetCommand));
KbootDriverState.phase++;
KbootDriverState.phase = KbootPhase_ReceiveResetAck;
break;
case 1:
status = rx(2);
KbootDriverState.phase++;
case KbootPhase_ReceiveResetAck:
status = rx(KBOOT_PACKAGE_LENGTH_ACK);
KbootDriverState.phase = KbootPhase_ReceiveResetGenericResponse;
break;
case 2:
status = rx(18);
KbootDriverState.phase++;
case KbootPhase_ReceiveResetGenericResponse:
status = rx(KBOOT_PACKAGE_LENGTH_GENERIC_RESPONSE);
KbootDriverState.phase = KbootPhase_CheckResetSendAck;
break;
case 3:
case KbootPhase_CheckResetSendAck:
status = tx(ackMessage, sizeof(ackMessage));
KbootDriverState.commandType = KbootCommand_Idle;
break;

View File

@@ -7,7 +7,10 @@
// Macros:
#define MAX_KBOOT_COMMAND_LENGTH 32
#define KBOOT_PACKAGE_MAX_LENGTH 32
#define KBOOT_PACKAGE_LENGTH_PING_RESPONSE 10
#define KBOOT_PACKAGE_LENGTH_ACK 2
#define KBOOT_PACKAGE_LENGTH_GENERIC_RESPONSE 18
// Typedefs:
@@ -21,6 +24,20 @@
KbootCommand_Reset,
} kboot_command_t;
typedef enum {
KbootPhase_SendPing,
KbootPhase_CheckPingStatus,
KbootPhase_ReceivePingResponse,
KbootPhase_CheckPingResponseStatus,
} kboot_ping_phase_t;
typedef enum {
KbootPhase_SendReset,
KbootPhase_ReceiveResetAck,
KbootPhase_ReceiveResetGenericResponse,
KbootPhase_CheckResetSendAck,
} kboot_reset_phase_t;
typedef struct {
kboot_command_t commandType;
uint8_t i2cAddress;