Example #1
0
/*void CUartThread::ReadUart()
{
    int nLen = 0;
    char szBuf[RECV_DATA_LEN] = {0};

    int time = 1000;
    nLen = readport(m_nFD, szBuf, RECV_CMD_LEN);

    if(nLen <= 0)
    {
        printf("recv data return \r\n");
        return;
    }

    if((szBuf[0] == 'O') && (szBuf[1] == 'K'))
    {
        int nDatalen = 0;
        if(nLen >= RECV_CMD_LEN)
        {
            nDatalen = szBuf[3]*256 + szBuf[4] - 5 + 2;
            //printf("nDatalen=%d  \r\n", nDatalen);
        }
        nLen = readport(m_nFD, szBuf, nDatalen);

       // printf("recv data len=%d  \r\n", nLen);
        if(nLen <= 0)
        {
            return;
        }

        printf("remit sSerialData(szBuf)  \r\n");

        // put a signals that recv data from serial port
        emit sSerialData(szBuf);
    }

    if((szBuf[0] == 'E') && (szBuf[1] == 'R'))
    {
        nLen = readport(m_nFD, szBuf, 2);
        printf("recv data error  \r\n");
    }
}*/
void CUartThread::ReadUart()
{
    printf("readuart");
    int nLen = 0;
    char szBuf[RECV_DATA_LEN] = {0};

    nLen = readport(m_nFD, szBuf, 5);
    if(nLen < 0)
    {
        printf("readuart < 0");
        CLOG::Log("Read sensor cmd error .");
        return;
    }
    if((szBuf[0] == 'O') && (szBuf[1] == 'K'))
    {
        printf("readuart ok");
        int nDatalen = 0;
        if(nLen >= RECV_CMD_LEN)
        {
            nDatalen = szBuf[3]*256 + szBuf[4] - 5 + 2;
        }

        nLen = readport(m_nFD, szBuf, nDatalen);

        if(nLen <= 0)
        {
            printf("nLen <= 0,Read sensor data error .\r\n");
            CLOG::Log("Read sensor data error .");
            return;
        }

//        for(int i = 0; i < nLen; i++)
//        {
//            printf("%x\r\n", *(szBuf + i));
//        }

        printf("Read uart data success  \r\n");
        CLOG::Log("Read uart data success .");

         //put a signals that recv data from serial port
        emit sSerialData(szBuf);
    }

    if((szBuf[0] == 'E') && (szBuf[1] == 'R'))
    {
        nLen = readport(m_nFD, szBuf, 2);
        //printf("recv data error  \r\n");
    }
}
//-------------------------------------------------------------------------
//  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 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 #4
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 #5
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 #6
0
File: devrtc.c Project: 8l/inferno
static long	 
rtcread(Chan *c, void *buf, long n, vlong off)
{
	ulong offset = off;
	ulong t;
	char *b;

	if(c->qid.type & QTDIR)
		return devdirread(c, buf, n, rtcdir, nrtc, devgen);

	switch((ulong)c->qid.path){
	case Qrtc:
		t = m->iomem->rtc;
		n = readnum(offset, buf, n, t, 12);
		return n;
	case Qswitch:
		return readnum(offset, buf, n, archoptionsw(), 12);
	case Qintstat:
		b = malloc(2048);
		if(waserror()){
			free(b);
			nexterror();
		}
		intrstats(b, 2048);
		t = readstr(offset, buf, n, b);
		poperror();
		free(b);
		return t;
	case Qporta:
	case Qportb:
	case Qportc:
		return readport(c->qid.path, offset, buf, n);
	case Qnvram:
		if(offset < 0 || offset >= conf.nvramsize)
			return 0;
		if(offset + n > conf.nvramsize)
			n = conf.nvramsize - offset;
		memmove(buf, (char*)conf.nvrambase+offset, n);
		return n;
	}
	error(Egreg);
	return 0;		/* not reached */
}
Example #7
0
void WriteThread::ReadUart()
{
    int wLen = 0;
    char szBuf[8] = {0};

    wLen = readport(wFD, szBuf, 8);
    if(wLen < 0)
    {
        CLOG::Log("Read write_serial cmd error .");
        return;
    }
    else if((szBuf[0] == 'O') && (szBuf[1] == 'K'))
    {
        //设置写串口数据标志位为true
        writeFlag = true;

        printf("Read OK  \r\n");
        CLOG::Log("Read OK .");
    }
}
Example #8
0
void* tf_read(void *args) {

    int oldstate;
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate);

    
    setup_termination();
    void *load;
    int nRead;
    uint8_ buf[3];
    uint8_ *pkg;
    int len;
    int iid;
    int id;
    int sender;
    struct payload_pkg_rob_command *pkg_rob_comm;
    struct payload_pkg_trajectory  *pach;

    xbee_packet_received = 0;
    xbee_ack_received = 0;

    while (1) {

        printf("------------\n");
        
        
        iid = -1;

        /* Look for a command */
        /* Lock the mutex on the job queue. */
        nRead = readport(xbee_fd_r, buf, 3);

        if (nRead == 3) {
		if (buf[0] == 0x7e) {
                printf("%02x\t%02x\n", buf[1], buf[2]);
                len = MSB_LSB_2_INT(buf + 1, 2);
                if (len > 0) {
                    printf("Len pkg: %d\t", len);
                    pkg = (uint8_ *) malloc(sizeof (uint8_)*(len + 1));
                    nRead = readport(xbee_fd_r, pkg, len + 1);
                    sender = pkg[2];
                    printf("Sender: %2x\t%d\n", pkg[2], sender);
                    ++xbee_packet_neighborhood[sender];
                    printf("Read pkg: %d\n", nRead);
                    id = pkg_dispatcher(pkg, nRead, &iid, &load);
                    if (id == rx_pack_16 && iid == pkg_1) {
                        printf("---PARSER----\n");
                        printf("Long: %ld\n", ((struct payload_pkg1 *) load)->i);
                        printf("Float: %f\n", ((struct payload_pkg1 *) load)->j);
                    }
		xbee_packet_received++;
                    switch (iid) {

			   
                        case pkg_state:
                            //printf("pkg_state\n");
			    break;
			case pkg_trajectory:
			    pach=(struct payload_pkg_trajectory*)load; 
			    v_xbee=pach->v;
			    w_xbee=pach->w;
			    fprintf(stderr,"VELOCITA' RICEVUTE DA MATLAB: line=%f ang=%f\n",pach->v,pach->w);
			    break;
                        case pkg_webcam_data:
                            printf("pkg_webcam_data\n");
                            break;

                        case pkg_rob_command:
                            printf("pkg_rob_command\n");
                            pkg_rob_comm = (struct payload_pkg_rob_command *) load;
                            console_current_command = pkg_rob_comm->command[0];
                            console_current_value1 = pkg_rob_comm->value;

                            switch (console_current_command) {
                                case 'v':
                                    printf("Command v\tValue: %d\n", console_current_value1);
                                    set_vel_2_array(pic_buffer[pic_last_vel_2_send], console_current_value1, console_current_value1);
                                    pic_last_vel_2_send %= LEN_PIC_BUFFER;
                                    break;

                                case 'p':
                                    printf("Command p\tValue: %d\n", console_current_value1);
                                    break;

                                case 'd':
                                    printf("Command d\tValue: %d\n", console_current_value1);
                                    break;
                                case 't':
                                    printf("Command d\tValue: %d\n", console_current_value1);
                                    break;
                                case 's':
                                    printf("Command s\tValue: %d\n", console_current_value1);
                                    break;
                                default:
                                    break;
                            }

                            break;

                        default:
                            break;

                    }


                    free(pkg);
                }
                printf("Len: %d\n", len);

            }
#ifdef VERBOSE_XBEE
            printf("nRead(in): %d\t", nRead);
            print_pkg(buf, nRead);
#endif
        }
#ifdef VERBOSE_XBEE
        printf("nRead(out): %d\t", nRead);
        print_pkg(buf, nRead);
#endif
    }
    pthread_exit(NULL);

}
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;
}