Implement read/write indication on the fault LEDs

Conflicts:
	Downstream/Inc/build_config.h
	Downstream/Src/downstream_msc.c
	Downstream/Src/led.c
	Upstream/Inc/build_config.h
	Upstream/Src/led.c
USG_1.0
Robert Fisk 4 years ago
parent 828db8e415
commit bbad577d43

@ -19,5 +19,7 @@
#define CONFIG_KEYBOARD_ENABLED #define CONFIG_KEYBOARD_ENABLED
#define CONFIG_MOUSE_ENABLED #define CONFIG_MOUSE_ENABLED
#define CONFIG_READ_FLASH_TIME_MS 3000 //Enable read LED flashes for the specified length of time
#endif /* INC_BUILD_CONFIG_H_ */ #endif /* INC_BUILD_CONFIG_H_ */

@ -22,7 +22,8 @@ typedef enum
LED_STATUS_OFF, LED_STATUS_OFF,
LED_STATUS_FLASH_ERROR, LED_STATUS_FLASH_ERROR,
LED_STATUS_FLASH_UNSUPPORTED, LED_STATUS_FLASH_UNSUPPORTED,
LED_STATUS_FLASH_BOTDETECT LED_STATUS_FLASH_BOTDETECT,
LED_STATUS_FLASH_READWRITE
} }
LedStatusTypeDef; LedStatusTypeDef;
@ -36,8 +37,10 @@ void LED_Tick(void);
#define LED_ERROR_BLINK_MS 100 #define LED_ERROR_BLINK_MS 100
#define LED_UNSUPPORTED_BLINK_MS 500 #define LED_UNSUPPORTED_BLINK_MS 500
#define LED_BOTDETECT_BLINK_MS 100 #define LED_BOTDETECT_ON_MS 100
#define LED_BOTDETECT_OFF_MS (1000 - (LED_BOTDETECT_BLINK_MS * 3)) //Two flashes, total period = 1 sec #define LED_BOTDETECT_OFF_MS (1000 - (LED_BOTDETECT_ON_MS * 3)) //Two flashes, total period = 1 sec
#define LED_READWRITE_ON_MS 10
#define LED_READWRITE_OFF_MS 30

@ -16,6 +16,7 @@
#include "downstream_spi.h" #include "downstream_spi.h"
#include "usbh_msc.h" #include "usbh_msc.h"
#include "build_config.h" #include "build_config.h"
#include "led.h"
#ifdef CONFIG_MASS_STORAGE_ENABLED #ifdef CONFIG_MASS_STORAGE_ENABLED
@ -164,6 +165,7 @@ static void Downstream_MSC_PacketProcessor_BeginRead(DownstreamPacketTypeDef* re
return; return;
} }
LED_SetState(LED_STATUS_FLASH_READWRITE);
readBlockAddress = *(uint64_t*)&(receivedPacket->Data[0]); readBlockAddress = *(uint64_t*)&(receivedPacket->Data[0]);
readBlockCount = *(uint32_t*)&(receivedPacket->Data[8]); readBlockCount = *(uint32_t*)&(receivedPacket->Data[8]);
readByteCount = readBlockCount * MSC_Handle->unit[MSC_FIXED_LUN].capacity.block_size; readByteCount = readBlockCount * MSC_Handle->unit[MSC_FIXED_LUN].capacity.block_size;

@ -14,6 +14,7 @@
#include "board_config.h" #include "board_config.h"
uint32_t FaultLedCounter; uint32_t FaultLedCounter;
uint32_t ReadWriteFlashEndTime;
LedStatusTypeDef FaultLedState; LedStatusTypeDef FaultLedState;
uint16_t FaultLedOnMs; uint16_t FaultLedOnMs;
@ -27,15 +28,14 @@ uint8_t FaultLedOutputState;
void LED_Init(void) void LED_Init(void)
{ {
FAULT_LED_ON; FAULT_LED_ON;
ReadWriteFlashEndTime = 0;
FaultLedState = LED_STATUS_STARTUP; FaultLedState = LED_STATUS_STARTUP;
} }
void LED_SetState(LedStatusTypeDef newState) void LED_SetState(LedStatusTypeDef newState)
{ {
FaultLedState = newState; switch (newState)
switch (FaultLedState)
{ {
case LED_STATUS_OFF: case LED_STATUS_OFF:
FaultLedCounter = UINT32_MAX; FaultLedCounter = UINT32_MAX;
@ -51,16 +51,34 @@ void LED_SetState(LedStatusTypeDef newState)
break; break;
case LED_STATUS_FLASH_BOTDETECT: case LED_STATUS_FLASH_BOTDETECT:
FaultLedOnMs = LED_BOTDETECT_BLINK_MS; FaultLedOnMs = LED_BOTDETECT_ON_MS;
FaultLedOffMs = LED_BOTDETECT_OFF_MS; FaultLedOffMs = LED_BOTDETECT_OFF_MS;
FaultLedBlinkCount = 2; FaultLedBlinkCount = 2;
break; break;
case LED_STATUS_FLASH_READWRITE:
#ifdef CONFIG_READ_FLASH_TIME_MS
if (FaultLedState == LED_STATUS_OFF)
{
FaultLedOnMs = LED_READWRITE_ON_MS;
FaultLedOffMs = LED_READWRITE_OFF_MS;
FaultLedBlinkCount = 1;
ReadWriteFlashEndTime = HAL_GetTick() + CONFIG_READ_FLASH_TIME_MS;
}
else
#endif
{
newState = FaultLedState; //Don't override other active states
}
break;
default: default:
FaultLedOnMs = LED_ERROR_BLINK_MS; //Everything else is LED_STATUS_ERROR FaultLedOnMs = LED_ERROR_BLINK_MS; //Everything else is LED_STATUS_ERROR
FaultLedOffMs = LED_ERROR_BLINK_MS; FaultLedOffMs = LED_ERROR_BLINK_MS;
FaultLedBlinkCount = 1; FaultLedBlinkCount = 1;
} }
FaultLedState = newState;
} }
@ -77,6 +95,17 @@ void LED_Tick(void)
return; return;
} }
#ifdef CONFIG_READ_FLASH_TIME_MS
if (FaultLedState == LED_STATUS_FLASH_READWRITE)
{
if ((int32_t)(HAL_GetTick() - ReadWriteFlashEndTime) > 0)
{
LED_SetState(LED_STATUS_OFF);
return;
}
}
#endif
if (FaultLedOutputState) if (FaultLedOutputState)
{ {
if (FaultLedCounter++ >= FaultLedOnMs) //Check to turn LED off if (FaultLedCounter++ >= FaultLedOnMs) //Check to turn LED off

@ -22,6 +22,9 @@
#define CONFIG_MOUSE_ENABLED #define CONFIG_MOUSE_ENABLED
#define CONFIG_MOUSE_BOT_DETECT_ENABLED #define CONFIG_MOUSE_BOT_DETECT_ENABLED
#define CONFIG_WRITE_FLASH_TIME_MS 3000 //Enable write LED flashes for the specified length of time
//Configure keyboard bot detection here: //Configure keyboard bot detection here:
#ifdef CONFIG_KEYBOARD_BOT_DETECT_ENABLED #ifdef CONFIG_KEYBOARD_BOT_DETECT_ENABLED

@ -22,7 +22,8 @@ typedef enum
LED_STATUS_OFF, LED_STATUS_OFF,
LED_STATUS_FLASH_ERROR, LED_STATUS_FLASH_ERROR,
LED_STATUS_FLASH_UNSUPPORTED, LED_STATUS_FLASH_UNSUPPORTED,
LED_STATUS_FLASH_BOTDETECT LED_STATUS_FLASH_BOTDETECT,
LED_STATUS_FLASH_READWRITE
} }
LedStatusTypeDef; LedStatusTypeDef;
@ -36,8 +37,10 @@ void LED_Tick(void);
#define LED_ERROR_BLINK_MS 100 #define LED_ERROR_BLINK_MS 100
#define LED_UNSUPPORTED_BLINK_MS 500 #define LED_UNSUPPORTED_BLINK_MS 500
#define LED_BOTDETECT_BLINK_MS 100 #define LED_BOTDETECT_ON_MS 100
#define LED_BOTDETECT_OFF_MS (1000 - (LED_BOTDETECT_BLINK_MS * 3)) //Two flashes, total period = 1 sec #define LED_BOTDETECT_OFF_MS (1000 - (LED_BOTDETECT_ON_MS * 3)) //Two flashes, total period = 1 sec
#define LED_READWRITE_ON_MS 10
#define LED_READWRITE_OFF_MS 30
#endif /* INC_LED_H_ */ #endif /* INC_LED_H_ */

@ -14,6 +14,7 @@
#include "board_config.h" #include "board_config.h"
uint32_t FaultLedCounter; uint32_t FaultLedCounter;
uint32_t ReadWriteFlashEndTime;
LedStatusTypeDef FaultLedState; LedStatusTypeDef FaultLedState;
uint16_t FaultLedOnMs; uint16_t FaultLedOnMs;
@ -27,15 +28,14 @@ uint8_t FaultLedOutputState;
void LED_Init(void) void LED_Init(void)
{ {
FAULT_LED_ON; FAULT_LED_ON;
ReadWriteFlashEndTime = 0;
FaultLedState = LED_STATUS_STARTUP; FaultLedState = LED_STATUS_STARTUP;
} }
void LED_SetState(LedStatusTypeDef newState) void LED_SetState(LedStatusTypeDef newState)
{ {
FaultLedState = newState; switch (newState)
switch (FaultLedState)
{ {
case LED_STATUS_OFF: case LED_STATUS_OFF:
FaultLedCounter = UINT32_MAX; FaultLedCounter = UINT32_MAX;
@ -51,16 +51,34 @@ void LED_SetState(LedStatusTypeDef newState)
break; break;
case LED_STATUS_FLASH_BOTDETECT: case LED_STATUS_FLASH_BOTDETECT:
FaultLedOnMs = LED_BOTDETECT_BLINK_MS; FaultLedOnMs = LED_BOTDETECT_ON_MS;
FaultLedOffMs = LED_BOTDETECT_OFF_MS; FaultLedOffMs = LED_BOTDETECT_OFF_MS;
FaultLedBlinkCount = 2; FaultLedBlinkCount = 2;
break; break;
case LED_STATUS_FLASH_READWRITE:
#ifdef CONFIG_WRITE_FLASH_TIME_MS
if (FaultLedState == LED_STATUS_OFF)
{
FaultLedOnMs = LED_READWRITE_ON_MS;
FaultLedOffMs = LED_READWRITE_OFF_MS;
FaultLedBlinkCount = 1;
ReadWriteFlashEndTime = HAL_GetTick() + CONFIG_WRITE_FLASH_TIME_MS;
}
else
#endif
{
newState = FaultLedState; //Don't override other active states
}
break;
default: default:
FaultLedOnMs = LED_ERROR_BLINK_MS; //Everything else is LED_STATUS_ERROR FaultLedOnMs = LED_ERROR_BLINK_MS; //Everything else is LED_STATUS_ERROR
FaultLedOffMs = LED_ERROR_BLINK_MS; FaultLedOffMs = LED_ERROR_BLINK_MS;
FaultLedBlinkCount = 1; FaultLedBlinkCount = 1;
} }
FaultLedState = newState;
} }
@ -77,6 +95,17 @@ void LED_Tick(void)
return; return;
} }
#ifdef CONFIG_WRITE_FLASH_TIME_MS
if (FaultLedState == LED_STATUS_FLASH_READWRITE)
{
if ((int32_t)(HAL_GetTick() - ReadWriteFlashEndTime) > 0)
{
LED_SetState(LED_STATUS_OFF);
return;
}
}
#endif
if (FaultLedOutputState) if (FaultLedOutputState)
{ {
if (FaultLedCounter++ >= FaultLedOnMs) //Check to turn LED off if (FaultLedCounter++ >= FaultLedOnMs) //Check to turn LED off

@ -298,6 +298,7 @@ HAL_StatusTypeDef Upstream_MSC_BeginWrite(UpstreamMSCCallbackTypeDef callback,
return HAL_ERROR; return HAL_ERROR;
} }
LED_SetState(LED_STATUS_FLASH_READWRITE);
BlockStart = writeBlockStart; BlockStart = writeBlockStart;
BlockCount = writeBlockCount; BlockCount = writeBlockCount;
BeginWriteCallback = callback; BeginWriteCallback = callback;

Loading…
Cancel
Save