Esempio n. 1
0
int
MPU9250::accel_self_test()
{
	if (self_test()) {
		return 1;
	}

	/* inspect accel offsets */
	if (fabsf(_accel_scale.x_offset) < 0.000001f) {
		return 2;
	}

	if (fabsf(_accel_scale.x_scale - 1.0f) > 0.4f || fabsf(_accel_scale.x_scale - 1.0f) < 0.000001f) {
		return 3;
	}

	if (fabsf(_accel_scale.y_offset) < 0.000001f) {
		return 4;
	}

	if (fabsf(_accel_scale.y_scale - 1.0f) > 0.4f || fabsf(_accel_scale.y_scale - 1.0f) < 0.000001f) {
		return 5;
	}

	if (fabsf(_accel_scale.z_offset) < 0.000001f) {
		return 6;
	}

	if (fabsf(_accel_scale.z_scale - 1.0f) > 0.4f || fabsf(_accel_scale.z_scale - 1.0f) < 0.000001f) {
		return 7;
	}

	return 0;
}
void *firethread_st(void *param) {
    struct thread_params_st *threadparams = (struct thread_params_st *)param;
    /*child process*/

#if 0
#ifndef WIN32
    fprintf(stderr, "Start of thread %u\n context=%u\n", 
            (unsigned int)pthread_self(), 
            (unsigned int)threadparams->context);
#endif
#endif

    do {
        self_test(threadparams->context, threadparams->tcs, threadparams->tce, threadparams->flags, 
                  threadparams->testcase_config, threadparams->suite, threadparams->doprint, threadparams->max_in_flight);
        if (threadparams->wait)
            sleep(threadparams->wait);
    }while (threadparams->wait);
    
#if 0
#ifndef WIN32
    fprintf(stderr, "End of thread %u\n", 
            (unsigned int)pthread_self());
#endif
#endif

    return NULL;
}
Esempio n. 3
0
int
BMI160::accel_self_test()
{
	if (self_test()) {
		return 1;
	}

	/* inspect accel offsets */
	if (fabsf(_accel_scale.x_offset) < 0.000001f) {
		return 1;
	}

	if (fabsf(_accel_scale.x_scale - 1.0f) > 0.4f || fabsf(_accel_scale.x_scale - 1.0f) < 0.000001f) {
		return 1;
	}

	if (fabsf(_accel_scale.y_offset) < 0.000001f) {
		return 1;
	}

	if (fabsf(_accel_scale.y_scale - 1.0f) > 0.4f || fabsf(_accel_scale.y_scale - 1.0f) < 0.000001f) {
		return 1;
	}

	if (fabsf(_accel_scale.z_offset) < 0.000001f) {
		return 1;
	}

	if (fabsf(_accel_scale.z_scale - 1.0f) > 0.4f || fabsf(_accel_scale.z_scale - 1.0f) < 0.000001f) {
		return 1;
	}

	return 0;
}
Esempio n. 4
0
int main(int argc, char **argv)
{
    printf("Config: bits: %d, optimize mult: %d, use mul table: %d, use tables: %d\n",
           get_bits(), use_galois(), use_mul_table(), use_tables());

    kuz_key_t key;
    w128_t x;
    uint32_t buf[0x100];
    clock_t tim;

    kuz_init();

    self_test();

    // == Speed Test ==

    for (int i = 0; i < 0x100; i++)
        buf[i] = i;
    kuz_set_encrypt_key(&key, testvec_key);

    for (int n = 4000, tim = 0; tim < 2 * CLOCKS_PER_SEC; n <<= 1) {
        tim = clock();
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < 0x100; i += 4)
                kuz_encrypt_block(&key, &buf[i]);
        }
        tim = clock() - tim;
        printf("kuz_encrypt_block(): %.3f kB/s (n=%dkB,t=%.3fs)\r",
               ((double) CLOCKS_PER_SEC * n) / ((double) tim),
               n, ((double) tim) / ((double) CLOCKS_PER_SEC));
        fflush(stdout);
    }
    printf("\n");


    for (int i = 0; i < 0x100; i++)
        buf[i] = i;
    kuz_set_decrypt_key(&key, testvec_key);

    for (int n = 4000, tim = 0; tim < 2 * CLOCKS_PER_SEC; n <<= 1) {
        tim = clock();
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < 0x100; i += 4)
                kuz_decrypt_block(&key, &buf[i]);
        }
        tim = clock() - tim;
        printf("kuz_decrypt_block(): %.3f kB/s (n=%dkB,t=%.3fs)\r",
               ((double) CLOCKS_PER_SEC * n) / ((double) tim),
               n, ((double) tim) / ((double) CLOCKS_PER_SEC));
        fflush(stdout);
    }
    printf("\n");

    printf("Tables: %.1fK (encrypt: %.1fK, decrypt: %.1fK)\n", (float)get_used_memory_count() / 1024, (float)get_encrypt_used_memory_count() / 1024, (float)get_decrypt_used_memory_count() / 1024);


    return 0;
}
Esempio n. 5
0
int
BMI160::accel_self_test()
{
	if (self_test()) {
		return 1;
	}

	return 0;
}
Esempio n. 6
0
int
MPU9250::accel_self_test()
{
	if (self_test()) {
		return 1;
	}

	return 0;
}
Esempio n. 7
0
int
MPU9250::gyro_self_test()
{
	if (self_test()) {
		return 1;
	}

	/*
	 * Maximum deviation of 20 degrees, according to
	 * http://www.invensense.com/mems/gyro/documents/PS-MPU-9250A-00v3.4.pdf
	 * Section 6.1, initial ZRO tolerance
	 */
	const float max_offset = 0.34f;
	/* 30% scale error is chosen to catch completely faulty units but
	 * to let some slight scale error pass. Requires a rate table or correlation
	 * with mag rotations + data fit to
	 * calibrate properly and is not done by default.
	 */
	const float max_scale = 0.3f;

	/* evaluate gyro offsets, complain if offset -> zero or larger than 20 dps. */
	if (fabsf(_gyro_scale.x_offset) > max_offset) {
		return 1;
	}

	/* evaluate gyro scale, complain if off by more than 30% */
	if (fabsf(_gyro_scale.x_scale - 1.0f) > max_scale) {
		return 1;
	}

	if (fabsf(_gyro_scale.y_offset) > max_offset) {
		return 1;
	}

	if (fabsf(_gyro_scale.y_scale - 1.0f) > max_scale) {
		return 1;
	}

	if (fabsf(_gyro_scale.z_offset) > max_offset) {
		return 1;
	}

	if (fabsf(_gyro_scale.z_scale - 1.0f) > max_scale) {
		return 1;
	}

	/* check if all scales are zero */
	if ((fabsf(_gyro_scale.x_offset) < 0.000001f) &&
	    (fabsf(_gyro_scale.y_offset) < 0.000001f) &&
	    (fabsf(_gyro_scale.z_offset) < 0.000001f)) {
		/* if all are zero, this device is not calibrated */
		return 1;
	}

	return 0;
}
Esempio n. 8
0
int main(void) {
  init();
  self_test();
  restore_state();
  while(1) {
    key_press(&key1_lock, &PINA, KEY1, minus);
    key_press(&key2_lock, &PINB, KEY2, plus);
    render_leds();
  };
};
Esempio n. 9
0
int
BMI160::gyro_self_test()
{
	if (self_test()) {
		return 1;
	}

	/*
	 * Maximum deviation of 10 degrees
	 */
	const float max_offset = (float)(10 * M_PI_F / 180.0f);
	/* 30% scale error is chosen to catch completely faulty units but
	 * to let some slight scale error pass. Requires a rate table or correlation
	 * with mag rotations + data fit to
	 * calibrate properly and is not done by default.
	 */
	const float max_scale = 0.3f;

	/* evaluate gyro offsets, complain if offset -> zero or larger than 30 dps. */
	if (fabsf(_gyro_scale.x_offset) > max_offset) {
		return 1;
	}

	/* evaluate gyro scale, complain if off by more than 30% */
	if (fabsf(_gyro_scale.x_scale - 1.0f) > max_scale) {
		return 1;
	}

	if (fabsf(_gyro_scale.y_offset) > max_offset) {
		return 1;
	}

	if (fabsf(_gyro_scale.y_scale - 1.0f) > max_scale) {
		return 1;
	}

	if (fabsf(_gyro_scale.z_offset) > max_offset) {
		return 1;
	}

	if (fabsf(_gyro_scale.z_scale - 1.0f) > max_scale) {
		return 1;
	}

	/* check if all scales are zero */
	if ((fabsf(_gyro_scale.x_offset) < 0.000001f) &&
	    (fabsf(_gyro_scale.y_offset) < 0.000001f) &&
	    (fabsf(_gyro_scale.z_offset) < 0.000001f)) {
		/* if all are zero, this device is not calibrated */
		return 1;
	}

	return 0;
}
Esempio n. 10
0
/////===========MAIN=====================/////////////////////
int main(void)
{
	init();
	self_test();
	
	while(1)
	{	
		//check to see if autorun is set, if it is don't print the menu
		if(read_from_EEPROM(1) == 48) config_read();
		else config_menu();
	}
}
void config_read(void)
{
	uint8_t choice=0;
	
	if(read_from_EEPROM(10) != 48)
	{
		while(1)
		{
			choice = uart_getchar();
			putchar('\n');
			putchar('\r');
			
			if(choice=='1')
			{
				while(!(UCSR0A & (1 << RXC0)))adxl345();
				config_menu();
			}
			if(choice=='2')
			{
				while(!(UCSR0A & (1 << RXC0)))
				{
					hmc5843();
					delay_ms(550);//at least 100ms interval between measurements
				}
				config_menu();
			}
			if(choice=='3')
			{
				while(!(UCSR0A & (1 << RXC0)))stgyros();
				config_menu();
			}
			if(choice=='4')
			{
				while(!(UCSR0A & (1 << RXC0)))raw();
				config_menu();
			}
			if(choice=='5')
			{
				self_test();
			}
			if(choice==0x1A) //if ctrl-z
			{
				write_to_EEPROM(10,48);
				auto_raw();
			}
			if(choice==0x3F) //if ?
			{
				help();
				config_menu();
			}
		}
	}else auto_raw();
}
Esempio n. 12
0
int main(int argc, char *argv[])
{
	RELATED_DEV rdev;
	IDEV *p;

	rdev.prefix[0] = 0x00;
	rdev.start_num = 1;
	rdev.end_num = 0;

	register_device("ttyUSB0", &rdev, SIM4100);

	if (dev_list.dev[0].active == 0) {
		dm_log(NULL, "error register device.");
		return -1;
	}
	p = dev_list.dev[0].idev;

	while (idev_get_status(p) != READY) 
		sleep(1);

	self_test(p);

	return 0;
}
Esempio n. 13
0
int
L3GD20::ioctl(struct file *filp, int cmd, unsigned long arg)
{
	switch (cmd) {

	case SENSORIOCSPOLLRATE: {
			switch (arg) {

				/* switching to manual polling */
			case SENSOR_POLLRATE_MANUAL:
				stop();
				_call_interval = 0;
				return OK;

				/* external signalling not supported */
			case SENSOR_POLLRATE_EXTERNAL:

				/* zero would be bad */
			case 0:
				return -EINVAL;

				/* set default/max polling rate */
			case SENSOR_POLLRATE_MAX:
			case SENSOR_POLLRATE_DEFAULT:
				return ioctl(filp, SENSORIOCSPOLLRATE, L3GD20_DEFAULT_RATE);

				/* adjust to a legal polling interval in Hz */
			default: {
					/* do we need to start internal polling? */
					bool want_start = (_call_interval == 0);

					/* convert hz to hrt interval via microseconds */
					unsigned ticks = 1000000 / arg;

					/* check against maximum sane rate */
					if (ticks < 1000)
						return -EINVAL;

					/* update interval for next measurement */
					/* XXX this is a bit shady, but no other way to adjust... */
					_call.period = _call_interval = ticks;

					/* adjust filters */
					float cutoff_freq_hz = _gyro_filter_x.get_cutoff_freq();
					float sample_rate = 1.0e6f/ticks;
					set_driver_lowpass_filter(sample_rate, cutoff_freq_hz);

					/* if we need to start the poll state machine, do it */
					if (want_start)
						start();

					return OK;
				}
			}
		}

	case SENSORIOCGPOLLRATE:
		if (_call_interval == 0)
			return SENSOR_POLLRATE_MANUAL;

		return 1000000 / _call_interval;

	case SENSORIOCSQUEUEDEPTH: {
		/* lower bound is mandatory, upper bound is a sanity check */
		if ((arg < 1) || (arg > 100))
			return -EINVAL;

		irqstate_t flags = irqsave();
		if (!_reports->resize(arg)) {
			irqrestore(flags);
			return -ENOMEM;
		}
		irqrestore(flags);
		
		return OK;
	}

	case SENSORIOCGQUEUEDEPTH:
		return _reports->size();

	case SENSORIOCRESET:
		reset();
		return OK;

	case GYROIOCSSAMPLERATE:
		return set_samplerate(arg);

	case GYROIOCGSAMPLERATE:
		return _current_rate;

	case GYROIOCSLOWPASS: {
		float cutoff_freq_hz = arg;
		float sample_rate = 1.0e6f / _call_interval;
		set_driver_lowpass_filter(sample_rate, cutoff_freq_hz);

		return OK;
	}

	case GYROIOCGLOWPASS:
		return _gyro_filter_x.get_cutoff_freq();

	case GYROIOCSSCALE:
		/* copy scale in */
		memcpy(&_gyro_scale, (struct gyro_scale *) arg, sizeof(_gyro_scale));
		return OK;

	case GYROIOCGSCALE:
		/* copy scale out */
		memcpy((struct gyro_scale *) arg, &_gyro_scale, sizeof(_gyro_scale));
		return OK;

	case GYROIOCSRANGE:
		/* arg should be in dps */
		return set_range(arg);

	case GYROIOCGRANGE:
		/* convert to dps and round */
		return (unsigned long)(_gyro_range_rad_s * 180.0f / M_PI_F + 0.5f);

	case GYROIOCSELFTEST:
		return self_test();

	default:
		/* give it to the superclass */
		return SPI::ioctl(filp, cmd, arg);
	}
}
Esempio n. 14
0
void PrintConsoleMenu(void)
{
    unsigned char byteReceived;
    static BOOL waitingResponse = FALSE;
    WIFLY_Result_t result;
    char  OutString[128];



    if((strlen(consoleMsg) <= 1) & (!waitingResponse))
    {
        byteReceived = consoleMsg[0];
        switch(byteReceived)
        {
        case 'a':
            putsConsole("\r\nEnter BAUDRATE\r\n");
            waitingResponse = TRUE;
            consoleState = 'a';
            break;

        case 'b':
            putsConsole("\r\nEnabling Pass-thru mode for RN1723\r\n");
            RN_UartCmdMode = TRUE;
            RN_COMMAND_MODE();
            {
                unsigned long int timeout;
                timeout = TickGet() + TICK_SECOND * 1;
                while ((UINT32)TickGet() < timeout);
            }
            RN_DATA_MODE();

            //XEEWriteCompleteArray(USER_RN_UART_SETTING, (unsigned char *) &RN_UartCmdMode, sizeof(RN_UartCmdMode));
            break;
        case 'c':
            putsConsole("\r\nResetting System to RN1723 Factory Defaults\r\n");
            _Factory_Reset_RN();
            break;
        case '0':
            self_test();
        case '1':

            //putsConsole("\r\nProgramming RN Application Default Settings");
            RN_UartCmdMode = TRUE;
            Wifly_Default_Config(FALSE);        //web app mode turned off
            RN_RESET_LOW();
            {
                //pulse of atleast 160 us
                unsigned long int timeout = TickGet();
                while(TickGet() < (timeout + (1 * TICK_MILLISECOND)));
            }

            RN_RESET_HIGH();
            RN_UartCmdMode = FALSE;
            putsConsole("\r\n>>");
            Reset();
            break;
        case '2':
            putsConsole("\r\nScanning for networks\r\n");
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("scan\r\n","END:",SEC(10))==Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            putsConsole("\r\n>>");
            break;
        case '3':
            putsConsole("\r\nEnter SSID\r\n");
            waitingResponse = TRUE;
            consoleState = 0x03;

            break;
        case '4':
            putsConsole("\r\nEnter DNS name\r\n");
            waitingResponse = TRUE;
            consoleState = 0x04;
            break;
        case '5':
            putsConsole("\r\nEnter Host IP Address\r\n");
            waitingResponse = TRUE;
            consoleState = 0x05;
            break;
        case '6':
            putsConsole("\r\nEnter destination port number\r\n");
            waitingResponse = TRUE;
            consoleState = 0x06;
            break;
        case '7':
            putsConsole("\r\nChange SYS Wake time\r\n");
            waitingResponse = TRUE;
            consoleState = 0x07;
            break;
        case '8':
            putsConsole("\r\nEnter RN1723 Dev Board Base-URI\r\n");
            waitingResponse = TRUE;
            consoleState = 0x08;
            break;

        case '9':
            putsConsole("\r\nEnter Date in mm/dd/yyyy format\r\n");
            waitingResponse = TRUE;
            consoleState = 0x09;
            break;


        default:
            putsConsole("\r\n\r\nChoose from the below options:\r\n");
            putsConsole("------------------------------------------");
            putsConsole("\r\na. Configure PIC32 to RN-UART BAUDRATE");
            putsConsole("\r\nb. Pass Terminal to RN-UART");
            putsConsole("\r\nc. Factory Reset System\r\n");
            putsConsole("\r\n1. Restore RN1723 Dev Board Default Settings");
            putsConsole("\r\n2. Scan for networks to join");
            putsConsole("\r\n3. Configure SSID, Passphrase");
            putsConsole("\r\n4. Change DNS Name");
            putsConsole("\r\n5. Change Host IP Address");
            putsConsole("\r\n6. Change Destination port");
            putsConsole("\r\n7. Change RN SYS Wake time");
            putsConsole("\r\n8. Change RN1723 Dev Board Base-URI");
            putsConsole("\r\n9. Enter Date and Time (Used for SSL Peer Validation)");

            putsConsole("\r\n\r\nPress 'ESC' to exit PIC32 Console Mode");
            putsConsole("\r\n>>");
            break;
        }

    }
    else
    {
        waitingResponse = FALSE;
        switch(consoleState)
        {
        case 'a':
        {

            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set uart baud %s\r\n", consoleMsg);
            while(PutCMD_WiFlyUART(OutString,">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            consoleState = 0;
        }
        break;

        case 0x03:
            putsConsole("\r\nProgramming SSID...\r\n");
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set wlan ssid %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,"OK",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", "OK", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;

            putsConsole("\r\nEnter Passphrase\r\n");
            waitingResponse = TRUE;
            consoleState = 0x32;
            break;

        case 0x04:
            putsConsole("\r\nProgramming DNS...\r\n");
            if(strlen(consoleMsg) > 2)
            {
                memset(hostName, '\0', 40);
                strcpy(hostName, consoleMsg);
                XEEWriteCompleteArray(USER_HOST_NAME, (char*) &hostName, 40);
            }
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set dns name %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("set ip host 0\r\n", ">", SEC(1))== Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            consoleState = 0;

            break;

        case 0x05:
            putsConsole("\r\nProgramming host IP...\r\n");
            if(strlen(consoleMsg) > 2)
            {
                memset(hostName, '\0', 40);
                strcpy(hostName, consoleMsg);
                XEEWriteCompleteArray(USER_HOST_NAME, (char*) &hostName, 40);
            }
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set ip host %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("set dns name 0\r\n",">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            consoleState = 0;

            break;

        case 0x06:
            putsConsole("\r\nProgramming Destination port...\r\n");
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set ip remote %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            consoleState = 0;

            break;

        case 0x07:
            putsConsole("\r\nProgramming sys wake time...\r\n");
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set sys wake %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", ">", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            consoleState = 0;
            break;

        case 0x08:
            putsConsole("\r\nProgramming Base-URI...\r\n");
            memset(moduleBaseURI, '\0', 40);
            strcpy(moduleBaseURI, consoleMsg);
            XEEWriteCompleteArray(USER_BASE_URI_ADDRESS, (char*) &moduleBaseURI, 40);
            consoleState = 0;
            break;

        case 0x09:
        {
            char *indexPtr;

            if(indexPtr = strchr(consoleMsg, '/'))
            {
                unsigned char temp[4] = {"\0"};

                temp[0] = *(indexPtr-2);
                temp[1] = *(indexPtr-1);

                timeNow.tm_mon = atoi(temp);
                sprintf(OutString,"Month %d\r\n", timeNow.tm_mon);
                putsConsole(OutString);

                indexPtr = strchr(indexPtr+1, '/');

                temp[0] = *(indexPtr-2);
                temp[1] = *(indexPtr-1);

                timeNow.tm_mday = atoi(temp);
                sprintf(OutString,"Day %d\r\n", timeNow.tm_mday);
                putsConsole(OutString);

                temp[0] = *(indexPtr+1);
                temp[1] = *(indexPtr+2);
                temp[2] = *(indexPtr+3);
                temp[3] = *(indexPtr+4);

                timeNow.tm_year = (atoi(temp)-1900);
                sprintf(OutString,"Year %d\r\n", atoi(temp));
                putsConsole(OutString);

                putsConsole("\r\nEnter Time in HH:MM (Hours:Minutes) format\r\n");
                waitingResponse = TRUE;
                consoleState = 0x92;

            }
            break;
        }

        case 0x32:
            putsConsole("\r\nProgramming Passphrase...\r\n");
            RN_UartCmdMode = TRUE;
            while(PutCMD_WiFlyUART("$$$", "CMD", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("\r\n", ">", SEC(1)) == Result_BUSY);
            sprintf(OutString,"set wlan pass %s\r\n",consoleMsg);
            while(PutCMD_WiFlyUART(OutString,"OK",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("set wlan join 1\r\n",">",SEC(1))==Result_BUSY);
            while(PutCMD_WiFlyUART("save\r\n", "OK", SEC(1)) == Result_BUSY);
            while(PutCMD_WiFlyUART("exit\r\n", "", SEC(1)) == Result_BUSY);
            RN_UartCmdMode = FALSE;
            EEPROM_Config_Defaults();
            putsConsole("\r\nSetting EEPROM provisioned flag...");
            {
                unsigned char xeeVal = DEVICE_PROVISION_VAL;
                XEEWriteCompleteArray(EE_PROVISION_ADDR, (char *) &xeeVal, sizeof(xeeVal));
            }
            consoleState = 0;
            //resets the board after new configurations are programmed
            SoftReset();

        case 0x92:
        {
            char *indexPtr;

            if(indexPtr = strchr(consoleMsg, ':'))
            {
                unsigned char temp[2] = {"\0"};

                temp[0] = *(indexPtr-2);
                temp[1] = *(indexPtr-1);

                timeNow.tm_hour = atoi(temp);
                sprintf(OutString,"Hours %d\r\n", timeNow.tm_hour);
                putsConsole(OutString);

                temp[0] = *(indexPtr+1);
                temp[1] = *(indexPtr+2);


                timeNow.tm_min = atoi(temp);
                sprintf(OutString,"Min %d\r\n", timeNow.tm_min);
                putsConsole(OutString);

            }
        }
        timeNow.tm_isdst = 0;
        sprintf(OutString, "\r\nOld Time in secs - %lu\r\n", PIC32_time);
        putsConsole(OutString);
        PIC32_time = mktime(&timeNow);
        sprintf(OutString, "\r\nNew Time in secs - %lu\r\n", PIC32_time);
        putsConsole(OutString);
        XEEWriteCompleteArray(CURRENT_TIME_INFO, (char *) &PIC32_time, 4);

        consoleState = 0;
        break;

        default:
            consoleState = 0;

            break;
            //Resets console selection
            //Unexpected state
        }

        putsConsole("\r\n>>");
    }

    memset(consoleMsg, '\0', sizeof(consoleMsg));
}
Esempio n. 15
0
int
L3GD20::ioctl(struct file *filp, int cmd, unsigned long arg)
{
	switch (cmd) {

	case SENSORIOCSPOLLRATE: {
			switch (arg) {

				/* switching to manual polling */
			case SENSOR_POLLRATE_MANUAL:
				stop();
				_call_interval = 0;
				return OK;

				/* external signalling not supported */
			case SENSOR_POLLRATE_EXTERNAL:

				/* zero would be bad */
			case 0:
				return -EINVAL;

				/* set default/max polling rate */
			case SENSOR_POLLRATE_MAX:
			case SENSOR_POLLRATE_DEFAULT:
				/* With internal low pass filters enabled, 250 Hz is sufficient */
				return ioctl(filp, SENSORIOCSPOLLRATE, 250);

				/* adjust to a legal polling interval in Hz */
			default: {
					/* do we need to start internal polling? */
					bool want_start = (_call_interval == 0);

					/* convert hz to hrt interval via microseconds */
					unsigned ticks = 1000000 / arg;

					/* check against maximum sane rate */
					if (ticks < 1000)
						return -EINVAL;

					/* update interval for next measurement */
					/* XXX this is a bit shady, but no other way to adjust... */
					_call.period = _call_interval = ticks;

					/* if we need to start the poll state machine, do it */
					if (want_start)
						start();

					return OK;
				}
			}
		}

	case SENSORIOCGPOLLRATE:
		if (_call_interval == 0)
			return SENSOR_POLLRATE_MANUAL;

		return 1000000 / _call_interval;

	case SENSORIOCSQUEUEDEPTH: {
			/* account for sentinel in the ring */
			arg++;

			/* lower bound is mandatory, upper bound is a sanity check */
			if ((arg < 2) || (arg > 100))
				return -EINVAL;

			/* allocate new buffer */
			struct gyro_report *buf = new struct gyro_report[arg];

			if (nullptr == buf)
				return -ENOMEM;

			/* reset the measurement state machine with the new buffer, free the old */
			stop();
			delete[] _reports;
			_num_reports = arg;
			_reports = buf;
			start();

			return OK;
		}

	case SENSORIOCGQUEUEDEPTH:
		return _num_reports - 1;

	case SENSORIOCRESET:
		/* XXX implement */
		return -EINVAL;

	case GYROIOCSSAMPLERATE:
		return set_samplerate(arg);

	case GYROIOCGSAMPLERATE:
		return _current_rate;

	case GYROIOCSLOWPASS:
	case GYROIOCGLOWPASS:
		/* XXX not implemented due to wacky interaction with samplerate */
		return -EINVAL;

	case GYROIOCSSCALE:
		/* copy scale in */
		memcpy(&_gyro_scale, (struct gyro_scale *) arg, sizeof(_gyro_scale));
		return OK;

	case GYROIOCGSCALE:
		/* copy scale out */
		memcpy((struct gyro_scale *) arg, &_gyro_scale, sizeof(_gyro_scale));
		return OK;

	case GYROIOCSRANGE:
		return set_range(arg);

	case GYROIOCGRANGE:
		return _current_range;

	case GYROIOCSELFTEST:
		return self_test();

	default:
		/* give it to the superclass */
		return SPI::ioctl(filp, cmd, arg);
	}
}
Esempio n. 16
0
int IsgwOperBase::internal_process(QModeMsg& req, char* ack, int& ack_len)
{
    int ret =0;

    switch(req.get_cmd())
    {
    //框架测试指令1
    case CMD_TEST:
    {
        ACE_DEBUG((LM_INFO, "[%D] IsgwOperBase start to process CMD_TEST\n"));
        //调用业务处理逻辑类的相关接口处理请求
#ifdef ISGW_USE_IBC
        int max = 100;
        for(int i=0; i<max; i++)
        {
            char msg[100]="";
            snprintf(msg, sizeof(msg)
                     , "cmd=%d&uin=%u&total=%d&info=%d test|"
                     , req.get_cmd()
                     , req.get_uin()
                     , max
                     , i
                    );

            QModeMsg *new_req = new QModeMsg(msg, req.get_handle()
                                             , req.get_sock_seq(), req.get_msg_seq(), req.get_prot()
                                             , req.get_time(), req.get_sock_ip());

            if (IBCMgrSvc::instance()->putq(new_req) == -1)
            {
                //入队失败回收消息,避免内存泄漏
                delete new_req;
                new_req = NULL;
            }

        }
        //此处不返回消息
        ack_len = -1;
#else
        //memset(ack,'@',ack_len);
        snprintf(ack, ack_len-1, "%s", "info=in test process in test process in test process in test process in test process in test process");
        ack_len = atoi((*(req.get_map()))["ack_len"].c_str());
#endif
        //测试用 awayfang
        //sleep(100);
        ACE_DEBUG((LM_INFO, "[%D] IsgwOperBase process CMD_TEST succ\n"));
    }
    break;
    case CMD_SELF_TEST:
    {
        QMSG_MAP& req_map = *req.get_map();
        int testlevel = 0;
        if(req_map.count("testlevel"))
        {
            testlevel = atoi(req_map["testlevel"].c_str());
        }
        int overproctime = 0;
        std::string errmsg;

        struct timeval start, end;
        ::gettimeofday(&start, NULL);
        ret = self_test(testlevel, errmsg);
        ::gettimeofday(&end, NULL);
        unsigned diff = EASY_UTIL::get_span(&start, &end);

        int self_test_time_threshold = 500;
        SysConf::instance()->get_conf_int("system", "self_test_time_threshold", &self_test_time_threshold);
        overproctime = static_cast<int>(diff) - self_test_time_threshold;
        // ret值不为0, overproctime>0均引起告警
        snprintf(ack, MAX_INNER_MSG_LEN, "overproctime=%d&errmsg=%s", overproctime, errmsg.c_str());
        return ret;
    }
    break;
    case CMD_GET_SERVER_VERSION:
    {
        snprintf(ack, MAX_INNER_MSG_LEN, "ver=%s", SERVER_VERSION);
        return ret;
    }
    break;
    case CMD_SYS_LOAD_CONF:
        ISGWSighdl::instance()->handle_signal(SIGUSR1);
        break;
    case CMD_SYS_GET_CONTRL_STAT:
    {
        ACE_DEBUG((LM_INFO, "[%D] IsgwOperBase start to process CMD_SYS_GET_CONTRL_STAT\n"));
        int cmd_no = atoi((*(req.get_map()))["cmd_no"].c_str());
        ISGWMgrSvc::freq_obj_->get_statiscs(cmd_no, ack, ack_len);
    }
    break;
    case CMD_SYS_SET_CONTRL_STAT:
    {
        int cmd_no = atoi((*(req.get_map()))["cmd_no"].c_str());
        int status = atoi((*(req.get_map()))["status"].c_str());
        ISGWMgrSvc::freq_obj_->set_status(cmd_no, status);
        snprintf(ack, ack_len, "info=succ");
    }
    break;
    case CMD_SYS_SET_CONTRL_SWITCH:
    {
        //运行时设置流量控制功能的开关
        //0 关闭,1打开,2只查询开关状态
        int flag = atoi((*(req.get_map()))["switch"].c_str());
        if(0==flag)
        {
            ISGWMgrSvc::control_flag_ = 0;
        }
        else if(1==flag)
        {
            ISGWMgrSvc::control_flag_ = 1;
        }

        snprintf(ack, ack_len, "switch=%d&info=succ", ISGWMgrSvc::control_flag_);
    }
    break;
    }

    return 0;
}
Esempio n. 17
0
// Process command line options and arguments
static int
parse_opt (int key, char *arg, struct argp_state *state)
{
        int *arg_count = state->input;

        switch (key)
        {
                case 't': //Run the self test suite
                {
                        self_test();
                        exit(0);
                }
                case 'p': //Print the generated tree
                {
                        opt_print_tree = 1;
                        break;
                }
                case 'l': //Find Longest Common Substring (LCS)
                {
                        opt_lcs = 1;
                        break;
                }
                case 'a': //Find Longest Common Substring (LCS)
                {
                        opt_acs = 1;
                        break;
                }
                case ARGP_KEY_ARG: //Process the command line arguments
                {
                        (*arg_count)--;
                        if (*arg_count == 3){
                                input_text = (unsigned char*)arg;
                        }
                        else if (*arg_count == 2){
                                input_text2 = (unsigned char*)arg;
                        }

                }
                break;
                case ARGP_KEY_END:
                {
                        printf ("\n");
                        if (*arg_count >= 4){
                                argp_failure (state, 1, 0, "too few arguments");
                        }
                        else if (*arg_count < 0){
                                argp_failure (state, 1, 0, "too many arguments");
                        }
                        else {
                                if (opt_print_tree){
                                        // Construct the tree and process based on supplied options
                                        buildSuffixTree(input_text, input_text2, opt_print_tree);
                                        freeSuffixTreeByPostOrder(root);
                                        printf(tree_string, 's');
                                }
                                if (opt_lcs){
                                        char *lcs;
                                        if(!input_text2){
                                                argp_failure (state, 1, 0, "missing comparison string");
                                        }
                                        printf("Longest Common Substring in %s and %s is: ",
                                               input_text,
                                               input_text2);
                                        lcs = getLongestCommonSubstring(input_text,
                                                                        input_text2,
                                                                        opt_print_tree);

                                        printf(lcs, 's');

                                }
                                if (opt_acs){
                                        char *acs;
                                        if(!input_text2){
                                                argp_failure (state, 1, 0, "missing comparison string");
                                        }
                                        printf("All Common Substrings in %s and %s are: ",
                                               input_text,
                                               input_text2);
                                        acs = getAllCommonSubstrings(input_text,
                                                                     input_text2,
                                                                     opt_print_tree);

                                        printf(acs, 's');

                                }
                        }
                }
                break;
        }
        return 0;
}
int
IIS328DQ::ioctl(struct file *filp, int cmd, unsigned long arg)
{
	switch (cmd) {

	case SENSORIOCSPOLLRATE: {
			switch (arg) {

				/* switching to manual polling */
			case SENSOR_POLLRATE_MANUAL:
				stop();
				_call_interval = 0;
				return OK;

				/* external signalling not supported */
			case SENSOR_POLLRATE_EXTERNAL:

				/* zero would be bad */
			case 0:
				return -EINVAL;

				/* set default/max polling rate */
			case SENSOR_POLLRATE_MAX:
			case SENSOR_POLLRATE_DEFAULT:
				return ioctl(filp, SENSORIOCSPOLLRATE, IIS328DQ_DEFAULT_RATE);

				/* adjust to a legal polling interval in Hz */
			default: {
					/* do we need to start internal polling? */
					bool want_start = (_call_interval == 0);

					/* convert hz to hrt interval via microseconds */
					unsigned ticks = 1000000 / arg;

					/* check against maximum sane rate */
					if (ticks < 1000)
						return -EINVAL;

					/* update interval for next measurement */
					/* XXX this is a bit shady, but no other way to adjust... */
					_call_interval = ticks;

					/* adjust filters */
					float cutoff_freq_hz = _accel_filter_x.get_cutoff_freq();
					float sample_rate = 1.0e6f/ticks;
					set_driver_lowpass_filter(sample_rate, cutoff_freq_hz);

					/* if we need to start the poll state machine, do it */
					if (want_start)
						start();

					return OK;
				}
			}
		}

	case SENSORIOCGPOLLRATE:
		if (_call_interval == 0)
			return SENSOR_POLLRATE_MANUAL;

		return 1000000 / _call_interval;

	case SENSORIOCSQUEUEDEPTH: {
		/* lower bound is mandatory, upper bound is a sanity check */
		if ((arg < 1) || (arg > 100))
			return -EINVAL;

		irqstate_t flags = irqsave();
		if (!ringbuf_resize(_reports, arg)) {
			irqrestore(flags);
			return -ENOMEM;
		}
		irqrestore(flags);

		return OK;
	}

	case SENSORIOCGQUEUEDEPTH:
		return ringbuf_size(_reports);

	case SENSORIOCRESET:
		reset();
		return OK;

	case ACCELIOCSSAMPLERATE:
		return set_samplerate(arg, _accel_onchip_filter_bandwidth);

	case ACCELIOCGSAMPLERATE:
		return _accel_samplerate;

	case ACCELIOCSLOWPASS: {
		// set the software lowpass cut-off in Hz
		float cutoff_freq_hz = arg;
		float sample_rate = 1.0e6f / _call_interval;
		set_driver_lowpass_filter(sample_rate, cutoff_freq_hz);

		return OK;
	}

	case ACCELIOCGLOWPASS:
		return static_cast<int>(_accel_filter_x.get_cutoff_freq());

	case ACCELIOCSSCALE:
		/* copy scale in */
		memcpy(&_accel_scale, (struct accel_scale *) arg, sizeof(_accel_scale));
		return OK;

	case ACCELIOCGSCALE:
		/* copy scale out */
		memcpy((struct accel_scale *) arg, &_accel_scale, sizeof(_accel_scale));
		return OK;

	case ACCELIOCSRANGE:
		/* arg should be in dps accel	*/
		return set_range(arg);

	case ACCELIOCGRANGE:
		/* convert to m/s^2 and return rounded in G */
		return (unsigned long)((_accel_range_m_s2)/IIS328DQ_ONE_G + 0.5f);

	case ACCELIOCSELFTEST:
		return self_test();

	case ACCELIOCSHWLOWPASS:
		return set_samplerate(_accel_samplerate, arg);

	case ACCELIOCGHWLOWPASS:
		return _accel_onchip_filter_bandwidth;//set_samplerate函数中赋值

	default:
		/* give it to the superclass */
		return CDev::ioctl(filp, cmd, arg);
	}
}
Esempio n. 19
0
void config_read(void)
{
	uint8_t choice=0;
	
	if(read_from_EEPROM(1) != 48)
	{
		while(1)
		{
			choice = uart_getchar();
			putchar('\n');
			putchar('\r');
			
			if(choice=='1')
			{
				while(!(UCSR0A & (1 << RXC0)))print_adxl345();
				config_menu();
			}
			else if(choice=='2')
			{
				while(!(UCSR0A & (1 << RXC0)))
				{
					print_hmc5883();
					delay_ms(100);//at least 100ms interval between measurements
				}
				config_menu();
			}
			else if(choice=='3')
			{
				while(!(UCSR0A & (1 << RXC0)))print_itg3200();
				config_menu();
			}
			else if(choice=='4')
			{
				while(!(UCSR0A & (1 << RXC0)))raw();
				config_menu();
			}
			else if(choice=='5')
			{
				baud_menu();
				config_menu();
			}
			else if(choice==0x10) //if ctrl-p
			{
				self_test();
			}
			else if(choice==0x1A) //if ctrl-z
			{
				write_to_EEPROM(1,48);
				auto_raw();
			}
			else if(choice==0x3F) //if ?
			{
				help();
				while(!(UCSR0A & (1 << RXC0)));
				config_menu();
			}
			else if(choice==0xFF) config_read();
		}
	}else auto_raw();

}
Esempio n. 20
0
/*============================================================================
 *
 * main() BEGINS HERE
 *
 *===========================================================================*/
int
main(int argc, char *argv[])
{
    val_context_t  *context = NULL;

    // Parse the command line for a query and resolve+validate it
    int             c;
    char           *domain_name = NULL;
    const char     *args = "c:dF:hi:I:l:m:nw:o:pr:S:st:T:v:V";
    int            class_h = ns_c_in;
    int            type_h = ns_t_a;
    int             success = 0;
    int             doprint = 0;
    int             selftest = 0;
    int             num_threads = 0;
    int             max_in_flight = 1;
    int             daemon = 0;
    //u_int32_t       flags = VAL_QUERY_AC_DETAIL|VAL_QUERY_NO_EDNS0_FALLBACK|VAL_QUERY_SKIP_CACHE;
    u_int32_t       flags = VAL_QUERY_AC_DETAIL;
    u_int32_t       nodnssec_flag = 0;
    int             retvals[] = { 0 };
    int             tcs = 0, tce = -1;
    int             wait = 0;
    char           *label_str = NULL, *nextarg = NULL;
    char           *suite = NULL, *testcase_config = NULL;
    val_log_t      *logp;
    int             rc;

    if (argc == 1)
        return 0;

    while (1) {
#ifdef HAVE_GETOPT_LONG
        int             opt_index = 0;
#ifdef HAVE_GETOPT_LONG_ONLY
        c = getopt_long_only(argc, argv, args, prog_options, &opt_index);
#else
        c = getopt_long(argc, argv, args, prog_options, &opt_index);
#endif
#else                           /* only have getopt */
        c = getopt(argc, argv, args);
#endif

        if (c == -1) {
            break;
        }

        switch (c) {
        case 'h':
            usage(argv[0]);
            return (-1);

        case 'F':
            testcase_config = optarg;
            break;

        case 'd':
            daemon = 1;
            break;

        case 's':
            selftest = 1;
            if (NULL != suite) {
                fprintf(stderr,
                        "Warning: -s runs all tests.\n"
                        "         ignoring previous suite(s).\n");
                suite = NULL; /* == all suites */
            }
            break;

        case 'S':
            if (selftest) {
                if (NULL == suite)
                    fprintf(stderr,
                            "Warning: -s runs all tests.\n"
                            "         ignoring specified suite.\n");
                else {
                    fprintf(stderr,
                            "Warning: -S may only be specified once.\n"
                            "         ignoring previous suite.\n");
                    suite = optarg;
                }
            }
            else {
                selftest = 1;
                suite = optarg;
            }
            break;

        case 'p':
            doprint = 1;
            break;

        case 'n':
            nodnssec_flag = 1;
            break;

        case 'c':
            // optarg is a global variable.  See man page for getopt_long(3).
            class_h = res_nametoclass(optarg, &success);
            if (!success) {
                fprintf(stderr, "Cannot parse class %s\n", optarg);
                usage(argv[0]);
                return -1;
            }
            break;

        case 'o':
            logp = val_log_add_optarg(optarg, 1);
            if (NULL == logp) { /* err msg already logged */
                usage(argv[0]);
                return -1;
            }
            break;


        case 'I':
#ifndef VAL_NO_ASYNC
            max_in_flight = strtol(optarg, &nextarg, 10);
#else
            fprintf(stderr, "libval was built without asynchronous support\n");
            fprintf(stderr, "ignoring -I parameter\n");
#endif /* ndef VAL_NO_ASYNC */
            break;

        case 'm':
            num_threads = atoi(optarg);
            break;

        case 'v':
            dnsval_conf_set(optarg);
            break;

        case 'i':
            root_hints_set(optarg);
            break;

        case 'r':
            resolv_conf_set(optarg);
            break;

        case 'w':
            wait = strtol(optarg, &nextarg, 10);
            break; 

        case 't':
            type_h = res_nametotype(optarg, &success);
            if (!success) {
                fprintf(stderr, "Cannot parse type %s\n", optarg);
                usage(argv[0]);
                return -1;
            }
            break;

        case 'T':
            tcs = strtol(optarg, &nextarg, 10);
            if (*nextarg == '\0')
                tce = tcs;
            else
                tce = atoi(++nextarg);
            break;

        case 'l':
            label_str = optarg;
            break;

        case 'V':
            version();
            return 0;

        default:
            fprintf(stderr, "Unknown option %s (c = %d [%c])\n",
                    argv[optind - 1], c, (char) c);
            usage(argv[0]);
            return -1;

        }                       // end switch
    }

    if (daemon) {
        endless_loop();
        return 0;
    }

#ifndef TEST_NULL_CTX_CREATION
    if (VAL_NO_ERROR !=
        (rc = val_create_context(label_str, &context))) {
        fprintf(stderr, "Cannot create context: %d\n", rc);
        return -1;
    }
#else
    context = NULL;
#endif

    /* returned level is 0 based;, > 6 means 7 or higher; e.g. -o 7:stdout */
    if (val_log_highest_debug_level() > 6)
        res_set_debug_level(val_log_highest_debug_level());

    rc = 0;

    if (nodnssec_flag) {
        val_context_setqflags(context, VAL_CTX_FLAG_SET,
                              VAL_QUERY_DONT_VALIDATE);
    }

    // optind is a global variable.  See man page for getopt_long(3)
    if (optind >= argc) {
        if (!selftest && (tcs == -1)) {
            fprintf(stderr, "Please specify domain name\n");
            usage(argv[0]);
            rc = -1;
            goto done;
        } else {

#ifndef VAL_NO_THREADS
            if (num_threads > 0) {
                struct thread_params_st 
                    threadparams = {context, tcs, tce, flags, testcase_config,
                                    suite, doprint, wait, max_in_flight};

                do_threads(num_threads, &threadparams);
                fprintf(stderr, "Parent exiting\n");
            } else {
#endif /* VAL_NO_THREADS */
                do { /* endless loop */ 
                    rc = self_test(context, tcs, tce, flags, testcase_config,
                                   suite, doprint, max_in_flight);
                    if (wait)
                        sleep(wait);
                } while (wait && !rc);
#ifndef VAL_NO_THREADS
            }
#endif /* VAL_NO_THREADS */
        }

        goto done;
    }

    domain_name = argv[optind++];

#ifndef VAL_NO_THREADS
    if (num_threads > 0) {
        struct thread_params_st 
            threadparams = {context, tcs, tce, flags, testcase_config,
                            suite, doprint, wait, max_in_flight};

        do_threads(num_threads, &threadparams);
    } else {
#endif /* VAL_NO_THREADS */
        do { /* endless loop */
            rc = one_test(context, domain_name, class_h, type_h, flags, retvals,
                     doprint);

            if (wait)
                sleep(wait);
        } while (wait);

#ifndef VAL_NO_THREADS
    }
#endif /* VAL_NO_THREADS */

done:
    if (context)
        val_free_context(context);
    val_free_validator_state();

    return rc;
}
Esempio n. 21
0
int
MPU9250_mag::ioctl(struct file *filp, int cmd, unsigned long arg)
{
	switch (cmd) {

	case SENSORIOCRESET:
		/*
		 * TODO: we could implement a reset of the AK8963 registers
		 */
		//return reset();
		return _parent->ioctl(filp, cmd, arg);

	case SENSORIOCSPOLLRATE: {
			switch (arg) {

			/* switching to manual polling */
			case SENSOR_POLLRATE_MANUAL:
				/*
				 * TODO: investigate being able to stop
				 *       the continuous sampling
				 */
				//stop();
				return OK;

			/* external signalling not supported */
			case SENSOR_POLLRATE_EXTERNAL:

			/* zero would be bad */
			case 0:
				return -EINVAL;

			/* set default/max polling rate */
			case SENSOR_POLLRATE_MAX:
				return ioctl(filp, SENSORIOCSPOLLRATE, 100);

			case SENSOR_POLLRATE_DEFAULT:
				return ioctl(filp, SENSORIOCSPOLLRATE, MPU9250_AK8963_SAMPLE_RATE);

			/* adjust to a legal polling interval in Hz */
			default: {
					if (MPU9250_AK8963_SAMPLE_RATE != arg) {
						return -EINVAL;
					}

					return OK;
				}
			}
		}

	case SENSORIOCGPOLLRATE:
		return MPU9250_AK8963_SAMPLE_RATE;

	case SENSORIOCSQUEUEDEPTH: {
			/* lower bound is mandatory, upper bound is a sanity check */
			if ((arg < 1) || (arg > 100)) {
				return -EINVAL;
			}

			irqstate_t flags = px4_enter_critical_section();

			if (!_mag_reports->resize(arg)) {
				px4_leave_critical_section(flags);
				return -ENOMEM;
			}

			px4_leave_critical_section(flags);

			return OK;
		}

	case SENSORIOCGQUEUEDEPTH:
		return _mag_reports->size();

	case MAGIOCGSAMPLERATE:
		return MPU9250_AK8963_SAMPLE_RATE;

	case MAGIOCSSAMPLERATE:

		/*
		 * We don't currently support any means of changing
		 * the sampling rate of the mag
		 */
		if (MPU9250_AK8963_SAMPLE_RATE != arg) {
			return -EINVAL;
		}

		return OK;

	case MAGIOCSSCALE:
		/* copy scale in */
		memcpy(&_mag_scale, (struct mag_scale *) arg, sizeof(_mag_scale));
		return OK;

	case MAGIOCGSCALE:
		/* copy scale out */
		memcpy((struct mag_scale *) arg, &_mag_scale, sizeof(_mag_scale));
		return OK;

	case MAGIOCSRANGE:
		return -EINVAL;

	case MAGIOCGRANGE:
		return 48; // fixed full scale measurement range of +/- 4800 uT == 48 Gauss

	case MAGIOCSELFTEST:
		return self_test();

#ifdef MAGIOCSHWLOWPASS

	case MAGIOCSHWLOWPASS:
		return -EINVAL;
#endif

#ifdef MAGIOCGHWLOWPASS

	case MAGIOCGHWLOWPASS:
		return -EINVAL;
#endif

	default:
		return (int)CDev::ioctl(filp, cmd, arg);
	}
}
Esempio n. 22
0
int main(void) 
{
    self_test("../../gcode/test/input");
    return 0;
}