Esempio n. 1
0
int main(int argc, char *argv[]) {
	MumbleClient::CryptState cs;
//	cs.genKey();
	cs.setKey(rawkey, encrypt_iv, decrypt_iv);

	DumpBytes(cs.raw_key, AES_BLOCK_SIZE, "rawkey");
	DumpBytes(cs.encrypt_iv, AES_BLOCK_SIZE, "encrypt_iv");
	DumpBytes(cs.decrypt_iv, AES_BLOCK_SIZE, "decrypt_iv");

	unsigned char buf[19];
	cs.encrypt(msg, &buf[0], 15);

	DumpBytes(buf, 19, "crypted");
	DumpBytes(cs.encrypt_iv, AES_BLOCK_SIZE, "post_eiv");
}
Esempio n. 2
0
/**
 * AN495 - 5.7 - Transfer Status Response
 * Report Id: 0x16
 * Direction: Interrupt In
 * Parameters:
 *   Status 0 - Offset 1 - Size 1 - 0x00 = Idle, 0x01 = Busy, 0x02 = Complete, 0x03 = Complete with error
 *   Status 1 - Offset 2 - Size 1 - Specific conditions based on Status 0
 *   Status 2 - Offset 3 - Size 2 - Number of retries before completing, being cancelled, or timing out
 *   Status 3 - Offset 5 - Size 2 - Number of received bytes
 */
int HidCP2112_TransferStatusResponse(HID_SMBUS_DEVICE device, BYTE *status0, BYTE *status1, ushort *status2, ushort *status3) {
	BYTE data[7];
	int retries = 0;

	while (retries++ < 300) {
		if (GetNextIdFromBuffer(HID_SMBUS_REPORT_ID_TRANSFER_STATUS_RESP, data, sizeof(data))) {
			*status0 = data[1];
			*status1 = data[2];
			*status2 = data[3] << 8 | data[4];
			*status3 = data[5] << 8 | data[6];
		
			if (verbose) {
				DumpBytes(data, 7);
				printf("HID SMBus Transfer Status Response: ");
		 		printf("Status0: " BOLDBLUE "%s" RESET " Status1: " BOLDBLUE "%s" RESET " Status2 (retries): %u Status3 (bytes): %u\n", HidCP2112_Status0_Name(*status0), HidCP2112_Status1_Name(*status0, *status1), *status2, *status3);
		 	}

			return LIBUSB_SUCCESS;
		} else {
			usleep(10 * 1000); // 10ms
		}
	}
	
	fprintf(stderr, BOLDRED "HidCP2112_TransferStatusResponse: Error receiving interrupt report from buffer, timed out." RESET "\n");
	return LIBUSB_ERROR_INVALID_PARAM;
}
Esempio n. 3
0
/**
 * AN495 - 4.4 - Set GPIO Values
 * Report Id: 0x04
 * Direction: Feature Request Out
 * Parameters:
 *   Latch value - Offset 1 - Size 1 - Latch value
 *   Latch Mask  - Offset 2 - Size 1 - Pin to set to new latch value
 */
int HidCP2112_SetGpioValues(HID_SMBUS_DEVICE device, BYTE latchValue, BYTE latchMask) {
	int bytes_transferred;
	BYTE data[3];

	data[0] = HID_SMBUS_REPORT_ID_SET_GPIO;
	data[1] = latchValue;
	data[2] = latchMask;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_OUT,
			HID_SET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_SET_GPIO,
			INTERFACE,
			data,
			sizeof(data),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Set GPIO Values: ");
	 		printf("Latch value: %02X  Latch Mask: %02X\n", data[1], data[2]);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_SetGpioValues: Error setting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 4
0
/**
 * AN495 - 4.3 - Get GPIO Values
 * Report Id: 0x03
 * Direction: Feature Request In
 * Parameters:
 *   Latch Value - Offset 1 - Size 2 - Current latch values (Note: docs say 2 bytes but evidence shows its only 1 byte)
 */
int HidCP2112_GetGpioValues(HID_SMBUS_DEVICE device, BYTE *latchValue) {
	int bytes_transferred;
	BYTE data[2];
 	*latchValue = 0;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_IN,
			HID_GET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_GET_GPIO,
			INTERFACE,
			data,
			sizeof(data),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
	 	//*latchValue = (data[1] << 8) | data[2]; // docs say 2 bytes, leaving this here in case it turns out to be correct
		*latchValue = data[1];
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Get GPIO Values: ");
	 		printf("LatchValue: %02X\n", *latchValue);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_GetGpioValues: Error getting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 5
0
/**
 * AN495 - 5.8 - Cancel Transfer
 * Report Id: 0x17
 * Direction: Interrupt Out
 * Parameters:
 *   Cancel - Offset 1 - Size 1  - Value 0x01 - Will cancel the current transfer.  All other values are ignored.
 */
int HidCP2112_CancelTransfer(HID_SMBUS_DEVICE device) {
	int bytes_transferred, success;
	int i = 0;
	BYTE data[2];

	data[0] = HID_SMBUS_REPORT_ID_CANCEL_TRANSFER;
	data[1] = 0x01;

	pthread_mutex_lock(&syncRoot);

	success = libusb_interrupt_transfer(
			device,
			INTERRUPT_OUT_ENDPOINT,
			data,
			sizeof(data),
			&bytes_transferred,
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Cancel Transfer Request:\n");
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_CancelTransfer: Error sending interrupt report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 6
0
void DumpApRegs (void) {
	uint8_t buf[AP_REGFILESZ];
	memset (buf,0,sizeof(buf));
//	PUTZ_DEBUG_WAIT();
	AP_ReadBuffer(0, buf, AP_REGFILESZ);
	DumpBytes (buf, sizeof(buf), (const char*)"\r\nAudio Processor Registers:\r\n");
}
Esempio n. 7
0
/**
 * AN495 - 4.1 - Reset Device
 * Report Id: 0x01
 * Direction: Feature Request Out
 * Parameters:
 *   Reset Type - Offset 1 - Size 1 - Value 0x01
 */
int HidCP2112_Reset(HID_SMBUS_DEVICE device) {
	int bytes_transferred;
	BYTE data_in[2];

	data_in[0] = HID_SMBUS_REPORT_ID_RESET;
	data_in[1] = 0x02;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_OUT,
			HID_SET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_RESET,
			INTERFACE,
			data_in,
			sizeof(data_in),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred == -1) { // special case for reset, success is when the result is -1
		if (verbose) {
			DumpBytes(data_in, sizeof(data_in));
			printf("HID SMBus Reset Success.\n");
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_Reset: Error setting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 8
0
/**
 * AN495 - 5.4 - Data Read Response
 * Report Id: 0x13
 * Direction: Interrupt In
 * Parameters:
 *   Status - Offset 1 - Size 1  - 0x00 = Idle, 0x01 = Busy, 0x02 = Complete, 0x03 = Complete with error
 *   Length - Offset 2 - Size 1  - Number of valid data bytes
 *   Data   - Offset 3 - Size 61 - Data being returned from SMBus slave device
 */
int HidCP2112_DataReadResponse(HID_SMBUS_DEVICE device, BYTE *status, BYTE *length, BYTE *dataRead) {
	int bytes_transferred, success;
	int i = 0, retries = 0;
	BYTE data[64];
	
	while (retries++ < 300) {
		if (GetNextIdFromBuffer(HID_SMBUS_REPORT_ID_DATA_READ_RESP, data, sizeof(data))) {
			*status = data[1];
			*length = data[2];
		 	for (i = 0; i < *length; ++i)
		 		dataRead[i] = data[3+i];
			
			if (verbose) {
				DumpBytes(data, *length+3);
				printf("HID SMBus Data Read Response: ");
		 		printf("Bytes Transferred: %u Status: " BOLDBLUE "%s" RESET " Length: %u DataRead: ", bytes_transferred, HidCP2112_Status0_Name(*status), *length);
		 		for (i = 0; i < *length; ++i)
		 			printf("%02X ", dataRead[i]);
		 		printf("\n");
		 	}

		 	return LIBUSB_SUCCESS;
		} else {
			usleep(10 * 1000); // 10ms
		}
	}

	fprintf(stderr, BOLDRED "HidCP2112_DataReadResponse: Error receiving interrupt report, timed out. Bytes transferred: %d" RESET "\n", bytes_transferred);
	return bytes_transferred;
}
Esempio n. 9
0
/**
 * AN495 - 5.1 - Data Read Request
 * Report Id: 0x10
 * Direction: Interrupt Out
 * Parameters:
 *   Slave Address - Offset 1 - Size 1 - Must be between 0xF7-0x02. Least significant bit is r/w bit and must be zero.
 *   Length        - Offset 2 - Size 2 - Number of bytes (1-512 bytes) to read back.
 */
int HidCP2112_DataReadRequest(HID_SMBUS_DEVICE device, BYTE slaveAddress, ushort length) {
	int bytes_transferred, success;
	int i = 0;
	BYTE data[4];

	data[0] = HID_SMBUS_REPORT_ID_DATA_READ_REQ;
	data[1] = slaveAddress;
	data[2] = length >> 8;
	data[3] = length & 0xFF;

	pthread_mutex_lock(&syncRoot);

	success = libusb_interrupt_transfer(
			device,
			INTERRUPT_OUT_ENDPOINT,
			data,
			sizeof(data),
			&bytes_transferred,
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Data Read Request: ");
	 		printf("SlaveAddress: %02X Length: %u\n", slaveAddress, length);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_DataReadRequest: Error sending interrupt report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 10
0
void DumpableSource::Inspect_(std::ostream& os) const
{
    auto flags = os.flags();
    os << std::hex << "bin(";
    DumpBytes(os, GetFileName().generic_string());
    os << ", 0x" << GetOffset() << ", 0x" << GetSize() << ")";
    os.flags(flags);
}
Esempio n. 11
0
void DumpEEPROMBytesCommand(void) {
  int length = 32; // Default byte count to display
  ParseDumpParameters("dump EEPROM bytes", EepromSize(), &EBaddr, &length);

  u8 buf[length];
  DwReadEEPROM(EBaddr, length, buf);

  DumpBytes(EBaddr, length, buf);
  EBaddr += length;
}
Esempio n. 12
0
void DumpFlashBytesCommand(void) {
  int length = 128; // Default byte count to display
  ParseDumpParameters("dump flash bytes", FlashSize(), &FBaddr, &length);

  u8 buf[length];
  DwReadFlash(FBaddr, length, buf);

  DumpBytes(FBaddr, length, buf);
  FBaddr += length;
}
Esempio n. 13
0
/**
 * AN495 - 4.6 - Get SMBus Configuration
 * Report Id: 0x06
 * Direction: Feature Request In
 * Parameters:
 *   Clock Speed     - Offset 1  - Size 4 - Default Value 0x186A0 (100 KHz) - SMBus clock speed in Hz
 *   Device Address  - Offset 5  - Size 1 - Default 0x02   - Bits 7-1 make up device address (least significant bit is masked)
 *   Auto Send Read  - Offset 6  - Size 1 - Default 0x00   - Disabled / Enabled (0x01)
 *   Write Timeout   - Offset 7  - Size 2 - Default 0x0000 - No timeout - 0-1000ms timeout value
 *   Read Timeout    - Offset 9  - Size 2 - Default 0x0000 - No timeout - 0-1000ms timeout value
 *   SCL Low Timeout - Offset 11 - Size 1 - Default 0x00   - Disabled / Enabled (0x01)
 *   Retry Time      - Offset 12 - Size 2 - Default 0x0000 - No limit - 0-1000 retries
 */
int HidCP2112_GetSMBusConfig(HID_SMBUS_DEVICE device, uint32_t *clockSpeed, BYTE *deviceAddress, BYTE *autoSendRead, ushort *writeTimeout, ushort *readTimeout, BYTE *sclLowTimeout, ushort *retryTime) {
	int bytes_transferred;
	int i = 0;
	BYTE data[14];
 	*clockSpeed = 0;
 	*deviceAddress = 0;
 	*autoSendRead = 0;
 	*writeTimeout = 0;
 	*readTimeout = 0;
 	*sclLowTimeout = 0;
 	*retryTime = 0;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_IN,
			HID_GET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_SMBUS_CONFIG,
			INTERFACE,
			data,
			sizeof(data),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
	 	*clockSpeed    = data[1] << 24 | data[2] << 16 | data[3] << 8 | data[4];
	 	*deviceAddress = data[5];
	 	*autoSendRead  = data[6];
	 	*writeTimeout  = data[7] << 8 | data[8];
	 	*readTimeout   = data[9] << 8 | data[10];
	 	*sclLowTimeout = data[11];
	 	*retryTime     = data[12] << 8 | data[13];

		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Get SMBus Config: ");
	 		printf("ClockSpeed: %u DeviceAddress: %02X AutoSendRead: %02X WriteTimeout: %u ReadTimeout: %u SCL Low Timeout: %02X RetryTime: %u\n", *clockSpeed, *deviceAddress, *autoSendRead, *writeTimeout, *readTimeout, *sclLowTimeout, *retryTime);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_GetSMBusConfig: Error getting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 14
0
/**
 * AN495 - 4.2 - Get GPIO Configuration
 * Report Id: 0x02
 * Direction: Feature Request In
 * Parameters:
 *   Direction     - Offset 1 - Size 1 - Value 0=input 1=output
 *   Push-Pull     - Offset 2 - Size 1 - Value 0=open-drain 1=push-pull
 *   Special       - Offset 3 - Size 1 - Enables special functions of GPIO pins
 *   Clock Divider - Offset 4 - Size 1 - 0=48 MHz clock, other values output clock signal determined by equation
 */
int HidCP2112_GetGpioConfig(HID_SMBUS_DEVICE device, BYTE *direction, BYTE *pushPull, BYTE *special, BYTE *clockDivider) {
	int bytes_transferred;
	BYTE data_out[5];
 	*direction = 0;
 	*pushPull = 0;
 	*special = 0;
 	*clockDivider = 0;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_IN,
			HID_GET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_GPIO_CONFIG,
			INTERFACE,
			data_out,
			sizeof(data_out),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
	 	*direction    = data_out[1];
	 	*pushPull     = data_out[2];
	 	*special      = data_out[3];
	 	*clockDivider = data_out[4];

		if (verbose) {
			DumpBytes(data_out, sizeof(data_out));
			printf("HID SMBus Get GPIO Config: ");
	 		printf("Direction: %02X  Push-Pull: %02X  Special: %02X  ClockDivider: %02X\n", data_out[1], data_out[2], data_out[3], data_out[4]);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_GetGpioConfig: Error getting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 15
0
/**
 * AN495 - 5.5 - Data Write
 * Report Id: 0x14
 * Direction: Interrupt Out
 * Parameters:
 *   Slave Address - Offset 1 - Size 1  - Must be between 0xF7-0x02. Least significant bit is r/w bit and must be zero.
 *   Length        - Offset 2 - Size 1  - Number of valid data bytes
 *   Data          - Offset 3 - Size 61 - Data being returned from the SMBus slave device
 */
int HidCP2112_DataWrite(HID_SMBUS_DEVICE device, BYTE slaveAddress, BYTE length, BYTE *dataWrite) {
	int bytes_transferred, success;
	int i = 0;
	BYTE data[64];

	data[0] = HID_SMBUS_REPORT_ID_DATA_WRITE;
	data[1] = slaveAddress;
	data[2] = length;
	// copy data
	for (i = 0; i < length; ++i)
		data[3+i] = dataWrite[i];

	pthread_mutex_lock(&syncRoot);

	success = libusb_interrupt_transfer(
			device,
			INTERRUPT_OUT_ENDPOINT,
			data,
			sizeof(data),
			&bytes_transferred,
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, length+3);
			printf("HID SMBus Data Write: ");
	 		printf("SlaveAddress: %02X Length: %u DataWrite: ", slaveAddress, length);
	 		for (i = 0; i < length; ++i)
	 			printf("%02X ", dataWrite[i]);
	 		printf("\n");
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_DataWrite: Error sending interrupt report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 16
0
/**
 * AN495 - 5.3 - Data Read Force Send
 * Report Id: 0x12
 * Direction: Interrupt Out
 * Parameters:
 *   Length - Offset 1 - Size 2 - Number of valid data bytes
 */
int HidCP2112_DataReadForceSend(HID_SMBUS_DEVICE device, ushort length) {
	int bytes_transferred, success;
	int i = 0;
	BYTE data[3];

	data[0] = HID_SMBUS_REPORT_ID_DATA_READ_FORCE_SEND;
	data[1] = length >> 8;
	data[2] = length & 0xFF;

	//time_t lt = time(NULL);
	pthread_mutex_lock(&syncRoot);
	//int ltot = time(NULL) - lt;
	//printf("Took %ds to acquire lock.\n", ltot);
	
	//time_t t1 = time(NULL);
	success = libusb_interrupt_transfer(
			device,
			INTERRUPT_OUT_ENDPOINT,
			data,
			sizeof(data),
			&bytes_transferred,
			TIMEOUT_MS);

	//int tot = time(NULL) - t1;
	//printf("Took %ds to run.\n", tot);
	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Data Read Force Send: ");
	 		printf("Length: %u\n", length);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_DataReadForceSend: Error sending interrupt report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 17
0
/**
 * AN495 - 4.2 - Set GPIO Configuration
 * Report Id: 0x02
 * Direction: Feature Request Out
 * Parameters:
 *   Direction     - Offset 1 - Size 1 - Value 0=input 1=output
 *   Push-Pull     - Offset 2 - Size 1 - Value 0=open-drain 1=push-pull
 *   Special       - Offset 3 - Size 1 - Enables special functions of GPIO pins
 *   Clock Divider - Offset 4 - Size 1 - 0=48 MHz clock, other values output clock signal determined by equation
 */
int HidCP2112_SetGpioConfig(HID_SMBUS_DEVICE device, BYTE direction, BYTE pushPull, BYTE special, BYTE clockDivider) {
	int bytes_transferred;
	BYTE data[5];

	data[0] = HID_SMBUS_REPORT_ID_GPIO_CONFIG;
	data[1] = direction;
	data[2] = pushPull;
	data[3] = special;
	data[4] = clockDivider;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_OUT,
			HID_SET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_GPIO_CONFIG,
			INTERFACE,
			data,
			sizeof(data),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Set GPIO Config: ");
	 		printf("Direction: %02X  Push-Pull: %02X  Special: %02X  ClockDivider: %02X\n", data[1], data[2], data[3], data[4]);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_GetGpioConfig: Error setting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 18
0
/**
 * AN495 - 4.5 - Set GPIO Values
 * Report Id: 0x05
 * Direction: Feature Request In
 * Parameters:
 *   Part Number     - Offset 1 - Size 1 - Value 0x0C - Device Part Number
 *   Device Version  - Offset 2 - Size 1 - Value varies
 */
int HidCP2112_GetPartNumber(HID_SMBUS_DEVICE device, BYTE *partNumber, BYTE *version) {
	int bytes_transferred;
	int i = 0;
	BYTE data[3];
 	*partNumber = 0;
 	*version = 0;

	pthread_mutex_lock(&syncRoot);

	bytes_transferred = libusb_control_transfer(
			device,
			CONTROL_REQUEST_TYPE_IN,
			HID_GET_REPORT,
			(HID_REPORT_TYPE_FEATURE << 8) | HID_SMBUS_REPORT_ID_GET_VERSION,
			INTERFACE,
			data,
			sizeof(data),
			TIMEOUT_MS);

	pthread_mutex_unlock(&syncRoot);

	if (bytes_transferred > 0) {
	 	*partNumber = data[1];
	 	*version 	= data[2];

		if (verbose) {
			DumpBytes(data, sizeof(data));
			printf("HID SMBus Get Part Number: ");
	 		printf("Part Number: %02X  Version: %02X\n", data[1], data[2]);
	 	}
	} else {
		fprintf(stderr, BOLDRED "HidCP2112_GetPartNumber: Error getting feature report. Bytes transferred: %d" RESET "\n", bytes_transferred);
		return bytes_transferred;
	}

	return LIBUSB_SUCCESS;
}
Esempio n. 19
0
void Cl3::Inspect_(std::ostream& os) const
{
    os << "cl3(" << field_14 << ", files[\n";
    size_t i = 0;
    for (auto& e : entries)
    {
        os << "  [" << i++ << "] (";
        DumpBytes(os, e.name);
        os << ", " << e.field_200 << ", links[";
        bool first = true;
        for (auto& l : e.links)
        {
            if (!first) os << ", ";
            first = false;
            os << l;
        }
        os << "], ";
        if (e.src)
            e.src->Inspect(os);
        else
            os << "nil";
        os << ")\n";
    }
}
Esempio n. 20
0
void DumpTree(const cn_cbor * cbor, FILE * out, const FOO *pFOO, int depth, int fField, int fValue, int fInComment)
{
	int i;
	int i2;
	const cn_cbor * cbor2;
	const FOO * pFoo2;
	int group;

	if (pFOO != NULL) {
		switch (pFOO->type) {
		case CN_CBOR_TAG:
			if (cbor->type != CN_CBOR_TAG) pFOO = NULL;
			break;
		default:
			break;
		}
	}

	if (fField && (pFOO != NULL) && (pFOO->fieldName != NULL)) {
		if (fInComment) WrapPrintF(out, "\\ %s \\ ", pFOO -> fieldName);
		else WrapPrintF(out, "/ %s / ", pFOO->fieldName);
	}

	switch (cbor->type) {
	case CN_CBOR_TAG:
		WrapPrintF(out, "%u(\n", cbor->v.uint);
		Indent(out, depth + 1);
		DumpTree(cbor->last_child, out, pFOO != NULL ? pFOO->children : NULL, depth+1, true, true, fInComment);
		WrapPrintF(out, "\n");
		Indent(out, depth);
		WrapPrintF(out, ")");
		break;

	case CN_CBOR_ARRAY:
		WrapPrintF(out, "[");
		cbor2 = cbor->first_child;
		for (i = 0; i < cbor->length; i++, cbor2 = cbor2->next) {
			if (i != 0) WrapPrintF(out, ", ");
			if (pFOO == NULL) pFoo2 = NULL;
			else if (pFOO->count == 1) pFoo2 = pFOO->children;
			else if (i >= pFOO->count) pFoo2 = NULL;
			else pFoo2 = &pFOO->children[i];

			WrapPrintF(out, "\n");
			Indent(out, depth + 1);
			DumpTree(cbor2, out, pFoo2, depth + 1, true, true, fInComment);
		}
		if (i > 0) {
			WrapPrintF(out, "\n");
			Indent(out, depth);
		}
				WrapPrintF(out, "]");
		break;

	case CN_CBOR_MAP:
		WrapPrintF(out, "{");
		cbor2 = cbor->first_child;
		//  Determine the correct group - always assume it is at element UINT=1
		group = 0;
		for (i = 0; i < cbor->length; i+=2, cbor2 = cbor2->next->next) {
			if ((cbor2->type == CN_CBOR_UINT) && (cbor2->v.uint == 1)) {
				group = (int) cbor2->next->v.uint;
				break;
			}
		}

		cbor2 = cbor->first_child;
		//  Dump each element
		for (i = 0; i < cbor->length; i+=2, cbor2 = cbor2->next) {
			pFoo2 = NULL;
			if (pFOO != NULL) {
				//  Locate the right entry in foo
				for (i2 = 0, pFoo2 = pFOO->children; i2 < pFOO->count; pFoo2++, i2 += 1) {
					if (pFoo2->type != cbor2->type) continue;
					switch (cbor2->type) {
					case CN_CBOR_UINT:
						if ((group != 0) && (pFoo2->group != 0) && (pFoo2->group != group)) continue;
						if (pFoo2->value == (int) cbor2->v.uint) i2 = pFOO->count + 1;
						break;

					case CN_CBOR_INT:
						if ((group != 0) && (pFoo2->group != 0) && (pFoo2->group != group)) continue;
						if (pFoo2->value == cbor2->v.sint) i2 = pFOO->count + 1;
						break;

					default:
						//  Should assert here?
						break;
					}

					if (i2 == pFOO->count + 1) break;
				}
				if (i2 == pFOO->count) pFoo2 = NULL;
			}
			if (i != 0) WrapPrintF(out, ", ");
			WrapPrintF(out, "\n");
			Indent(out, depth + 1);
			DumpTree(cbor2, out, pFoo2, depth + 1, true, false, fInComment);
			WrapPrintF(out, ":");
			cbor2 = cbor2->next;
			DumpTree(cbor2, out, pFoo2, depth + 1, false, true, fInComment);
		}
		if (i > 0) {
			WrapPrintF(out, "\n");
			Indent(out, depth);
		}
			WrapPrintF(out, "}");
		break;

	case CN_CBOR_BYTES:
		DumpBytes(out, cbor);
		if ((pFOO != NULL) && (pFOO->children != NULL)) {
			const cn_cbor * cbor3 = cn_cbor_decode(cbor->v.bytes, cbor->length CBOR_CONTEXT_PARAM, NULL);
			if (cbor3 != NULL) {
				WrapPrintF(out, fInComment ? " \\ " : " / ");
				DumpTree(cbor3, out, pFOO->children, depth+1, true, true, true);
				WrapPrintF(out, fInComment ? " \\ " : " / ");
			}
		}
		break;

	case CN_CBOR_INT:
		WrapPrintF(out, "%d", cbor->v.sint);
		if (fValue && pFOO != NULL) {
			for (i = 0, pFoo2 = pFOO->children; i < pFOO->count; i++, pFoo2++) {
				if ((pFoo2->type == CN_CBOR_INT) && (pFoo2->value == cbor->v.sint)) {
					if (pFoo2->fieldName != NULL) {
						if (fInComment) WrapPrintF(out, " \\ %s \\", pFoo2->fieldName);
						else WrapPrintF(out, " / %s /", pFoo2->fieldName);
					}
					break;
				}
			}
		}
		break;

	case CN_CBOR_UINT:
		WrapPrintF(out, "%u", cbor->v.uint);
		if (fValue && (pFOO != NULL)) {
			for (i = 0, pFoo2 = pFOO->children; i < pFOO->count; i++, pFoo2++) {
				if ((pFoo2->type == CN_CBOR_UINT) && (pFoo2->value == (int) cbor->v.uint)) {
					if (pFoo2->fieldName != NULL) {
						if (fInComment) WrapPrintF(out, " \\ %s \\", pFoo2->fieldName);
						else WrapPrintF(out, " / %s /", pFoo2->fieldName);
					}
					break;
				}
			}
		}
		break;

	case CN_CBOR_TEXT:
		WrapPrintF(out, "\"");
		for (i = 0; i < cbor->length; i++) {
			if (fInComment && (cbor->v.str[i] == '/')) {
				WrapPrintF(out, "%c", cbor->v.str[i]);
			}
			WrapPrintF(out, "%c", cbor->v.str[i]);
		}
		WrapPrintF(out, "\"");
		break;

	case CN_CBOR_TRUE:
		WrapPrintF(out, "true");
		break;

	case CN_CBOR_FALSE:
		WrapPrintF(out, "false");
		break;

	default:
		WrapPrintF(out, "##");
		break;
	}
}