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); }
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()*/