CM_SELECT.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Select Device
  2. //
  3. // CryptoMemory Library Include Files
  4. #include "CM_LIB.h"
  5. #include "CM_I2C.h"
  6. #include "CM_I2C_L.h"
  7. #include "CM_GPA.h"
  8. // -------------------------------------------------------------------------------------------------
  9. // Data
  10. // -------------------------------------------------------------------------------------------------
  11. uint8_t ucCM_DevGpaRegisters[16][Gpa_Regs];
  12. uint8_t ucCM_DevEncrypt[16];
  13. uint8_t ucCM_DevAuthenticate[16];
  14. uint8_t ucCM_DevUserZone[16];
  15. uint8_t ucCM_DevAntiTearing[16];
  16. // -------------------------------------------------------------------------------------------------
  17. // Functions
  18. // -------------------------------------------------------------------------------------------------
  19. // Select Chip
  20. uint8_t cm_SelectChip(uint8_t ucChipNew)
  21. {
  22. uint8_t ucChip, i;
  23. if (ucChipNew == 0xFF) {
  24. // Clear All State
  25. for (ucChip = 0; ucChip < 16; ++ucChip) {
  26. for (i = 0; i < 16; ++i) ucCM_DevGpaRegisters[ucChip][i] = 0;
  27. ucCM_DevEncrypt[ucChip] = 0;
  28. ucCM_DevAuthenticate[ucChip] = 0;
  29. ucCM_DevUserZone[ucChip] = 0;
  30. ucCM_DevAntiTearing[ucChip] = 0;
  31. }
  32. }
  33. else {
  34. ucChip = CM_PORT_CFG.ucChipSelect;
  35. if (ucChip != ucChipNew) {
  36. // Set Chip Select
  37. CM_PORT_CFG.ucChipSelect = ucChipNew;
  38. // Shift Addresses
  39. ucChip = (ucChip>>4)&0xF0;
  40. ucChipNew = (ucChipNew>>4)&0xF0;
  41. // Swap GPA Registers
  42. for (i = 0; i < 16; ++i) {
  43. ucCM_DevGpaRegisters[ucChip][i] = ucGpaRegisters[i];
  44. ucGpaRegisters[i] = ucCM_DevGpaRegisters[ucChipNew][i];
  45. }
  46. //Save State
  47. ucCM_DevEncrypt[ucChip] = ucCM_Encrypt;
  48. ucCM_DevAuthenticate[ucChip] = ucCM_Authenticate;
  49. ucCM_DevUserZone[ucChip] = ucCM_UserZone;
  50. ucCM_DevAntiTearing[ucChip] = ucCM_AntiTearing;
  51. // Restore Saved State
  52. ucCM_Encrypt = ucCM_DevEncrypt[ucChipNew];
  53. ucCM_Authenticate = ucCM_DevAuthenticate[ucChipNew];
  54. ucCM_UserZone = ucCM_DevUserZone[ucChipNew];
  55. ucCM_AntiTearing = ucCM_DevAntiTearing[ucChipNew];
  56. }
  57. }
  58. return SUCCESS;
  59. }