Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "/usr/include/linux/i2c-dev.h"
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5.  
  6. int main(void)
  7. {
  8. int file;
  9. file = open("/dev/i2c-1", O_RDWR);
  10. if(file > -1){
  11. checkKeys(file);
  12. }
  13. else{
  14. printf("File can't be opened.");
  15. }
  16.  
  17. return 0;
  18. }
  19.  
  20. void checkKeys(file){
  21. int res;
  22. res = ioctl(file, I2C_SLAVE, 0x20);
  23. if(res>-1){
  24. unsigned char data = i2c_smbus_read_byte(file);
  25. unsigned char mask = 1;
  26. unsigned char dataResult[8];
  27. int prevCol = 0, prevRow = 0;
  28.  
  29. while(1){
  30. int column = 0, row = 0;
  31. int i = 0, j = 4;
  32.  
  33. i2c_smbus_write_byte(file, 0x0f); //columns
  34. data = i2c_smbus_read_byte(file);
  35. for(i;i<4;i++){
  36. dataResult[i] = (data & (mask << i)) != 0;
  37. if(dataResult[i] == 0){
  38. column = i+1;
  39. }
  40. }
  41.  
  42. i2c_smbus_write_byte(file, 0xf0); //rows
  43. data = i2c_smbus_read_byte(file);
  44. for(j;j<8;j++){
  45. dataResult[j] = (data & (mask << j)) != 0;
  46. if(dataResult[j] == 0){
  47. row = j-3;
  48. }
  49. }
  50. if(column != prevCol && row != prevRow){
  51. if(column != 0 && row != 0){
  52. getCode(column, row);
  53. }
  54. prevCol = column;
  55. prevRow = row;
  56. }
  57. }
  58.  
  59. }
  60. else{
  61. printf("Error with res.");
  62. }
  63. }
  64.  
  65. void getCode(col, row){
  66. char *key;
  67. switch (row) {
  68. case 1 :
  69. switch(col) {
  70. case 1:
  71. key = "1";
  72. break;
  73. case 2:
  74. key = "2";
  75. break;
  76. case 3:
  77. key = "3";
  78. break;
  79. case 4:
  80. key = "F";
  81. break;
  82. }
  83. break;
  84. case 2 :
  85. switch(col) {
  86. case 1:
  87. key = "4";
  88. break;
  89. case 2:
  90. key = "5";
  91. break;
  92. case 3:
  93. key = "6";
  94. break;
  95. case 4:
  96. key = "E";
  97. break;
  98. }
  99. break;
  100. case 3 :
  101. switch(col) {
  102. case 1:
  103. key = "7";
  104. break;
  105. case 2:
  106. key = "8";
  107. break;
  108. case 3:
  109. key = "9";
  110. break;
  111. case 4:
  112. key = "D";
  113. break;
  114. }
  115. break;
  116. case 4 :
  117. switch(col) {
  118. case 1:
  119. key = "A";
  120. break;
  121. case 2:
  122. key = "0";
  123. break;
  124. case 3:
  125. key = "B";
  126. break;
  127. case 4:
  128. key = "C";
  129. break;
  130. }
  131. break;
  132. }
  133. printf("%s \n",key);
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement