Avatar billede olehasselbalch Praktikant
08. april 2015 - 08:40

omdannelse af et c program til grafisk fremstilling helst med GTK

Jeg ved ikke helt hvor mit spørgmål høre hjemme. Jeg er radioamatør oz6oh og har lavet et lille c program til min 2 meterstation. Det omdanner 144.000 til port 128 146 til port 208 ialt 80 forskellige portoutput. Det kører fint i terminalmode i LINUX


//program sourcenavn er freq.c
#include <stdio.h>//In use
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>// In use
#include <sys/io.h>//In use
#define base 0x378  /*Here is Port defined*/

float x = 144.000;
int value = 0;
int s = 0x01;

int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;

  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

  ch = getchar();

  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);

  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }
  return 0;
}

int int_round(double n) // Round  n
{
    return (n > 0.0) ? (n + 0.5) : (n -0.5);
}

void setfrq() {
    if ((x>=144.000) && (x<=146.000)) {
        value = int_round((x - 140.8) * 40.0); /* Calculation */
        printf("\nPortout= %d", value);  /* Show Output on Led's */
        outb(value, base);
    } else printf("\nInvalid input.");
}


void getfrq() {
    outb(0x01, base+2);
    printf("\nInput frequency as  144.000 in Step 25KHz.: ");
    scanf("%f",&x);
    setfrq();
}

void togg_tx() {
    if (s==0x01) s=0x00; else s=0x01;
    char c = (char) (s+48);
    printf("\nStrobe=%c",c);
    outb(s, base+2);
}

void initmsg() {
    printf("\n------\nPress:");
    printf("\n\"f\"    - to input frequency,");
    printf("\n\"q\"    - to exit program,");
    printf("\n<space> - to toggle transmitter");
}
   

main(int argc, char **argv)
{
    //    Main starting here
    printf("\nProgram Started-");
    if (ioperm(base, 3, 1)) { perror("ioperm"); printf("\nError"); exit(1); } // Use sudo !
    printf("\nPort open");
    outb(s, base+2);
    setfrq();
    initmsg();
    while(1) 
    {
        if (kbhit()) {
            char ch = getchar();
            if ((ch == 'Q') || (ch == 'q')) {
                outb(0x01, base+2);
                printf("\nProgram Terminated.");
                exit(0);
            }
            if ((ch == 'F') || (ch == 'f')) getfrq();
            if (ch == ' ') togg_tx();
            initmsg();
        }
        usleep(500);
    }

}

Prøv det selv gcc freq.c -o freq og kør det som sudo ./freq

Dette program ville jeg meget gerne have til at køre ligesom en regnemaskine der jo vises grafisk i de fleste tilfælde. Er der nogen her der kan hjælpe mig med GTK  Håber ikke spørgsmålet er dumt her
Venligst Ole Hasselbalch der søger medspillere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester