10b966c5eSopenharmony_ciroot { 20b966c5eSopenharmony_ci platform { 30b966c5eSopenharmony_ci template codec_controller { 40b966c5eSopenharmony_ci match_attr = ""; 50b966c5eSopenharmony_ci serviceName = ""; 60b966c5eSopenharmony_ci codecDaiName = ""; 70b966c5eSopenharmony_ci } 80b966c5eSopenharmony_ci controller_0x120c1030 :: codec_controller { 90b966c5eSopenharmony_ci match_attr = "hdf_codec_driver_0"; 100b966c5eSopenharmony_ci serviceName = "codec_service_0"; 110b966c5eSopenharmony_ci codecDaiName = "codec_dai"; 120b966c5eSopenharmony_ci 130b966c5eSopenharmony_ci hwInfo = [ 140b966c5eSopenharmony_ci /* 150b966c5eSopenharmony_ci Playback/Captrue, formats, rates, rate_min, rate_max, channels_min, channels_max, 160b966c5eSopenharmony_ci buffer_bytes_max, period_bytes_min, period_bytes_max, periods_min, periods_max 170b966c5eSopenharmony_ci */ 180b966c5eSopenharmony_ci 1, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5, 190b966c5eSopenharmony_ci 2, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5, 200b966c5eSopenharmony_ci ]; 210b966c5eSopenharmony_ci 220b966c5eSopenharmony_ci regConfig { 230b966c5eSopenharmony_ci /* reg: register address 240b966c5eSopenharmony_ci rreg: register address 250b966c5eSopenharmony_ci shift: shift bits 260b966c5eSopenharmony_ci rshift: rshift bits 270b966c5eSopenharmony_ci min: min value 280b966c5eSopenharmony_ci max: max value 290b966c5eSopenharmony_ci mask: mask of value 300b966c5eSopenharmony_ci invert: enum InvertVal 0-uninvert 1-invert 310b966c5eSopenharmony_ci value: value 320b966c5eSopenharmony_ci */ 330b966c5eSopenharmony_ci 340b966c5eSopenharmony_ci /* reg, value */ 350b966c5eSopenharmony_ci resetSeqConfig = [ 360b966c5eSopenharmony_ci 0x00, 0x80, 370b966c5eSopenharmony_ci 0x00, 0x00, 380b966c5eSopenharmony_ci ]; 390b966c5eSopenharmony_ci 400b966c5eSopenharmony_ci /* reg, value */ 410b966c5eSopenharmony_ci initSeqConfig = [ 420b966c5eSopenharmony_ci 0x00, 0x36, 430b966c5eSopenharmony_ci 0x01, 0x60, 440b966c5eSopenharmony_ci 0x02, 0x00, 450b966c5eSopenharmony_ci 0x03, 0xf9, 460b966c5eSopenharmony_ci 0x04, 0xc0, 470b966c5eSopenharmony_ci 0x05, 0x00, 480b966c5eSopenharmony_ci 0x06, 0x00, 490b966c5eSopenharmony_ci 0x07, 0x7c, 500b966c5eSopenharmony_ci 0x08, 0x00, 510b966c5eSopenharmony_ci 0x09, 0x00, 520b966c5eSopenharmony_ci 0x0a, 0x00, 530b966c5eSopenharmony_ci 0x0b, 0x02, 540b966c5eSopenharmony_ci 0x0c, 0x4c, 550b966c5eSopenharmony_ci 0x0d, 0x02, 560b966c5eSopenharmony_ci 0x0e, 0x30, 570b966c5eSopenharmony_ci 0x0f, 0x20, 580b966c5eSopenharmony_ci 0x10, 0x00, 590b966c5eSopenharmony_ci 0x11, 0x00, 600b966c5eSopenharmony_ci 0x12, 0xea, 610b966c5eSopenharmony_ci 0x13, 0xc0, 620b966c5eSopenharmony_ci 0x14, 0x05, 630b966c5eSopenharmony_ci 0x15, 0x06, 640b966c5eSopenharmony_ci 0x16, 0x53, 650b966c5eSopenharmony_ci 0x17, 0x18, 660b966c5eSopenharmony_ci 0x18, 0x02, 670b966c5eSopenharmony_ci 0x19, 0x02, 680b966c5eSopenharmony_ci 0x1a, 0x00, 690b966c5eSopenharmony_ci 0x1b, 0x00, 700b966c5eSopenharmony_ci 0x1c, 0x08, 710b966c5eSopenharmony_ci 0x1d, 0x00, 720b966c5eSopenharmony_ci 0x1e, 0x1f, 730b966c5eSopenharmony_ci 0x1f, 0xf7, 740b966c5eSopenharmony_ci 0x20, 0xfd, 750b966c5eSopenharmony_ci 0x21, 0xff, 760b966c5eSopenharmony_ci 0x22, 0x1f, 770b966c5eSopenharmony_ci 0x23, 0xf7, 780b966c5eSopenharmony_ci 0x24, 0xfd, 790b966c5eSopenharmony_ci 0x25, 0xff, 800b966c5eSopenharmony_ci 0x26, 0x00, 810b966c5eSopenharmony_ci 0x27, 0xb8, 820b966c5eSopenharmony_ci 0x28, 0x28, 830b966c5eSopenharmony_ci 0x29, 0x28, 840b966c5eSopenharmony_ci 0x2a, 0xb8, 850b966c5eSopenharmony_ci 0x2b, 0x80, 860b966c5eSopenharmony_ci 0x2c, 0x00, 870b966c5eSopenharmony_ci 0x2d, 0x00, 880b966c5eSopenharmony_ci 0x2e, 0x15, 890b966c5eSopenharmony_ci 0x2f, 0x15, 900b966c5eSopenharmony_ci 0x30, 0x15, 910b966c5eSopenharmony_ci 0x31, 0x15, 920b966c5eSopenharmony_ci 0x32, 0x00, 930b966c5eSopenharmony_ci 0x33, 0xaa, 940b966c5eSopenharmony_ci 0x34, 0xaa, 950b966c5eSopenharmony_ci 0x35, 0x00, 960b966c5eSopenharmony_ci 0x36, 0x08, 970b966c5eSopenharmony_ci 0x37, 0x00, 980b966c5eSopenharmony_ci 0x38, 0x00, 990b966c5eSopenharmony_ci 0x39, 0x00, 1000b966c5eSopenharmony_ci 0x3a, 0x00, 1010b966c5eSopenharmony_ci 0x3b, 0x40, 1020b966c5eSopenharmony_ci 0x3c, 0x0a, 1030b966c5eSopenharmony_ci 0x3d, 0xe4, 1040b966c5eSopenharmony_ci 0x3e, 0x00, 1050b966c5eSopenharmony_ci 0x3f, 0x00, 1060b966c5eSopenharmony_ci ]; 1070b966c5eSopenharmony_ci 1080b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value */ 1090b966c5eSopenharmony_ci ctrlParamsSeqConfig = [ 1100b966c5eSopenharmony_ci 0x2e, 0x2f, 0, 0, 0x0, 0x21, 0xFF, 1, 0x00, // output volume(OUT1) 1110b966c5eSopenharmony_ci 0x10, 0x11, 0, 0, 0x0, 0xC0, 0xFF, 1, 0x00, // capture volume(mic gain) 1120b966c5eSopenharmony_ci 0x19, 0x19, 2, 2, 0x0, 0x01, 0x01, 0, 0x00, // output mute 1130b966c5eSopenharmony_ci 0x0f, 0x0f, 5, 5, 0x0, 0x01, 0x01, 0, 0x00, // capture mute 1140b966c5eSopenharmony_ci 0x09, 0x09, 4, 4, 0x0, 0xF, 0xF, 0, 0x00, // mic left gain 1150b966c5eSopenharmony_ci 0x09, 0x09, 0, 0, 0x0, 0xF, 0xF, 0, 0x00, // mic right gain 1160b966c5eSopenharmony_ci 0x35, 0x35, 0, 0, 0x0, 0x11, 0x11, 0, 0x00, // output channel unused 1170b966c5eSopenharmony_ci 0x35, 0x35, 4, 4, 0x0, 0x03, 0x03, 0, 0x00 // capture channel unused 1180b966c5eSopenharmony_ci ]; 1190b966c5eSopenharmony_ci 1200b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value */ 1210b966c5eSopenharmony_ci daiStartupSeqConfig = [ 1220b966c5eSopenharmony_ci 0x03, 0x03, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x59, // es8316_adc_pdn_linsel 1230b966c5eSopenharmony_ci 0x04, 0x04, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x3c, // es8316_dac_pdn 1240b966c5eSopenharmony_ci 0x0f, 0x0f, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x20, // es8316_adc_mute(capture unmute) 1250b966c5eSopenharmony_ci 0x19, 0x19, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x02 // es8316_dac_set1(output unmute) 1260b966c5eSopenharmony_ci ]; 1270b966c5eSopenharmony_ci 1280b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value 1290b966c5eSopenharmony_ci The top three are frequency, format and channel respectively, and the others are behind 1300b966c5eSopenharmony_ci */ 1310b966c5eSopenharmony_ci daiParamsSeqConfig = [ 1320b966c5eSopenharmony_ci // playback input params (hal input) 1330b966c5eSopenharmony_ci 0x18, 0x18, 0, 0, 0x0, 0x1F, 0x1F, 0, 0x00, // i2s_frequency 1340b966c5eSopenharmony_ci 0x17, 0x17, 3, 3, 0x0, 0x4, 0xFF, 0, 0x00, // i2s_format 1350b966c5eSopenharmony_ci 0x1c, 0x1c, 4, 4, 0x0, 0x1, 0xFF, 0, 0x00, // i2s_channel 1360b966c5eSopenharmony_ci // capture input params (hal input) 1370b966c5eSopenharmony_ci 0x0d, 0x0d, 0, 0, 0x0, 0x1F, 0x1F, 0, 0x00, // capture__frequency 1380b966c5eSopenharmony_ci 0x0C, 0x0C, 2, 2, 0x0, 0x4, 0x0F, 0, 0x00, // capture_format 1390b966c5eSopenharmony_ci 0x0e, 0x0e, 7, 7, 0x0, 0x1, 0xF, 0, 0x00 // capture_channel 1400b966c5eSopenharmony_ci ]; 1410b966c5eSopenharmony_ci 1420b966c5eSopenharmony_ci /* reg, value */ 1430b966c5eSopenharmony_ci getStatusSeqConfig = [ 1440b966c5eSopenharmony_ci 0x4F, 0x0 1450b966c5eSopenharmony_ci ]; 1460b966c5eSopenharmony_ci 1470b966c5eSopenharmony_ci /* 1480b966c5eSopenharmony_ci "Master Playback Volume", 1490b966c5eSopenharmony_ci "Master Capture Volume", 1500b966c5eSopenharmony_ci "Playback Mute", 1510b966c5eSopenharmony_ci "Capture Mute", 1520b966c5eSopenharmony_ci "Mic Left Gain", 1530b966c5eSopenharmony_ci "Mic Right Gain", 1540b966c5eSopenharmony_ci "External Codec Enable", 1550b966c5eSopenharmony_ci "Internally Codec Enable", 1560b966c5eSopenharmony_ci "Render Channel Mode", 1570b966c5eSopenharmony_ci "Captrue Channel Mode" 1580b966c5eSopenharmony_ci */ 1590b966c5eSopenharmony_ci /* array index, iface, enable */ 1600b966c5eSopenharmony_ci controlsConfig = [ 1610b966c5eSopenharmony_ci 1620b966c5eSopenharmony_ci /*array index, iface, mixer/mux, enable,*/ 1630b966c5eSopenharmony_ci 0, 2, 0, 1, 1640b966c5eSopenharmony_ci 1, 2, 0, 1, 1650b966c5eSopenharmony_ci 2, 2, 0, 1, 1660b966c5eSopenharmony_ci 3, 2, 0, 1, 1670b966c5eSopenharmony_ci 4, 2, 0, 1, 1680b966c5eSopenharmony_ci 5, 2, 0, 1, 1690b966c5eSopenharmony_ci 8, 2, 0, 1, 1700b966c5eSopenharmony_ci 9, 2, 0, 1, 1710b966c5eSopenharmony_ci ]; 1720b966c5eSopenharmony_ci } 1730b966c5eSopenharmony_ci } 1740b966c5eSopenharmony_ci controller_0x120c1031 :: codec_controller { 1750b966c5eSopenharmony_ci match_attr = "hdf_codec_driver_1"; 1760b966c5eSopenharmony_ci serviceName = "codec_service_1"; 1770b966c5eSopenharmony_ci codecDaiName = "hdmi_codec_dai"; 1780b966c5eSopenharmony_ci 1790b966c5eSopenharmony_ci hwInfo = [ 1800b966c5eSopenharmony_ci /* 1810b966c5eSopenharmony_ci Playback/Captrue, formats, rates, rate_min, rate_max, channels_min, channels_max, 1820b966c5eSopenharmony_ci buffer_bytes_max, period_bytes_min, period_bytes_max, periods_min, periods_max 1830b966c5eSopenharmony_ci */ 1840b966c5eSopenharmony_ci 1, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5 1850b966c5eSopenharmony_ci ]; 1860b966c5eSopenharmony_ci 1870b966c5eSopenharmony_ci regConfig { 1880b966c5eSopenharmony_ci /* reg: register address 1890b966c5eSopenharmony_ci rreg: register address 1900b966c5eSopenharmony_ci shift: shift bits 1910b966c5eSopenharmony_ci rshift: rshift bits 1920b966c5eSopenharmony_ci min: min value 1930b966c5eSopenharmony_ci max: max value 1940b966c5eSopenharmony_ci mask: mask of value 1950b966c5eSopenharmony_ci invert: enum InvertVal 0-uninvert 1-invert 1960b966c5eSopenharmony_ci value: value 1970b966c5eSopenharmony_ci */ 1980b966c5eSopenharmony_ci 1990b966c5eSopenharmony_ci /* reg, value */ 2000b966c5eSopenharmony_ci resetSeqConfig = [ 2010b966c5eSopenharmony_ci 0x00, 0x80, 2020b966c5eSopenharmony_ci 0x00, 0x00, 2030b966c5eSopenharmony_ci ]; 2040b966c5eSopenharmony_ci 2050b966c5eSopenharmony_ci /* reg, value */ 2060b966c5eSopenharmony_ci initSeqConfig = [ 2070b966c5eSopenharmony_ci 0x00, 0x36, 2080b966c5eSopenharmony_ci 0x01, 0x60, 2090b966c5eSopenharmony_ci 0x02, 0x00, 2100b966c5eSopenharmony_ci 0x03, 0xf9, 2110b966c5eSopenharmony_ci 0x04, 0xc0, 2120b966c5eSopenharmony_ci 0x05, 0x00, 2130b966c5eSopenharmony_ci 0x06, 0x00, 2140b966c5eSopenharmony_ci 0x07, 0x7c, 2150b966c5eSopenharmony_ci 0x08, 0x00, 2160b966c5eSopenharmony_ci 0x09, 0x00, 2170b966c5eSopenharmony_ci 0x0a, 0x00, 2180b966c5eSopenharmony_ci 0x0b, 0x02, 2190b966c5eSopenharmony_ci 0x0c, 0x4c, 2200b966c5eSopenharmony_ci 0x0d, 0x02, 2210b966c5eSopenharmony_ci 0x0e, 0x30, 2220b966c5eSopenharmony_ci 0x0f, 0x20, 2230b966c5eSopenharmony_ci 0x10, 0x00, 2240b966c5eSopenharmony_ci 0x11, 0x00, 2250b966c5eSopenharmony_ci 0x12, 0xea, 2260b966c5eSopenharmony_ci 0x13, 0xc0, 2270b966c5eSopenharmony_ci 0x14, 0x05, 2280b966c5eSopenharmony_ci 0x15, 0x06, 2290b966c5eSopenharmony_ci 0x16, 0x53, 2300b966c5eSopenharmony_ci 0x17, 0x18, 2310b966c5eSopenharmony_ci 0x18, 0x02, 2320b966c5eSopenharmony_ci 0x19, 0x02, 2330b966c5eSopenharmony_ci 0x1a, 0x00, 2340b966c5eSopenharmony_ci 0x1b, 0x00, 2350b966c5eSopenharmony_ci 0x1c, 0x08, 2360b966c5eSopenharmony_ci 0x1d, 0x00, 2370b966c5eSopenharmony_ci 0x1e, 0x1f, 2380b966c5eSopenharmony_ci 0x1f, 0xf7, 2390b966c5eSopenharmony_ci 0x20, 0xfd, 2400b966c5eSopenharmony_ci 0x21, 0xff, 2410b966c5eSopenharmony_ci 0x22, 0x1f, 2420b966c5eSopenharmony_ci 0x23, 0xf7, 2430b966c5eSopenharmony_ci 0x24, 0xfd, 2440b966c5eSopenharmony_ci 0x25, 0xff, 2450b966c5eSopenharmony_ci 0x26, 0x00, 2460b966c5eSopenharmony_ci 0x27, 0xb8, 2470b966c5eSopenharmony_ci 0x28, 0x28, 2480b966c5eSopenharmony_ci 0x29, 0x28, 2490b966c5eSopenharmony_ci 0x2a, 0xb8, 2500b966c5eSopenharmony_ci 0x2b, 0x80, 2510b966c5eSopenharmony_ci 0x2c, 0x00, 2520b966c5eSopenharmony_ci 0x2d, 0x00, 2530b966c5eSopenharmony_ci 0x2e, 0x15, 2540b966c5eSopenharmony_ci 0x2f, 0x15, 2550b966c5eSopenharmony_ci 0x30, 0x15, 2560b966c5eSopenharmony_ci 0x31, 0x15, 2570b966c5eSopenharmony_ci 0x32, 0x00, 2580b966c5eSopenharmony_ci 0x33, 0xaa, 2590b966c5eSopenharmony_ci 0x34, 0xaa, 2600b966c5eSopenharmony_ci 0x35, 0x00, 2610b966c5eSopenharmony_ci 0x36, 0x08, 2620b966c5eSopenharmony_ci 0x37, 0x00, 2630b966c5eSopenharmony_ci 0x38, 0x00, 2640b966c5eSopenharmony_ci 0x39, 0x00, 2650b966c5eSopenharmony_ci 0x3a, 0x00, 2660b966c5eSopenharmony_ci 0x3b, 0x40, 2670b966c5eSopenharmony_ci 0x3c, 0x0a, 2680b966c5eSopenharmony_ci 0x3d, 0xe4, 2690b966c5eSopenharmony_ci 0x3e, 0x00, 2700b966c5eSopenharmony_ci 0x3f, 0x00, 2710b966c5eSopenharmony_ci ]; 2720b966c5eSopenharmony_ci 2730b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value */ 2740b966c5eSopenharmony_ci ctrlParamsSeqConfig = [ 2750b966c5eSopenharmony_ci 0x2e, 0x2f, 0, 0, 0x0, 0x21, 0xFF, 1, 0x00, // output volume(OUT1) 2760b966c5eSopenharmony_ci 0x10, 0x11, 0, 0, 0x0, 0xC0, 0xFF, 1, 0x00, // capture volume(mic gain) 2770b966c5eSopenharmony_ci 0x19, 0x19, 2, 2, 0x0, 0x01, 0x01, 0, 0x00, // output mute 2780b966c5eSopenharmony_ci 0x0f, 0x0f, 5, 5, 0x0, 0x01, 0x01, 0, 0x00, // capture mute 2790b966c5eSopenharmony_ci 0x09, 0x09, 4, 4, 0x0, 0xF, 0xF, 0, 0x00, // mic left gain 2800b966c5eSopenharmony_ci 0x09, 0x09, 0, 0, 0x0, 0xF, 0xF, 0, 0x00, // mic right gain 2810b966c5eSopenharmony_ci 0x35, 0x35, 0, 0, 0x0, 0x11, 0x11, 0, 0x00, // output channel unused 2820b966c5eSopenharmony_ci 0x35, 0x35, 4, 4, 0x0, 0x03, 0x03, 0, 0x00 // capture channel unused 2830b966c5eSopenharmony_ci ]; 2840b966c5eSopenharmony_ci 2850b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value */ 2860b966c5eSopenharmony_ci daiStartupSeqConfig = [ 2870b966c5eSopenharmony_ci 0x03, 0x03, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x59, // es8316_adc_pdn_linsel 2880b966c5eSopenharmony_ci 0x04, 0x04, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x3c, // es8316_dac_pdn 2890b966c5eSopenharmony_ci 0x0f, 0x0f, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x20, // es8316_adc_mute(capture unmute) 2900b966c5eSopenharmony_ci 0x19, 0x19, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x02 // es8316_dac_set1(output unmute) 2910b966c5eSopenharmony_ci ]; 2920b966c5eSopenharmony_ci 2930b966c5eSopenharmony_ci /* reg, rreg, shift, rshift, min, max, mask, invert, value 2940b966c5eSopenharmony_ci The top three are frequency, format and channel respectively, and the others are behind 2950b966c5eSopenharmony_ci */ 2960b966c5eSopenharmony_ci daiParamsSeqConfig = [ 2970b966c5eSopenharmony_ci // playback input params (hal input) 2980b966c5eSopenharmony_ci 0x18, 0x18, 0, 0, 0x0, 0x1F, 0x1F, 0, 0x00, // i2s_frequency 2990b966c5eSopenharmony_ci 0x17, 0x17, 3, 3, 0x0, 0x4, 0xFF, 0, 0x00, // i2s_format 3000b966c5eSopenharmony_ci 0x1c, 0x1c, 4, 4, 0x0, 0x1, 0xFF, 0, 0x00, // i2s_channel 3010b966c5eSopenharmony_ci // capture input params (hal input) 3020b966c5eSopenharmony_ci 0x0d, 0x0d, 0, 0, 0x0, 0x1F, 0x1F, 0, 0x00, // capture__frequency 3030b966c5eSopenharmony_ci 0x0C, 0x0C, 2, 2, 0x0, 0x4, 0x0F, 0, 0x00, // capture_format 3040b966c5eSopenharmony_ci 0x0e, 0x0e, 7, 7, 0x0, 0x1, 0xF, 0, 0x00 // capture_channel 3050b966c5eSopenharmony_ci ]; 3060b966c5eSopenharmony_ci 3070b966c5eSopenharmony_ci /* reg, value */ 3080b966c5eSopenharmony_ci getStatusSeqConfig = [ 3090b966c5eSopenharmony_ci 0x4F, 0x0 3100b966c5eSopenharmony_ci ]; 3110b966c5eSopenharmony_ci 3120b966c5eSopenharmony_ci /* 3130b966c5eSopenharmony_ci "Master Playback Volume", 3140b966c5eSopenharmony_ci "Master Capture Volume", 3150b966c5eSopenharmony_ci "Playback Mute", 3160b966c5eSopenharmony_ci "Capture Mute", 3170b966c5eSopenharmony_ci "Mic Left Gain", 3180b966c5eSopenharmony_ci "Mic Right Gain", 3190b966c5eSopenharmony_ci "External Codec Enable", 3200b966c5eSopenharmony_ci "Internally Codec Enable", 3210b966c5eSopenharmony_ci "Render Channel Mode", 3220b966c5eSopenharmony_ci "Captrue Channel Mode" 3230b966c5eSopenharmony_ci */ 3240b966c5eSopenharmony_ci /* array index, iface, enable */ 3250b966c5eSopenharmony_ci controlsConfig = [ 3260b966c5eSopenharmony_ci 3270b966c5eSopenharmony_ci /*array index, iface, mixer/mux, enable,*/ 3280b966c5eSopenharmony_ci 0, 2, 0, 1, 3290b966c5eSopenharmony_ci 1, 2, 0, 1, 3300b966c5eSopenharmony_ci 2, 2, 0, 1, 3310b966c5eSopenharmony_ci 3, 2, 0, 1, 3320b966c5eSopenharmony_ci 4, 2, 0, 1, 3330b966c5eSopenharmony_ci 5, 2, 0, 1, 3340b966c5eSopenharmony_ci 8, 2, 0, 1, 3350b966c5eSopenharmony_ci 9, 2, 0, 1, 3360b966c5eSopenharmony_ci ]; 3370b966c5eSopenharmony_ci } 3380b966c5eSopenharmony_ci } 3390b966c5eSopenharmony_ci } 3400b966c5eSopenharmony_ci} 341