- Re-located repairprocessrow information in dedicated object
- added error conditions to repair row and added condition handling to repair process

git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@260 05563f52-14a8-4384-a975-3d1654cca0fa
This commit is contained in:
mmi
2017-10-23 09:02:13 +00:00
parent aa9ba5ea8e
commit e3ca058c96
30 changed files with 1348 additions and 323 deletions

View File

@@ -24,6 +24,7 @@ ARFLAGS = rs
OBJECTS = \
stm32f10x_it.o \
CathodeMCP.o \
gpio.o \
internalADC.o \
keypadMatrix.o \

View File

@@ -0,0 +1,110 @@
// -----------------------------------------------------------------------------
/// @file CathodeMCP.h
/// @brief File description
// -----------------------------------------------------------------------------
// Micro-Key bv
// Industrieweg 28, 9804 TG Noordhorn
// Postbus 92, 9800 AB Zuidhorn
// The Netherlands
// Tel: +31 594 503020
// Fax: +31 594 505825
// Email: support@microkey.nl
// Web: www.microkey.nl
// -----------------------------------------------------------------------------
/// $Revision$
/// $Author$
/// $Date$
// (c) 2015 Micro-Key bv
// -----------------------------------------------------------------------------
/// @defgroup {group_name} {group_description}
/// Description
/// @file CathodeMCP.h
/// @ingroup {group_name}
#ifndef CATHODEMCP_H_
#define CATHODEMCP_H_
// -----------------------------------------------------------------------------
// Include files
// -----------------------------------------------------------------------------
#include "stm32f10x.h"
#include "gpio.h"
// -----------------------------------------------------------------------------
// Constant and macro definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Type definitions.
// -----------------------------------------------------------------------------
typedef enum
{
CathodeMCP_Cathode = 0,
CathodeMCP_MCP = 1,
CathodeMCP_NumberOfTypes
}CathodeMCP_t;
struct CathodeMCP
{
CathodeMCP_t type;
char name[20];
struct Gpio* mcp0;
struct Gpio* mcp1;
struct Gpio* mcp2;
struct Gpio* cat0;
struct Gpio* cat1;
struct Gpio* cat2;
};
// -----------------------------------------------------------------------------
// Function declarations
// -----------------------------------------------------------------------------
/** ----------------------------------------------------------------------------
* CathodeMCP_getInstance
* Description of function
*
* @param void
*
* @return struct CathodeMCP*
*
* @todo
* -----------------------------------------------------------------------------
*/
extern struct CathodeMCP* CathodeMCP_getInstance(void);
/** ----------------------------------------------------------------------------
* CathodeMCP_setIO
* Sets the IO required for the Cathode - MCP switch
*
* @param mcp0
* @param mcp1
* @param mcp2
* @param cat0
* @param cat1
* @param cat2
*
* @return ErrorStatus
*
* @todo
* -----------------------------------------------------------------------------
*/
extern ErrorStatus CathodeMCP_setIO(struct Gpio* mcp0, struct Gpio* mcp1, struct Gpio* mcp2, struct Gpio* cat0, struct Gpio* cat1, struct Gpio* cat2);
extern void CathodeMCP_switchToCathode(void);
extern void CathodeMCP_switchToMCP(void);
#endif /* CATHODEMCP_H_ */

View File

@@ -46,10 +46,10 @@
typedef enum
{
CathodeMCP = 0,
Tesla = 1,
Anode = 2,
ND = 3
PCBA_CathodeMCP = 0,
PCBA_Tesla = 1,
PCBA_Anode = 2,
PCBA_ND = 3
}PCBA_t;
struct Pcba

View File

@@ -63,9 +63,6 @@ typedef struct
extern struct Logger* mainLog;
// Export of PCBA information
extern struct Pcba* pcba;
extern struct Version* version;
// Export of ADCs
extern struct Adc* const adc1;
// Export of the rtc

View File

@@ -0,0 +1,161 @@
// -----------------------------------------------------------------------------
/// @file CathodeMCP.c
/// @brief Description
// -----------------------------------------------------------------------------
// Micro-Key bv
// Industrieweg 28, 9804 TG Noordhorn
// Postbus 92, 9800 AB Zuidhorn
// The Netherlands
// Tel: +31 594 503020
// Fax: +31 594 505825
// Email: support@microkey.nl
// Web: www.microkey.nl
// -----------------------------------------------------------------------------
/// $Revision$
/// $Author$
/// $Date$
// (c) 2017 Micro-Key bv
// -----------------------------------------------------------------------------
/// @file CathodeMCP.c
/// @ingroup {group_name}
// -----------------------------------------------------------------------------
// Include files
// -----------------------------------------------------------------------------
#include "CathodeMCP.h"
#include "PCBA.h"
// -----------------------------------------------------------------------------
// Constant and macro definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Type definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// File-scope variables
// -----------------------------------------------------------------------------
static struct CathodeMCP thisCathodeMCP;
struct CathodeMCP* instance;
static const char nameArray[CathodeMCP_NumberOfTypes][20] =
{
"Cathode repair",
"MCP repair",
};
// -----------------------------------------------------------------------------
// Function declarations
// -----------------------------------------------------------------------------
static ErrorStatus CathodeMCP_construct(struct CathodeMCP* self);
// -----------------------------------------------------------------------------
// Function definitions
// -----------------------------------------------------------------------------
struct CathodeMCP* CathodeMCP_getInstance(void)
{
// Check if the current PCBA is a cathodeMCP assemblage
if (PCBA_getInstance()->pcba == PCBA_CathodeMCP)
{
if (instance == NULL)
{
instance = &thisCathodeMCP;
ErrorStatus constructResult = CathodeMCP_construct(instance);
if (constructResult != SUCCESS)
{
instance = NULL;
}
}
}
else
{
instance = NULL;
}
return instance;
}
ErrorStatus CathodeMCP_setIO(struct Gpio* mcp0, struct Gpio* mcp1, struct Gpio* mcp2, struct Gpio* cat0, struct Gpio* cat1, struct Gpio* cat2)
{
ErrorStatus returnValue = SUCCESS;
if ((mcp0 != NULL) && (mcp1 != NULL) && (mcp2 != NULL) && (cat0 != NULL) && (cat1 != NULL) && (cat2 != NULL))
{
thisCathodeMCP.mcp0 = mcp0;
thisCathodeMCP.mcp1 = mcp1;
thisCathodeMCP.mcp2 = mcp2;
thisCathodeMCP.cat0 = cat0;
thisCathodeMCP.cat1 = cat1;
thisCathodeMCP.cat2 = cat2;
}
else
{
returnValue = ERROR;
}
return returnValue;
}
void CathodeMCP_switchToCathode(void)
{
thisCathodeMCP.type = CathodeMCP_Cathode;
GPIO_setValue(thisCathodeMCP.mcp0, false);
GPIO_setValue(thisCathodeMCP.mcp1, false);
GPIO_setValue(thisCathodeMCP.mcp2, false);
GPIO_setValue(thisCathodeMCP.cat0, true);
GPIO_setValue(thisCathodeMCP.cat1, true);
GPIO_setValue(thisCathodeMCP.cat2, true);
snprintf(thisCathodeMCP.name, (sizeof(thisCathodeMCP.name) / sizeof(thisCathodeMCP.name[0])), "%s", nameArray[thisCathodeMCP.type]);
}
void CathodeMCP_switchToMCP(void)
{
thisCathodeMCP.type = CathodeMCP_MCP;
GPIO_setValue(thisCathodeMCP.cat0, false);
GPIO_setValue(thisCathodeMCP.cat1, false);
GPIO_setValue(thisCathodeMCP.cat2, false);
GPIO_setValue(thisCathodeMCP.mcp0, true);
GPIO_setValue(thisCathodeMCP.mcp1, true);
GPIO_setValue(thisCathodeMCP.mcp2, true);
snprintf(thisCathodeMCP.name, (sizeof(thisCathodeMCP.name) / sizeof(thisCathodeMCP.name[0])), "%s", nameArray[thisCathodeMCP.type]);
}
static ErrorStatus CathodeMCP_construct(struct CathodeMCP* self)
{
ErrorStatus returnValue = SUCCESS;
thisCathodeMCP.type = CathodeMCP_Cathode;
GPIO_setValue(thisCathodeMCP.mcp0, false);
GPIO_setValue(thisCathodeMCP.mcp1, false);
GPIO_setValue(thisCathodeMCP.mcp2, false);
GPIO_setValue(thisCathodeMCP.cat0, false);
GPIO_setValue(thisCathodeMCP.cat1, false);
GPIO_setValue(thisCathodeMCP.cat2, false);
snprintf(thisCathodeMCP.name, (sizeof(thisCathodeMCP.name) / sizeof(thisCathodeMCP.name[0])), "%s", nameArray[thisCathodeMCP.type]);
return returnValue;
}

View File

@@ -125,6 +125,41 @@ ErrorStatus Keypad_construct(struct Keypad* self, size_t numberOfRows, size_t nu
{
LOGGER_INFO(mainLog, "Keypad task started");
self->initialized = true;
// struct KeypadQueueItem rxQueueItem;
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 0;
// rxQueueItem.keyEvent = PRESSED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 0;
// rxQueueItem.keyEvent = RELEASED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
//
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 0;
// rxQueueItem.keyEvent = PRESSED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 0;
// rxQueueItem.keyEvent = RELEASED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
//
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 1;
// rxQueueItem.keyEvent = PRESSED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
// rxQueueItem.rowCoordinate = 0;
// rxQueueItem.columnCoordinate = 1;
// rxQueueItem.keyEvent = RELEASED;
// // Put event in queue
// xQueueSend(self->rxQueue, &rxQueueItem, 0);
}
else
{

View File

@@ -155,9 +155,6 @@ static struct MAX5715 _max5715 = {.initialized = false};
struct Logger* mainLog = &_mainLog;
struct Pcba* pcba; // Singleton
struct Version* version; // Singleton
struct Adc* const adc1 = &_adc1;
struct AdcParameters* adc1Parameters = &_adc1Parameters;
@@ -354,14 +351,14 @@ static ErrorStatus initIO (void)
/* USART3 initialisation -------------------------------------------------*/
// For PCBA 0 (Cathode/MCP) and 2 (Anode), use the common USART3 IO
if ((PCBA_getInstance()->pcba == Anode) || (PCBA_getInstance()->pcba == CathodeMCP))
if ((PCBA_getInstance()->pcba == PCBA_Anode) || (PCBA_getInstance()->pcba == PCBA_CathodeMCP))
{
// Init TX line
uart3->USART_TX = configureGPIO(GPIOB, GPIO_Mode_AF_PP, GPIO_Speed_50MHz, GPIO_Pin_10);
// Init RX line
uart1->USART_RX = configureGPIO(GPIOB, GPIO_Mode_IN_FLOATING, GPIO_Speed_50MHz, GPIO_Pin_11);
}
else if (PCBA_getInstance()->pcba == Tesla)
else if (PCBA_getInstance()->pcba == PCBA_Tesla)
{
// Init TX line
uart3->USART_TX = configureGPIO(GPIOD, GPIO_Mode_AF_PP, GPIO_Speed_50MHz, GPIO_Pin_8);
@@ -509,7 +506,7 @@ static ErrorStatus initIO (void)
// Solenoid - PB5 output
solenoid->gpio = configureGPIO(GPIOB, GPIO_Mode_Out_PP, GPIO_Speed_50MHz, GPIO_Pin_5);
if (PCBA_getInstance()->pcba == CathodeMCP)
if (PCBA_getInstance()->pcba == PCBA_CathodeMCP)
{
// MCP0Relay - PD8 output
mcp0Relay->gpio = configureGPIO(GPIOD, GPIO_Mode_Out_PP, GPIO_Speed_50MHz, GPIO_Pin_8);
@@ -523,9 +520,11 @@ static ErrorStatus initIO (void)
cat1Relay->gpio = configureGPIO(GPIOD, GPIO_Mode_Out_PP, GPIO_Speed_50MHz, GPIO_Pin_12);
// CAT2Relay - PD13 output
cat2Relay->gpio = configureGPIO(GPIOD, GPIO_Mode_Out_PP, GPIO_Speed_50MHz, GPIO_Pin_13);
CathodeMCP_setIO(mcp0Relay, mcp1Relay, mcp2Relay, cat0Relay, cat1Relay, cat2Relay);
}
if (PCBA_getInstance()->pcba == Tesla)
if (PCBA_getInstance()->pcba == PCBA_Tesla)
{
// Tesla lock PB10 output
teslaNO->gpio = configureGPIO(GPIOB, GPIO_Mode_IN_FLOATING, GPIO_Speed_50MHz, GPIO_Pin_9);
@@ -543,9 +542,14 @@ static ErrorStatus initPeriphery(void)
/* --------------------------------------------------------------------*/
/* PCBA & Software Version */
/* These are singletons but must be created once, anyway */
/* --------------------------------------------------------------------*/
pcba = PCBA_getInstance();
version = Version_getInstance();
PCBA_getInstance();
Version_getInstance();
if (PCBA_getInstance()->pcba == PCBA_CathodeMCP)
{
CathodeMCP_getInstance();
}
/* --------------------------------------------------------------------*/
/* DMA1 - Channel 1 - For use with ADC1 */
@@ -722,7 +726,7 @@ static ErrorStatus initPeriphery(void)
// Solenoid
GPIO_construct(solenoid, OUTPUT, solenoid->gpio);
if (PCBA_getInstance()->pcba == CathodeMCP)
if (PCBA_getInstance()->pcba == PCBA_CathodeMCP)
{
// MCP0Relay
GPIO_construct(mcp0Relay, OUTPUT, mcp0Relay->gpio);
@@ -737,7 +741,7 @@ static ErrorStatus initPeriphery(void)
// CAT2Relay
GPIO_construct(cat2Relay, OUTPUT, cat2Relay->gpio);
}
if (PCBA_getInstance()->pcba == Tesla)
if (PCBA_getInstance()->pcba == PCBA_Tesla)
{
IRQ_setInterruptProperties(EXTI9_5_IRQn, 12, 12, ENABLE);
IRQ_setInterruptProperties(EXTI15_10_IRQn, 12, 12, ENABLE);
@@ -800,7 +804,7 @@ static ErrorStatus initPlatformDevices (void)
// Set external DAC reference to 2V5, always ON
MAX5715_writeREF_ON_2V5(max5715);
if ((PCBA_getInstance()->pcba == Anode) || (PCBA_getInstance()->pcba == CathodeMCP))
if ((PCBA_getInstance()->pcba == PCBA_Anode) || (PCBA_getInstance()->pcba == PCBA_CathodeMCP))
{
MAX5715Channel_construct(&max5715->dac[0], max5715, 0);
MAX5715Channel_construct(&max5715->dac[1], max5715, 1);
@@ -816,7 +820,7 @@ static ErrorStatus initPlatformDevices (void)
MAX5715Channel_setValue(&max5715->dac[1], 0);
MAX5715Channel_setValue(&max5715->dac[2], 0);
}
else if (PCBA_getInstance()->pcba == Tesla)
else if (PCBA_getInstance()->pcba == PCBA_Tesla)
{
// Construct DAC channel B (channel 1)
MAX5715Channel_construct(&max5715->dac[1], max5715, 1);