bo_kont_nd.c

#include <stdio.h>
#include <wiringPi.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

int pinI = 22;//Physical 31
int p_count = 1;
int flag = 0;
int flagStop = 0;
char i_c = '0';
int stringDat[9];
char stringComStop[25] = "killall -9 dab-rtlsdr-5";
char stringComDab1 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab2 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab3 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab4 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab5 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab6 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab7 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab8 [70] = "sudo ./dab-rtlsdr-5 ";
char stringComDab9 [70] = "sudo ./dab-rtlsdr-5 ";
char stringO [3] = " &";
char *source, *disti;
char line[60];
char ch;
int i = 0;
int res = 0;
int count;
int test;

int decode (int res)
    {
        flag = 1;
        switch (res)
        {
        case 86 : {//PHONO
          if (flagStop == 0)
               p_count = 1;
          delay (60);
          flagStop = 0;
                  }
                  break;
        case 84 : {//TAPE fr_sl
          if (flagStop == 0)
                      p_count = 1;
          delay (60);
          flagStop = 0;
                  }
                  break;
    case 3 :  {//NUM
          delay (130);
          flag = 0;
          }
          break;
        case 54 : {//AUX
          if (flagStop == 0)
               p_count = 1;
          delay (60);
          flagStop = 0;
          }
                  break;
        case 50 : {//STOP
                  system (stringComStop);
          delay (60);
          flag = 0;
                  flagStop = 1;
                  }
                  break;
        case 74 : {//T STOP
                  system (stringComStop);
          delay (60);
          flag = 0;
                  flagStop = 1;
                  }
                  break;
        case 52 : {//OFF
                  system (stringComStop);
          delay (60);
                  flag = 0;
                  }
                  break;
        case 106 : p_count ++;//RIGHT ARROW
                  break;
        case 102 : p_count ++;//T RIGHT ARROW
                  break;
        case 12 : p_count --;//LEFT ARROW
                  break;
        case 76 : p_count --;//T LEFT ARROW
                  break;
    case 124: {//1
          p_count = 1;
          delay (60);
          }
          break;
    case 122: {//2
          p_count = 2;
          delay (60);
          }
          break;
    case 120: {//3
          p_count = 3;
          delay (60);
          }
          break;
    case 118: {//4
                  p_count = 4;
                  delay (60);
                  }
                  break;
        case 116: {//5
                  p_count = 5;
                  delay (60);
                  }
                  break;
        case 114: {//6
                  p_count = 6;
                  delay (60);
                  }
                  break;
    case 112: {//7
                  p_count = 7;
                  delay (60);
                  }
                  break;
        case 110: {//8
                  p_count = 8;
                  delay (60);
                  }
                  break;
        case 108: {//9
                  p_count = 9;
                  delay (60);
                  }
                  break;
     default:  {
                  flag = 0;
          flagStop = 0;
          return 0;
                  }
                }
                if (flag == 1)
                {
                if (p_count > 9)
                  {
                  p_count = 1;
                  }
                if (p_count < 1)
                  {
                  p_count = 9;
                  }
        switch (p_count)
        {
        case 1 :{
            system (stringComStop);
                      system (stringComDab1);
            delay (60);
            }
            break;
        case 2 :{
                        system (stringComStop);
                        system (stringComDab2);
            delay (60);
                        }
            break;
        case 3 :{
                        system (stringComStop);
                        system (stringComDab3);
            delay (60);
                        }
            break;
        case 4 :{
                        system (stringComStop);
                        system (stringComDab4);
            delay (60);
                        }
            break;
        case 5 :{
                        system (stringComStop);
                        system (stringComDab5);
            delay (60);
                        }
            break;
        case 6 :{
                        system (stringComStop);
                        system (stringComDab6);
            delay (60);
                        }
            break;
        case 7 :{
                        system (stringComStop);
                        system (stringComDab7);
            delay (60);
                        }
            break;
        case 8 :{
                        system (stringComStop);
                        system (stringComDab8);
            delay (60);
                        }
            break;
        case 9 :{
                        system (stringComStop);
                        system (stringComDab9);
            delay (60);
                        }
            break;
        default : break;
        delay (2000);
        }
        }
    return 0;
}

void fileR (void)
{
     FILE *fp = fopen("/boot/dabrd.txt", "r");
     if(fp == NULL)
    {
         perror("Unable to open file!");
         exit(1);
         }
         for (count = 1; count < 10; count++)
         {
    source = line;
    while((test = fgetc(fp)) != 13)//read file
    {
    ch = test;
         *source = ch;
    source++;
     }
    *source = '\0';//string ends
    if (count > 1)
      line[0] = ' ';//Removes lineshift
    strcat (line, stringO);//add  &
    source = line;
    switch (count)
        {
        case 1 : disti = stringComDab1;//add sudo ./dab-rtlsdr-5
        break;
        case 2 : disti = stringComDab2;//add sudo ./dab-rtlsdr-5
                break;
        case 3 : disti = stringComDab3;//add sudo ./dab-rtlsdr-5
                break;
        case 4 : disti = stringComDab4;//add sudo ./dab-rtlsdr-5
                break;
        case 5 : disti = stringComDab5;//add sudo ./dab-rtlsdr-5
                break;
        case 6 : disti = stringComDab6;//add sudo ./dab-rtlsdr-5
                break;
        case 7 : disti = stringComDab7;//add sudo ./dab-rtlsdr-5
                break;
        case 8 : disti = stringComDab8;//add sudo ./dab-rtlsdr-5
                break;
        case 9 : disti = stringComDab9;//add sudo ./dab-rtlsdr-5
                break;
        }
        disti = disti + 20;
        while (*source != 0)
        {
          *disti = *source;
          source++;
          disti++;
        }
        *disti = 0;
          }
    fclose(fp);
}



int main (void)
{
  fileR ();
  if (wiringPiSetup () == -1)
    return 1 ;
  pinMode (pinI, INPUT);
  while (1)
    {
    while (digitalRead (pinI) == 1)
        {
        delay(0.5);
        pinMode (pinI, INPUT);
        if (digitalRead (pinI) == 0)
                {
                delay (1.5);
                for (i = 1; i < 8; i++)
                  {
                  delay(3.4);
                  stringDat[i] = (digitalRead (pinI));
                  }
                  res = 0;
                  for (i = 1; i < 8; i++)
                        {
                        switch (i)
                        {
                        case 1 : res = stringDat[i] * 64;
                        break;
                        case 2 : res = res + (stringDat[i] * 32);
                        break;
                        case 3 : res = res + (stringDat[i] * 16);
                        break;
                        case 4 : res = res + (stringDat[i] * 8);
                        break;
                        case 5 : res = res + (stringDat[i] * 4);
                        break;
                        case 6 : res = res + (stringDat[i] * 2);
                        break;
                        case 7 : res = res + (stringDat[i] * 1);
                        break;
                        }
          }
        decode (res);
        delay (10);
        }
        }
    }
  return 0 ;
}

Compile med: gcc -o bo_kont_nd bo_kont_nd.c -lwiringPi , installer wiringpi med: sudo apt-get install wiringpi
Bemærk: dette er ekspermentel software der er ingen garanti for brugbarhed, det kan derimod sandsynligvis være skadeligt, kun til brug i Danmark.
Bug: hurtige gentagne tryk kan låse program, numerisk funktion kan svigte.