Browse Source

ch376-native: fixed and extend indicator led operation

pull/592/head
Dean Netherton 1 year ago
parent
commit
93d7c7ed77
  1. 1
      Source/HBIOS/Config/RCEZ80_std.asm
  2. 93
      Source/HBIOS/ch376-native/base-drv/ch376.c.s
  3. 87
      Source/HBIOS/ch376-native/base-drv/usb-init.c.s
  4. 15
      Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c
  5. 14
      Source/HBIOS/ch376-native/source-doc/base-drv/usb-init.c

1
Source/HBIOS/Config/RCEZ80_std.asm

@ -87,6 +87,7 @@ CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT
CH0USBENABLE .SET FALSE ; CH375: ENABLE CH375 USB DRIVER CH0USBENABLE .SET FALSE ; CH375: ENABLE CH375 USB DRIVER
CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER
CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER
CHNATIVEFORCE .SET TRUE ; CH376: DISABLE AUTO-DETECTION OF MODULE - ASSUME ITS INSTALLED
CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE) CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE)
CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE) CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE)

93
Source/HBIOS/ch376-native/base-drv/ch376.c.s

@ -539,9 +539,10 @@ l_ch_data_in_transfer_00107:
pop bc pop bc
;source-doc/base-drv/ch376.c:172: if (count == 0) { ;source-doc/base-drv/ch376.c:172: if (count == 0) {
ld a, e ld a, e
;source-doc/base-drv/ch376.c:173: USB_MODULE_LEDS = 0x00;
or a or a
jr NZ,l_ch_data_in_transfer_00106 jr NZ,l_ch_data_in_transfer_00106
;source-doc/base-drv/ch376.c:173: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/ch376.c:174: return USB_ERR_DATA_ERROR; ;source-doc/base-drv/ch376.c:174: return USB_ERR_DATA_ERROR;
@ -571,24 +572,28 @@ l_ch_data_in_transfer_00148:
xor 0x80 xor 0x80
l_ch_data_in_transfer_00149: l_ch_data_in_transfer_00149:
jp M, l_ch_data_in_transfer_00107 jp M, l_ch_data_in_transfer_00107
;source-doc/base-drv/ch376.c:181: USB_MODULE_LEDS = 0x00;
ld a,0x00
;source-doc/base-drv/ch376.c:181: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/ch376.c:183: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:182: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_00111 jr l_ch_data_in_transfer_00111
;source-doc/base-drv/ch376.c:184: done: ;source-doc/base-drv/ch376.c:184: done:
l_ch_data_in_transfer_00110: l_ch_data_in_transfer_00110:
;source-doc/base-drv/ch376.c:185: return result;
;source-doc/base-drv/ch376.c:185: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/ch376.c:186: return result;
ld hl,(_result) ld hl,(_result)
ld h,+((_result) / 256) ld h,+((_result) / 256)
l_ch_data_in_transfer_00111: l_ch_data_in_transfer_00111:
;source-doc/base-drv/ch376.c:186: }
;source-doc/base-drv/ch376.c:187: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:188: usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:189: usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_in_transfer_n ; Function ch_data_in_transfer_n
; --------------------------------- ; ---------------------------------
@ -596,21 +601,21 @@ _ch_data_in_transfer_n:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/ch376.c:192: USB_MODULE_LEDS = 0x01;
;source-doc/base-drv/ch376.c:193: USB_MODULE_LEDS = 0x01;
ld a,0x01 ld a,0x01
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/ch376.c:194: ch_issue_token_in(endpoint);
;source-doc/base-drv/ch376.c:195: ch_issue_token_in(endpoint);
ld l,(ix+8) ld l,(ix+8)
ld h,(ix+9) ld h,(ix+9)
call _ch_issue_token_in call _ch_issue_token_in
;source-doc/base-drv/ch376.c:196: CHECK(ch_long_wait_int_and_get_status());
;source-doc/base-drv/ch376.c:197: CHECK(ch_long_wait_int_and_get_status());
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
ld a, l ld a, l
ld b, a ld b, a
or a or a
jr NZ,l_ch_data_in_transfer_n_00103 jr NZ,l_ch_data_in_transfer_n_00103
;source-doc/base-drv/ch376.c:198: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:199: endpoint->toggle = !endpoint->toggle;
ld e,(ix+8) ld e,(ix+8)
ld d,(ix+9) ld d,(ix+9)
ld c, e ld c, e
@ -625,30 +630,36 @@ _ch_data_in_transfer_n:
and 0xfe and 0xfe
or e or e
ld (bc), a ld (bc), a
;source-doc/base-drv/ch376.c:200: count = ch_read_data(buffer);
;source-doc/base-drv/ch376.c:201: count = ch_read_data(buffer);
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
call _ch_read_data call _ch_read_data
;source-doc/base-drv/ch376.c:202: *buffer_size = count;
;source-doc/base-drv/ch376.c:203: *buffer_size = count;
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld (bc), a ld (bc), a
;source-doc/base-drv/ch376.c:204: USB_MODULE_LEDS = 0x00;
ld a,0x00
;source-doc/base-drv/ch376.c:205: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/ch376.c:206: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:207: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_n_00104 jr l_ch_data_in_transfer_n_00104
;source-doc/base-drv/ch376.c:207: done:
;source-doc/base-drv/ch376.c:208: done:
l_ch_data_in_transfer_n_00103: l_ch_data_in_transfer_n_00103:
;source-doc/base-drv/ch376.c:208: return result;
;source-doc/base-drv/ch376.c:209: USB_MODULE_LEDS = 0x03;
ld a,0x03
push bc
ld bc,_USB_MODULE_LEDS
out (c),a
pop bc
;source-doc/base-drv/ch376.c:210: return result;
ld l, b ld l, b
l_ch_data_in_transfer_n_00104: l_ch_data_in_transfer_n_00104:
;source-doc/base-drv/ch376.c:209: }
;source-doc/base-drv/ch376.c:211: }
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:211: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:213: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_out_transfer ; Function ch_data_out_transfer
; --------------------------------- ; ---------------------------------
@ -658,7 +669,7 @@ _ch_data_out_transfer:
add ix,sp add ix,sp
push af push af
dec sp dec sp
;source-doc/base-drv/ch376.c:214: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
;source-doc/base-drv/ch376.c:216: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
ld e, c ld e, c
@ -666,13 +677,13 @@ _ch_data_out_transfer:
inc de inc de
ld a, (de) ld a, (de)
ld (ix-3),a ld (ix-3),a
;source-doc/base-drv/ch376.c:216: USB_MODULE_LEDS = 0x02;
;source-doc/base-drv/ch376.c:218: USB_MODULE_LEDS = 0x02;
ld a,0x02 ld a,0x02
push bc push bc
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
pop bc pop bc
;source-doc/base-drv/ch376.c:218: while (buffer_length > 0) {
;source-doc/base-drv/ch376.c:220: while (buffer_length > 0) {
ld (ix-2),c ld (ix-2),c
ld (ix-1),b ld (ix-1),b
l_ch_data_out_transfer_00103: l_ch_data_out_transfer_00103:
@ -683,7 +694,7 @@ l_ch_data_out_transfer_00103:
xor 0x80 xor 0x80
l_ch_data_out_transfer_00139: l_ch_data_out_transfer_00139:
jp P, l_ch_data_out_transfer_00105 jp P, l_ch_data_out_transfer_00105
;source-doc/base-drv/ch376.c:219: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
;source-doc/base-drv/ch376.c:221: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
ld d,(ix-3) ld d,(ix-3)
ld e,0x00 ld e,0x00
ld a, d ld a, d
@ -699,7 +710,7 @@ l_ch_data_out_transfer_00109:
ld d,(ix+6) ld d,(ix+6)
ld e,(ix+7) ld e,(ix+7)
l_ch_data_out_transfer_00110: l_ch_data_out_transfer_00110:
;source-doc/base-drv/ch376.c:220: buffer = ch_write_data(buffer, size);
;source-doc/base-drv/ch376.c:222: buffer = ch_write_data(buffer, size);
push bc push bc
push de push de
push de push de
@ -714,7 +725,7 @@ l_ch_data_out_transfer_00110:
pop bc pop bc
ld (ix+4),l ld (ix+4),l
ld (ix+5),h ld (ix+5),h
;source-doc/base-drv/ch376.c:221: buffer_length -= size;
;source-doc/base-drv/ch376.c:223: buffer_length -= size;
ld e,0x00 ld e,0x00
ld a,(ix+6) ld a,(ix+6)
sub d sub d
@ -722,7 +733,7 @@ l_ch_data_out_transfer_00110:
ld a,(ix+7) ld a,(ix+7)
sbc a, e sbc a, e
ld (ix+7),a ld (ix+7),a
;source-doc/base-drv/ch376.c:222: ch_issue_token_out(endpoint);
;source-doc/base-drv/ch376.c:224: ch_issue_token_out(endpoint);
ld l,c ld l,c
ld h,b ld h,b
push hl push hl
@ -733,7 +744,7 @@ l_ch_data_out_transfer_00110:
ld l, a ld l, a
or a or a
jr NZ,l_ch_data_out_transfer_00106 jr NZ,l_ch_data_out_transfer_00106
;source-doc/base-drv/ch376.c:226: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:228: endpoint->toggle = !endpoint->toggle;
ld e, c ld e, c
ld d, b ld d, b
ld l,(ix-2) ld l,(ix-2)
@ -749,34 +760,40 @@ l_ch_data_out_transfer_00110:
ld (de), a ld (de), a
jr l_ch_data_out_transfer_00103 jr l_ch_data_out_transfer_00103
l_ch_data_out_transfer_00105: l_ch_data_out_transfer_00105:
;source-doc/base-drv/ch376.c:229: USB_MODULE_LEDS = 0x00;
ld a,0x00
;source-doc/base-drv/ch376.c:231: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/ch376.c:231: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:232: return USB_ERR_OK;
ld l,0x00 ld l,0x00
;source-doc/base-drv/ch376.c:232: done:
;source-doc/base-drv/ch376.c:233: return result;
jr l_ch_data_out_transfer_00107
;source-doc/base-drv/ch376.c:234: done:
l_ch_data_out_transfer_00106: l_ch_data_out_transfer_00106:
;source-doc/base-drv/ch376.c:234: }
;source-doc/base-drv/ch376.c:235: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/ch376.c:236: return result;
l_ch_data_out_transfer_00107:
;source-doc/base-drv/ch376.c:237: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:236: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:239: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_set_usb_address ; Function ch_set_usb_address
; --------------------------------- ; ---------------------------------
_ch_set_usb_address: _ch_set_usb_address:
;source-doc/base-drv/ch376.c:237: ch_command(CH_CMD_SET_USB_ADDR);
;source-doc/base-drv/ch376.c:240: ch_command(CH_CMD_SET_USB_ADDR);
push hl push hl
ld l,0x13 ld l,0x13
call _ch_command call _ch_command
pop hl pop hl
;source-doc/base-drv/ch376.c:238: CH376_DATA_PORT = device_address;
;source-doc/base-drv/ch376.c:241: CH376_DATA_PORT = device_address;
ld a, l ld a, l
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/ch376.c:239: }
;source-doc/base-drv/ch376.c:242: }
ret ret
_result: _result:
DEFB +0x00 DEFB +0x00

87
Source/HBIOS/ch376-native/base-drv/usb-init.c.s

@ -100,73 +100,92 @@ __chnative_init:
inc de inc de
ld bc,0x0068 ld bc,0x0068
ldir ldir
;source-doc/base-drv/usb-init.c:28: ch_cmd_reset_all();
;source-doc/base-drv/usb-init.c:28: USB_MODULE_LEDS = 0x00;
ld a,0x00
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:30: ch_cmd_reset_all();
call _ch_cmd_reset_all call _ch_cmd_reset_all
;source-doc/base-drv/usb-init.c:30: delay_medium();
;source-doc/base-drv/usb-init.c:32: delay_medium();
call _delay_medium call _delay_medium
;source-doc/base-drv/usb-init.c:32: if (forced) {
;source-doc/base-drv/usb-init.c:34: if (forced) {
bit 0,(ix+4) bit 0,(ix+4)
jr Z,l__chnative_init_00110 jr Z,l__chnative_init_00110
;source-doc/base-drv/usb-init.c:33: bool indicator = true;
;source-doc/base-drv/usb-init.c:35: bool indicator = true;
ld (ix-1),0x01 ld (ix-1),0x01
;source-doc/base-drv/usb-init.c:34: print_string("\r\nCH376: *$");
;source-doc/base-drv/usb-init.c:36: print_string("\r\nCH376: *$");
ld hl,usb_init_str_0 ld hl,usb_init_str_0
call _print_string call _print_string
;source-doc/base-drv/usb-init.c:35: while (!ch_probe()) {
;source-doc/base-drv/usb-init.c:37: while (!ch_probe()) {
l__chnative_init_00104: l__chnative_init_00104:
call _ch_probe call _ch_probe
ld a, l ld a, l
or a or a
jr NZ,l__chnative_init_00106 jr NZ,l__chnative_init_00106
;source-doc/base-drv/usb-init.c:36: if (indicator)
;source-doc/base-drv/usb-init.c:38: if (indicator) {
bit 0,(ix-1) bit 0,(ix-1)
jr Z,l__chnative_init_00102 jr Z,l__chnative_init_00102
;source-doc/base-drv/usb-init.c:37: print_string("\b $");
;source-doc/base-drv/usb-init.c:39: USB_MODULE_LEDS = 0x00;
ld a,0x00
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:40: print_string("\b $");
ld hl,usb_init_str_1 ld hl,usb_init_str_1
call _print_string call _print_string
jr l__chnative_init_00103 jr l__chnative_init_00103
l__chnative_init_00102: l__chnative_init_00102:
;source-doc/base-drv/usb-init.c:39: print_string("\b*$");
;source-doc/base-drv/usb-init.c:42: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:43: print_string("\b*$");
ld hl,usb_init_str_2 ld hl,usb_init_str_2
call _print_string call _print_string
l__chnative_init_00103: l__chnative_init_00103:
;source-doc/base-drv/usb-init.c:41: delay_medium();
;source-doc/base-drv/usb-init.c:46: delay_medium();
call _delay_medium call _delay_medium
;source-doc/base-drv/usb-init.c:42: indicator = !indicator;
;source-doc/base-drv/usb-init.c:47: indicator = !indicator;
ld a,(ix-1) ld a,(ix-1)
xor 0x01 xor 0x01
ld (ix-1),a ld (ix-1),a
jr l__chnative_init_00104 jr l__chnative_init_00104
l__chnative_init_00106: l__chnative_init_00106:
;source-doc/base-drv/usb-init.c:45: print_string("\bPRESENT (VER $");
;source-doc/base-drv/usb-init.c:50: print_string("\bPRESENT (VER $");
ld hl,usb_init_str_3 ld hl,usb_init_str_3
call _print_string call _print_string
jr l__chnative_init_00111 jr l__chnative_init_00111
l__chnative_init_00110: l__chnative_init_00110:
;source-doc/base-drv/usb-init.c:47: if (!ch_probe()) {
;source-doc/base-drv/usb-init.c:52: if (!ch_probe()) {
call _ch_probe call _ch_probe
ld a, l ld a, l
;source-doc/base-drv/usb-init.c:53: USB_MODULE_LEDS = 0x00;
or a or a
jr NZ,l__chnative_init_00108 jr NZ,l__chnative_init_00108
;source-doc/base-drv/usb-init.c:48: print_string("\r\nCH376: NOT PRESENT$");
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:54: print_string("\r\nCH376: NOT PRESENT$");
ld hl,usb_init_str_4 ld hl,usb_init_str_4
call _print_string call _print_string
;source-doc/base-drv/usb-init.c:49: return;
;source-doc/base-drv/usb-init.c:55: return;
jr l__chnative_init_00118 jr l__chnative_init_00118
l__chnative_init_00108: l__chnative_init_00108:
;source-doc/base-drv/usb-init.c:52: print_string("\r\nCH376: PRESENT (VER $");
;source-doc/base-drv/usb-init.c:58: print_string("\r\nCH376: PRESENT (VER $");
ld hl,usb_init_str_5 ld hl,usb_init_str_5
call _print_string call _print_string
l__chnative_init_00111: l__chnative_init_00111:
;source-doc/base-drv/usb-init.c:55: print_hex(ch_cmd_get_ic_version());
;source-doc/base-drv/usb-init.c:61: USB_MODULE_LEDS = 0x01;
ld a,0x01
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:63: print_hex(ch_cmd_get_ic_version());
call _ch_cmd_get_ic_version call _ch_cmd_get_ic_version
call _print_hex call _print_hex
;source-doc/base-drv/usb-init.c:56: print_string("); $");
;source-doc/base-drv/usb-init.c:64: print_string("); $");
ld hl,usb_init_str_6 ld hl,usb_init_str_6
call _print_string call _print_string
;source-doc/base-drv/usb-init.c:58: usb_host_bus_reset();
;source-doc/base-drv/usb-init.c:66: usb_host_bus_reset();
call _usb_host_bus_reset call _usb_host_bus_reset
;source-doc/base-drv/usb-init.c:60: for (uint8_t i = 0; i < (forced ? 10 : 5); i++) {
;source-doc/base-drv/usb-init.c:68: for (uint8_t i = 0; i < (forced ? 10 : 5); i++) {
ld c,0x00 ld c,0x00
l__chnative_init_00116: l__chnative_init_00116:
bit 0,(ix+4) bit 0,(ix+4)
@ -186,31 +205,39 @@ l__chnative_init_00121:
xor 0x80 xor 0x80
l__chnative_init_00185: l__chnative_init_00185:
jp P, l__chnative_init_00114 jp P, l__chnative_init_00114
;source-doc/base-drv/usb-init.c:61: const uint8_t r = ch_very_short_wait_int_and_get_();
;source-doc/base-drv/usb-init.c:69: const uint8_t r = ch_very_short_wait_int_and_get_();
push bc push bc
call _ch_very_short_wait_int_and_get call _ch_very_short_wait_int_and_get
ld a, l ld a, l
pop bc pop bc
;source-doc/base-drv/usb-init.c:63: if (r == USB_INT_CONNECT) {
;source-doc/base-drv/usb-init.c:71: if (r == USB_INT_CONNECT) {
sub 0x81 sub 0x81
jr NZ,l__chnative_init_00117 jr NZ,l__chnative_init_00117
;source-doc/base-drv/usb-init.c:64: print_string("USB: CONNECTED$");
;source-doc/base-drv/usb-init.c:72: print_string("USB: CONNECTED$");
ld hl,usb_init_str_7 ld hl,usb_init_str_7
call _print_string call _print_string
;source-doc/base-drv/usb-init.c:66: enumerate_all_devices();
;source-doc/base-drv/usb-init.c:74: enumerate_all_devices();
call _enumerate_all_devices call _enumerate_all_devices
;source-doc/base-drv/usb-init.c:68: return;
;source-doc/base-drv/usb-init.c:76: USB_MODULE_LEDS = 0x03;
ld a,0x03
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:77: return;
jr l__chnative_init_00118 jr l__chnative_init_00118
l__chnative_init_00117: l__chnative_init_00117:
;source-doc/base-drv/usb-init.c:60: for (uint8_t i = 0; i < (forced ? 10 : 5); i++) {
;source-doc/base-drv/usb-init.c:68: for (uint8_t i = 0; i < (forced ? 10 : 5); i++) {
inc c inc c
jr l__chnative_init_00116 jr l__chnative_init_00116
l__chnative_init_00114: l__chnative_init_00114:
;source-doc/base-drv/usb-init.c:72: print_string("USB: DISCONNECTED$");
;source-doc/base-drv/usb-init.c:81: USB_MODULE_LEDS = 0x00;
ld a,0x00
ld bc,_USB_MODULE_LEDS
out (c),a
;source-doc/base-drv/usb-init.c:82: print_string("USB: DISCONNECTED$");
ld hl,usb_init_str_8 ld hl,usb_init_str_8
call _print_string call _print_string
l__chnative_init_00118: l__chnative_init_00118:
;source-doc/base-drv/usb-init.c:73: }
;source-doc/base-drv/usb-init.c:83: }
inc sp inc sp
pop ix pop ix
ret ret
@ -250,7 +277,7 @@ usb_init_str_7:
usb_init_str_8: usb_init_str_8:
DEFM "USB: DISCONNECTED$" DEFM "USB: DISCONNECTED$"
DEFB 0x00 DEFB 0x00
;source-doc/base-drv/usb-init.c:75: void chnative_init_force(void) { _chnative_init(true); }
;source-doc/base-drv/usb-init.c:85: void chnative_init_force(void) { _chnative_init(true); }
; --------------------------------- ; ---------------------------------
; Function chnative_init_force ; Function chnative_init_force
; --------------------------------- ; ---------------------------------
@ -261,7 +288,7 @@ _chnative_init_force:
call __chnative_init call __chnative_init
inc sp inc sp
ret ret
;source-doc/base-drv/usb-init.c:77: void chnative_init(void) { _chnative_init(false); }
;source-doc/base-drv/usb-init.c:87: void chnative_init(void) { _chnative_init(false); }
; --------------------------------- ; ---------------------------------
; Function chnative_init ; Function chnative_init
; --------------------------------- ; ---------------------------------

15
Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c

@ -170,7 +170,7 @@ usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_par
count = ch_read_data(buffer); count = ch_read_data(buffer);
if (count == 0) { if (count == 0) {
USB_MODULE_LEDS = 0x00;
USB_MODULE_LEDS = 0x03;
return USB_ERR_DATA_ERROR; return USB_ERR_DATA_ERROR;
} }
@ -178,10 +178,11 @@ usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_par
buffer_size -= count; buffer_size -= count;
} while (buffer_size > 0); } while (buffer_size > 0);
USB_MODULE_LEDS = 0x00;
USB_MODULE_LEDS = 0x03;
return USB_ERR_OK; return USB_ERR_OK;
done: done:
USB_MODULE_LEDS = 0x03;
return result; return result;
} }
@ -201,10 +202,11 @@ usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size
*buffer_size = count; *buffer_size = count;
USB_MODULE_LEDS = 0x00;
USB_MODULE_LEDS = 0x03;
return USB_ERR_OK; return USB_ERR_OK;
done: done:
USB_MODULE_LEDS = 0x03;
return result; return result;
} }
@ -226,10 +228,11 @@ usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, end
endpoint->toggle = !endpoint->toggle; endpoint->toggle = !endpoint->toggle;
} }
USB_MODULE_LEDS = 0x00;
USB_MODULE_LEDS = 0x03;
return USB_ERR_OK; return USB_ERR_OK;
done: done:
USB_MODULE_LEDS = 0x03;
return result; return result;
} }

14
Source/HBIOS/ch376-native/source-doc/base-drv/usb-init.c

@ -25,6 +25,8 @@ static usb_error usb_host_bus_reset(void) {
void _chnative_init(bool forced) { void _chnative_init(bool forced) {
memset(get_usb_work_area(), 0, sizeof(_usb_state)); memset(get_usb_work_area(), 0, sizeof(_usb_state));
USB_MODULE_LEDS = 0x00;
ch_cmd_reset_all(); ch_cmd_reset_all();
delay_medium(); delay_medium();
@ -33,10 +35,13 @@ void _chnative_init(bool forced) {
bool indicator = true; bool indicator = true;
print_string("\r\nCH376: *$"); print_string("\r\nCH376: *$");
while (!ch_probe()) { while (!ch_probe()) {
if (indicator)
if (indicator) {
USB_MODULE_LEDS = 0x00;
print_string("\b $"); print_string("\b $");
else
} else {
USB_MODULE_LEDS = 0x03;
print_string("\b*$"); print_string("\b*$");
}
delay_medium(); delay_medium();
indicator = !indicator; indicator = !indicator;
@ -45,6 +50,7 @@ void _chnative_init(bool forced) {
print_string("\bPRESENT (VER $"); print_string("\bPRESENT (VER $");
} else { } else {
if (!ch_probe()) { if (!ch_probe()) {
USB_MODULE_LEDS = 0x00;
print_string("\r\nCH376: NOT PRESENT$"); print_string("\r\nCH376: NOT PRESENT$");
return; return;
} }
@ -52,6 +58,8 @@ void _chnative_init(bool forced) {
print_string("\r\nCH376: PRESENT (VER $"); print_string("\r\nCH376: PRESENT (VER $");
} }
USB_MODULE_LEDS = 0x01;
print_hex(ch_cmd_get_ic_version()); print_hex(ch_cmd_get_ic_version());
print_string("); $"); print_string("); $");
@ -65,10 +73,12 @@ void _chnative_init(bool forced) {
enumerate_all_devices(); enumerate_all_devices();
USB_MODULE_LEDS = 0x03;
return; return;
} }
} }
USB_MODULE_LEDS = 0x00;
print_string("USB: DISCONNECTED$"); print_string("USB: DISCONNECTED$");
} }

Loading…
Cancel
Save