module descriptors (input CLK, /*input RESET, input RD_REQUEST,*/ input /*[1:0]*/ DESC_TYPE, input [6:0] ADR, output /*reg*/ [7:0] VAL/*, input [63:0] kbd_report*/); parameter HID_REPORT_DESC_LEN = 63; wire [7:0] RAM_ADR; assign RAM_ADR[6:0] = ADR[6:0]; assign RAM_ADR[7] = DESC_TYPE; //reg [(8*30-1):0] i2c_hid_desc;// = 'h_1E_00__00_01__46_00__02_00__03_00__0A_00__04_00__03_00__05_00__06_00__9F_04__01_01__00_01__00_00_00_00; //reg [(8*HID_REPORT_DESC_LEN-1):0] hid_report_desc; //parameter READ_ADRESS_OFFSET = 2; //reg last_rd_request = 0; //reg tx_flag = 0; // AT POSEDGE OF RD_REQUEST DATA FROM RAM MOVES TO RAM_RD_REG, AT NEXT CLK DATA MUST BE WRITE TO VAL //reg [6:0] real_adress; //reg [7:0] ram_rd_t1; //reg [7:0] ram_rd_t2; //always @ (posedge CLK) begin //if (RESET == 0) begin //i2c_hid_desc <= 'h_1E_00__00_01__50_00__02_00__03_00__0A_00__04_00__03_00__05_00__06_00__9F_04__01_01__00_01__00_00_00_00; //hid_report_desc <= 'h__05_01__09_06__A1_01__05_07__85_01___19_E0__29_E7__15_00__25_01__75_01__95_08__81_02___95_01__75_08__81_01___95_05__75_01__05_05__85_01__19_01__29_05__91_02___95_01__75_03__91_03___95_06__75_08__15_00__25_65__05_07__19_00__29_65__81_00__C0; //i2c_hid_desc [207:200] <= HID_REPORT_DESC_LEN[7:0]; //i2c_hid_desc [199:192] <= HID_REPORT_DESC_LEN[15:8]; // last_rd_request <= 0; // real_adress = 0; //end // else begin /*if (tx_flag == 1) begin // NEXT CLK AFTER POSEDGE REQUEST if (DESC_TYPE == 1) VAL <= ram_rd_t1; else VAL <= ram_rd_t2; tx_flag = 0;*/ //end // if ((last_rd_request == 0) && (RD_REQUEST == 1)) begin // if (DESC_TYPE == 1) // real_adress = ADR; // else // real_adress = ADR + 32; //if (DESC_TYPE == 1) begin // tx_flag = 1; // WAIT NEXT CLK /* case (ADR) 2: VAL <= 8'h1E; 3: VAL <= 0; // 2-3 - DESCR LEN (30), 4: VAL <= 0; 5: VAL <= 1; // 4-5 - bcdVersion 6: VAL <= HID_REPORT_DESC_LEN[7:0]; 7: VAL <= HID_REPORT_DESC_LEN[15:8]; 8: VAL <= 2; 9: VAL <= 0; // 8-9 - REPORT DESC ADR 10: VAL <= 3; 11: VAL <= 0; // 10-11 - INPUT REG ADR 12: VAL <= 10; 13: VAL <= 0; // 12-13 - INPUT REG LEN 14: VAL <= 4; 15: VAL <= 0; // 14-15 - OUT REG ADR 16: VAL <= 3; 17: VAL <= 0; // 16-17 - OUT REG LEN 18: VAL <= 5; 19: VAL <= 0; // 18-19 - CMD REG ADR 20: VAL <= 6; 21: VAL <= 0; // 20-21 - DATA REG ADR 22: VAL <= 8'h9F; 23: VAL <= 4; // 22-23 - VENDOR ID 24: VAL <= 1; 25: VAL <= 1; // 24-25 - DEVICE ID 26: VAL <= 0; 27: VAL <= 1; // 26-27 - VERSION 28: VAL <= 0; 29: VAL <= 0; 30: VAL <= 0; 31: VAL <= 0; // 28-31 - RSVD default: VAL <= 0; endcase*/ /*end else if (DESC_TYPE == 2) begin case (ADR) 2: VAL <= 8'h05; 3: VAL <= 8'h01; 4: VAL <= 8'h09; 5: VAL <= 8'h06; 6: VAL <= 8'hA1; 7: VAL <= 8'h01; 8: VAL <= 8'h05; 9: VAL <= 8'h07; //10: VAL <= 8'h85; 11: VAL <= 8'h01; // MODIFIERS DESC 10: VAL <= 8'h19; 11: VAL <= 8'hE0; 12: VAL <= 8'h29; 13: VAL <= 8'hE7; 14: VAL <= 8'h15; 15: VAL <= 8'h00; 16: VAL <= 8'h25; 17: VAL <= 8'h01; 18: VAL <= 8'h75; 19: VAL <= 8'h01; 20: VAL <= 8'h95; 21: VAL <= 8'h08; 22: VAL <= 8'h81; 23: VAL <= 8'h02; // RESERVED BYTE 24: VAL <= 8'h95; 25: VAL <= 8'h01; 26: VAL <= 8'h75; 27: VAL <= 8'h08; 28: VAL <= 8'h81; 29: VAL <= 8'h01; // LEDS 30: VAL <= 8'h95; 31: VAL <= 8'h05; 32: VAL <= 8'h75; 33: VAL <= 8'h01; 34: VAL <= 8'h05; 35: VAL <= 8'h08; 36: VAL <= 8'h19; 37: VAL <= 8'h01; 38: VAL <= 8'h29; 39: VAL <= 8'h05; 40: VAL <= 8'h91; 41: VAL <= 8'h02; // RESERVED 3 BITS 42: VAL <= 8'h95; 43: VAL <= 8'h01; 44: VAL <= 8'h75; 45: VAL <= 8'h03; 46: VAL <= 8'h91; 47: VAL <= 8'h03; // SIX KEYS (NON-MODIFIERS) 48: VAL <= 8'h95; 49: VAL <= 8'h06; 50: VAL <= 8'h75; 51: VAL <= 8'h08; 52: VAL <= 8'h15; 53: VAL <= 8'h00; 54: VAL <= 8'h25; 55: VAL <= 8'h65; 56: VAL <= 8'h05; 57: VAL <= 8'h07; 58: VAL <= 8'h19; 59: VAL <= 8'h00; 60: VAL <= 8'h29; 61: VAL <= 8'h65; 62: VAL <= 8'h81; 63: VAL <= 8'h00; // END COLLECTION 64: VAL <= 8'hC0; default: VAL <= 0; endcase end*/ /*if (READ_TYPE == 1) begin if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + 30 - 1))) VAL <= 0; else VAL <= i2c_hid_desc[ (8 * (30 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (30 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ]; end*/ /*else if (READ_TYPE == 2) begin if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + HID_REPORT_DESC_LEN - 1))) VAL <= 0; else VAL <= hid_report_desc[ (8 * (HID_REPORT_DESC_LEN - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (HID_REPORT_DESC_LEN - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ]; end*/ /*else if (READ_TYPE == 3) begin if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + 10 - 1))) VAL <= 0; else if (READ_ADRESS == READ_ADRESS_OFFSET) VAL <= 10; else if (READ_ADRESS == (READ_ADRESS_OFFSET + 1)) VAL <= 0; else VAL <= kbd_report[ (8 * (10 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (10 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ]; end*/ // end // last_rd_request <= RD_REQUEST; // end //end /* 2: VAL <= 8'h1E; 3: VAL <= 0; // 2-3 - DESCR LEN (30), 4: VAL <= 0; 5: VAL <= 1; // 4-5 - bcdVersion 6: VAL <= HID_REPORT_DESC_LEN[7:0]; 7: VAL <= HID_REPORT_DESC_LEN[15:8]; 8: VAL <= 2; 9: VAL <= 0; // 8-9 - REPORT DESC ADR 10: VAL <= 3; 11: VAL <= 0; // 10-11 - INPUT REG ADR 12: VAL <= 10; 13: VAL <= 0; // 12-13 - INPUT REG LEN 14: VAL <= 4; 15: VAL <= 0; // 14-15 - OUT REG ADR 16: VAL <= 3; 17: VAL <= 0; // 16-17 - OUT REG LEN 18: VAL <= 5; 19: VAL <= 0; // 18-19 - CMD REG ADR 20: VAL <= 6; 21: VAL <= 0; // 20-21 - DATA REG ADR 22: VAL <= 8'h9F; 23: VAL <= 4; // 22-23 - VENDOR ID 24: VAL <= 1; 25: VAL <= 1; // 24-25 - DEVICE ID 26: VAL <= 0; 27: VAL <= 1; // 26-27 - VERSION 28: VAL <= 0; 29: VAL <= 0; 30: VAL <= 0; 31: VAL <= 0; // 28-31 - RSVD */ SB_RAM40_4K #( /*.INIT_0(256'h0000_0004__0000_000A__0000_0003__0000_0002__0000_003F__0001_0000__0000_001E___0000_0000), .INIT_1(256'h0000_0000__0000_0000__0001_0000__0001_0001__0004_009F__0000_0006__0000_0005___0000_0003),*/ .INIT_0(256'h0003__0000_0004__0000_000A__0000_0003__0000_0002__0000_003F__0001_0000__0000_001E___0000), .INIT_1(256'h0000__0000_0000__0000_0000__0001_0000__0001_0001__0004_009F__0000_0006__0000_0005___0000), .INIT_8(256'h0025__0000_0015__00E7_0029__00E0_0019__0007_0005__0001_00A1__0006_0009__0001_0005___0000), .INIT_9(256'h0075__0005_0095__0001_0081__0008_0075__0001_0095__0002_0081__0008_0095__0001_0075___0001), .INIT_A(256'h0095__0003_0091__0003_0075__0001_0095__0002_0091__0005_0029__0001_0019__0008_0005___0001), .INIT_B(256'h00C0__0000_0081__0065_0029__0000_0019__0007_0005__0065_0025__0000_0015__0008_0075___0006), .INIT_C(256'h0000__0000_0000__0000_0000__0000_0000__0000_0000__0000_0000__0000_0000__0000_0000___0000), .WRITE_MODE(1), .READ_MODE(1) ) descriptors ( .RDATA(VAL), .RADDR(RAM_ADR/*real_adress*/), .RCLK(CLK), .RCLKE(1'b1), .RE(1'b1), .WADDR(8'b0), .WCLK(1'b0), .WCLKE(1'b0), .WDATA(8'b0), .WE(1'b0) ); /* SB_RAM40_4K #( .INIT_0(256'h0000_0004__0000_000A__0000_0003__0000_0002__0000_003F__0001_0000__0000_001E___0000_0000), .INIT_1(256'h0000_0000__0000_0000__0001_0000__0001_0001__0004_009F__0000_0006__0000_0005___0000_0003), .WRITE_MODE(1), .READ_MODE(1) ) i2c_hid_desc ( .RDATA(ram_rd_t1), .RADDR(ADR), .RCLK(CLK), .RCLKE(1'b1), .RE(1'b1), .WADDR(8'b0), .WCLK(1'b0), .WCLKE(1'b0), .WDATA(8'b0), .WE(1'b0) ); SB_RAM40_4K #( .INIT_0(256'h0000_0015__00E7_0029__00E0_0019__0007_0005__0001_00A1__0006_0009__0001_0005___0000_0000), .INIT_1(256'h0005_0095__0001_0081__0008_0075__0001_0095__0002_0081__0008_0095__0001_0075___0001_0025), .INIT_2(256'h0003_0091__0003_0075__0001_0095__0002_0091__0005_0029__0001_0019__0008_0005___0001_0075), .INIT_3(256'h0000_0081__0065_0029__0000_0019__0007_0005__0065_0025__0000_0015__0008_0075___0006_0095), .INIT_4(256'h0000_0000__0000_0000__0000_0000__0000_0000__0000_0000__0000_0000__0000_0000___0000_00C0), .WRITE_MODE(1), .READ_MODE(1) ) hid_report_desc ( .RDATA(ram_rd_t2), .RADDR(ADR), .RCLK(CLK), .RCLKE(1'b1), .RE(1'b1), .WADDR(8'b0), .WCLK(1'b0), .WCLKE(1'b0), .WDATA(8'b0), .WE(1'b0) );*/ endmodule //static const uint8 hid_descriptor_keyboard[] = { //****/ 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 2 //****/ 0x09, 0x06, /* USAGE (Keyboard) */ 4 //****/ 0xa1, 0x01, /* COLLECTION (Application) */ 6 //******/ 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ 8 //******/ 0x85, 0x01, /* REPORT_ID (1) */ 10 /* Ctrl, Shift and other modifier keys, 8 in total */ //******/ 0x19, 0xe0, /* USAGE_MINIMUM (kbd LeftControl) */ 12 //******/ 0x29, 0xe7, /* USAGE_MAXIMUM (kbd Right GUI) */ 14 //******/ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 16 //******/ 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ 18 //******/ 0x75, 0x01, /* REPORT_SIZE (1) */ 20 //******/ 0x95, 0x08, /* REPORT_COUNT (8) */ 22 //******/ 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 24 /* Reserved byte */ //******/ 0x95, 0x01, /* REPORT_COUNT (1) */ 26 //******/ 0x75, 0x08, /* REPORT_SIZE (8) */ 28 //******/ 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */ 30 /* LEDs for num lock etc */ //******/ 0x95, 0x05, /* REPORT_COUNT (5) */ 32 //******/ 0x75, 0x01, /* REPORT_SIZE (1) */ 34 //******/ 0x05, 0x08, /* USAGE_PAGE (LEDs) */ 36 //******/ 0x85, 0x01, /* REPORT_ID (1) */ 38 //******/ 0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */ 40 //******/ 0x29, 0x05, /* USAGE_MAXIMUM (Kana) */ 42 //******/ 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ 44 /* Reserved 3 bits */ //******/ 0x95, 0x01, /* REPORT_COUNT (1) */ 46 //******/ 0x75, 0x03, /* REPORT_SIZE (3) */ 48 //******/ 0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */ 50 /* Slots for 6 keys that can be pressed down at the same time */ //******/ 0x95, 0x06, /* REPORT_COUNT (6) */ 52 //******/ 0x75, 0x08, /* REPORT_SIZE (8) */ 54 //******/ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 56 //******/ 0x25, 0x65, /* LOGICAL_MAXIMUM (101) */Bluegiga Technologies Oy 58 //******/ 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ 60 //******/ 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ 62 //******/ 0x29, 0x65, /* USAGE_MAXIMUM (Keyboard Application) */ 64 //******/ 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ 66 //****/ 0xc0 } 67