Exemplo n.º 1
0
SaErrorT
cIpmiSensorHotswap::GetState( tIpmiFruState &state )
{
  // read hotswap state
  cIpmiMsg rsp;

  SaErrorT rv = GetSensorReading( rsp );

  if ( rv != SA_OK )
     {
       IpmiLog( "cannot get hotswap state !\n" );
       return rv;
     }

  unsigned int value = rsp.m_data[3];

  for( int i = 0; i < 8; i++ )
       if ( value & ( 1 << i ) )
          {
            state = (tIpmiFruState)i;
            return SA_OK;
          }

  assert( 0 );
  return SA_ERR_HPI_INVALID_CMD;
}
//****************************************************************************
//                            MAIN FUNCTION
//****************************************************************************
void main()
{
    long lRetVal = 0;
    char data[BUF_SIZE];
    char sent_data[BUF_SIZE];
    unsigned char highByte, lowByte;
    int i;

    unsigned long tempStartTimeStamp, tempStopTimeStamp;

    memset(sent_data, 0, 10);
    // Board Initialization
    BoardInit();

    // Configure the pinmux settings for the peripherals exercised
    PinMuxConfig();

    // Initialize the PWM outputs on the board
    InitServos();

    // Initialize the sensor ADC
    InitSensorADC();

    // Configuring UART
    InitTerm();

    // Display banner
    DisplayBanner(APPLICATION_NAME);

    // Connect to WIFI using default info
    //WlanConnect(NULL, NULL, NULL);
    WlanConnect("Nagui's Network", "SL_SEC_TYPE_WPA", "19520605");

    // Setup the TCP Server Socket
    BsdTcpServerSetup(PORT_NUM);

    // Recieve Data
    while (lRetVal >= 0)
    {
    	lRetVal = BsdTcpServerReceive(data);

		//SysTickPeriodSet(800000000);				// test
		//SysTickEnable();						// test
    	Timer_IF_Init(PRCM_TIMERA0, TIMERA0_BASE, TIMER_CFG_PERIODIC, TIMER_A, 0);
    	Timer_IF_Start(TIMERA0_BASE, TIMER_A, MILLISECONDS_TO_TICKS(2000));
		//tempStartTimeStamp = SysTickValueGet();		// test
    	tempStartTimeStamp = Timer_IF_GetCount(TIMERA0_BASE, TIMER_A);

    	for (i = 0; i<NUM_SERVOS; i++)
    	{
    		MoveServo((unsigned char)data[i], (enum Servo_Joint_Type)i);
    		UART_PRINT("%d", (unsigned int) data[i]);
    	}

    	for (i = 0; i< NUM_SENSORS; i++)
    	{
        	//UnsignedShort_to_UnsignedChar(GetSensorReading((enum Fingertip_Sensor_Type)i), &highByte, &lowByte);
    		UnsignedShort_to_UnsignedChar(GetSensorReading(SENSOR_FINGER_INDEX), &highByte, &lowByte);
        	sent_data[i*2] = (char)highByte;
        	sent_data[i*2+1] = (char)lowByte;
    	}
    	//tempStopTimeStamp = SysTickValueGet();					// test
    	tempStopTimeStamp = Timer_IF_GetCount(TIMERA0_BASE, TIMER_A);
    	lRetVal = BsdTcpServerSend(sent_data, 10);
    	UART_PRINT("timestamp start: %lu\n\r", tempStartTimeStamp);	//test
    	UART_PRINT("timestamp stop: %lu\n\r", tempStopTimeStamp);	//test
    	UART_PRINT("Sent 10 bytes to client.\n\r");

    }
    UART_PRINT("Exiting Application ...\n\r");

    // power of the Network processor
    lRetVal = sl_Stop(SL_STOP_TIMEOUT);

}
Exemplo n.º 3
0
int __cdecl
#else
int
#endif
re_name_main(int argc, char **argv)
{
   int ret = 0;
   char c;
   uchar devrec[16];
   uchar chstatus[4];
   char *s1;
   int loops = 1;
   int nsec = 10;
   char *nodefile = NULL;
   int done = 0;
   FILE *fp = NULL;
   char nod[40]; char usr[24]; char psw[24];
   char drvtyp[10];
   int n;
#ifdef GET_SENSORS
   uchar *sdrlist;
#endif

   printf("%s ver %s\n", progname,progver);

   while ((c = getopt( argc, argv,"i:l:m:f:s:t:xEF:N:P:R:T:U:V:YZ:?")) != EOF ) 
      switch(c) {
          case 'm': /* specific IPMB MC, 3-byte address, e.g. "409600" */
                    g_bus = htoi(&optarg[0]);  /*bus/channel*/
                    g_sa  = htoi(&optarg[2]);  /*device slave address*/
                    g_lun = htoi(&optarg[4]);  /*LUN*/
                    g_addrtype = ADDR_IPMB;
                    if (optarg[6] == 's') {
                             g_addrtype = ADDR_SMI;  s1 = "SMI";
                    } else { g_addrtype = ADDR_IPMB; s1 = "IPMB"; }
                    fset_mc = 1;
                    ipmi_set_mc(g_bus,g_sa,g_lun,g_addrtype);
                    printf("Use MC at %s bus=%x sa=%x lun=%x\n",
                            s1,g_bus,g_sa,g_lun);
                    break;
          case 'f': nodefile = optarg; break; /* specific sensor tag */
          case 'l': loops = atoi(optarg); break; 
          case 'i': nsec = atoi(optarg); break;  /*interval in sec*/
          case 's': sdrfile = optarg; break; 
          case 't': mytag = optarg; break; /* specific sensor tag */
          case 'x': fdebug = 1;     break;  /* debug messages */
          case 'N':    /* nodename */
          case 'U':    /* remote username */
          case 'P':    /* remote password */
          case 'R':    /* remote password */
          case 'E':    /* get password from IPMI_PASSWORD environment var */
          case 'F':    /* force driver type */
          case 'T':    /* auth type */
          case 'V':    /* priv level */
          case 'Y':    /* prompt for remote password */
          case 'Z':    /* set local MC address */
                parse_lan_options(c,optarg,fdebug);
		if (c == 'F') strncpy(drvtyp,optarg,sizeof(drvtyp));
                break;
	  default:
                printf("Usage: %s [-filmstx -NUPREFTVY]\n", progname);
                printf(" where -x       show eXtra debug messages\n");
                printf("       -f File  use list of remote nodes from File\n");
                printf("       -i 10    interval for each loop in seconds\n");
                printf("       -l 10    loops sensor readings 10 times\n");
		printf("       -m002000 specific MC (bus 00,sa 20,lun 00)\n");
                printf("       -s File  loads SDRs from File\n");
                printf("       -t tag   search for 'tag' in SDRs\n");
		print_lan_opt_usage();
                exit(1);
      }
   /* Rather than parse_lan_options above, the set_lan_options function 
    * could be used if the program already knows the nodename, etc. */

 while(!done)
 {
   if (nodefile != NULL) {
      /* This will loop for each node in the file if -f was used.
       * The file should contain one line per node: 
       *    node1 user1 password1
       *    node2 user2 password2
       */
      if (fp == NULL) {
         fp = fopen(nodefile,"r");
         if (fp == NULL) {
            printf("Cannot open file %s\n",nodefile);
            ret = ERR_FILE_OPEN;
	    goto do_exit;
         }
         if (fdebug) printf("opened file %s ok\n",nodefile);
      }
      n = fscanf(fp,"%s %s %s", nod, usr, psw);
      if (fdebug) printf("fscanf returned %d \n",n);
      if (n == EOF || n <= 0) {
        fclose(fp);
	done = 1;
	goto do_exit;
      }
      printf("Using -N %s -U %s -P %s ...\n",nod,usr,psw);
      if (n > 0) parse_lan_options('N',nod,0);
      if (n > 1) parse_lan_options('U',usr,0);
      if (n > 2) parse_lan_options('P',psw,0);
      if (drvtyp != NULL) parse_lan_options('F',drvtyp,0);
   }

   ret = ipmi_getdeviceid(devrec,16,fdebug);
   if (ret != 0) {
	printf("Cannot do ipmi_getdeviceid, ret = %d\n",ret);
	goto do_exit;
   } else {  /*success*/
       uchar ipmi_maj, ipmi_min;
       ipmi_maj = devrec[4] & 0x0f;
       ipmi_min = devrec[4] >> 4;
       show_devid( devrec[2],  devrec[3], ipmi_maj, ipmi_min);
   }

   ret = get_chassis_status(chstatus,4);
   if (ret == 0) {
        if (chstatus[0] & 0x01) s1 = "on";
        else s1 = "off";
	printf("Chassis Status = %02x (%s)\n",chstatus[0],s1);
   }

#ifdef GET_FRU
   {
      uchar  *fru_data = NULL;
      printf("Getting FRU ...\n");
      ret = load_fru(0x20,0,0x07, &fru_data);
      if (ret == 0) 
	 ret = show_fru(0x20,0,0x07,fru_data);
      if (fru_data != NULL)
         free_fru(fru_data);
   }
#endif
#ifdef GET_SENSORS
   printf("Getting SDRs ...\n");
   if (sdrfile != NULL) {
      ret = get_sdr_file(sdrfile,&sdrlist);
   } else {
      ret = get_sdr_cache(&sdrlist);
   }
   printf("get_sdr_cache ret = %d\n",ret);
   if (ret == 0) {
	uchar sdrbuf[SDR_SZ];
	uchar reading[4];
	uchar snum = 0;
	ushort id;
	double val;
	char *typestr;
	char tag[17];
	int j;

	for (j = 0; j < loops; j++) 
	{
	 if (j > 0) {
	    printf("loop %d: wait %d seconds ...\n",j,nsec);
	    os_usleep(nsec,0);  /*sleep 5 sec between loops*/
	 }
	 id = 0;
	 /* Get sensor readings for all full SDRs */
         while(find_sdr_next(sdrbuf,sdrlist,id) == 0) {
           id = sdrbuf[0] + (sdrbuf[1] << 8); /*this SDR id*/
	   if (sdrbuf[3] != 0x01) continue; /*full SDR*/
	   strncpy(tag,&sdrbuf[48],16);
	   tag[16] = 0;
	   snum = sdrbuf[7];
           ret = GetSensorReading(snum, sdrbuf, reading);
	   if (ret == 0) { 
	      val = RawToFloat(reading[0], sdrbuf);
              typestr = get_unit_type( sdrbuf[20], sdrbuf[21], sdrbuf[22],0);
	   } else {
	      val = 0;
	      typestr = "na";
	      printf("%04x: get sensor %x reading ret = %d\n",id,snum,ret);
	   }
           printf("%04x: sensor %x %s  \treading = %.2f %s\n",
			id,snum,tag,val,typestr);
	   memset(sdrbuf,0,SDR_SZ);
         } /*end while*/
        } /*end for(loops) */

	/* Find a specific sensor by its tag and get a reading */
	if (mytag != NULL) {
	   /* see option -t, mytag = "System";  or "System Temp" */
	   memset(sdrbuf,0,SDR_SZ);
           ret = find_sdr_by_tag(sdrbuf, sdrlist, mytag, fdebug);
           printf("find_sdr_by_tag(%s) ret = %d\n",mytag,ret);
	   strncpy(tag,&sdrbuf[48],16); /*assume full sdr tag offset*/
	   tag[16] = 0;
	   snum = sdrbuf[7];
           ret = GetSensorReading(snum, sdrbuf, reading);
           printf("get sensor %x reading ret = %d\n",snum,ret);
	   if (sdrbuf[3] == 0x01) { /*full SDR*/
	      if (ret == 0) { 
	         val = RawToFloat(reading[0], sdrbuf);
                 typestr = get_unit_type(sdrbuf[20],sdrbuf[21],sdrbuf[22],0);
	      } else {
	         val = 0;
	         typestr = "na";
	      }
              printf("sensor %x %s reading = %.2f %s\n",snum,tag,val,typestr);
	   } else printf("sensor %x type %x reading = %02x\n",
			snum,sdrbuf[3],reading[2]);
	}

	free_sdr_cache(sdrlist);
   } /*endif sdr_cache is valid*/
#endif
   ipmi_close_();
   if (nodefile == NULL) done = 1;
  } /*end while not done */

do_exit:
   show_outcome(progname,ret);
   exit (ret);
}  /* end main()*/