#define SIGNALMAGIC (0x326d7054) //Tpm2 #define MAX_TPM_MESSAGE_SIZE (sizeof(unsigned int) + 2048) typedef enum { SignalNothing = 0, SignalShutdown, SignalReset, SignalSetClock, // IN {UINT32 time} SignalCancelOn, SignalCancelOff, SignalCommand, // IN {BYTE Locality, UINT32 InBufferSize, BYTE[InBufferSize] InBuffer} // OUT {UINT32 OutBufferSize, BYTE[OutBufferSize] OutBuffer} SignalResponse, // OUT {UINT32 OutBufferSize, BYTE[OutBufferSize] OutBuffer} } signalCode_t; typedef struct { unsigned int magic; signalCode_t signal; unsigned int dataSize; } signalHdr_t; typedef union { struct { unsigned int time; } SignalSetClockPayload; struct { unsigned int locality; unsigned int cmdSize; unsigned char cmd[1]; } SignalCommandPayload; } signalPayload_t, *pSignalPayload_t; typedef union { signalHdr_t s; unsigned char b[sizeof(signalHdr_t)]; } signalWrapper_t, *pSignalWrapper_t; typedef struct tpmOperationsFlags_t { unsigned char resetRequested : 1; unsigned char powerOffRequested : 1; unsigned char executionRequested : 1; unsigned char responseRequested : 1; } tpmOperationsFlags_t; typedef struct tpmOperation_t { tpmOperationsFlags_t flags; int cmdSize; int receivingCmd; int rspSize; unsigned char msgBuf[MAX_TPM_MESSAGE_SIZE]; } tpmOperation_t; extern volatile tpmOperation_t tpmOp; int BlueButtonTransitionDetected(void); void SetDutyCycleIndicator(bool on); void KillUSBLink(void); void SetRealTimeClock(time_t tm); void ReadMcuInfo(unsigned char* serial, uint16_t *flashSize, uint16_t *mcuType, uint16_t *mcuRev); void PerformSystemReset(void); void HAL_Delay(uint32_t Delay); uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len); bool TpmInitializeDevice(void); bool TpmOperationsLoop(void); void TpmConnectionReset(void); bool TpmSignalEvent(uint8_t* Buf, uint32_t *Len);