/* *set cmd len is 8 *set sendbuf len is 64 * */ int put_device_package(unsigned char *sendbuf) { hid_return ret; ret = hid_interrupt_write(hid, 4, sendbuf, 64, 1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_close failed with return code %d\n", ret); return -1; } return 0; }
void Set_Attenuation (float AttValue,HIDInterface* hid) { int i; char PACKETreceive[SEND_PACKET_LEN]; PACKET[0]=19; // Set Attenuation code is 19. PACKET[1]= (int)(AttValue); PACKET[2]= (int) ((AttValue-PACKET[1])*4); ret = hid_interrupt_write(hid, 0x01, PACKET, SEND_PACKET_LEN,1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_write failed with return code %d\\n", ret); } ret = hid_interrupt_read(hid, 0x01, PACKETreceive, SEND_PACKET_LEN,1000); // Read packet Packetreceive[0]=1 if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_read failed with return code %d\n", ret); } }
void ReadAtt (char* AttStr,HIDInterface* hid) { int i; char PACKETreceive[SEND_PACKET_LEN]; PACKET[0]=18; // Ruturn attenuation code ret = hid_interrupt_write(hid, 0x01, PACKET, SEND_PACKET_LEN,1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_write failed with return code %d\n", ret); } ret = hid_interrupt_read(hid, 0x01, PACKETreceive, SEND_PACKET_LEN,1000); if (ret == HID_RET_SUCCESS) {strncpy(AttStr,PACKETreceive,SEND_PACKET_LEN); for(i=0;AttStr[i+1]!='\0';i++) { AttStr[i]=AttStr[i+1]; } AttStr[i]='\0';} if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_read failed with return code %d\n", ret);} }
void Get_PN (char* PNstr,HIDInterface* hid) { int i; char PACKETreceive[SEND_PACKET_LEN]; PACKET[0]=40; // PN code ret = hid_interrupt_write(hid, 0x01, PACKET, SEND_PACKET_LEN,1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_write failed with return code %d\n", ret); } ret = hid_interrupt_read(hid, 0x01, PACKETreceive, SEND_PACKET_LEN,1000); if (ret == HID_RET_SUCCESS) { strncpy(PNstr,PACKETreceive,SEND_PACKET_LEN); for (i=0;PNstr[i+1]!='\0';i++) { PNstr[i]=PNstr[i+1]; } PNstr[i]='\0'; } if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_interrupt_read failed with return code %d\n", ret);} }
int main(int argc, char *argv[]) { HIDInterface* hid; int iface_num = 2; hid_return ret; int index=0; char buff[42]; unsigned short vendor_id = 0x0451; unsigned short product_id = 0x2100; int flag; uint16_t addr=0; uint8_t eepromBuff[512]; memset(eepromBuff, 0x00, 512); // HIDInterfaceMatcher matcher = { 0x0925, 0x1237, NULL, NULL, 0 }; HIDInterfaceMatcher matcher = { vendor_id, product_id, NULL, NULL, 0 }; #if 1 /* see include/debug.h for possible values */ hid_set_debug(HID_DEBUG_ALL); hid_set_debug_stream(stderr); /* passed directly to libusb */ hid_set_usb_debug(0); ret = hid_init(); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_init failed with return code %d\n", ret); return 1; } hid = hid_new_HIDInterface(); if (hid == 0) { fprintf(stderr, "hid_new_HIDInterface() failed, out of memory?\n"); return 1; } ret = hid_force_open(hid, iface_num, &matcher, 3); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_force_open failed with return code %d\n", ret); return 1; } ret = hid_write_identification(stdout, hid); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_write_identification failed with return code %d\n", ret); return 1; } ret = hid_dump_tree(stdout, hid); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_dump_tree failed with return code %d\n", ret); return 1; } //#define _READ #ifdef _READ memset(eepromBuff, 0x00, 512); for (index=0;index < 64;index++) { memset(buff, 0x00, 42); addr = 8*index; buff[0] = PCTransfer; buff[1] = RequestEepromSectionRead; buff[2] = (0xFF00 & addr) >> 8; //M:offset buff[3] = 0x00FF & addr; //L:offset buff[4] = 8; //bytes fprintf(stderr, "sending:\n"); print_bytes(LOG_ERROR, buff, 42); ret = hid_interrupt_write(hid, 0x04, buff, 42, 1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_set_output_report failed with return code %d\n", ret); } ret = hid_interrupt_read(hid, 0x03, buff, 42, 1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_set_output_report failed with return code %d\n", ret); } fprintf(stderr, "readed:\n"); print_bytes(LOG_ERROR, buff, 42); if(buff[0] & PCRequestError) { logwrite(LOG_ERROR, "USB: request error"); } if(!(buff[1] & RequestDone)) { logwrite(LOG_ERROR, "USB: request is not done!"); } logwrite(LOG_ERROR, "USB: retval: %02x", buff[2]); memcpy(&eepromBuff[8*index], &buff[3], 8); } #endif #define _WRITE #ifdef _WRITE memset(eepromBuff, 0xFF, 512); int commands = eeprom_data_size()/8; if(commands < 0 || commands > 62) { logwrite(LOG_ERROR, "WRONG COMMANDS NUMBER: %d", commands); exit(1); } logwrite(LOG_ERROR, "total commands: %d", commands); /* 2 bytes of sync + number of commands! */ eepromBuff[0] = 0xb0; eepromBuff[1] = 0x0b; eepromBuff[2] = commands; for (index=0;index < commands;index++) { fprintf(stderr, "w%d: eepromBuff[%d], eepromData[%d]\n", index, (index+1)*8, index*8); memcpy(&eepromBuff[(index+1)*8], &eepromData[8*index], 8); } for (index=0;index <= commands;index++) { addr = 8*index; memset(buff, 0x00, 42); buff[0] = PCTransfer; buff[1] = RequestEepromSectionWrite; buff[2] = (0xFF00 & addr) >> 8; //M:offset buff[3] = 0x00FF & addr; //L:offset buff[4] = 8; //bytes memcpy(&buff[5], &eepromBuff[8*index], 8); fprintf(stderr, "sending:\n"); print_bytes(LOG_ERROR, buff, 42); ret = hid_interrupt_write(hid, 0x04, buff, 42, 1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_set_output_report failed with return code %d\n", ret); } ret = hid_interrupt_read(hid, 0x03, buff, 42, 1000); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_set_output_report failed with return code %d\n", ret); } fprintf(stderr, "readed:\n"); print_bytes(LOG_ERROR, buff, 42); if(buff[0] & PCRequestError) { logwrite(LOG_ERROR, "USB: request error"); } if(!(buff[1] & RequestDone)) { logwrite(LOG_ERROR, "USB: request is not done!"); } logwrite(LOG_ERROR, "USB: retval: %02x", buff[2]); } #endif ret = hid_close(hid); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_close failed with return code %d\n", ret); return 1; } hid_delete_HIDInterface(&hid); ret = hid_cleanup(); if (ret != HID_RET_SUCCESS) { fprintf(stderr, "hid_cleanup failed with return code %d\n", ret); return 1; } #endif fprintf(stderr, "EEPROM DATA:\n"); for (index=0;index < 64;index++) { print_bytes(LOG_ERROR, &eepromBuff[8*index], 8); } return 0; }
int main (int argc, char *argv[]) { char buffer[64]; HIDInterface* hid; HIDInterfaceMatcher matcher = { CH_USB_VID, CH_USB_PID_FIRMWARE, NULL, NULL, 0 }; hid_return ret; int i; int iface_num = 0; int length; unsigned int timeout = 1000; /* ms */ hid_set_debug (HID_DEBUG_ALL); hid_set_debug_stream (stderr); hid_set_usb_debug (0); ret = hid_init (); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_init failed with return code %d\n", ret); return 1; } hid = hid_new_HIDInterface (); if (hid == 0) { fprintf (stderr, "hid_new_HIDInterface () failed\n"); return 1; } ret = hid_force_open (hid, iface_num, &matcher, 3); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_force_open failed with return code %d\n", ret); return 1; } ret = hid_write_identification (stdout, hid); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_write_identification failed with return code %d\n", ret); return 1; } ret = hid_dump_tree (stdout, hid); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_dump_tree failed with return code %d\n", ret); return 1; } /* turn all the LEDs on */ memset (buffer, 0x00, sizeof (buffer)); buffer[0] = 0x0e; buffer[1] = 0x03; ret = hid_interrupt_write (hid, 0x01, buffer, sizeof (buffer), timeout); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "failed calling hid_interrupt_write\n"); return 1; } /* read the return message */ length = 2; ret = hid_interrupt_read (hid, 0x01, buffer, length, timeout); if (ret != HID_RET_SUCCESS) { printf ("hid_interrupt_read failed\n"); return 1; } printf ("Data received from USB device: "); for (i=0; i < length; i++) { printf ("0x%02x, ", buffer[i]); } printf ("\n"); ret = hid_close (hid); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_close failed with return code %d\n", ret); return 1; } hid_delete_HIDInterface (&hid); ret = hid_cleanup (); if (ret != HID_RET_SUCCESS) { fprintf (stderr, "hid_cleanup failed with return code %d\n", ret); return 1; } return 0; }