void SendStickStatusToHID (typeStick20Configuration_st *Status_st) { cid_t *cid; // If configuration not found then init it if (FALSE == ReadStickConfigurationFromUserPage ()) { InitStickConfigurationToUserPage_u8 (); } memcpy (Status_st,&StickConfiguration_st,sizeof (typeStick20Configuration_st)); // Not the retry counter and sc serial no // Set the actual volume status Status_st->VolumeActiceFlag_u8 = 0; if (TRUE == GetSdUncryptedCardEnableState ()) { Status_st->VolumeActiceFlag_u8 |= (1 << SD_UNCRYPTED_VOLUME_BIT_PLACE); } // Only 1 cypted volume could be active if (TRUE == GetSdEncryptedCardEnableState ()) { if (TRUE == GetSdEncryptedHiddenState ()) { Status_st->VolumeActiceFlag_u8 |= (1 << SD_HIDDEN_VOLUME_BIT_PLACE); } else { Status_st->VolumeActiceFlag_u8 |= (1 << SD_CRYPTED_VOLUME_BIT_PLACE); } } // Read actual SD id cid = (cid_t *) GetSdCidInfo (); Status_st->ActiveSD_CardID_u32 = (cid->psnh << 8) + cid->psnl; // ReadSdId (&Status_st->ActiveSD_CardID_u32); Status_st->FirmwareLocked_u8 = FALSE; if (TRUE == flashc_is_security_bit_active()) { Status_st->FirmwareLocked_u8 = TRUE; } }
void GetProductionInfos (typeStick20ProductionInfos_st * Infos_st,u8 WriteTestEnabled) { typeStick20Configuration_st SC_Status_st; volatile u32* id_data = (u32 *) 0x80800204; // Place of 120 bit CPU ID u32 i; u32 CPU_ID_u32; cid_t* cid; u32 Blockcount_u32; // Clear data field memset ((void *) Infos_st, 0, sizeof (Infos_st)); Infos_st->FirmwareVersion_au8[0] = VERSION_MAJOR; Infos_st->FirmwareVersion_au8[1] = VERSION_MINOR; Infos_st->FirmwareVersionInternal_u8 = INTERNAL_VERSION_NR; if (TRUE == WriteTestEnabled) { // Get smartcard infos GetSmartCardStatus (&SC_Status_st); // Run the check only if the initial pw is aktive if (3 == SC_Status_st.UserPwRetryCount) { if (FALSE == LA_OpenPGP_V20_Test_SendUserPW2 ((unsigned char *) "123456")) { CI_TickLocalPrintf ("GetProductionInfos: Intial password is not activ\r\n"); Infos_st->SC_AdminPwRetryCount = 99; // Marker for wrong pw return; } } else { CI_TickLocalPrintf ("GetProductionInfos: Password retry count is not 3 : %d\r\n", SC_Status_st.UserPwRetryCount); Infos_st->SC_AdminPwRetryCount = 88; // Marker for wrong pw retry count return; } } // Get XORed CPU ID CPU_ID_u32 = 0; for (i = 0; i < 4; i++) { CPU_ID_u32 ^= id_data[i]; } Infos_st->CPU_CardID_u32 = CPU_ID_u32; // Init SD - read capacity sd_mmc_mci_read_capacity (SD_SLOT, (unsigned long int *) &Blockcount_u32); Infos_st->SD_Card_Size_u8 = Blockcount_u32 / 2 / 1024 / 1024 + 1; // in GB // Save smartcard infos if (TRUE == WriteTestEnabled) { Infos_st->SC_UserPwRetryCount = SC_Status_st.UserPwRetryCount; Infos_st->SC_AdminPwRetryCount = SC_Status_st.AdminPwRetryCount; Infos_st->SmartCardID_u32 = SC_Status_st.ActiveSmartCardID_u32; } else { Infos_st->SC_UserPwRetryCount = 0; Infos_st->SC_AdminPwRetryCount = 0; Infos_st->SmartCardID_u32 = 0; } // Get SD card infos cid = (cid_t *) GetSdCidInfo (); Infos_st->SD_CardID_u32 = (cid->psnh << 8) + cid->psnl; Infos_st->SD_Card_ManufacturingYear_u8 = cid->mdt / 16; Infos_st->SD_Card_ManufacturingMonth_u8 = cid->mdt % 0x0f; Infos_st->SD_Card_OEM_u16 = cid->oid; Infos_st->SD_Card_Manufacturer_u8 = cid->mid; // Get SD card speed if (TRUE == WriteTestEnabled) { Infos_st->SD_WriteSpeed_u16 = SD_SpeedTest (); } else { Infos_st->SD_WriteSpeed_u16 = 0; } }