Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include "/usr/include/linux/i2c-dev.h"
- #include <stdlib.h>
- #include <fcntl.h>
- int main(void)
- {
- int file;
- file = open("/dev/i2c-1", O_RDWR);
- if(file > -1){
- checkKeys(file);
- }
- else{
- printf("File can't be opened.");
- }
- return 0;
- }
- void checkKeys(file){
- int res;
- res = ioctl(file, I2C_SLAVE, 0x20);
- if(res>-1){
- unsigned char data = i2c_smbus_read_byte(file);
- unsigned char mask = 1;
- unsigned char dataResult[8];
- int prevCol = 0, prevRow = 0;
- while(1){
- int column = 0, row = 0;
- int i = 0, j = 4;
- i2c_smbus_write_byte(file, 0x0f); //columns
- data = i2c_smbus_read_byte(file);
- for(i;i<4;i++){
- dataResult[i] = (data & (mask << i)) != 0;
- if(dataResult[i] == 0){
- column = i+1;
- }
- }
- i2c_smbus_write_byte(file, 0xf0); //rows
- data = i2c_smbus_read_byte(file);
- for(j;j<8;j++){
- dataResult[j] = (data & (mask << j)) != 0;
- if(dataResult[j] == 0){
- row = j-3;
- }
- }
- if(column != prevCol && row != prevRow){
- if(column != 0 && row != 0){
- getCode(column, row);
- }
- prevCol = column;
- prevRow = row;
- }
- }
- }
- else{
- printf("Error with res.");
- }
- }
- void getCode(col, row){
- char *key;
- switch (row) {
- case 1 :
- switch(col) {
- case 1:
- key = "1";
- break;
- case 2:
- key = "2";
- break;
- case 3:
- key = "3";
- break;
- case 4:
- key = "F";
- break;
- }
- break;
- case 2 :
- switch(col) {
- case 1:
- key = "4";
- break;
- case 2:
- key = "5";
- break;
- case 3:
- key = "6";
- break;
- case 4:
- key = "E";
- break;
- }
- break;
- case 3 :
- switch(col) {
- case 1:
- key = "7";
- break;
- case 2:
- key = "8";
- break;
- case 3:
- key = "9";
- break;
- case 4:
- key = "D";
- break;
- }
- break;
- case 4 :
- switch(col) {
- case 1:
- key = "A";
- break;
- case 2:
- key = "0";
- break;
- case 3:
- key = "B";
- break;
- case 4:
- key = "C";
- break;
- }
- break;
- }
- printf("%s \n",key);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement