//-------------------------------------------------------------------------
//  write a byte to the embedded controller (EC) via port io
//-------------------------------------------------------------------------
int WriteByteToEC(int offset, byte data)
{
	int ok;

	// wait for IBF and OBF to clear
	ok = waitportstatus(EC_STAT_IBF| EC_STAT_OBF, 0);
	if (!ok) return false;
	    
    // tell 'em we want to "WRITE"
    ok = writeport(EC_CTRLPORT, EC_CTRLPORT_WRITE);
    if (!ok) return false;
    
    // wait for IBF to clear (command byte removed from EC's input queue)
    ok = waitportstatus(EC_STAT_IBF, 0);
    if (!ok) return false;

    // tell 'em where we want to write to
    ok = writeport(EC_DATAPORT, offset);
    if (!ok) return false;

    // wait for IBF to clear (address byte removed from EC's input queue)
    ok = waitportstatus(EC_STAT_IBF, 0);
    if (!ok) return false;
    
    // tell 'em what we want to write there
    ok = writeport(EC_DATAPORT, data);
    if (!ok) return false;
    
    // wait for IBF to clear (data byte removed from EC's input queue)
    ok = waitportstatus(EC_STAT_IBF, 0);
	return ok;
}
//-------------------------------------------------------------------------
//  read a byte from the embedded controller (EC) via port io 
//-------------------------------------------------------------------------
int ReadByteFromEC(int offset, byte *pdata)
{
	int ok;

	// wait for IBF and OBF to clear
	ok = waitportstatus(EC_STAT_IBF|EC_STAT_OBF, 0);
	if (!ok) return false;
	    
    // tell 'em we want to "READ"
    ok = writeport(EC_CTRLPORT, EC_CTRLPORT_READ);
    if (!ok) return false;
        
    // wait for IBF to clear (command byte removed from EC's input queue)
    ok = waitportstatus(EC_STAT_IBF, 0);
    if (!ok) return false;
        
    // tell 'em where we want to read from
    ok = writeport(EC_DATAPORT, offset);
    if (!ok) return false;
    
    // wait for IBF to clear (address byte removed from EC's input queue)
    // Note: Techically we should waitportstatus(IBF|OBF,OBF) here. (a byte 
    //  being in the EC's output buffer being ready to read). For some reason
    //  this never seems to happen
    ok = waitportstatus(EC_STAT_IBF, 0);
    if (!ok) return false;
    
    // read result (EC byte at offset)
    byte data;
    ok = readport(EC_DATAPORT, &data);
    if (ok) *pdata= data;

	return ok;
}
Example #3
0
int keyboard()
{
 int ret=-1, go=1;
 char cmd1[]= "AT*EAID=1,1,\"Press the keys to simulate key presses on the computer\"\r";
 char cmd2[]= "AT+CMER=3,2,,,\r";
 char cmd3[]= "AT+CMER=0,0,,,\r";
 char buf[MAXLEN]="", *key;
 int status, keycnt;

 Display *dpy = XOpenDisplay (NULL);

 if(dpy==NULL) return -1;
 writeport(cmd1, strlen(cmd1));
 if(waitfor("OK", 1, TIMEOUT) != 1) go = 0;
 
 writeport(cmd2, strlen(cmd2));
 if(waitfor("OK", 1, TIMEOUT) != 1) go = 0;
 
 while(go)
 {
  buf[0]=0;
  ret = readport(buf, MAXLEN, TIMEOUT);
  if( (ret <= 0 && ret != -EINTR) || strncmp(buf, "ERROR", 5)==0 )
  {
   ret=-1;
   break;
  }
  if(strncmp(buf, "*EAII: ", 7)==0 || strncmp(buf, "*EAAI", 5)==0)
  {
   ret=1;
   break;
  }
  if(strncmp(buf, "+CKEV: ", 7)==0)
  {
   status=strchr(buf,',')[1]-'0';
   strchr(buf,',')[0]=0;

   key=buf+7;
   /* Correct for bug in T610 */
   if(key[0]==0x1B && key[1]==0x14)
   {
    key[0]='^';
    key[1]=0;
   }
   
   keycnt=0;
   while(keycnt < conf->keymapcnt && strcmp(conf->keymap[keycnt].name,key)) keycnt++;
   if(keycnt < conf->keymapcnt)
    key_down_up(dpy, conf->keymap[keycnt].val, status);
  }
 }
 
 writeport(cmd3, strlen(cmd3));
 if(waitfor("OK", 5, TIMEOUT) != 1) ret = -1;
 
 XCloseDisplay (dpy);
 return ret;
}
Example #4
0
int volume()
{
 int ret, vol;
 char cmd[MAXLEN];
 char buf[MAXLEN]="";

 vol=getvol();
 if(vol==-1) return -1;
 
 sprintf(cmd, "AT*EAID=4,1,\"Volume\",10,%d\r", (int) ((vol/10.0)+.5));
 
 writeport(cmd, strlen(cmd));
 if(waitfor("OK", 1, TIMEOUT) != 1) return -1;

 while(1)
 {
  while((ret = readport(buf, MAXLEN, TIMEOUT)) == -EINTR);
  if(ret <= 0) return -1;
  if(strncmp(buf, "*EAII: 15,",10)==0) setvol(atoi(buf+10));
  if(strncmp(buf, "*EAII: 0", 8)==0 || strncmp(buf, "*EAAI", 5)==0)
  {
   setvol(vol);
   return 0;
  }
  if(strncmp(buf, "*EAII: 4,",9)==0)
  {
   setvol(atoi(buf+9));
   return 1;
  }
 }
}
Example #5
0
int submenu(int def)
{
 int i, ret;
 char cmd[MAXLEN] = "AT*EASM=\"PC Remote\",1,";
 char buf[MAXLEN]="";

 if(def<=0 || def > conf->menucnt) def=1;
 sprintf(buf,"%d,%d", def, conf->menucnt);
 strcat(cmd, buf);
 for(i=0; i<conf->menucnt; i++)
 {
  strcat(cmd,",\"");
  strcat(cmd,conf->menu[i].text);
  strcat(cmd,"\"");
 }
 strcat(cmd,"\r");
 
 writeport(cmd, strlen(cmd));
 if(waitfor("OK", 1, TIMEOUT) != 1) return -1;

 while((ret = readport(buf, MAXLEN, TIMEOUT)) == -EINTR);
 if(ret <= 0) return -1;
 if(strncmp(buf, "*EAMI: ", 7)!=0) return -1;
 
 return(atoi(buf+7));
}
Example #6
0
int init_mainmenu()
{
 static char mmenustr[]= "AT*EAM=\"PC Remote\"\r";
 char cmd[MAXLEN];
 int ret;

 writeport("AT*ECAM=1\r", 10);
 if((ret=waitfor("OK", 2, TIMEOUT)) < 1) return ret;
 
 if(strlen(conf->charset))
 {
  sprintf(cmd, "AT+CSCS=\"%s\"\r",conf->charset);
  writeport(cmd, strlen(cmd));
  if((ret=waitfor("OK", 2, TIMEOUT)) < 1) return ret;
 }

 writeport(mmenustr, strlen(mmenustr));
 return waitfor("OK", 1, TIMEOUT);
}
Example #7
0
////////////////////////////////////////////////////////////////////////////////////////////////
//Send the HEX command over the wire
int send_command(int cmd)
{
int loop;
printf("%i\n",cmd);
char data [4] = ""; //create the null.

for (loop =0; loop < 4; loop++)  //build the command string.
        data[loop] = command_list[cmd].command_hex[loop]; 
        
        if (!writeport(fd, data)){
                printf("write failed\n");  //something went horribly wrong.. 
                return -1;
                }
                
return 0;  
}
Example #8
0
void CUartThread::WriteUart( char *strBuf, int nLen)
{
    printf("dev=%s",strBuf);
    writeport(m_nFD, strBuf, nLen);
}
Example #9
0
int Manual(int argc, unsigned char **argv)
{
  /* Serial port initialization */

  fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1) {
    perror("open_port: Unable to open /dev/ttyS0 - ");
    return 1;
  } else {
    fcntl(fd, F_SETFL, 0);
  }
  getbaud(fd);

  initport(fd);

  int PVi, k;
        K= uatof(Gain);
  /* Things will be drawn more quickly if you always acquire the screen before
     trying to draw onto it. */
  acquire_screen();
  
  Graphics();	/* Call to graphics from a different function to avoid messy code */
  
  RLE_SPRITE *rle;
 
            sCmd[0]= 'C';
            writeport(fd, sCmd);

  PVi= 0;  k= 100;  M=0;
  while (!key[KEY_ESC])	/* Only pressing ESC can Exit */
    {
	char ValveState;
	if(ValveState=='O')
	{
            sCmd[0]= 'A';
            writeport(fd, sCmd);
	}
	if(ValveState=='C')
	{
            sCmd[0]= 'C';
            writeport(fd, sCmd);
	}
	


      M++;
      /* Check if user needs some help */
      if(key[KEY_F1])
	Help();

      k++;
      i= 897;
      
      Captura = create_sub_bitmap(screen, 72, 350, 898, 368);
      rle = get_rle_sprite(Captura);
      destroy_bitmap(Captura);
      draw_rle_sprite(screen, rle, 71, 350);
      destroy_rle_sprite(rle);

      /* This line reads data from the interfase which is
	 the process variable(measured variable) of the system */
          fcntl(fd, F_SETFL, FNDELAY); // don't block serial read
	  readport(fd,sResult);
	  PVi= (int) *sResult;
	  PV= PVi;      
/*
      if(PVi<=40)
	{
	  PV= 51;
	  system("festival --tts Messages/Disconnected&");
	  blit(Disconnected, screen, 0, 0, 70, 290, 887, 52);   
	}
   */   
      if(PV<=48)
        PVi= 51;
      
      PV= 1.794117647*(PVi-51);
      SP= PV;
      
      if(key[KEY_RIGHT])
	{
          //fd = close("/dev/parport0");	
	  Simulator();
        }
      if(key[KEY_PGUP])
	OP= (OP+46);
      
      if(key[KEY_PGDN])
	OP= (OP-46);
      
      if(key[KEY_UP])
	{
	    OP=162; //(OP+3.66);
            sCmd[0]= 'A';
            writeport(fd, sCmd);
	    ValveState='O';
	}

      if(key[KEY_DOWN])
	{
	  if(OP>=1)
	    OP= 0;//(OP-3.66);
            sCmd[0]= 'C';
            writeport(fd, sCmd);
	    ValveState='C';
	}
      
      if(key[KEY_PRTSCR])
	{
          Captura = create_sub_bitmap(screen, 0, 0, 1024, 768);
          save_bitmap("images/User/Captura.pcx", Captura, pal);
          destroy_bitmap(Captura);
        }
      
      Timer++;
      
      if(OP<=0)
	OP= 0;
      
      
//      if (PV>=40)
//	{
	  textprintf_ex(screen, font, 230, 297, BLACK, WHITE, "%3.1f", (PV/368)*100);	// MediciĆ³n
	  textprintf_ex(screen, font, 450, 297, BLACK, WHITE, "%3.1f", (SP/368)*100);	// SP
	  textprintf_ex(screen, font, 710, 297, BLACK, WHITE, "%3.1f", (OP/368)*100);	// Controlador
//	}
      
      if(k>=100)
	{
 	  k= 0;
	  vline(screen, 967, 351, 717, GRAY);
          blit(Clean, screen, 0, 0, 968, 350, 2, 368);
	}
      
      int Recorder;
      Recorder++;
      if(Recorder>=900)
	{
 	  Recorder= 0;
	  Captura = create_sub_bitmap(screen, 258, 350, 715, 368);
	}
      
      Captura = create_sub_bitmap(screen, 248, 350, 705, 368);
      
      
      if(PV>=362) PV= 365;
      if(OP>=367) OP= 365;
      
      if(PV<=0) PV= 0;
      if(OP<=0)
	 OP= 1;
/*
      OPi= fixtoi(itofix((OP*0.69234783)/255*100));
      sCmd[0]= (unsigned char)OPi+50;
      sCmd[0]= sCmd[0]+0.00;
      writeport(fd, sCmd);
*/
//     textprintf_ex(screen, font, 30, 297, BLACK, WHITE, "%i - %s - %3.1f", PVi, sResult, PV);	// MediciĆ³n      

      /* Draw the behaviour of the PV, SP and OP over time */
      line(screen, 71+i, 717-PV, 71+i, 717-PVj, RED);	
      PVj= PV;    /* Flag for line y2 as a precedent state */
      line(screen, 71+i, 717-OP, 71+i, 717-OPj, BLUE);	
      OPj= OP;    /* Flag for line y2 as a precedent state */
      
      fprintf(outfile,"%i\t%f\t %f\t %f\n", M, ((PV/368)*100), ((SP/368)*100), ((OP/368)*100));
      rest(Delay);
    }
  int ScreenWide;
  RLE_SPRITE *rle0, *rle1;
  BITMAP *Screen3;

  Screen3 = load_bitmap("images/Close/Base.pcx", pal);
  system("mp3blaster /home/mentesuprema/Residencia/sounds/swing2.wav &");
  rest(5);

  rle0= get_rle_sprite(Screen2);
  rle1= get_rle_sprite(Screen3);
  
  for(ScreenWide=0;ScreenWide<=768;ScreenWide=ScreenWide+5)
    {
      draw_rle_sprite(screen, rle0, 0, 768);
      draw_rle_sprite(screen, rle1, 0, -768+ScreenWide);
    }

  destroy_rle_sprite(rle0);  
  destroy_rle_sprite(rle1);    
  destroy_bitmap(Screen2);
  destroy_bitmap(Screen3);
  destroy_bitmap(Clean);
  destroy_bitmap(Disconnected);
  release_screen();
  Close();
  exit(0);
} 
Example #10
0
int mouse()
{
 int ret=-1, go=1;
 char cmd1[]= "AT*EAID=1,1,\"Use joystick to move mouse & keypad for clicks\"\r";
 char cmd2[]= "AT+CMER=3,2,,,\r";
 char cmd3[]= "AT+CMER=0,0,,,\r";
 char buf[MAXLEN]="";
 char key;
 int status, mdelta=15, mwait=MOUSE_DELAY;
 int mup=0, mdown=0, mleft=0, mright=0;
 int mbleft=0, mbright=0, mbmiddle=0, mtoggle=0;

 Display *dpy = XOpenDisplay (NULL);

 if(dpy==NULL) return -1;
 writeport(cmd1, strlen(cmd1));
 if(waitfor("OK", 1, TIMEOUT) != 1) go = 0;
 
 writeport(cmd2, strlen(cmd2));
 if(waitfor("OK", 1, TIMEOUT) != 1) go = 0;
 
 while(go)
 {
  buf[0]=0;
  ret = readport(buf, MAXLEN, mwait);
  if( (ret <= 0 && ret != -EINTR) || strncmp(buf, "ERROR", 5)==0 )
  {
   ret=-1;
   break;
  }
  if(strncmp(buf, "*EAII: ", 7)==0 || strncmp(buf, "*EAAI", 5)==0)
  {
   ret=1;
   break;
  }
  if(strncmp(buf, "+CKEV: ", 7)==0)
  {
   key=buf[7];
   status=strchr(buf,',')[1]-'0';
   switch(key)
   {
    //Simply assume it's joy up coz T610 key report is buggy
    //case 27:
    // K700i is not buggy!
    case '^':
    case '5':
	mup=status;
	mwait=MOUSE_DELAY;
	break;
    case 'v':
    case '8':
	mdown=status;
	mwait=MOUSE_DELAY;
	break;
    case '<':
    case '4':
    case '7':
	mleft=status;
	mwait=MOUSE_DELAY;
	break;
    case '>':
    case '6':
    case '9':
	mright=status;
	mwait=MOUSE_DELAY;
	break;
    case '1':
    	if(mtoggle && status)
	{
	 mbleft = !mbleft;
	 mouse_down_up(dpy, 1, mbleft);
	}
	if(!mtoggle) mouse_down_up(dpy, 1, status);
	break;
    case '2':
    	if(mtoggle && status)
	{
	 mbmiddle = !mbmiddle;
	 mouse_down_up(dpy, 2, mbmiddle);
	}
	if(!mtoggle) mouse_down_up(dpy, 2, status);
	break;
    case '3':
    	if(mtoggle && status)
	{
	 mbright = !mbright;
	 mouse_down_up(dpy, 3, mbright);
	}
	if(!mtoggle) mouse_down_up(dpy, 3, status);
	break;
    case '*':
	if(status && !mtoggle) mouse_double_click(dpy);
	break;
    case '#':
	if(status)
	{
	 mtoggle = !mtoggle;
	 mbleft = mbright = mbmiddle = 0;
	}
	break;
   }
   if((key=='1' || key=='2' || key =='3') && !status
      && mtoggle && !mbleft && !mbmiddle && !mbright) mtoggle=0;
  }
  if(ret == -EINTR) mwait=MOUSE_RRATE;
  if(mup) mouse_rel_move(dpy, 0, -mdelta);
  if(mdown) mouse_rel_move(dpy, 0, mdelta);
  if(mright) mouse_rel_move(dpy, mdelta, 0);
  if(mleft) mouse_rel_move(dpy, -mdelta, 0);
 }
 
 writeport(cmd3, strlen(cmd3));
 if(waitfor("OK", 5, TIMEOUT) != 1) ret = -1;
 
 XCloseDisplay (dpy);
 return ret;
}