Add function to enter state with error
parent
c8675af12c
commit
446b79d456
42
soes/esc.c
42
soes/esc.c
|
@ -41,6 +41,48 @@ void ESC_ALstatus (uint8_t status)
|
|||
ESC_write (ESCREG_ALSTATUS, &dummy, sizeof (dummy));
|
||||
}
|
||||
|
||||
/** Write AL Status and AL Status code to the ESC.
|
||||
* Call pre- and poststate change hook
|
||||
*
|
||||
* @param[in] status = Write current slave status to register 0x130 AL Status
|
||||
* reflecting actual state and error indication if present
|
||||
* @param[in] errornumber = Write an by EtherCAT specified Error number
|
||||
* register 0x134 AL Status Code
|
||||
*/
|
||||
void ESC_ALstatusgotoerror (uint8_t status, uint16_t errornumber)
|
||||
{
|
||||
uint8_t an, as;
|
||||
|
||||
if(status & ESCop)
|
||||
{
|
||||
/* Erroneous input, ignore */
|
||||
return;
|
||||
}
|
||||
/* Mask error ack of current state */
|
||||
as = ESCvar.ALstatus & ESCREG_AL_ERRACKMASK;
|
||||
an = as;
|
||||
/* Set the state transition, new state in high bits and old in bits */
|
||||
as = ((status & ESCREG_AL_ERRACKMASK) << 4) | (as & 0x0f);
|
||||
/* Call post state change hook case it have been configured */
|
||||
if (ESCvar.pre_state_change_hook != NULL)
|
||||
{
|
||||
ESCvar.pre_state_change_hook (&as, &an);
|
||||
}
|
||||
/* Stop outputs if active */
|
||||
if ((CC_ATOMIC_GET(ESCvar.App.state) & APPSTATE_OUTPUT) > 0)
|
||||
{
|
||||
ESC_stopoutput();
|
||||
}
|
||||
ESC_ALerror(errornumber);
|
||||
ESC_ALstatus(status);
|
||||
an = status;
|
||||
/* Call post state change hook case it have been configured */
|
||||
if (ESCvar.post_state_change_hook != NULL)
|
||||
{
|
||||
ESCvar.post_state_change_hook (&as, &an);
|
||||
}
|
||||
}
|
||||
|
||||
/** Write ALeventMask register 0x204.
|
||||
*
|
||||
* @param[in] n = AL Event Mask
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#define ESCREG_ALEVENT_DC_SYNC0 0x0004
|
||||
#define ESCREG_ALEVENT_DC_SYNC1 0x0008
|
||||
#define ESCREG_ALEVENT_EEP 0x0020
|
||||
#define ESCREG_ALEVENT_WD 0x0040
|
||||
#define ESCREG_ALEVENT_SM0 0x0100
|
||||
#define ESCREG_ALEVENT_SM1 0x0200
|
||||
#define ESCREG_ALEVENT_SM2 0x0400
|
||||
|
@ -606,6 +607,7 @@ uint32_t ESC_ALeventread (void);
|
|||
void ESC_ALeventmaskwrite (uint32_t mask);
|
||||
uint32_t ESC_ALeventmaskread (void);
|
||||
void ESC_ALstatus (uint8_t status);
|
||||
void ESC_ALstatusgotoerror (uint8_t status, uint16_t errornumber);
|
||||
void ESC_SMstatus (uint8_t n);
|
||||
uint8_t ESC_WDstatus (void);
|
||||
uint8_t ESC_claimbuffer (void);
|
||||
|
|
Loading…
Reference in New Issue