int main(int argc, char* argv[])
{

	print_title("BBN APS2 Enumerate Utility");

	set_logging_level(logDEBUG1);

	//First get the number of devices we can see
	unsigned numDevices = 0;
	get_numDevices(&numDevices);
	cout << concol::CYAN << numDevices << " APS device" << (numDevices > 1 ? "s": "")	<< " found" << concol::RESET << endl;
	cout << endl;

	//If we don't see anything bail
	if (numDevices < 1) return 0;

	//Get IP strings and firmware versions
	const char ** serialBuffer = new const char*[numDevices];
	get_device_IPs(serialBuffer);

	for (unsigned ct=0; ct < numDevices; ct++) {
		APS2_STATUS status;
		status = connect_APS(serialBuffer[ct]);
		if (status != APS2_OK) {
			cout << concol::RED << "Failed to connect to " << serialBuffer[ct] << concol::RESET << endl;
			continue;
		}

		char version_string[64];
		get_firmware_version(serialBuffer[ct], nullptr, nullptr, nullptr, version_string);
		double uptime{0};
		get_uptime(serialBuffer[ct], &uptime);
		std::chrono::duration<float> uptime_seconds(uptime);
		auto uptime_days = std::chrono::duration_cast<std::chrono::duration<int, std::ratio<24*3600>>>(uptime_seconds);

		std::ostringstream uptime_pretty;
		if (uptime_days.count()) {
			uptime_pretty << uptime_days.count() << " day" << (uptime_days.count() > 1 ? "s " : " ");
		}
		uptime_seconds -= uptime_days;
		auto uptime_hours = std::chrono::duration_cast<std::chrono::hours>(uptime_seconds);
		uptime_pretty << std::setfill('0') << std::setw(2) << uptime_hours.count() << ":";
		uptime_seconds -= uptime_hours;
		auto uptime_minutes = std::chrono::duration_cast<std::chrono::minutes>(uptime_seconds);
		uptime_pretty << std::setfill('0') << std::setw(2) << uptime_minutes.count() << ":";
		uptime_seconds -= uptime_minutes;
		uptime_pretty << std::fixed << std::setprecision(3) << uptime_seconds.count();

		cout << concol::CYAN << "Device " << ct << " at IPv4 address " << serialBuffer[ct] <<
		" running firmware version " << version_string <<
		" has been up " << uptime_pretty.str() << concol::RESET << endl;
		disconnect_APS(serialBuffer[ct]);
	}
	cout << endl;

	return 0;
}
示例#2
0
void read_write_register(void)
{
	unsigned char i;

	if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
	{
		if(bD13flags.bits.verbose)
		{
			printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
				ControlData.DeviceRequest.wValue,
				ControlData.DeviceRequest.wLength,
				ControlData.DeviceRequest.wIndex);
		}

		if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
			ControlData.DeviceRequest.wValue == 0 &&
			ControlData.DeviceRequest.wLength == 1)
			{
				get_firmware_version();
			}
		else
		{
			Chap9_StallEP0();
			printf("stall: get firmware version\n");
		}

	}
	else
	{
		if(bD13flags.bits.verbose)
		{

			printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
				ControlData.DeviceRequest.wValue,
				ControlData.DeviceRequest.wLength,
				ControlData.DeviceRequest.wIndex);

			printf("Data: ");
			for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
				printf("0x%x, ", *((ControlData.dataBuffer)+i));
			printf("\n");
		}

		if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
			ControlData.DeviceRequest.wValue == 0 &&
			ControlData.DeviceRequest.wLength == 6)
			{
				RaiseIRQL();
				setup_dma_request();
				LowerIRQL();
			}

	}
}
示例#3
0
int
BlinkM::probe()
{
	uint8_t version[2];
	int ret;

	ret = get_firmware_version(version);

	if (ret == OK)
		log("found BlinkM firmware version %c%c", version[1], version[0]);

	return ret;
}
示例#4
0
文件: arc.c 项目: mdrone/TR15Badge
void loop_clone_rfid(uint8_t *menu, uint8_t *opmode)
{
    uint8_t data[80];
    uint8_t keyindex = 0;
    uint8_t block = 0;
    uint8_t tries = 0;
    int res, oid;

	get_firmware_version();

    while (block < BLOCKS) {
        if ( READ != *menu) { break; }
        res = mifare_reader_init(data, sizeof(data));

        if (tries >= KEYS) {
            tries = 0;
            block += 1;
        }

        if (res >= 0) {
            res = initiator_init(data, sizeof(data));

            if (res >= 11) {
                if (0x00 == data[3] && data[6] >= 0x04) {
                    memcpy(&oid, &data[7], sizeof(oid));
                    if (0x00 == block) {
                        debug_printf("MIFARE_CARD_ID:");
                        rfid_hexdump(&oid, sizeof(oid));
                    }

                    set_uid(data, oid);
                    set_key(data, keyindex);

                    res = mifare_authenticate_block(data, sizeof(data), block);

/*
                    debug_printf("res:");
                    rfid_hexdump(&res, sizeof(res));

                    debug_printf("data:");
                    rfid_hexdump(&data[0], sizeof(data));
*/

                    if (0x41 == data[0] && 0x00 == data[1]) {
                        debug_printf("Auth Succeeded.\n");
                        tries = 0;

                        switch (*opmode) {
                            case READ:
                                res = mifare_read_block(data, sizeof(data), block);

                                if (res == 18) {
                                    debug_printf("Block:");
                                    rfid_hexdump(&block, sizeof(block));
                                    debug_printf("Data:");
                                    rfid_hexdump(&data[2], BLOCK_SIZE);
                                    debug_printf("Key:");
                                    rfid_hexdump(&default_keys[keyindex], MIFARE_KEY_SIZE);

                                    memcpy(&mifare_card[block*BLOCK_SIZE], &data[2], BLOCK_SIZE);
                                    if (0x00 == (block+1) % 4) {
                                        memcpy(&mifare_card[block*BLOCK_SIZE], &default_keys[keyindex], MIFARE_KEY_SIZE);
                                        memcpy(&mifare_card[block*BLOCK_SIZE+6], &access_bytes[0], ACCESS_BYTES);
                                        memcpy(&mifare_card[block*BLOCK_SIZE+10], &key_b[0], MIFARE_KEY_SIZE);
                                    }
                                }
                            break;
                            case WRITE:
                                memcpy(&data[4], &mifare_card[block*BLOCK_SIZE], BLOCK_SIZE);
                                res = mifare_write_block(data, sizeof(data), block);
                                debug_printf("res:");
                                rfid_hexdump(&res, sizeof(res));
                            break;
                        }
                        block += 1;
                    } else if (0x41 == data[0] && 0x14 == data[1]) {
                        debug_printf("Auth Failed.\n");
                        keyindex = (keyindex + 1) % KEYS;
                        tries += 1;
                    }
                }
            }
        } else {
            turn_rf_off(data, sizeof(data));
        }
    }
    *menu = LIBNFC;
}
示例#5
0
int frizz_ioctl_sensor(struct file_id_node *node, unsigned int cmd, unsigned long arg) {

    int sensor_id;
    int status = 0;
    packet_t packet;
    int period_ms;

    sensor_enable_t sensor_enable = { 0 };
    sensor_delay_t sensor_delay = { 0 };
    pedometer_counter_t pedo_counter = { 0 };
    batch_t batch = { 0 };

    packet.header.prefix = 0xFF;
    packet.header.type = 0x81;
    packet.header.sen_id = HUB_MGR_ID;

    switch (cmd) {

    case FRIZZ_IOCTL_SENSOR_SET_ENABLE:

        status = copy_from_user_sensor_enable_t(cmd, (void*) arg,
                &sensor_enable);

        sensor_id = convert_code_to_id(sensor_enable.code);

        packet.header.num = 1;

        switch (sensor_enable.flag) {
        case 0:
            packet.data[0] = HUB_MGR_GEN_CMD_CODE(HUB_MGR_CMD_DEACTIVATE_SENSOR,
                    sensor_id, 0x00, 0x00);
            break;
        case 1:
            packet.data[0] = set_sensor_active(sensor_id);
            break;
        }

        DEBUG_PRINT("SENSOR_SET_ENABLE %x %d \n", packet.data[0], sensor_id);

        status = create_frizz_workqueue((void*) &packet);
        //if is the pedometer sensor shutdown, clean the data in the firmware
        if((sensor_enable.code == SENSOR_TYPE_STEP_COUNTER) && (sensor_enable.flag == 0)) {
			pedo_onoff = 0;
        } else if((sensor_enable.code == SENSOR_TYPE_STEP_COUNTER) && (sensor_enable.flag == 1)){
			pedo_onoff = 1;
		}
		if(sensor_enable.code == SENSOR_TYPE_GESTURE) {
			if(sensor_enable.flag == 1) {
				gesture_on = 1;
			}else if(sensor_enable.flag == 0) {
				gesture_on = 0;
			}
		}
		//if close the gsensor, set the Gsensor_min_delay to default
		if(sensor_enable.code == SENSOR_TYPE_ACCELEROMETER && sensor_enable.flag == 0) {
			Gsensor_min_delay = 10000;
		}

		if(sensor_enable.code == SENSOR_TYPE_ACCEL_FALL_DOWN || sensor_enable.code == SENSOR_TYPE_ACCEL_POS_DET) {
			set_fall_parameter();
		}

        break;

    case FRIZZ_IOCTL_SENSOR_SET_DELAY:

        copy_from_user_sensor_delay_t(cmd, (void*) arg, &sensor_delay);
        sensor_id = convert_code_to_id(sensor_delay.code);

        packet.header.num = 2;

        packet.data[0] = HUB_MGR_GEN_CMD_CODE(HUB_MGR_CMD_SET_SENSOR_INTERVAL,
                sensor_id, 0x00, 0x00);
        packet.data[1] = sensor_delay.ms;
		if(sensor_delay.code == SENSOR_TYPE_ACCELEROMETER) {
			if(sensor_delay.ms < Gsensor_min_delay) {
				packet.data[1] = sensor_delay.ms;
				Gsensor_min_delay = sensor_delay.ms;
			} else {
				break;
			}
		}

        DEBUG_PRINT("SENSOR_SET_DELAY %d %x\n", sensor_id, packet.data[0]);

        status = create_frizz_workqueue((void*) &packet);

        break;

    case FRIZZ_IOCTL_SENSOR_GET_ENABLE:
        get_sensor_enable(cmd, (void*) arg);
        break;

    case FRIZZ_IOCTL_SENSOR_GET_DELAY:
        get_sensor_delay(cmd, (void*) arg);
        break;

    case FRIZZ_IOCTL_SENSOR_GET_DATA:
        get_sensor_data(node, cmd, (void*) arg);
        break;

    case FRIZZ_IOCTL_SENSOR_SIMULATE_TIMEOUT:
        simulate_timeout(cmd, (void*) arg);
        break;

    case FRIZZ_IOCTL_SENSOR_SET_BATCH:
        copy_from_user_batch_t(cmd, (void*) arg, &batch);
        sensor_id = convert_code_to_id(batch.code);

        DEBUG_PRINT("FIFO_FULL_FLAG %d %d \n", batch.fifo_full_flag,
                batch.code);
        if (batch.fifo_full_flag == 1) {

            update_fifo_full_flag(batch.fifo_full_flag);
        }

        update_timeout(batch.timeout_ns);

        if (batch.period_ns < 1000000) {
            period_ms = 1;
            DEBUG_PRINT("1ms\n");
        } else {
            period_ms = div64_u64(batch.period_ns, 1000000);
            DEBUG_PRINT("period ms %d\n", period_ms);
        }
        DEBUG_PRINT("batch sensor id %d %d \n", sensor_id, period_ms);
        packet.header.num = 2;
        packet.data[0] = HUB_MGR_GEN_CMD_CODE(HUB_MGR_CMD_SET_SENSOR_INTERVAL,
                sensor_id, 0x00, 0x00);
        packet.data[1] = period_ms;

        status = create_frizz_workqueue((void*) &packet);

        packet.header.num = 1;

        if (batch.timeout_ns == 0) {
            packet.data[0] = HUB_MGR_GEN_CMD_CODE(HUB_MGR_CMD_DEACTIVATE_SENSOR,
                    sensor_id, 0x00, 0x00);
        } else {
            DEBUG_PRINT("enable batch\n");
            packet.data[0] = HUB_MGR_GEN_CMD_CODE(
                    HUB_MGR_CMD_SET_SENSOR_ACTIVATE, sensor_id, 0x01, 0x00);
        }

        status = create_frizz_workqueue((void*) &packet);
        break;

    case FRIZZ_IOCTL_SENSOR_FLUSH_FIFO:
		DEBUG_PRINT("FLUSH\n");
		break;
	case FRIZZ_IOCTL_GET_SENSOR_DATA_CHANGED:
		DEBUG_PRINT("GET data changed flag\n");
		get_sensor_data_changed(node, cmd, (void*) arg);
		break;
	case FRIZZ_IOCTL_GET_FIRMWARE_VERSION:
		DEBUG_PRINT("GET firmware_version");
		get_firmware_version(cmd, (void*) arg);
		break;
	case FRIZZ_IOCTL_SET_PEDO_COUNTER:
		copy_from_user_pedometer_counter_t(cmd, (void*)arg, &pedo_counter);

		if(pedo_counter.counter < 0) {
			kprint("Frizz pedo_counter EVALUE (%d)!!, ignore.",pedo_counter.counter);
			break;
		}
		set_pedo_interval(pedo_counter.counter);

		break;
	default:
		kprint("%s :NONE IOCTL SENSORxxx %x", __func__, cmd);
		return -1;
        break;
    }

    return status;
}