├── swd_scripts ├── 100us.swd ├── goto_test.swd ├── call_test_2.swd ├── test_write.swd ├── call_test_1.swd ├── dump_0x00000000_1k.swd ├── dump_0x00000000_4b.swd ├── dump_STM32.swd ├── reset.swd └── halt.swd ├── icons ├── app.png ├── swd.png ├── ButtonUp_7x4.png └── ButtonDown_7x4.png ├── application.fam ├── .gitignore ├── usb_uart.h ├── jep106.c ├── adi.h ├── jep106.h ├── model ├── convert.py ├── chip.ply └── model_chip.h ├── README.md ├── swd_probe_app.h ├── usb_uart.c ├── adi.c ├── LICENSE.txt └── jep106.inc /swd_scripts/100us.swd: -------------------------------------------------------------------------------- 1 | swd_clock_delay 100 2 | -------------------------------------------------------------------------------- /icons/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g3gg0/flipper-swd_probe/master/icons/app.png -------------------------------------------------------------------------------- /icons/swd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g3gg0/flipper-swd_probe/master/icons/swd.png -------------------------------------------------------------------------------- /icons/ButtonUp_7x4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g3gg0/flipper-swd_probe/master/icons/ButtonUp_7x4.png -------------------------------------------------------------------------------- /icons/ButtonDown_7x4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g3gg0/flipper-swd_probe/master/icons/ButtonDown_7x4.png -------------------------------------------------------------------------------- /swd_scripts/goto_test.swd: -------------------------------------------------------------------------------- 1 | beep 1 2 | goto l2 3 | .label l1 4 | beep 0 5 | .label l2 6 | beep 1 7 | goto l1 8 | -------------------------------------------------------------------------------- /swd_scripts/call_test_2.swd: -------------------------------------------------------------------------------- 1 | 2 | # first do a beeeeeep 3 | beep 1 4 | 5 | message 0 "Seems to work" dialog 6 | 7 | beep 0 8 | -------------------------------------------------------------------------------- /swd_scripts/test_write.swd: -------------------------------------------------------------------------------- 1 | mem_write 0x20002000 0xdeadbeef 2 | mem_write 0xE000EDF0 0xA05F0001 3 | mem_write 0xE000EDF0 0xA05F0007 4 | -------------------------------------------------------------------------------- /swd_scripts/call_test_1.swd: -------------------------------------------------------------------------------- 1 | 2 | message 0 "gonna call call_test_2" dialog 3 | 4 | call call_test_2 5 | 6 | message 0 "back now" dialog 7 | -------------------------------------------------------------------------------- /swd_scripts/dump_0x00000000_1k.swd: -------------------------------------------------------------------------------- 1 | ap_select 0 2 | max_tries 50 3 | block_size 4 4 | mem_dump /ext/swd/flash.bin 0x00000000 0x100000 2 5 | beep 1 6 | message 5 "Reading sucessful" 7 | -------------------------------------------------------------------------------- /swd_scripts/dump_0x00000000_4b.swd: -------------------------------------------------------------------------------- 1 | ap_select 0 2 | max_tries 50 3 | block_size 4 4 | mem_dump /ext/swd/flash.bin 0x00000000 0x100000 2 5 | beep 1 6 | message 5 "Reading sucessful" 7 | -------------------------------------------------------------------------------- /swd_scripts/dump_STM32.swd: -------------------------------------------------------------------------------- 1 | ap_select 0 2 | max_tries 50 3 | block_size 1024 4 | mem_dump /ext/swd/flash.bin 0x08000000 0x100000 2 5 | beep 1 6 | message 0 "Reading finished" dialog 7 | -------------------------------------------------------------------------------- /swd_scripts/reset.swd: -------------------------------------------------------------------------------- 1 | errors ignore 2 | status 0 3 | message 0 "HAMMER TIME! Try to halt the CPU" 4 | .label l1 5 | ap_select 0 6 | mem_write 0xE000EDF0 0xA05F0001 7 | mem_write 0xE000ED0C 0x05FA0004 8 | goto l1 9 | -------------------------------------------------------------------------------- /swd_scripts/halt.swd: -------------------------------------------------------------------------------- 1 | 2 | # make sure errors do not cause a script abort 3 | errors ignore 4 | 5 | message 0 "HAMMER TIME! Trying to halt CPU" 6 | ap_select 0 7 | 8 | # loop writing the halt bits 9 | .label l1 10 | mem_write 0xE000EDF0 0xA05F0003 11 | goto l1 12 | -------------------------------------------------------------------------------- /application.fam: -------------------------------------------------------------------------------- 1 | App( 2 | fap_author="g3gg0", 3 | fap_weburl="https://github.com/g3gg0/flipper-swd_probe", 4 | fap_version=(1, 0), 5 | fap_description="ARM SWD (Single Wire Debug) Probe", 6 | appid="swd_probe", 7 | name="SWD Probe", 8 | apptype=FlipperAppType.EXTERNAL, 9 | entry_point="swd_probe_app_main", 10 | cdefines=["APP_SWD_PROBE"], 11 | requires=["notification", "gui", "storage", "dialogs", "cli"], 12 | stack_size=2 * 1024, 13 | order=10, 14 | fap_icon="icons/app.png", 15 | fap_category="Tools", 16 | fap_icon_assets="icons" 17 | ) 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | -------------------------------------------------------------------------------- /usb_uart.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | typedef struct UsbUart UsbUart; 7 | 8 | typedef struct { 9 | uint8_t vcp_ch; 10 | size_t (*rx_data)(void* ctx, uint8_t* data, size_t length); 11 | void* rx_data_ctx; 12 | } UsbUartConfig; 13 | 14 | typedef struct { 15 | uint32_t rx_cnt; 16 | uint32_t tx_cnt; 17 | } UsbUartState; 18 | 19 | UsbUart* usb_uart_enable(UsbUartConfig* cfg); 20 | 21 | void usb_uart_disable(UsbUart* usb_uart); 22 | 23 | void usb_uart_set_config(UsbUart* usb_uart, UsbUartConfig* cfg); 24 | 25 | void usb_uart_get_config(UsbUart* usb_uart, UsbUartConfig* cfg); 26 | 27 | void usb_uart_get_state(UsbUart* usb_uart, UsbUartState* st); 28 | 29 | bool usb_uart_tx_data(UsbUart* usb_uart, uint8_t* data, size_t length); 30 | -------------------------------------------------------------------------------- /jep106.c: -------------------------------------------------------------------------------- 1 | /* https://github.com/openocd-org/openocd/blob/master/src/helper/ */ 2 | // SPDX-License-Identifier: GPL-2.0-or-later 3 | 4 | /*************************************************************************** 5 | * Copyright (C) 2015 Andreas Fritiofson * 6 | * andreas.fritiofson@gmail.com * 7 | ***************************************************************************/ 8 | 9 | #include "jep106.h" 10 | 11 | static const char* const jep106[][126] = { 12 | #include "jep106.inc" 13 | }; 14 | 15 | const char* jep106_table_manufacturer(unsigned int bank, unsigned int id) { 16 | if(id < 1 || id > 126) { 17 | return ""; 18 | } 19 | 20 | /* index is zero based */ 21 | id--; 22 | 23 | if(bank >= 14 || jep106[bank][id] == 0) return ""; 24 | 25 | return jep106[bank][id]; 26 | } 27 | -------------------------------------------------------------------------------- /adi.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __ADI_H__ 3 | #define __ADI_H__ 4 | 5 | #include "swd_probe_app.h" 6 | 7 | #define ARM_ID 0x23B 8 | 9 | #define ARCH_ID(architect, archid) ((architect) << 21) | (archid) 10 | 11 | #define BIT(nr) (1UL << (nr)) 12 | #define ARM_CS_C9_DEVARCH_PRESENT BIT(20) 13 | #define ARM_CS_C9_DEVARCH_ARCHITECT_MASK (0xFFE00000) 14 | #define ARM_CS_C9_DEVARCH_ARCHID_MASK (0x0000FFFF) 15 | #define DEVARCH_ID_MASK (ARM_CS_C9_DEVARCH_ARCHITECT_MASK | ARM_CS_C9_DEVARCH_ARCHID_MASK) 16 | 17 | typedef struct { 18 | uint16_t designer; 19 | uint16_t part; 20 | uint8_t revision; 21 | uint8_t cmod; 22 | uint8_t revand; 23 | uint8_t size; 24 | } pidr_data_t; 25 | 26 | typedef enum { CIDR_CLASS_ROMTABLE = 0x01, CIDR_CLASS_CORESIGHT = 0x09 } cidr_classes_t; 27 | 28 | uint32_t adi_romtable_entry_count(AppFSM* const ctx, uint32_t base); 29 | uint32_t adi_romtable_get(AppFSM* const ctx, uint32_t base, uint32_t pos); 30 | bool adi_is_romtable(AppFSM* const ctx, uint32_t base); 31 | const char* adi_romtable_type(AppFSM* const ctx, uint32_t base); 32 | const char* adi_romtable_full(AppFSM* const ctx, uint32_t base); 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /jep106.h: -------------------------------------------------------------------------------- 1 | /* https://github.com/openocd-org/openocd/blob/master/src/helper/ */ 2 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 3 | 4 | /*************************************************************************** 5 | * Copyright (C) 2015 Andreas Fritiofson * 6 | * andreas.fritiofson@gmail.com * 7 | ***************************************************************************/ 8 | 9 | #ifndef OPENOCD_HELPER_JEP106_H 10 | #define OPENOCD_HELPER_JEP106_H 11 | 12 | /** 13 | * Get the manufacturer name associated with a JEP106 ID. 14 | * @param bank The bank (number of continuation codes) of the manufacturer ID. 15 | * @param id The 7-bit manufacturer ID (i.e. with parity stripped). 16 | * @return A pointer to static const storage containing the name of the 17 | * manufacturer associated with bank and id, or one of the strings 18 | * "" and "". 19 | */ 20 | const char* jep106_table_manufacturer(unsigned int bank, unsigned int id); 21 | 22 | static inline const char* jep106_manufacturer(unsigned int manufacturer) { 23 | return jep106_table_manufacturer(manufacturer >> 7, manufacturer & 0x7f); 24 | } 25 | 26 | #endif /* OPENOCD_HELPER_JEP106_H */ 27 | -------------------------------------------------------------------------------- /model/convert.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import plyfile 4 | import argparse 5 | 6 | parser = argparse.ArgumentParser(description='Convert a PLY file to C arrays.') 7 | parser.add_argument('input_file', help='the input PLY file') 8 | parser.add_argument('output_file', help='the output C file') 9 | args = parser.parse_args() 10 | 11 | # Open the PLY file 12 | plydata = plyfile.PlyData.read(args.input_file) 13 | 14 | # Extract the vertices 15 | vertices = plydata['vertex'].data 16 | num_vertices = len(vertices) 17 | 18 | with open(args.output_file, 'w') as f: 19 | f.write('#define NUM_VERTICES %d\n' % num_vertices) 20 | f.write('float vertexCoords[NUM_VERTICES][3] = {\n') 21 | for i in range(num_vertices): 22 | x, y, z = vertices[i][0], vertices[i][1], vertices[i][2] 23 | f.write(' {%f, %f, %f},\n' % (x, y, z)) 24 | f.write('};') 25 | 26 | # Extract the faces 27 | faces = plydata['face'].data 28 | num_faces = len(faces) 29 | f.write('int edgeIndices[][3] = {\n') 30 | for i in range(num_faces): 31 | face = faces[i][0] 32 | if len(face) == 3: 33 | f.write(' {%d, %d, %d},\n' % (face[0], face[1], face[2])) 34 | elif len(face) == 4: 35 | # Convert 4-index face to 2-index edges 36 | edges = [(face[0], face[1]), (face[1], face[2]), (face[2], face[3]), (face[3], face[0])] 37 | for edge in edges: 38 | f.write(' {%d, %d},\n' % (edge[0], edge[1])) 39 | f.write('};\n') 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # ARM SWD (Single Wire Debug) Probe 3 | 4 | Modern microcontrollers have support for the two wire debug interface SWD, which makes wiring a lot simpler. 5 | When reverse engineering, finding these two pins is a lot easier than with JTAG, where you had to wire up twice or more pins. However, finding the two pins is still some work, which gets simplified even more with this application. 6 | 7 | This application tries to detect a valid SWD response on the wires you have picked and beeps when you have found the correct pins, showing the detected ID register and, more important, the SWD pinout. It doesn't matter which two pins you choose, just pick any two from the GPIOs on the breakout header. 8 | 9 | To achieve this, the application sends packets and scans the response on all pins and elaborates the pins within a few retries. Using some kind of bisect pattern reduces this number to a hand full of tries, yielding in a seemingly instant detection. 10 | 11 | For the user it is as simple as a continuity tester – wire up your two test needles (or acupuncture needles), connect the obvious GND pin and probe all test pads. 12 | How long it takes depends on your bisect capabilities when finding all pad combinations. 13 | 14 | Video 1: https://www.youtube.com/watch?v=4vAWFcUPVeo 15 | Video 2: https://www.youtube.com/watch?v=dmkluzQWcp4 16 | 17 | Discussion thread: https://discord.com/channels/740930220399525928/1071712925171056690 18 | 19 | --- 20 | 21 | ## Tested Targets (ID Codes) 22 | 23 | ``` 24 | 25 | 0x6BA02477 (0xBC rev 6) Flipper itself 26 | 0x0BC11477 (0xBC rev 0) B-L072Z-LRWAN1 STM32L0 Discovery kit LoRa, Sigfox, low-power wireless 27 | 0x1BA01477 (0xBA rev 1) STM32WB5MM-DK Discovery kit with STM32WB5MMG MCU 28 | 0x0BB11477 (0xBB rev 0) Bluetooth gyroball - firmware suggests PanChip PAN1020 29 | 0x2BA01477 (0xBA rev 2) STM32F401 Devboard 30 | 0x0BB11477 (0xBB rev 0) iFlight 50A ESC with seemingly F405 clones 31 | 0x0BC11477 (0xBC rev 0) DA14531-based custom PCB 32 | 33 | ``` 34 | 35 | --- 36 | 37 | ## Scripting Support 38 | 39 | Scripts go into: 40 | 41 | ``` 42 | 43 | /sd/swd/.swd 44 | 45 | ``` 46 | 47 | Available commands: 48 | 49 | ``` 50 | 51 | # 52 | 53 | message 54 | beep [] # 0=success, 1=fail 55 | apscan 56 | apselect 57 | max_tries 58 | swd_clock_delay 59 | block_size # 4–4096 60 | abort 61 | mem_dump [] # flags&1: skip failed blocks, flags&2: finish even if a block failed 62 | mem_ldmst
63 | mem_write
64 | 65 | ``` 66 | 67 | ### Example Script 68 | 69 | ``` 70 | 71 | apselect 0 72 | max_tries 50 73 | block_size 1024 74 | mem_dump /ext/swd/flash.bin 0x08000000 0x100000 2 75 | beep 0 76 | message 5 "Reading sucessful" 77 | 78 | ``` 79 | 80 | --- 81 | 82 | 83 | -------------------------------------------------------------------------------- /model/chip.ply: -------------------------------------------------------------------------------- 1 | ply 2 | format ascii 1.0 3 | comment Created by Blender 3.3.1 - www.blender.org 4 | element vertex 136 5 | property float x 6 | property float y 7 | property float z 8 | element face 70 9 | property list uchar uint vertex_indices 10 | end_header 11 | 1.000000 1.000000 0.152153 12 | -1.000000 1.000000 0.152153 13 | -1.000000 -1.000000 0.152153 14 | 1.000000 -1.000000 0.152153 15 | 1.000000 -1.000000 -0.185787 16 | -1.000000 -1.000000 -0.185787 17 | -1.000000 1.000000 -0.185787 18 | 1.000000 1.000000 -0.185787 19 | -1.000043 -0.785071 -0.015780 20 | -1.155724 -0.785071 -0.015780 21 | -1.155724 -0.918718 -0.015780 22 | -1.000043 -0.918718 -0.015780 23 | -1.155724 -0.785071 0.127052 24 | -1.000043 -0.785071 0.127052 25 | -1.000043 -0.918718 0.127052 26 | -1.155724 -0.918718 0.127052 27 | -1.234192 -0.918846 -0.087021 28 | -1.234397 -0.785201 -0.086336 29 | -1.235319 -0.784943 -0.229143 30 | -1.235114 -0.918588 -0.229828 31 | -1.388133 -0.919573 -0.078673 32 | -1.389056 -0.919314 -0.221479 33 | -1.389261 -0.785669 -0.220795 34 | -1.388338 -0.785927 -0.077988 35 | -1.000043 -0.219627 -0.015780 36 | -1.155724 -0.219627 -0.015780 37 | -1.155724 -0.353273 -0.015780 38 | -1.000043 -0.353273 -0.015780 39 | -1.155724 -0.219627 0.127052 40 | -1.000043 -0.219627 0.127052 41 | -1.000043 -0.353273 0.127052 42 | -1.155724 -0.353273 0.127052 43 | -1.234192 -0.353402 -0.087021 44 | -1.234397 -0.219756 -0.086336 45 | -1.235319 -0.219498 -0.229143 46 | -1.235114 -0.353143 -0.229828 47 | -1.388133 -0.354128 -0.078673 48 | -1.389056 -0.353870 -0.221479 49 | -1.389261 -0.220224 -0.220795 50 | -1.388338 -0.220482 -0.077988 51 | -1.000043 0.345818 -0.015780 52 | -1.155724 0.345818 -0.015780 53 | -1.155724 0.212172 -0.015780 54 | -1.000043 0.212172 -0.015780 55 | -1.155724 0.345818 0.127052 56 | -1.000043 0.345818 0.127052 57 | -1.000043 0.212172 0.127052 58 | -1.155724 0.212172 0.127052 59 | -1.234192 0.212043 -0.087021 60 | -1.234397 0.345689 -0.086336 61 | -1.235319 0.345947 -0.229143 62 | -1.235114 0.212301 -0.229828 63 | -1.388133 0.211317 -0.078673 64 | -1.389056 0.211575 -0.221479 65 | -1.389261 0.345221 -0.220795 66 | -1.388338 0.344962 -0.077988 67 | -1.000043 0.911263 -0.015780 68 | -1.155724 0.911263 -0.015780 69 | -1.155724 0.777617 -0.015780 70 | -1.000043 0.777617 -0.015780 71 | -1.155724 0.911263 0.127052 72 | -1.000043 0.911263 0.127052 73 | -1.000043 0.777617 0.127052 74 | -1.155724 0.777617 0.127052 75 | -1.234192 0.777488 -0.087021 76 | -1.234397 0.911133 -0.086336 77 | -1.235319 0.911392 -0.229143 78 | -1.235114 0.777746 -0.229828 79 | -1.388133 0.776762 -0.078673 80 | -1.389056 0.777020 -0.221479 81 | -1.389261 0.910665 -0.220795 82 | -1.388338 0.910407 -0.077988 83 | 1.000043 -0.785071 -0.015780 84 | 1.000043 -0.918718 -0.015780 85 | 1.155723 -0.918718 -0.015780 86 | 1.155723 -0.785071 -0.015780 87 | 1.155723 -0.785071 0.127052 88 | 1.155723 -0.918718 0.127052 89 | 1.000043 -0.918718 0.127052 90 | 1.000043 -0.785071 0.127052 91 | 1.234397 -0.785201 -0.086336 92 | 1.234192 -0.918846 -0.087021 93 | 1.235114 -0.918588 -0.229828 94 | 1.235319 -0.784943 -0.229143 95 | 1.388133 -0.919573 -0.078673 96 | 1.388338 -0.785927 -0.077988 97 | 1.389260 -0.785669 -0.220795 98 | 1.389056 -0.919314 -0.221479 99 | 1.000043 -0.219627 -0.015780 100 | 1.000043 -0.353273 -0.015780 101 | 1.155723 -0.353273 -0.015780 102 | 1.155723 -0.219627 -0.015780 103 | 1.155723 -0.219627 0.127052 104 | 1.155723 -0.353273 0.127052 105 | 1.000043 -0.353273 0.127052 106 | 1.000043 -0.219627 0.127052 107 | 1.234397 -0.219756 -0.086336 108 | 1.234192 -0.353402 -0.087021 109 | 1.235114 -0.353143 -0.229828 110 | 1.235319 -0.219498 -0.229143 111 | 1.388133 -0.354128 -0.078673 112 | 1.388338 -0.220482 -0.077988 113 | 1.389260 -0.220224 -0.220795 114 | 1.389056 -0.353870 -0.221479 115 | 1.000043 0.345818 -0.015780 116 | 1.000043 0.212172 -0.015780 117 | 1.155723 0.212172 -0.015780 118 | 1.155723 0.345818 -0.015780 119 | 1.155723 0.345818 0.127052 120 | 1.155723 0.212172 0.127052 121 | 1.000043 0.212172 0.127052 122 | 1.000043 0.345818 0.127052 123 | 1.234397 0.345689 -0.086336 124 | 1.234192 0.212043 -0.087021 125 | 1.235114 0.212301 -0.229828 126 | 1.235319 0.345947 -0.229143 127 | 1.388133 0.211317 -0.078673 128 | 1.388338 0.344962 -0.077988 129 | 1.389260 0.345221 -0.220795 130 | 1.389056 0.211575 -0.221479 131 | 1.000043 0.911263 -0.015780 132 | 1.000043 0.777616 -0.015780 133 | 1.155723 0.777616 -0.015780 134 | 1.155723 0.911263 -0.015780 135 | 1.155723 0.911263 0.127052 136 | 1.155723 0.777616 0.127052 137 | 1.000043 0.777616 0.127052 138 | 1.000043 0.911263 0.127052 139 | 1.234397 0.911133 -0.086336 140 | 1.234192 0.777488 -0.087021 141 | 1.235114 0.777746 -0.229828 142 | 1.235319 0.911392 -0.229143 143 | 1.388133 0.776762 -0.078673 144 | 1.388338 0.910407 -0.077988 145 | 1.389260 0.910665 -0.220795 146 | 1.389056 0.777020 -0.221479 147 | 4 0 1 2 3 148 | 4 4 3 2 5 149 | 4 5 2 1 6 150 | 4 6 7 4 5 151 | 4 7 0 3 4 152 | 4 6 1 0 7 153 | 4 8 9 10 11 154 | 4 12 13 14 15 155 | 4 13 8 11 14 156 | 4 12 15 16 17 157 | 4 10 9 18 19 158 | 4 20 21 22 23 159 | 4 17 16 20 23 160 | 4 19 18 22 21 161 | 4 24 25 26 27 162 | 4 28 29 30 31 163 | 4 29 24 27 30 164 | 4 28 31 32 33 165 | 4 26 25 34 35 166 | 4 36 37 38 39 167 | 4 33 32 36 39 168 | 4 35 34 38 37 169 | 4 40 41 42 43 170 | 4 44 45 46 47 171 | 4 45 40 43 46 172 | 4 44 47 48 49 173 | 4 42 41 50 51 174 | 4 52 53 54 55 175 | 4 49 48 52 55 176 | 4 51 50 54 53 177 | 4 56 57 58 59 178 | 4 60 61 62 63 179 | 4 61 56 59 62 180 | 4 60 63 64 65 181 | 4 58 57 66 67 182 | 4 68 69 70 71 183 | 4 65 64 68 71 184 | 4 67 66 70 69 185 | 4 72 73 74 75 186 | 4 76 77 78 79 187 | 4 79 78 73 72 188 | 4 76 80 81 77 189 | 4 74 82 83 75 190 | 4 84 85 86 87 191 | 4 80 85 84 81 192 | 4 82 87 86 83 193 | 4 88 89 90 91 194 | 4 92 93 94 95 195 | 4 95 94 89 88 196 | 4 92 96 97 93 197 | 4 90 98 99 91 198 | 4 100 101 102 103 199 | 4 96 101 100 97 200 | 4 98 103 102 99 201 | 4 104 105 106 107 202 | 4 108 109 110 111 203 | 4 111 110 105 104 204 | 4 108 112 113 109 205 | 4 106 114 115 107 206 | 4 116 117 118 119 207 | 4 112 117 116 113 208 | 4 114 119 118 115 209 | 4 120 121 122 123 210 | 4 124 125 126 127 211 | 4 127 126 121 120 212 | 4 124 128 129 125 213 | 4 122 130 131 123 214 | 4 132 133 134 135 215 | 4 128 133 132 129 216 | 4 130 135 134 131 217 | -------------------------------------------------------------------------------- /swd_probe_app.h: -------------------------------------------------------------------------------- 1 | #ifndef __ARHA_FLIPPERAPP_DEMO 2 | #define __ARHA_FLIPPERAPP_DEMO 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | #include "usb_uart.h" 27 | 28 | #define TAG "SWD" 29 | 30 | /* short debug message */ 31 | #define DBGS(format) furi_log_print_format(FuriLogLevelDebug, TAG, "%s: " format, __FUNCTION__) 32 | /* formatted debug message */ 33 | #define DBG(format, ...) \ 34 | furi_log_print_format(FuriLogLevelDebug, TAG, "%s: " format, __FUNCTION__, __VA_ARGS__) 35 | /* log message*/ 36 | #define LOG(...) furi_log_print_format(FuriLogLevelDefault, TAG, __VA_ARGS__) 37 | 38 | #define COUNT(x) ((size_t)(sizeof(x) / sizeof((x)[0]))) 39 | #define ARRAY_SIZE(x) COUNT(x) 40 | 41 | #define SWD_DELAY_US 0 42 | #define TIMER_HZ 25 43 | #define TIMEOUT 3 44 | #define QUEUE_SIZE 8 45 | #define IDLE_BITS 8 46 | #define CLOCK_DELAY 0 47 | 48 | #define MAX_FILE_LENGTH 128 49 | #define SCRIPT_MAX_LINES 1000 50 | 51 | typedef enum { 52 | ModePageScan = 0, 53 | ModePageFound = 1, 54 | ModePageDPRegs = 2, 55 | ModePageDPID = 3, 56 | ModePageAPID = 4, 57 | ModePageCount = 5, 58 | ModePageHexDump = 0x100, 59 | ModePageScript = 0x101, 60 | ModePageCoresight = 0x102, 61 | } ModePages; 62 | 63 | #define CDBGPWRUPREQ (1 << 28) 64 | #define CDBGPWRUPACK (1 << 29) 65 | #define CSYSPWRUPREQ (1 << 30) 66 | #define CSYSPWRUPACK (1 << 31) 67 | #define WDATAERR (1 << 7) 68 | #define STICKYERR (1 << 5) 69 | #define STAT_ERROR_FLAGS (WDATAERR | STICKYERR) 70 | 71 | #define REG_IDCODE 0x00 72 | #define REG_CTRLSTAT 0x01 73 | #define REG_CTRLSTAT_BANK 0x00 74 | #define REG_DLCR 0x01 75 | #define REG_DLCR_BANK 0x01 76 | #define REG_TARGETID 0x01 77 | #define REG_TARGETID_BANK 0x02 78 | #define REG_DLPIDR 0x01 79 | #define REG_DLPIDR_BANK 0x03 80 | #define REG_EVENTSTAT 0x01 81 | #define REG_EVENTSTAT_BANK 0x04 82 | 83 | #define REG_SELECT 0x02 84 | 85 | #define MEMAP_CSW 0x00 86 | #define MEMAP_TAR 0x04 87 | #define MEMAP_DRW 0x0C 88 | #define AP_IDR 0xFC 89 | #define AP_BASE 0xF8 90 | 91 | #define SCS_CPUID 0xE000ED00u 92 | #define SCS_CPACR 0xE000ED88u 93 | #define SCS_DHCSR 0xE000EDF0u 94 | #define SCS_DHCSR_S_HALT (1u << 17) 95 | #define SCS_DHCSR_C_MASKINTS (1u << 3) 96 | #define SCS_DHCSR_C_STEP (1u << 2) 97 | #define SCS_DHCSR_C_HALT (1u << 1) 98 | #define SCS_DHCSR_C_DEBUGEN (1u << 0) 99 | #define SCS_DHCSR_KEY 0xA05F0000u 100 | #define SCS_DCRSR 0xE000EDF4u 101 | #define SCS_DCRSR_RD 0x00000000u 102 | #define SCS_DCRSR_WR 0x00010000u 103 | #define SCS_DCRDR 0xE000EDF8u 104 | #define SCS_DEMCR 0xE000EDFCu 105 | 106 | typedef enum { KeyNone, KeyUp, KeyRight, KeyDown, KeyLeft, KeyOK } KeyCode; 107 | 108 | typedef enum { 109 | EventTimerTick, 110 | EventKeyPress, 111 | } EventType; 112 | 113 | typedef struct { 114 | EventType type; 115 | InputEvent input; 116 | } AppEvent; 117 | 118 | typedef struct { 119 | uint32_t ctrlstat; 120 | bool ctrlstat_ok; 121 | uint32_t dlcr; 122 | bool dlcr_ok; 123 | uint32_t dlpidr; 124 | bool dlpidr_ok; 125 | uint32_t dpidr; 126 | bool dpidr_ok; 127 | uint32_t eventstat; 128 | bool eventstat_ok; 129 | uint32_t select; 130 | bool select_ok; 131 | uint32_t targetid; 132 | bool targetid_ok; 133 | } swd_dpreg_t; 134 | 135 | typedef struct { 136 | bool ok; 137 | bool tested; 138 | uint8_t revision; 139 | uint16_t designer; 140 | uint8_t class; 141 | uint8_t variant; 142 | uint8_t type; 143 | uint32_t base; 144 | } swd_apidr_info_t; 145 | 146 | typedef struct { 147 | uint8_t revision; 148 | uint8_t partno; 149 | uint8_t version; 150 | uint16_t designer; 151 | } swd_dpidr_info_t; 152 | 153 | typedef struct { 154 | uint8_t revision; 155 | uint16_t partno; 156 | uint16_t designer; 157 | } swd_targetid_info_t; 158 | 159 | typedef struct sScriptContext ScriptContext; 160 | 161 | typedef struct { 162 | Storage* storage; 163 | Gui* gui; 164 | DialogsApp* dialogs; 165 | NotificationApp* notification; 166 | 167 | FuriTimer* timer; 168 | UsbUart* uart; 169 | ViewPort* view_port; 170 | 171 | FuriMessageQueue* event_queue; 172 | FuriMutex* swd_mutex; 173 | FuriMutex* gui_mutex; 174 | 175 | swd_targetid_info_t targetid_info; 176 | swd_dpidr_info_t dpidr_info; 177 | swd_dpreg_t dp_regs; 178 | swd_apidr_info_t apidr_info[256]; 179 | 180 | ScriptContext* script; 181 | ScriptContext* commandline; 182 | 183 | uint8_t timeout_overdue; 184 | uint32_t loop_count; 185 | uint8_t current_mask_id; 186 | uint32_t current_mask; 187 | uint8_t io_swc; 188 | uint8_t io_swd; 189 | uint8_t io_num_swc; 190 | uint8_t io_num_swd; 191 | int32_t detected_timeout; 192 | uint32_t swd_clock_delay; 193 | uint32_t swd_idle_bits; 194 | bool detected; 195 | bool detected_device; 196 | bool detected_notified; 197 | uint32_t mode_page; 198 | uint8_t ap_pos; 199 | uint8_t ap_scanned; 200 | 201 | uint32_t coresight_pos[16]; 202 | uint32_t coresight_count[16]; 203 | uint8_t coresight_level; 204 | uint32_t coresight_bases[16]; 205 | 206 | uint32_t hex_addr; 207 | uint8_t hex_select; 208 | uint8_t hex_buffer[32]; 209 | uint8_t hex_buffer_valid[8]; 210 | 211 | char state_string[64]; 212 | char script_detected[MAX_FILE_LENGTH]; 213 | bool script_detected_executed; 214 | } AppFSM; 215 | 216 | struct sScriptContext { 217 | AppFSM* app; 218 | ScriptContext* parent; 219 | char filename[MAX_FILE_LENGTH]; 220 | 221 | /* when used with string input */ 222 | char line_data[128]; 223 | uint64_t line_pos; 224 | 225 | /* when used with file input */ 226 | File* script_file; 227 | 228 | uint64_t position; 229 | uint32_t selected_ap; 230 | uint32_t max_tries; 231 | uint32_t block_size; 232 | 233 | bool abort; 234 | bool restart; 235 | bool errors_ignore; 236 | bool status_ignore; 237 | bool goto_active; 238 | char goto_label[64]; 239 | }; 240 | 241 | typedef struct { 242 | const char* prefix; 243 | bool (*func)(ScriptContext* ctx); 244 | } ScriptFunctionInfo; 245 | 246 | uint8_t swd_read_memory(AppFSM* const ctx, uint8_t ap, uint32_t address, uint32_t* data); 247 | 248 | #endif -------------------------------------------------------------------------------- /usb_uart.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "usb_uart.h" 5 | #include "furi_hal.h" 6 | #include 7 | #include "usb_cdc.h" 8 | #include "cli/cli_vcp.h" 9 | #include 10 | #include "cli/cli.h" 11 | 12 | #define USB_CDC_PKT_LEN CDC_DATA_SZ 13 | #define USB_UART_RX_BUF_SIZE (USB_CDC_PKT_LEN * 5) 14 | 15 | #define USB_CDC_BIT_DTR (1 << 0) 16 | #define USB_CDC_BIT_RTS (1 << 1) 17 | 18 | typedef enum { 19 | WorkerEvtStop = (1 << 0), 20 | WorkerEvtCdcRx = (1 << 1), 21 | WorkerEvtCfgChange = (1 << 2) 22 | 23 | } WorkerEvtFlags; 24 | 25 | #define WORKER_ALL_EVENTS (WorkerEvtStop | WorkerEvtCfgChange | WorkerEvtCdcRx) 26 | 27 | struct UsbUart { 28 | UsbUartConfig cfg; 29 | UsbUartConfig cfg_new; 30 | 31 | FuriThread* thread; 32 | FuriMutex* usb_mutex; 33 | FuriSemaphore* tx_sem; 34 | UsbUartState st; 35 | FuriApiLock cfg_lock; 36 | 37 | uint8_t rx_buf[USB_CDC_PKT_LEN]; 38 | }; 39 | 40 | static void vcp_on_cdc_tx_complete(void* context); 41 | static void vcp_on_cdc_rx(void* context); 42 | static void vcp_state_callback(void* context, uint8_t state); 43 | static void vcp_on_cdc_control_line(void* context, uint8_t state); 44 | static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config); 45 | 46 | static const CdcCallbacks cdc_cb = { 47 | .tx_ep_callback = &vcp_on_cdc_tx_complete, 48 | .rx_ep_callback = &vcp_on_cdc_rx, 49 | .state_callback = &vcp_state_callback, 50 | .ctrl_line_callback = &vcp_on_cdc_control_line, 51 | .config_callback = &vcp_on_line_config}; 52 | 53 | static void usb_uart_vcp_init(UsbUart* usb_uart, uint8_t vcp_ch) { 54 | furi_hal_usb_unlock(); 55 | 56 | Cli* cli = furi_record_open(RECORD_CLI); 57 | cli_session_close(cli); 58 | 59 | if(vcp_ch == 0) { 60 | furi_check(furi_hal_usb_set_config(&usb_cdc_single, NULL) == true); 61 | } else { 62 | furi_check(furi_hal_usb_set_config(&usb_cdc_dual, NULL) == true); 63 | cli_session_open(cli, &cli_vcp); 64 | } 65 | furi_record_close(RECORD_CLI); 66 | furi_hal_cdc_set_callbacks(vcp_ch, (CdcCallbacks*)&cdc_cb, usb_uart); 67 | } 68 | 69 | static void usb_uart_vcp_deinit(UsbUart* usb_uart, uint8_t vcp_ch) { 70 | UNUSED(usb_uart); 71 | furi_hal_cdc_set_callbacks(vcp_ch, NULL, NULL); 72 | if(vcp_ch != 0) { 73 | Cli* cli = furi_record_open(RECORD_CLI); 74 | cli_session_close(cli); 75 | furi_record_close(RECORD_CLI); 76 | } 77 | } 78 | 79 | bool usb_uart_tx_data(UsbUart* usb_uart, uint8_t* data, size_t length) { 80 | uint32_t pos = 0; 81 | while(pos < length) { 82 | size_t pkt_size = length - pos; 83 | 84 | if(pkt_size > USB_CDC_PKT_LEN) { 85 | pkt_size = USB_CDC_PKT_LEN; 86 | } 87 | 88 | if(furi_semaphore_acquire(usb_uart->tx_sem, 100) != FuriStatusOk) { 89 | return false; 90 | } 91 | if(furi_mutex_acquire(usb_uart->usb_mutex, 100) != FuriStatusOk) { 92 | furi_semaphore_release(usb_uart->tx_sem); 93 | return false; 94 | } 95 | furi_hal_cdc_send(usb_uart->cfg.vcp_ch, &data[pos], pkt_size); 96 | furi_mutex_release(usb_uart->usb_mutex); 97 | usb_uart->st.tx_cnt += pkt_size; 98 | pos += pkt_size; 99 | } 100 | return true; 101 | } 102 | 103 | static int32_t usb_uart_worker(void* context) { 104 | UsbUart* usb_uart = (UsbUart*)context; 105 | 106 | memcpy(&usb_uart->cfg, &usb_uart->cfg_new, sizeof(UsbUartConfig)); 107 | 108 | usb_uart->tx_sem = furi_semaphore_alloc(1, 1); 109 | usb_uart->usb_mutex = furi_mutex_alloc(FuriMutexTypeNormal); 110 | 111 | usb_uart_vcp_init(usb_uart, usb_uart->cfg.vcp_ch); 112 | 113 | uint8_t data[2 * USB_CDC_PKT_LEN]; 114 | size_t remain = 0; 115 | 116 | while(1) { 117 | uint32_t events = 118 | furi_thread_flags_wait(WORKER_ALL_EVENTS, FuriFlagWaitAny, FuriWaitForever); 119 | furi_check(!(events & FuriFlagError)); 120 | 121 | if(events & WorkerEvtStop) { 122 | break; 123 | } 124 | 125 | if(events & WorkerEvtCdcRx) { 126 | size_t len = 0; 127 | if(furi_mutex_acquire(usb_uart->usb_mutex, 100) == FuriStatusOk) { 128 | len = furi_hal_cdc_receive(usb_uart->cfg.vcp_ch, &data[remain], USB_CDC_PKT_LEN); 129 | furi_mutex_release(usb_uart->usb_mutex); 130 | } 131 | 132 | if(len > 0) { 133 | usb_uart->st.rx_cnt += len; 134 | remain += len; 135 | 136 | size_t handled = usb_uart->cfg.rx_data(usb_uart->cfg.rx_data_ctx, data, remain); 137 | 138 | memcpy(data, &data[handled], remain - handled); 139 | remain -= handled; 140 | } 141 | } 142 | 143 | if(events & WorkerEvtCfgChange) { 144 | if(usb_uart->cfg.vcp_ch != usb_uart->cfg_new.vcp_ch) { 145 | usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch); 146 | usb_uart_vcp_init(usb_uart, usb_uart->cfg_new.vcp_ch); 147 | 148 | usb_uart->cfg.vcp_ch = usb_uart->cfg_new.vcp_ch; 149 | } 150 | api_lock_unlock(usb_uart->cfg_lock); 151 | } 152 | } 153 | usb_uart_vcp_deinit(usb_uart, usb_uart->cfg.vcp_ch); 154 | 155 | furi_mutex_free(usb_uart->usb_mutex); 156 | furi_semaphore_free(usb_uart->tx_sem); 157 | 158 | furi_hal_usb_unlock(); 159 | furi_check(furi_hal_usb_set_config(&usb_cdc_single, NULL) == true); 160 | Cli* cli = furi_record_open(RECORD_CLI); 161 | cli_session_open(cli, &cli_vcp); 162 | furi_record_close(RECORD_CLI); 163 | 164 | return 0; 165 | } 166 | 167 | /* VCP callbacks */ 168 | static void vcp_on_cdc_tx_complete(void* context) { 169 | UsbUart* usb_uart = (UsbUart*)context; 170 | furi_semaphore_release(usb_uart->tx_sem); 171 | } 172 | 173 | static void vcp_on_cdc_rx(void* context) { 174 | UsbUart* usb_uart = (UsbUart*)context; 175 | furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtCdcRx); 176 | } 177 | 178 | static void vcp_state_callback(void* context, uint8_t state) { 179 | UNUSED(context); 180 | UNUSED(state); 181 | } 182 | 183 | static void vcp_on_cdc_control_line(void* context, uint8_t state) { 184 | UNUSED(context); 185 | UNUSED(state); 186 | } 187 | 188 | static void vcp_on_line_config(void* context, struct usb_cdc_line_coding* config) { 189 | UNUSED(context); 190 | UNUSED(config); 191 | } 192 | 193 | UsbUart* usb_uart_enable(UsbUartConfig* cfg) { 194 | UsbUart* usb_uart = malloc(sizeof(UsbUart)); 195 | memcpy(&(usb_uart->cfg_new), cfg, sizeof(UsbUartConfig)); 196 | 197 | usb_uart->thread = furi_thread_alloc_ex("UsbUartWorker", 1024, usb_uart_worker, usb_uart); 198 | furi_thread_start(usb_uart->thread); 199 | return usb_uart; 200 | } 201 | 202 | void usb_uart_disable(UsbUart* usb_uart) { 203 | furi_assert(usb_uart); 204 | furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtStop); 205 | furi_thread_join(usb_uart->thread); 206 | furi_thread_free(usb_uart->thread); 207 | free(usb_uart); 208 | } 209 | 210 | void usb_uart_set_config(UsbUart* usb_uart, UsbUartConfig* cfg) { 211 | furi_assert(usb_uart); 212 | furi_assert(cfg); 213 | usb_uart->cfg_lock = api_lock_alloc_locked(); 214 | memcpy(&(usb_uart->cfg_new), cfg, sizeof(UsbUartConfig)); 215 | furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtCfgChange); 216 | api_lock_wait_unlock_and_free(usb_uart->cfg_lock); 217 | } 218 | 219 | void usb_uart_get_config(UsbUart* usb_uart, UsbUartConfig* cfg) { 220 | furi_assert(usb_uart); 221 | furi_assert(cfg); 222 | memcpy(cfg, &(usb_uart->cfg_new), sizeof(UsbUartConfig)); 223 | } 224 | 225 | void usb_uart_get_state(UsbUart* usb_uart, UsbUartState* st) { 226 | furi_assert(usb_uart); 227 | furi_assert(st); 228 | memcpy(st, &(usb_uart->st), sizeof(UsbUartState)); 229 | } 230 | -------------------------------------------------------------------------------- /model/model_chip.h: -------------------------------------------------------------------------------- 1 | #define NUM_VERTICES 136 2 | float vertexCoords[NUM_VERTICES][3] = { 3 | {1.000000, 1.000000, 0.152153}, 4 | {-1.000000, 1.000000, 0.152153}, 5 | {-1.000000, -1.000000, 0.152153}, 6 | {1.000000, -1.000000, 0.152153}, 7 | {1.000000, -1.000000, -0.185787}, 8 | {-1.000000, -1.000000, -0.185787}, 9 | {-1.000000, 1.000000, -0.185787}, 10 | {1.000000, 1.000000, -0.185787}, 11 | {-1.000043, -0.785071, -0.015780}, 12 | {-1.155724, -0.785071, -0.015780}, 13 | {-1.155724, -0.918718, -0.015780}, 14 | {-1.000043, -0.918718, -0.015780}, 15 | {-1.155724, -0.785071, 0.127052}, 16 | {-1.000043, -0.785071, 0.127052}, 17 | {-1.000043, -0.918718, 0.127052}, 18 | {-1.155724, -0.918718, 0.127052}, 19 | {-1.234192, -0.918846, -0.087021}, 20 | {-1.234397, -0.785201, -0.086336}, 21 | {-1.235319, -0.784943, -0.229143}, 22 | {-1.235114, -0.918588, -0.229828}, 23 | {-1.388133, -0.919573, -0.078673}, 24 | {-1.389056, -0.919314, -0.221479}, 25 | {-1.389261, -0.785669, -0.220795}, 26 | {-1.388338, -0.785927, -0.077988}, 27 | {-1.000043, -0.219627, -0.015780}, 28 | {-1.155724, -0.219627, -0.015780}, 29 | {-1.155724, -0.353273, -0.015780}, 30 | {-1.000043, -0.353273, -0.015780}, 31 | {-1.155724, -0.219627, 0.127052}, 32 | {-1.000043, -0.219627, 0.127052}, 33 | {-1.000043, -0.353273, 0.127052}, 34 | {-1.155724, -0.353273, 0.127052}, 35 | {-1.234192, -0.353402, -0.087021}, 36 | {-1.234397, -0.219756, -0.086336}, 37 | {-1.235319, -0.219498, -0.229143}, 38 | {-1.235114, -0.353143, -0.229828}, 39 | {-1.388133, -0.354128, -0.078673}, 40 | {-1.389056, -0.353870, -0.221479}, 41 | {-1.389261, -0.220224, -0.220795}, 42 | {-1.388338, -0.220482, -0.077988}, 43 | {-1.000043, 0.345818, -0.015780}, 44 | {-1.155724, 0.345818, -0.015780}, 45 | {-1.155724, 0.212172, -0.015780}, 46 | {-1.000043, 0.212172, -0.015780}, 47 | {-1.155724, 0.345818, 0.127052}, 48 | {-1.000043, 0.345818, 0.127052}, 49 | {-1.000043, 0.212172, 0.127052}, 50 | {-1.155724, 0.212172, 0.127052}, 51 | {-1.234192, 0.212043, -0.087021}, 52 | {-1.234397, 0.345689, -0.086336}, 53 | {-1.235319, 0.345947, -0.229143}, 54 | {-1.235114, 0.212301, -0.229828}, 55 | {-1.388133, 0.211317, -0.078673}, 56 | {-1.389056, 0.211575, -0.221479}, 57 | {-1.389261, 0.345221, -0.220795}, 58 | {-1.388338, 0.344962, -0.077988}, 59 | {-1.000043, 0.911263, -0.015780}, 60 | {-1.155724, 0.911263, -0.015780}, 61 | {-1.155724, 0.777617, -0.015780}, 62 | {-1.000043, 0.777617, -0.015780}, 63 | {-1.155724, 0.911263, 0.127052}, 64 | {-1.000043, 0.911263, 0.127052}, 65 | {-1.000043, 0.777617, 0.127052}, 66 | {-1.155724, 0.777617, 0.127052}, 67 | {-1.234192, 0.777488, -0.087021}, 68 | {-1.234397, 0.911133, -0.086336}, 69 | {-1.235319, 0.911392, -0.229143}, 70 | {-1.235114, 0.777746, -0.229828}, 71 | {-1.388133, 0.776762, -0.078673}, 72 | {-1.389056, 0.777020, -0.221479}, 73 | {-1.389261, 0.910665, -0.220795}, 74 | {-1.388338, 0.910407, -0.077988}, 75 | {1.000043, -0.785071, -0.015780}, 76 | {1.000043, -0.918718, -0.015780}, 77 | {1.155723, -0.918718, -0.015780}, 78 | {1.155723, -0.785071, -0.015780}, 79 | {1.155723, -0.785071, 0.127052}, 80 | {1.155723, -0.918718, 0.127052}, 81 | {1.000043, -0.918718, 0.127052}, 82 | {1.000043, -0.785071, 0.127052}, 83 | {1.234397, -0.785201, -0.086336}, 84 | {1.234192, -0.918846, -0.087021}, 85 | {1.235114, -0.918588, -0.229828}, 86 | {1.235319, -0.784943, -0.229143}, 87 | {1.388133, -0.919573, -0.078673}, 88 | {1.388338, -0.785927, -0.077988}, 89 | {1.389260, -0.785669, -0.220795}, 90 | {1.389056, -0.919314, -0.221479}, 91 | {1.000043, -0.219627, -0.015780}, 92 | {1.000043, -0.353273, -0.015780}, 93 | {1.155723, -0.353273, -0.015780}, 94 | {1.155723, -0.219627, -0.015780}, 95 | {1.155723, -0.219627, 0.127052}, 96 | {1.155723, -0.353273, 0.127052}, 97 | {1.000043, -0.353273, 0.127052}, 98 | {1.000043, -0.219627, 0.127052}, 99 | {1.234397, -0.219756, -0.086336}, 100 | {1.234192, -0.353402, -0.087021}, 101 | {1.235114, -0.353143, -0.229828}, 102 | {1.235319, -0.219498, -0.229143}, 103 | {1.388133, -0.354128, -0.078673}, 104 | {1.388338, -0.220482, -0.077988}, 105 | {1.389260, -0.220224, -0.220795}, 106 | {1.389056, -0.353870, -0.221479}, 107 | {1.000043, 0.345818, -0.015780}, 108 | {1.000043, 0.212172, -0.015780}, 109 | {1.155723, 0.212172, -0.015780}, 110 | {1.155723, 0.345818, -0.015780}, 111 | {1.155723, 0.345818, 0.127052}, 112 | {1.155723, 0.212172, 0.127052}, 113 | {1.000043, 0.212172, 0.127052}, 114 | {1.000043, 0.345818, 0.127052}, 115 | {1.234397, 0.345689, -0.086336}, 116 | {1.234192, 0.212043, -0.087021}, 117 | {1.235114, 0.212301, -0.229828}, 118 | {1.235319, 0.345947, -0.229143}, 119 | {1.388133, 0.211317, -0.078673}, 120 | {1.388338, 0.344962, -0.077988}, 121 | {1.389260, 0.345221, -0.220795}, 122 | {1.389056, 0.211575, -0.221479}, 123 | {1.000043, 0.911263, -0.015780}, 124 | {1.000043, 0.777616, -0.015780}, 125 | {1.155723, 0.777616, -0.015780}, 126 | {1.155723, 0.911263, -0.015780}, 127 | {1.155723, 0.911263, 0.127052}, 128 | {1.155723, 0.777616, 0.127052}, 129 | {1.000043, 0.777616, 0.127052}, 130 | {1.000043, 0.911263, 0.127052}, 131 | {1.234397, 0.911133, -0.086336}, 132 | {1.234192, 0.777488, -0.087021}, 133 | {1.235114, 0.777746, -0.229828}, 134 | {1.235319, 0.911392, -0.229143}, 135 | {1.388133, 0.776762, -0.078673}, 136 | {1.388338, 0.910407, -0.077988}, 137 | {1.389260, 0.910665, -0.220795}, 138 | {1.389056, 0.777020, -0.221479}, 139 | };int edgeIndices[][3] = { 140 | {0, 1}, 141 | {1, 2}, 142 | {2, 3}, 143 | {3, 0}, 144 | {4, 3}, 145 | {3, 2}, 146 | {2, 5}, 147 | {5, 4}, 148 | {5, 2}, 149 | {2, 1}, 150 | {1, 6}, 151 | {6, 5}, 152 | {6, 7}, 153 | {7, 4}, 154 | {4, 5}, 155 | {5, 6}, 156 | {7, 0}, 157 | {0, 3}, 158 | {3, 4}, 159 | {4, 7}, 160 | {6, 1}, 161 | {1, 0}, 162 | {0, 7}, 163 | {7, 6}, 164 | {8, 9}, 165 | {9, 10}, 166 | {10, 11}, 167 | {11, 8}, 168 | {12, 13}, 169 | {13, 14}, 170 | {14, 15}, 171 | {15, 12}, 172 | {13, 8}, 173 | {8, 11}, 174 | {11, 14}, 175 | {14, 13}, 176 | {12, 15}, 177 | {15, 16}, 178 | {16, 17}, 179 | {17, 12}, 180 | {10, 9}, 181 | {9, 18}, 182 | {18, 19}, 183 | {19, 10}, 184 | {20, 21}, 185 | {21, 22}, 186 | {22, 23}, 187 | {23, 20}, 188 | {17, 16}, 189 | {16, 20}, 190 | {20, 23}, 191 | {23, 17}, 192 | {19, 18}, 193 | {18, 22}, 194 | {22, 21}, 195 | {21, 19}, 196 | {24, 25}, 197 | {25, 26}, 198 | {26, 27}, 199 | {27, 24}, 200 | {28, 29}, 201 | {29, 30}, 202 | {30, 31}, 203 | {31, 28}, 204 | {29, 24}, 205 | {24, 27}, 206 | {27, 30}, 207 | {30, 29}, 208 | {28, 31}, 209 | {31, 32}, 210 | {32, 33}, 211 | {33, 28}, 212 | {26, 25}, 213 | {25, 34}, 214 | {34, 35}, 215 | {35, 26}, 216 | {36, 37}, 217 | {37, 38}, 218 | {38, 39}, 219 | {39, 36}, 220 | {33, 32}, 221 | {32, 36}, 222 | {36, 39}, 223 | {39, 33}, 224 | {35, 34}, 225 | {34, 38}, 226 | {38, 37}, 227 | {37, 35}, 228 | {40, 41}, 229 | {41, 42}, 230 | {42, 43}, 231 | {43, 40}, 232 | {44, 45}, 233 | {45, 46}, 234 | {46, 47}, 235 | {47, 44}, 236 | {45, 40}, 237 | {40, 43}, 238 | {43, 46}, 239 | {46, 45}, 240 | {44, 47}, 241 | {47, 48}, 242 | {48, 49}, 243 | {49, 44}, 244 | {42, 41}, 245 | {41, 50}, 246 | {50, 51}, 247 | {51, 42}, 248 | {52, 53}, 249 | {53, 54}, 250 | {54, 55}, 251 | {55, 52}, 252 | {49, 48}, 253 | {48, 52}, 254 | {52, 55}, 255 | {55, 49}, 256 | {51, 50}, 257 | {50, 54}, 258 | {54, 53}, 259 | {53, 51}, 260 | {56, 57}, 261 | {57, 58}, 262 | {58, 59}, 263 | {59, 56}, 264 | {60, 61}, 265 | {61, 62}, 266 | {62, 63}, 267 | {63, 60}, 268 | {61, 56}, 269 | {56, 59}, 270 | {59, 62}, 271 | {62, 61}, 272 | {60, 63}, 273 | {63, 64}, 274 | {64, 65}, 275 | {65, 60}, 276 | {58, 57}, 277 | {57, 66}, 278 | {66, 67}, 279 | {67, 58}, 280 | {68, 69}, 281 | {69, 70}, 282 | {70, 71}, 283 | {71, 68}, 284 | {65, 64}, 285 | {64, 68}, 286 | {68, 71}, 287 | {71, 65}, 288 | {67, 66}, 289 | {66, 70}, 290 | {70, 69}, 291 | {69, 67}, 292 | {72, 73}, 293 | {73, 74}, 294 | {74, 75}, 295 | {75, 72}, 296 | {76, 77}, 297 | {77, 78}, 298 | {78, 79}, 299 | {79, 76}, 300 | {79, 78}, 301 | {78, 73}, 302 | {73, 72}, 303 | {72, 79}, 304 | {76, 80}, 305 | {80, 81}, 306 | {81, 77}, 307 | {77, 76}, 308 | {74, 82}, 309 | {82, 83}, 310 | {83, 75}, 311 | {75, 74}, 312 | {84, 85}, 313 | {85, 86}, 314 | {86, 87}, 315 | {87, 84}, 316 | {80, 85}, 317 | {85, 84}, 318 | {84, 81}, 319 | {81, 80}, 320 | {82, 87}, 321 | {87, 86}, 322 | {86, 83}, 323 | {83, 82}, 324 | {88, 89}, 325 | {89, 90}, 326 | {90, 91}, 327 | {91, 88}, 328 | {92, 93}, 329 | {93, 94}, 330 | {94, 95}, 331 | {95, 92}, 332 | {95, 94}, 333 | {94, 89}, 334 | {89, 88}, 335 | {88, 95}, 336 | {92, 96}, 337 | {96, 97}, 338 | {97, 93}, 339 | {93, 92}, 340 | {90, 98}, 341 | {98, 99}, 342 | {99, 91}, 343 | {91, 90}, 344 | {100, 101}, 345 | {101, 102}, 346 | {102, 103}, 347 | {103, 100}, 348 | {96, 101}, 349 | {101, 100}, 350 | {100, 97}, 351 | {97, 96}, 352 | {98, 103}, 353 | {103, 102}, 354 | {102, 99}, 355 | {99, 98}, 356 | {104, 105}, 357 | {105, 106}, 358 | {106, 107}, 359 | {107, 104}, 360 | {108, 109}, 361 | {109, 110}, 362 | {110, 111}, 363 | {111, 108}, 364 | {111, 110}, 365 | {110, 105}, 366 | {105, 104}, 367 | {104, 111}, 368 | {108, 112}, 369 | {112, 113}, 370 | {113, 109}, 371 | {109, 108}, 372 | {106, 114}, 373 | {114, 115}, 374 | {115, 107}, 375 | {107, 106}, 376 | {116, 117}, 377 | {117, 118}, 378 | {118, 119}, 379 | {119, 116}, 380 | {112, 117}, 381 | {117, 116}, 382 | {116, 113}, 383 | {113, 112}, 384 | {114, 119}, 385 | {119, 118}, 386 | {118, 115}, 387 | {115, 114}, 388 | {120, 121}, 389 | {121, 122}, 390 | {122, 123}, 391 | {123, 120}, 392 | {124, 125}, 393 | {125, 126}, 394 | {126, 127}, 395 | {127, 124}, 396 | {127, 126}, 397 | {126, 121}, 398 | {121, 120}, 399 | {120, 127}, 400 | {124, 128}, 401 | {128, 129}, 402 | {129, 125}, 403 | {125, 124}, 404 | {122, 130}, 405 | {130, 131}, 406 | {131, 123}, 407 | {123, 122}, 408 | {132, 133}, 409 | {133, 134}, 410 | {134, 135}, 411 | {135, 132}, 412 | {128, 133}, 413 | {133, 132}, 414 | {132, 129}, 415 | {129, 128}, 416 | {130, 135}, 417 | {135, 134}, 418 | {134, 131}, 419 | {131, 130}, 420 | }; 421 | -------------------------------------------------------------------------------- /adi.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | 5 | #include "adi.h" 6 | #include "swd_probe_app.h" 7 | 8 | /* https://github.com/openocd-org/openocd/blob/master/src/target/arm_adi_v5.c */ 9 | 10 | /* 11 | static const char* class_description[16] = { 12 | [0x0] = "Generic verification component", 13 | [0x1] = "(ROM Table)", 14 | [0x2] = "Reserved", 15 | [0x3] = "Reserved", 16 | [0x4] = "Reserved", 17 | [0x5] = "Reserved", 18 | [0x6] = "Reserved", 19 | [0x7] = "Reserved", 20 | [0x8] = "Reserved", 21 | [0x9] = "CoreSight component", 22 | [0xA] = "Reserved", 23 | [0xB] = "Peripheral Test Block", 24 | [0xC] = "Reserved", 25 | [0xD] = "OptimoDE DESS", 26 | [0xE] = "Generic IP component", 27 | [0xF] = "CoreLink, PrimeCell or System component", 28 | }; 29 | */ 30 | 31 | static const struct { 32 | uint32_t arch_id; 33 | const char* description; 34 | } class0x9_devarch[] = { 35 | /* keep same unsorted order as in ARM IHI0029E */ 36 | {ARCH_ID(ARM_ID, 0x0A00), "RAS architecture"}, 37 | {ARCH_ID(ARM_ID, 0x1A01), "Instrumentation Trace Macrocell (ITM) architecture"}, 38 | {ARCH_ID(ARM_ID, 0x1A02), "DWT architecture"}, 39 | {ARCH_ID(ARM_ID, 0x1A03), "Flash Patch and Breakpoint unit (FPB) architecture"}, 40 | {ARCH_ID(ARM_ID, 0x2A04), "Processor debug architecture (ARMv8-M)"}, 41 | {ARCH_ID(ARM_ID, 0x6A05), "Processor debug architecture (ARMv8-R)"}, 42 | {ARCH_ID(ARM_ID, 0x0A10), "PC sample-based profiling"}, 43 | {ARCH_ID(ARM_ID, 0x4A13), "Embedded Trace Macrocell (ETM) architecture"}, 44 | {ARCH_ID(ARM_ID, 0x1A14), "Cross Trigger Interface (CTI) architecture"}, 45 | {ARCH_ID(ARM_ID, 0x6A15), "Processor debug architecture (v8.0-A)"}, 46 | {ARCH_ID(ARM_ID, 0x7A15), "Processor debug architecture (v8.1-A)"}, 47 | {ARCH_ID(ARM_ID, 0x8A15), "Processor debug architecture (v8.2-A)"}, 48 | {ARCH_ID(ARM_ID, 0x2A16), "Processor Performance Monitor (PMU) architecture"}, 49 | {ARCH_ID(ARM_ID, 0x0A17), "Memory Access Port v2 architecture"}, 50 | {ARCH_ID(ARM_ID, 0x0A27), "JTAG Access Port v2 architecture"}, 51 | {ARCH_ID(ARM_ID, 0x0A31), "Basic trace router"}, 52 | {ARCH_ID(ARM_ID, 0x0A37), "Power requestor"}, 53 | {ARCH_ID(ARM_ID, 0x0A47), "Unknown Access Port v2 architecture"}, 54 | {ARCH_ID(ARM_ID, 0x0A50), "HSSTP architecture"}, 55 | {ARCH_ID(ARM_ID, 0x0A63), "System Trace Macrocell (STM) architecture"}, 56 | {ARCH_ID(ARM_ID, 0x0A75), "CoreSight ELA architecture"}, 57 | {ARCH_ID(ARM_ID, 0x0AF7), "CoreSight ROM architecture"}, 58 | }; 59 | 60 | /* Part number interpretations are from Cortex 61 | * core specs, the CoreSight components TRM 62 | * (ARM DDI 0314H), CoreSight System Design 63 | * Guide (ARM DGI 0012D) and ETM specs; also 64 | * from chip observation (e.g. TI SDTI). 65 | */ 66 | 67 | static const struct dap_part_nums { 68 | uint16_t designer_id; 69 | uint16_t part_num; 70 | const char* type; 71 | const char* full; 72 | } dap_part_nums[] = { 73 | { 74 | ARM_ID, 75 | 0x000, 76 | "Cortex-M3 SCS", 77 | "(System Control Space)", 78 | }, 79 | { 80 | ARM_ID, 81 | 0x001, 82 | "Cortex-M3 ITM", 83 | "(Instrumentation Trace Module)", 84 | }, 85 | { 86 | ARM_ID, 87 | 0x002, 88 | "Cortex-M3 DWT", 89 | "(Data Watchpoint and Trace)", 90 | }, 91 | { 92 | ARM_ID, 93 | 0x003, 94 | "Cortex-M3 FPB", 95 | "(Flash Patch and Breakpoint)", 96 | }, 97 | { 98 | ARM_ID, 99 | 0x008, 100 | "Cortex-M0 SCS", 101 | "(System Control Space)", 102 | }, 103 | { 104 | ARM_ID, 105 | 0x00a, 106 | "Cortex-M0 DWT", 107 | "(Data Watchpoint and Trace)", 108 | }, 109 | { 110 | ARM_ID, 111 | 0x00b, 112 | "Cortex-M0 BPU", 113 | "(Breakpoint Unit)", 114 | }, 115 | { 116 | ARM_ID, 117 | 0x00c, 118 | "Cortex-M4 SCS", 119 | "(System Control Space)", 120 | }, 121 | { 122 | ARM_ID, 123 | 0x00d, 124 | "CoreSight ETM11", 125 | "(Embedded Trace)", 126 | }, 127 | { 128 | ARM_ID, 129 | 0x00e, 130 | "Cortex-M7 FPB", 131 | "(Flash Patch and Breakpoint)", 132 | }, 133 | { 134 | ARM_ID, 135 | 0x193, 136 | "SoC-600 TSGEN", 137 | "(Timestamp Generator)", 138 | }, 139 | { 140 | ARM_ID, 141 | 0x470, 142 | "Cortex-M1 ROM", 143 | "(ROM Table)", 144 | }, 145 | { 146 | ARM_ID, 147 | 0x471, 148 | "Cortex-M0 ROM", 149 | "(ROM Table)", 150 | }, 151 | { 152 | ARM_ID, 153 | 0x490, 154 | "Cortex-A15 GIC", 155 | "(Generic Interrupt Controller)", 156 | }, 157 | { 158 | ARM_ID, 159 | 0x492, 160 | "Cortex-R52 GICD", 161 | "(Distributor)", 162 | }, 163 | { 164 | ARM_ID, 165 | 0x493, 166 | "Cortex-R52 GICR", 167 | "(Redistributor)", 168 | }, 169 | { 170 | ARM_ID, 171 | 0x4a1, 172 | "Cortex-A53 ROM", 173 | "(v8 Memory Map ROM Table)", 174 | }, 175 | { 176 | ARM_ID, 177 | 0x4a2, 178 | "Cortex-A57 ROM", 179 | "(ROM Table)", 180 | }, 181 | { 182 | ARM_ID, 183 | 0x4a3, 184 | "Cortex-A53 ROM", 185 | "(v7 Memory Map ROM Table)", 186 | }, 187 | { 188 | ARM_ID, 189 | 0x4a4, 190 | "Cortex-A72 ROM", 191 | "(ROM Table)", 192 | }, 193 | { 194 | ARM_ID, 195 | 0x4a9, 196 | "Cortex-A9 ROM", 197 | "(ROM Table)", 198 | }, 199 | { 200 | ARM_ID, 201 | 0x4aa, 202 | "Cortex-A35 ROM", 203 | "(v8 Memory Map ROM Table)", 204 | }, 205 | { 206 | ARM_ID, 207 | 0x4af, 208 | "Cortex-A15 ROM", 209 | "(ROM Table)", 210 | }, 211 | { 212 | ARM_ID, 213 | 0x4b5, 214 | "Cortex-R5 ROM", 215 | "(ROM Table)", 216 | }, 217 | { 218 | ARM_ID, 219 | 0x4b8, 220 | "Cortex-R52 ROM", 221 | "(ROM Table)", 222 | }, 223 | { 224 | ARM_ID, 225 | 0x4c0, 226 | "Cortex-M0+ ROM", 227 | "(ROM Table)", 228 | }, 229 | { 230 | ARM_ID, 231 | 0x4c3, 232 | "Cortex-M3 ROM", 233 | "(ROM Table)", 234 | }, 235 | { 236 | ARM_ID, 237 | 0x4c4, 238 | "Cortex-M4 ROM", 239 | "(ROM Table)", 240 | }, 241 | { 242 | ARM_ID, 243 | 0x4c7, 244 | "Cortex-M7 PPB ROM", 245 | "(Private Peripheral Bus ROM Table)", 246 | }, 247 | { 248 | ARM_ID, 249 | 0x4c8, 250 | "Cortex-M7 ROM", 251 | "(ROM Table)", 252 | }, 253 | { 254 | ARM_ID, 255 | 0x4e0, 256 | "Cortex-A35 ROM", 257 | "(v7 Memory Map ROM Table)", 258 | }, 259 | { 260 | ARM_ID, 261 | 0x4e4, 262 | "Cortex-A76 ROM", 263 | "(ROM Table)", 264 | }, 265 | { 266 | ARM_ID, 267 | 0x906, 268 | "CoreSight CTI", 269 | "(Cross Trigger)", 270 | }, 271 | { 272 | ARM_ID, 273 | 0x907, 274 | "CoreSight ETB", 275 | "(Trace Buffer)", 276 | }, 277 | { 278 | ARM_ID, 279 | 0x908, 280 | "CoreSight CSTF", 281 | "(Trace Funnel)", 282 | }, 283 | { 284 | ARM_ID, 285 | 0x909, 286 | "CoreSight ATBR", 287 | "(Advanced Trace Bus Replicator)", 288 | }, 289 | { 290 | ARM_ID, 291 | 0x910, 292 | "CoreSight ETM9", 293 | "(Embedded Trace)", 294 | }, 295 | { 296 | ARM_ID, 297 | 0x912, 298 | "CoreSight TPIU", 299 | "(Trace Port Interface Unit)", 300 | }, 301 | { 302 | ARM_ID, 303 | 0x913, 304 | "CoreSight ITM", 305 | "(Instrumentation Trace Macrocell)", 306 | }, 307 | { 308 | ARM_ID, 309 | 0x914, 310 | "CoreSight SWO", 311 | "(Single Wire Output)", 312 | }, 313 | { 314 | ARM_ID, 315 | 0x917, 316 | "CoreSight HTM", 317 | "(AHB Trace Macrocell)", 318 | }, 319 | { 320 | ARM_ID, 321 | 0x920, 322 | "CoreSight ETM11", 323 | "(Embedded Trace)", 324 | }, 325 | { 326 | ARM_ID, 327 | 0x921, 328 | "Cortex-A8 ETM", 329 | "(Embedded Trace)", 330 | }, 331 | { 332 | ARM_ID, 333 | 0x922, 334 | "Cortex-A8 CTI", 335 | "(Cross Trigger)", 336 | }, 337 | { 338 | ARM_ID, 339 | 0x923, 340 | "Cortex-M3 TPIU", 341 | "(Trace Port Interface Unit)", 342 | }, 343 | { 344 | ARM_ID, 345 | 0x924, 346 | "Cortex-M3 ETM", 347 | "(Embedded Trace)", 348 | }, 349 | { 350 | ARM_ID, 351 | 0x925, 352 | "Cortex-M4 ETM", 353 | "(Embedded Trace)", 354 | }, 355 | { 356 | ARM_ID, 357 | 0x930, 358 | "Cortex-R4 ETM", 359 | "(Embedded Trace)", 360 | }, 361 | { 362 | ARM_ID, 363 | 0x931, 364 | "Cortex-R5 ETM", 365 | "(Embedded Trace)", 366 | }, 367 | { 368 | ARM_ID, 369 | 0x932, 370 | "CoreSight MTB-M0+", 371 | "(Micro Trace Buffer)", 372 | }, 373 | { 374 | ARM_ID, 375 | 0x941, 376 | "CoreSight TPIU-Lite", 377 | "(Trace Port Interface Unit)", 378 | }, 379 | { 380 | ARM_ID, 381 | 0x950, 382 | "Cortex-A9 PTM", 383 | "(Program Trace Macrocell)", 384 | }, 385 | { 386 | ARM_ID, 387 | 0x955, 388 | "Cortex-A5 ETM", 389 | "(Embedded Trace)", 390 | }, 391 | { 392 | ARM_ID, 393 | 0x95a, 394 | "Cortex-A72 ETM", 395 | "(Embedded Trace)", 396 | }, 397 | { 398 | ARM_ID, 399 | 0x95b, 400 | "Cortex-A17 PTM", 401 | "(Program Trace Macrocell)", 402 | }, 403 | { 404 | ARM_ID, 405 | 0x95d, 406 | "Cortex-A53 ETM", 407 | "(Embedded Trace)", 408 | }, 409 | { 410 | ARM_ID, 411 | 0x95e, 412 | "Cortex-A57 ETM", 413 | "(Embedded Trace)", 414 | }, 415 | { 416 | ARM_ID, 417 | 0x95f, 418 | "Cortex-A15 PTM", 419 | "(Program Trace Macrocell)", 420 | }, 421 | { 422 | ARM_ID, 423 | 0x961, 424 | "CoreSight TMC", 425 | "(Trace Memory Controller)", 426 | }, 427 | { 428 | ARM_ID, 429 | 0x962, 430 | "CoreSight STM", 431 | "(System Trace Macrocell)", 432 | }, 433 | { 434 | ARM_ID, 435 | 0x975, 436 | "Cortex-M7 ETM", 437 | "(Embedded Trace)", 438 | }, 439 | { 440 | ARM_ID, 441 | 0x9a0, 442 | "CoreSight PMU", 443 | "(Performance Monitoring Unit)", 444 | }, 445 | { 446 | ARM_ID, 447 | 0x9a1, 448 | "Cortex-M4 TPIU", 449 | "(Trace Port Interface Unit)", 450 | }, 451 | { 452 | ARM_ID, 453 | 0x9a4, 454 | "CoreSight GPR", 455 | "(Granular Power Requester)", 456 | }, 457 | { 458 | ARM_ID, 459 | 0x9a5, 460 | "Cortex-A5 PMU", 461 | "(Performance Monitor Unit)", 462 | }, 463 | { 464 | ARM_ID, 465 | 0x9a7, 466 | "Cortex-A7 PMU", 467 | "(Performance Monitor Unit)", 468 | }, 469 | { 470 | ARM_ID, 471 | 0x9a8, 472 | "Cortex-A53 CTI", 473 | "(Cross Trigger)", 474 | }, 475 | { 476 | ARM_ID, 477 | 0x9a9, 478 | "Cortex-M7 TPIU", 479 | "(Trace Port Interface Unit)", 480 | }, 481 | { 482 | ARM_ID, 483 | 0x9ae, 484 | "Cortex-A17 PMU", 485 | "(Performance Monitor Unit)", 486 | }, 487 | { 488 | ARM_ID, 489 | 0x9af, 490 | "Cortex-A15 PMU", 491 | "(Performance Monitor Unit)", 492 | }, 493 | { 494 | ARM_ID, 495 | 0x9b6, 496 | "Cortex-R52 PMU/CTI/ETM", 497 | "(Performance Monitor Unit/Cross Trigger/ETM)", 498 | }, 499 | { 500 | ARM_ID, 501 | 0x9b7, 502 | "Cortex-R7 PMU", 503 | "(Performance Monitor Unit)", 504 | }, 505 | { 506 | ARM_ID, 507 | 0x9d3, 508 | "Cortex-A53 PMU", 509 | "(Performance Monitor Unit)", 510 | }, 511 | { 512 | ARM_ID, 513 | 0x9d7, 514 | "Cortex-A57 PMU", 515 | "(Performance Monitor Unit)", 516 | }, 517 | { 518 | ARM_ID, 519 | 0x9d8, 520 | "Cortex-A72 PMU", 521 | "(Performance Monitor Unit)", 522 | }, 523 | { 524 | ARM_ID, 525 | 0x9da, 526 | "Cortex-A35 PMU/CTI/ETM", 527 | "(Performance Monitor Unit/Cross Trigger/ETM)", 528 | }, 529 | { 530 | ARM_ID, 531 | 0x9e2, 532 | "SoC-600 APB-AP", 533 | "(APB4 Memory Access Port)", 534 | }, 535 | { 536 | ARM_ID, 537 | 0x9e3, 538 | "SoC-600 AHB-AP", 539 | "(AHB5 Memory Access Port)", 540 | }, 541 | { 542 | ARM_ID, 543 | 0x9e4, 544 | "SoC-600 AXI-AP", 545 | "(AXI Memory Access Port)", 546 | }, 547 | { 548 | ARM_ID, 549 | 0x9e5, 550 | "SoC-600 APv1 Adapter", 551 | "(Access Port v1 Adapter)", 552 | }, 553 | { 554 | ARM_ID, 555 | 0x9e6, 556 | "SoC-600 JTAG-AP", 557 | "(JTAG Access Port)", 558 | }, 559 | { 560 | ARM_ID, 561 | 0x9e7, 562 | "SoC-600 TPIU", 563 | "(Trace Port Interface Unit)", 564 | }, 565 | { 566 | ARM_ID, 567 | 0x9e8, 568 | "SoC-600 TMC ETR/ETS", 569 | "(Embedded Trace Router/Streamer)", 570 | }, 571 | { 572 | ARM_ID, 573 | 0x9e9, 574 | "SoC-600 TMC ETB", 575 | "(Embedded Trace Buffer)", 576 | }, 577 | { 578 | ARM_ID, 579 | 0x9ea, 580 | "SoC-600 TMC ETF", 581 | "(Embedded Trace FIFO)", 582 | }, 583 | { 584 | ARM_ID, 585 | 0x9eb, 586 | "SoC-600 ATB Funnel", 587 | "(Trace Funnel)", 588 | }, 589 | { 590 | ARM_ID, 591 | 0x9ec, 592 | "SoC-600 ATB Replicator", 593 | "(Trace Replicator)", 594 | }, 595 | { 596 | ARM_ID, 597 | 0x9ed, 598 | "SoC-600 CTI", 599 | "(Cross Trigger)", 600 | }, 601 | { 602 | ARM_ID, 603 | 0x9ee, 604 | "SoC-600 CATU", 605 | "(Address Translation Unit)", 606 | }, 607 | { 608 | ARM_ID, 609 | 0xc05, 610 | "Cortex-A5 Debug", 611 | "(Debug Unit)", 612 | }, 613 | { 614 | ARM_ID, 615 | 0xc07, 616 | "Cortex-A7 Debug", 617 | "(Debug Unit)", 618 | }, 619 | { 620 | ARM_ID, 621 | 0xc08, 622 | "Cortex-A8 Debug", 623 | "(Debug Unit)", 624 | }, 625 | { 626 | ARM_ID, 627 | 0xc09, 628 | "Cortex-A9 Debug", 629 | "(Debug Unit)", 630 | }, 631 | { 632 | ARM_ID, 633 | 0xc0e, 634 | "Cortex-A17 Debug", 635 | "(Debug Unit)", 636 | }, 637 | { 638 | ARM_ID, 639 | 0xc0f, 640 | "Cortex-A15 Debug", 641 | "(Debug Unit)", 642 | }, 643 | { 644 | ARM_ID, 645 | 0xc14, 646 | "Cortex-R4 Debug", 647 | "(Debug Unit)", 648 | }, 649 | { 650 | ARM_ID, 651 | 0xc15, 652 | "Cortex-R5 Debug", 653 | "(Debug Unit)", 654 | }, 655 | { 656 | ARM_ID, 657 | 0xc17, 658 | "Cortex-R7 Debug", 659 | "(Debug Unit)", 660 | }, 661 | { 662 | ARM_ID, 663 | 0xd03, 664 | "Cortex-A53 Debug", 665 | "(Debug Unit)", 666 | }, 667 | { 668 | ARM_ID, 669 | 0xd04, 670 | "Cortex-A35 Debug", 671 | "(Debug Unit)", 672 | }, 673 | { 674 | ARM_ID, 675 | 0xd07, 676 | "Cortex-A57 Debug", 677 | "(Debug Unit)", 678 | }, 679 | { 680 | ARM_ID, 681 | 0xd08, 682 | "Cortex-A72 Debug", 683 | "(Debug Unit)", 684 | }, 685 | { 686 | ARM_ID, 687 | 0xd0b, 688 | "Cortex-A76 Debug", 689 | "(Debug Unit)", 690 | }, 691 | { 692 | ARM_ID, 693 | 0xd0c, 694 | "Neoverse N1", 695 | "(Debug Unit)", 696 | }, 697 | { 698 | ARM_ID, 699 | 0xd13, 700 | "Cortex-R52 Debug", 701 | "(Debug Unit)", 702 | }, 703 | { 704 | ARM_ID, 705 | 0xd49, 706 | "Neoverse N2", 707 | "(Debug Unit)", 708 | }, 709 | { 710 | 0x017, 711 | 0x120, 712 | "TI SDTI", 713 | "(System Debug Trace Interface)", 714 | }, /* from OMAP3 memmap */ 715 | { 716 | 0x017, 717 | 0x343, 718 | "TI DAPCTL", 719 | "", 720 | }, /* from OMAP3 memmap */ 721 | {0x017, 0x9af, "MSP432 ROM", "(ROM Table)"}, 722 | {0x01f, 0xcd0, "Atmel CPU with DSU", "(CPU)"}, 723 | {0x041, 0x1db, "XMC4500 ROM", "(ROM Table)"}, 724 | {0x041, 0x1df, "XMC4700/4800 ROM", "(ROM Table)"}, 725 | {0x041, 0x1ed, "XMC1000 ROM", "(ROM Table)"}, 726 | { 727 | 0x065, 728 | 0x000, 729 | "SHARC+/Blackfin+", 730 | "", 731 | }, 732 | { 733 | 0x070, 734 | 0x440, 735 | "Qualcomm QDSS Component v1", 736 | "(Qualcomm Designed CoreSight Component v1)", 737 | }, 738 | { 739 | 0x0bf, 740 | 0x100, 741 | "Brahma-B53 Debug", 742 | "(Debug Unit)", 743 | }, 744 | { 745 | 0x0bf, 746 | 0x9d3, 747 | "Brahma-B53 PMU", 748 | "(Performance Monitor Unit)", 749 | }, 750 | { 751 | 0x0bf, 752 | 0x4a1, 753 | "Brahma-B53 ROM", 754 | "(ROM Table)", 755 | }, 756 | { 757 | 0x0bf, 758 | 0x721, 759 | "Brahma-B53 ROM", 760 | "(ROM Table)", 761 | }, 762 | { 763 | 0x1eb, 764 | 0x181, 765 | "Tegra 186 ROM", 766 | "(ROM Table)", 767 | }, 768 | { 769 | 0x1eb, 770 | 0x202, 771 | "Denver ETM", 772 | "(Denver Embedded Trace)", 773 | }, 774 | { 775 | 0x1eb, 776 | 0x211, 777 | "Tegra 210 ROM", 778 | "(ROM Table)", 779 | }, 780 | { 781 | 0x1eb, 782 | 0x302, 783 | "Denver Debug", 784 | "(Debug Unit)", 785 | }, 786 | { 787 | 0x1eb, 788 | 0x402, 789 | "Denver PMU", 790 | "(Performance Monitor Unit)", 791 | }, 792 | /* https://github.com/stlink-org/stlink/blob/develop/doc/devices_boards.md */ 793 | {0x20, 0x410, "STM32F10 (med)", "(ROM Table)"}, 794 | {0x20, 0x411, "STM32F2", "(ROM Table)"}, 795 | {0x20, 0x412, "STM32F10 (low)", "(ROM Table)"}, 796 | {0x20, 0x413, "STM32F40/41", "(ROM Table)"}, 797 | {0x20, 0x414, "STM32F10 (high)", "(ROM Table)"}, 798 | {0x20, 0x415, "STM32L47/48", "(ROM Table)"}, 799 | {0x20, 0x416, "STM32L1xxx6/8/B", "(ROM Table)"}, 800 | {0x20, 0x417, "STM32L05/06", "(ROM Table)"}, 801 | {0x20, 0x418, "STM32F105xx/107", "(ROM Table)"}, 802 | {0x20, 0x419, "STM32F42/43", "(ROM Table)"}, 803 | {0x20, 0x420, "STM32F10 (med)", "(ROM Table)"}, 804 | {0x20, 0x421, "STM32F446xx", "(ROM Table)"}, 805 | {0x20, 0x422, "STM32FF358/02/03", "(ROM Table)"}, 806 | {0x20, 0x423, "STM32F401xB/C", "(ROM Table)"}, 807 | {0x20, 0x425, "STM32L031/41", "(ROM Table)"}, 808 | {0x20, 0x427, "STM32L1xxxC", "(ROM Table)"}, 809 | {0x20, 0x428, "STM32F10 (high)", "(ROM Table)"}, 810 | {0x20, 0x429, "STM32L1xxx6A/8A/BA", "(ROM Table)"}, 811 | {0x20, 0x430, "STM32F10 (xl)", "(ROM Table)"}, 812 | {0x20, 0x431, "STM32F411xx", "(ROM Table)"}, 813 | {0x20, 0x432, "STM32F373/8", "(ROM Table)"}, 814 | {0x20, 0x433, "STM32F401xD/E", "(ROM Table)"}, 815 | {0x20, 0x434, "STM32F469/79", "(ROM Table)"}, 816 | {0x20, 0x435, "STM32L43/44", "(ROM Table)"}, 817 | {0x20, 0x436, "STM32L1xxxD", "(ROM Table)"}, 818 | {0x20, 0x437, "STM32L1xxxE", "(ROM Table)"}, 819 | {0x20, 0x438, "STM32F303/34/28", "(ROM Table)"}, 820 | {0x20, 0x439, "STM32F301/02/18 ", "(ROM Table)"}, 821 | {0x20, 0x440, "STM32F03/5", "(ROM Table)"}, 822 | {0x20, 0x441, "STM32F412xx", "(ROM Table)"}, 823 | {0x20, 0x442, "STM32F03/9", "(ROM Table)"}, 824 | {0x20, 0x444, "STM32F03xx4", "(ROM Table)"}, 825 | {0x20, 0x445, "STM32F04/7", "(ROM Table)"}, 826 | {0x20, 0x446, "STM32F302/03/98", "(ROM Table)"}, 827 | {0x20, 0x447, "STM32L07/08", "(ROM Table)"}, 828 | {0x20, 0x448, "STM32F070/1/2", "(ROM Table)"}, 829 | {0x20, 0x449, "STM32F74/5", "(ROM Table)"}, 830 | {0x20, 0x450, "STM32H74/5", "(ROM Table)"}, 831 | {0x20, 0x451, "STM32F76/7", "(ROM Table)"}, 832 | {0x20, 0x452, "STM32F72/3", "(ROM Table)"}, 833 | {0x20, 0x457, "STM32L01/2", "(ROM Table)"}, 834 | {0x20, 0x458, "STM32F410xx", "(ROM Table)"}, 835 | {0x20, 0x460, "STM32G07/8", "(ROM Table)"}, 836 | {0x20, 0x461, "STM32L496/A6", "(ROM Table)"}, 837 | {0x20, 0x462, "STM32L45/46", "(ROM Table)"}, 838 | {0x20, 0x463, "STM32F413/23", "(ROM Table)"}, 839 | {0x20, 0x464, "STM32L412/22", "(ROM Table)"}, 840 | {0x20, 0x466, "STM32G03/04", "(ROM Table)"}, 841 | {0x20, 0x468, "STM32G431/41", "(ROM Table)"}, 842 | {0x20, 0x469, "STM32G47/48", "(ROM Table)"}, 843 | {0x20, 0x470, "STM32L4R/S", "(ROM Table)"}, 844 | {0x20, 0x471, "STM32L4P5/Q5", "(ROM Table)"}, 845 | {0x20, 0x479, "STM32G491xx", "(ROM Table)"}, 846 | {0x20, 0x480, "STM32H7A/B", "(ROM Table)"}, 847 | {0x20, 0x495, "STM32WB50/55", "(ROM Table)"}, 848 | {0x20, 0x497, "STM32WLE5xx", "(ROM Table)"}}; 849 | 850 | const char* adi_devarch_desc(uint32_t devarch) { 851 | if(!(devarch & ARM_CS_C9_DEVARCH_PRESENT)) { 852 | return "not present"; 853 | } 854 | 855 | for(unsigned int i = 0; i < ARRAY_SIZE(class0x9_devarch); i++) { 856 | if((devarch & DEVARCH_ID_MASK) == class0x9_devarch[i].arch_id) { 857 | return class0x9_devarch[i].description; 858 | } 859 | } 860 | 861 | return "unknown"; 862 | } 863 | 864 | const struct dap_part_nums* adi_part_num(unsigned int des, unsigned int part) { 865 | static char buf[32]; 866 | static struct dap_part_nums unknown = { 867 | .type = "Unrecognized", 868 | .full = "", 869 | }; 870 | 871 | for(unsigned int i = 0; i < ARRAY_SIZE(dap_part_nums); i++) { 872 | if(dap_part_nums[i].designer_id == des && dap_part_nums[i].part_num == part) { 873 | return &dap_part_nums[i]; 874 | } 875 | } 876 | 877 | snprintf(buf, sizeof(buf), "D:%x P:%x", des, part); 878 | unknown.full = buf; 879 | 880 | return &unknown; 881 | } 882 | 883 | bool adi_get_pidr(AppFSM* const ctx, uint32_t base, pidr_data_t* data) { 884 | uint32_t pidrs[7]; 885 | uint32_t offsets[] = {0xFE0, 0xFE4, 0xFE8, 0xFEC, 0xFD0, 0xFD4, 0xFD8, 0xFDC}; 886 | 887 | furi_mutex_acquire(ctx->swd_mutex, FuriWaitForever); 888 | for(size_t pos = 0; pos < COUNT(pidrs); pos++) { 889 | uint8_t ret = swd_read_memory(ctx, ctx->ap_pos, base + offsets[pos], &pidrs[pos]); 890 | if(ret != 1) { 891 | DBGS("Read failed"); 892 | furi_mutex_release(ctx->swd_mutex); 893 | return false; 894 | } 895 | } 896 | furi_mutex_release(ctx->swd_mutex); 897 | 898 | data->designer = ((pidrs[4] & 0x0F) << 7) | ((pidrs[2] & 0x07) << 4) | 899 | ((pidrs[1] >> 4) & 0x0F); 900 | data->part = (pidrs[0] & 0xFF) | ((pidrs[1] & 0x0F) << 8); 901 | data->revand = ((pidrs[3] >> 4) & 0x0F); 902 | data->cmod = (pidrs[3] & 0x0F); 903 | data->revision = ((pidrs[2] >> 4) & 0x0F); 904 | data->size = ((pidrs[2] >> 4) & 0x0F); 905 | 906 | return true; 907 | } 908 | 909 | bool adi_get_class(AppFSM* const ctx, uint32_t base, uint8_t* class) { 910 | uint32_t cidrs[4]; 911 | uint32_t offsets[] = {0xFF0, 0xFF4, 0xFF8, 0xFFC}; 912 | 913 | furi_mutex_acquire(ctx->swd_mutex, FuriWaitForever); 914 | for(size_t pos = 0; pos < COUNT(cidrs); pos++) { 915 | uint8_t ret = swd_read_memory(ctx, ctx->ap_pos, base + offsets[pos], &cidrs[pos]); 916 | if(ret != 1) { 917 | DBGS("Read failed"); 918 | furi_mutex_release(ctx->swd_mutex); 919 | return false; 920 | } 921 | } 922 | furi_mutex_release(ctx->swd_mutex); 923 | 924 | if((cidrs[0] & 0xFF) != 0x0D) { 925 | return false; 926 | } 927 | if((cidrs[1] & 0x0F) != 0x00) { 928 | return false; 929 | } 930 | if((cidrs[2] & 0xFF) != 0x05) { 931 | return false; 932 | } 933 | if((cidrs[3] & 0xFF) != 0xB1) { 934 | return false; 935 | } 936 | 937 | *class = ((cidrs[1] >> 4) & 0x0F); 938 | 939 | return true; 940 | } 941 | 942 | const char* adi_romtable_type(AppFSM* const ctx, uint32_t base) { 943 | pidr_data_t data; 944 | 945 | if(!adi_get_pidr(ctx, base, &data)) { 946 | return "fail"; 947 | } 948 | const struct dap_part_nums* info = adi_part_num(data.designer, data.part); 949 | 950 | return info->type; 951 | } 952 | 953 | const char* adi_romtable_full(AppFSM* const ctx, uint32_t base) { 954 | pidr_data_t data; 955 | 956 | if(!adi_get_pidr(ctx, base, &data)) { 957 | return "fail"; 958 | } 959 | const struct dap_part_nums* info = adi_part_num(data.designer, data.part); 960 | 961 | return info->full; 962 | } 963 | 964 | uint32_t adi_romtable_entry_count(AppFSM* const ctx, uint32_t base) { 965 | uint32_t count = 0; 966 | uint32_t entry = 0; 967 | 968 | furi_mutex_acquire(ctx->swd_mutex, FuriWaitForever); 969 | for(size_t pos = 0; pos < 960; pos++) { 970 | uint8_t ret = 0; 971 | for(int tries = 0; tries < 10 && ret != 1; tries++) { 972 | ret = swd_read_memory(ctx, ctx->ap_pos, base + pos * 4, &entry); 973 | } 974 | if(ret != 1) { 975 | DBGS("Read failed"); 976 | break; 977 | } 978 | if(!(entry & 1)) { 979 | break; 980 | } 981 | if(entry & 0x00000FFC) { 982 | break; 983 | } 984 | count++; 985 | } 986 | furi_mutex_release(ctx->swd_mutex); 987 | return count; 988 | } 989 | 990 | uint32_t adi_romtable_get(AppFSM* const ctx, uint32_t base, uint32_t pos) { 991 | uint32_t entry = 0; 992 | 993 | furi_mutex_acquire(ctx->swd_mutex, FuriWaitForever); 994 | uint8_t ret = swd_read_memory(ctx, ctx->ap_pos, base + pos * 4, &entry); 995 | if(ret != 1) { 996 | DBGS("Read failed"); 997 | furi_mutex_release(ctx->swd_mutex); 998 | return 0; 999 | } 1000 | furi_mutex_release(ctx->swd_mutex); 1001 | 1002 | return base + (entry & 0xFFFFF000); 1003 | } 1004 | 1005 | bool adi_is_romtable(AppFSM* const ctx, uint32_t base) { 1006 | uint8_t class = 0; 1007 | 1008 | if(!adi_get_class(ctx, base, &class)) { 1009 | return false; 1010 | } 1011 | 1012 | if(class != CIDR_CLASS_ROMTABLE) { 1013 | return false; 1014 | } 1015 | 1016 | return true; 1017 | } 1018 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /jep106.inc: -------------------------------------------------------------------------------- 1 | /* https://github.com/openocd-org/openocd/blob/master/src/helper/ */ 2 | 3 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 4 | 5 | /* 6 | * The manufacturer's standard identification code list appears in JEP106. 7 | * Copyright (c) 2022 JEDEC. All rights reserved. 8 | * 9 | * JEP106 is regularly updated. For the current manufacturer's standard 10 | * identification code list, please visit the JEDEC website at www.jedec.org . 11 | */ 12 | 13 | /* This file is aligned to revision JEP106BF.01 October 2022. */ 14 | 15 | [0][0x01 - 1] = "AMD", 16 | [0][0x02 - 1] = "AMI", 17 | [0][0x03 - 1] = "Fairchild", 18 | [0][0x04 - 1] = "Fujitsu", 19 | [0][0x05 - 1] = "GTE", 20 | [0][0x06 - 1] = "Harris", 21 | [0][0x07 - 1] = "Hitachi", 22 | [0][0x08 - 1] = "Inmos", 23 | [0][0x09 - 1] = "Intel", 24 | [0][0x0a - 1] = "I.T.T.", 25 | [0][0x0b - 1] = "Intersil", 26 | [0][0x0c - 1] = "Monolithic Memories", 27 | [0][0x0d - 1] = "Mostek", 28 | [0][0x0e - 1] = "Freescale (Motorola)", 29 | [0][0x0f - 1] = "National", 30 | [0][0x10 - 1] = "NEC", 31 | [0][0x11 - 1] = "RCA", 32 | [0][0x12 - 1] = "Raytheon", 33 | [0][0x13 - 1] = "Conexant (Rockwell)", 34 | [0][0x14 - 1] = "Seeq", 35 | [0][0x15 - 1] = "NXP (Philips)", 36 | [0][0x16 - 1] = "Synertek", 37 | [0][0x17 - 1] = "Texas Instruments", 38 | [0][0x18 - 1] = "Kioxia Corporation", 39 | [0][0x19 - 1] = "Xicor", 40 | [0][0x1a - 1] = "Zilog", 41 | [0][0x1b - 1] = "Eurotechnique", 42 | [0][0x1c - 1] = "Mitsubishi", 43 | [0][0x1d - 1] = "Lucent (AT&T)", 44 | [0][0x1e - 1] = "Exel", 45 | [0][0x1f - 1] = "Atmel", 46 | [0][0x20 - 1] = "STMicroelectronics", 47 | [0][0x21 - 1] = "Lattice Semi.", 48 | [0][0x22 - 1] = "NCR", 49 | [0][0x23 - 1] = "Wafer Scale Integration", 50 | [0][0x24 - 1] = "IBM", 51 | [0][0x25 - 1] = "Tristar", 52 | [0][0x26 - 1] = "Visic", 53 | [0][0x27 - 1] = "Intl. CMOS Technology", 54 | [0][0x28 - 1] = "SSSI", 55 | [0][0x29 - 1] = "Microchip Technology", 56 | [0][0x2a - 1] = "Ricoh Ltd", 57 | [0][0x2b - 1] = "VLSI", 58 | [0][0x2c - 1] = "Micron Technology", 59 | [0][0x2d - 1] = "SK Hynix", 60 | [0][0x2e - 1] = "OKI Semiconductor", 61 | [0][0x2f - 1] = "ACTEL", 62 | [0][0x30 - 1] = "Sharp", 63 | [0][0x31 - 1] = "Catalyst", 64 | [0][0x32 - 1] = "Panasonic", 65 | [0][0x33 - 1] = "IDT", 66 | [0][0x34 - 1] = "Cypress", 67 | [0][0x35 - 1] = "DEC", 68 | [0][0x36 - 1] = "LSI Logic", 69 | [0][0x37 - 1] = "Zarlink (Plessey)", 70 | [0][0x38 - 1] = "UTMC", 71 | [0][0x39 - 1] = "Thinking Machine", 72 | [0][0x3a - 1] = "Thomson CSF", 73 | [0][0x3b - 1] = "Integrated CMOS (Vertex)", 74 | [0][0x3c - 1] = "Honeywell", 75 | [0][0x3d - 1] = "Tektronix", 76 | [0][0x3e - 1] = "Oracle Corporation", 77 | [0][0x3f - 1] = "Silicon Storage Technology", 78 | [0][0x40 - 1] = "ProMos/Mosel Vitelic", 79 | [0][0x41 - 1] = "Infineon (Siemens)", 80 | [0][0x42 - 1] = "Macronix", 81 | [0][0x43 - 1] = "Xerox", 82 | [0][0x44 - 1] = "Plus Logic", 83 | [0][0x45 - 1] = "Western Digital Technologies Inc", 84 | [0][0x46 - 1] = "Elan Circuit Tech.", 85 | [0][0x47 - 1] = "European Silicon Str.", 86 | [0][0x48 - 1] = "Apple Computer", 87 | [0][0x49 - 1] = "Xilinx", 88 | [0][0x4a - 1] = "Compaq", 89 | [0][0x4b - 1] = "Protocol Engines", 90 | [0][0x4c - 1] = "SCI", 91 | [0][0x4d - 1] = "Seiko Instruments", 92 | [0][0x4e - 1] = "Samsung", 93 | [0][0x4f - 1] = "I3 Design System", 94 | [0][0x50 - 1] = "Klic", 95 | [0][0x51 - 1] = "Crosspoint Solutions", 96 | [0][0x52 - 1] = "Alliance Memory Inc", 97 | [0][0x53 - 1] = "Tandem", 98 | [0][0x54 - 1] = "Hewlett-Packard", 99 | [0][0x55 - 1] = "Integrated Silicon Solutions", 100 | [0][0x56 - 1] = "Brooktree", 101 | [0][0x57 - 1] = "New Media", 102 | [0][0x58 - 1] = "MHS Electronic", 103 | [0][0x59 - 1] = "Performance Semi.", 104 | [0][0x5a - 1] = "Winbond Electronic", 105 | [0][0x5b - 1] = "Kawasaki Steel", 106 | [0][0x5c - 1] = "Bright Micro", 107 | [0][0x5d - 1] = "TECMAR", 108 | [0][0x5e - 1] = "Exar", 109 | [0][0x5f - 1] = "PCMCIA", 110 | [0][0x60 - 1] = "LG Semi (Goldstar)", 111 | [0][0x61 - 1] = "Northern Telecom", 112 | [0][0x62 - 1] = "Sanyo", 113 | [0][0x63 - 1] = "Array Microsystems", 114 | [0][0x64 - 1] = "Crystal Semiconductor", 115 | [0][0x65 - 1] = "Analog Devices", 116 | [0][0x66 - 1] = "PMC-Sierra", 117 | [0][0x67 - 1] = "Asparix", 118 | [0][0x68 - 1] = "Convex Computer", 119 | [0][0x69 - 1] = "Quality Semiconductor", 120 | [0][0x6a - 1] = "Nimbus Technology", 121 | [0][0x6b - 1] = "Transwitch", 122 | [0][0x6c - 1] = "Micronas (ITT Intermetall)", 123 | [0][0x6d - 1] = "Cannon", 124 | [0][0x6e - 1] = "Altera", 125 | [0][0x6f - 1] = "NEXCOM", 126 | [0][0x70 - 1] = "Qualcomm", 127 | [0][0x71 - 1] = "Sony", 128 | [0][0x72 - 1] = "Cray Research", 129 | [0][0x73 - 1] = "AMS(Austria Micro)", 130 | [0][0x74 - 1] = "Vitesse", 131 | [0][0x75 - 1] = "Aster Electronics", 132 | [0][0x76 - 1] = "Bay Networks (Synoptic)", 133 | [0][0x77 - 1] = "Zentrum/ZMD", 134 | [0][0x78 - 1] = "TRW", 135 | [0][0x79 - 1] = "Thesys", 136 | [0][0x7a - 1] = "Solbourne Computer", 137 | [0][0x7b - 1] = "Allied-Signal", 138 | [0][0x7c - 1] = "Dialog Semiconductor", 139 | [0][0x7d - 1] = "Media Vision", 140 | [0][0x7e - 1] = "Numonyx Corporation", 141 | [1][0x01 - 1] = "Cirrus Logic", 142 | [1][0x02 - 1] = "National Instruments", 143 | [1][0x03 - 1] = "ILC Data Device", 144 | [1][0x04 - 1] = "Alcatel Mietec", 145 | [1][0x05 - 1] = "Micro Linear", 146 | [1][0x06 - 1] = "Univ. of NC", 147 | [1][0x07 - 1] = "JTAG Technologies", 148 | [1][0x08 - 1] = "BAE Systems (Loral)", 149 | [1][0x09 - 1] = "Nchip", 150 | [1][0x0a - 1] = "Galileo Tech", 151 | [1][0x0b - 1] = "Bestlink Systems", 152 | [1][0x0c - 1] = "Graychip", 153 | [1][0x0d - 1] = "GENNUM", 154 | [1][0x0e - 1] = "Imagination Technologies Limited", 155 | [1][0x0f - 1] = "Robert Bosch", 156 | [1][0x10 - 1] = "Chip Express", 157 | [1][0x11 - 1] = "DATARAM", 158 | [1][0x12 - 1] = "United Microelectronics Corp", 159 | [1][0x13 - 1] = "TCSI", 160 | [1][0x14 - 1] = "Smart Modular", 161 | [1][0x15 - 1] = "Hughes Aircraft", 162 | [1][0x16 - 1] = "Lanstar Semiconductor", 163 | [1][0x17 - 1] = "Qlogic", 164 | [1][0x18 - 1] = "Kingston", 165 | [1][0x19 - 1] = "Music Semi", 166 | [1][0x1a - 1] = "Ericsson Components", 167 | [1][0x1b - 1] = "SpaSE", 168 | [1][0x1c - 1] = "Eon Silicon Devices", 169 | [1][0x1d - 1] = "Integrated Silicon Solution (ISSI)", 170 | [1][0x1e - 1] = "DoD", 171 | [1][0x1f - 1] = "Integ. Memories Tech.", 172 | [1][0x20 - 1] = "Corollary Inc", 173 | [1][0x21 - 1] = "Dallas Semiconductor", 174 | [1][0x22 - 1] = "Omnivision", 175 | [1][0x23 - 1] = "EIV(Switzerland)", 176 | [1][0x24 - 1] = "Novatel Wireless", 177 | [1][0x25 - 1] = "Zarlink (Mitel)", 178 | [1][0x26 - 1] = "Clearpoint", 179 | [1][0x27 - 1] = "Cabletron", 180 | [1][0x28 - 1] = "STEC (Silicon Tech)", 181 | [1][0x29 - 1] = "Vanguard", 182 | [1][0x2a - 1] = "Hagiwara Sys-Com", 183 | [1][0x2b - 1] = "Vantis", 184 | [1][0x2c - 1] = "Celestica", 185 | [1][0x2d - 1] = "Century", 186 | [1][0x2e - 1] = "Hal Computers", 187 | [1][0x2f - 1] = "Rohm Company Ltd", 188 | [1][0x30 - 1] = "Juniper Networks", 189 | [1][0x31 - 1] = "Libit Signal Processing", 190 | [1][0x32 - 1] = "Mushkin Enhanced Memory", 191 | [1][0x33 - 1] = "Tundra Semiconductor", 192 | [1][0x34 - 1] = "Adaptec Inc", 193 | [1][0x35 - 1] = "LightSpeed Semi.", 194 | [1][0x36 - 1] = "ZSP Corp", 195 | [1][0x37 - 1] = "AMIC Technology", 196 | [1][0x38 - 1] = "Adobe Systems", 197 | [1][0x39 - 1] = "Dynachip", 198 | [1][0x3a - 1] = "PNY Technologies Inc", 199 | [1][0x3b - 1] = "Newport Digital", 200 | [1][0x3c - 1] = "MMC Networks", 201 | [1][0x3d - 1] = "T Square", 202 | [1][0x3e - 1] = "Seiko Epson", 203 | [1][0x3f - 1] = "Broadcom", 204 | [1][0x40 - 1] = "Viking Components", 205 | [1][0x41 - 1] = "V3 Semiconductor", 206 | [1][0x42 - 1] = "Flextronics (Orbit Semiconductor)", 207 | [1][0x43 - 1] = "Suwa Electronics", 208 | [1][0x44 - 1] = "Transmeta", 209 | [1][0x45 - 1] = "Micron CMS", 210 | [1][0x46 - 1] = "American Computer & Digital Components Inc", 211 | [1][0x47 - 1] = "Enhance 3000 Inc", 212 | [1][0x48 - 1] = "Tower Semiconductor", 213 | [1][0x49 - 1] = "CPU Design", 214 | [1][0x4a - 1] = "Price Point", 215 | [1][0x4b - 1] = "Maxim Integrated Product", 216 | [1][0x4c - 1] = "Tellabs", 217 | [1][0x4d - 1] = "Centaur Technology", 218 | [1][0x4e - 1] = "Unigen Corporation", 219 | [1][0x4f - 1] = "Transcend Information", 220 | [1][0x50 - 1] = "Memory Card Technology", 221 | [1][0x51 - 1] = "CKD Corporation Ltd", 222 | [1][0x52 - 1] = "Capital Instruments Inc", 223 | [1][0x53 - 1] = "Aica Kogyo Ltd", 224 | [1][0x54 - 1] = "Linvex Technology", 225 | [1][0x55 - 1] = "MSC Vertriebs GmbH", 226 | [1][0x56 - 1] = "AKM Company Ltd", 227 | [1][0x57 - 1] = "Dynamem Inc", 228 | [1][0x58 - 1] = "NERA ASA", 229 | [1][0x59 - 1] = "GSI Technology", 230 | [1][0x5a - 1] = "Dane-Elec (C Memory)", 231 | [1][0x5b - 1] = "Acorn Computers", 232 | [1][0x5c - 1] = "Lara Technology", 233 | [1][0x5d - 1] = "Oak Technology Inc", 234 | [1][0x5e - 1] = "Itec Memory", 235 | [1][0x5f - 1] = "Tanisys Technology", 236 | [1][0x60 - 1] = "Truevision", 237 | [1][0x61 - 1] = "Wintec Industries", 238 | [1][0x62 - 1] = "Super PC Memory", 239 | [1][0x63 - 1] = "MGV Memory", 240 | [1][0x64 - 1] = "Galvantech", 241 | [1][0x65 - 1] = "Gadzoox Networks", 242 | [1][0x66 - 1] = "Multi Dimensional Cons.", 243 | [1][0x67 - 1] = "GateField", 244 | [1][0x68 - 1] = "Integrated Memory System", 245 | [1][0x69 - 1] = "Triscend", 246 | [1][0x6a - 1] = "XaQti", 247 | [1][0x6b - 1] = "Goldenram", 248 | [1][0x6c - 1] = "Clear Logic", 249 | [1][0x6d - 1] = "Cimaron Communications", 250 | [1][0x6e - 1] = "Nippon Steel Semi. Corp", 251 | [1][0x6f - 1] = "Advantage Memory", 252 | [1][0x70 - 1] = "AMCC", 253 | [1][0x71 - 1] = "LeCroy", 254 | [1][0x72 - 1] = "Yamaha Corporation", 255 | [1][0x73 - 1] = "Digital Microwave", 256 | [1][0x74 - 1] = "NetLogic Microsystems", 257 | [1][0x75 - 1] = "MIMOS Semiconductor", 258 | [1][0x76 - 1] = "Advanced Fibre", 259 | [1][0x77 - 1] = "BF Goodrich Data.", 260 | [1][0x78 - 1] = "Epigram", 261 | [1][0x79 - 1] = "Acbel Polytech Inc", 262 | [1][0x7a - 1] = "Apacer Technology", 263 | [1][0x7b - 1] = "Admor Memory", 264 | [1][0x7c - 1] = "FOXCONN", 265 | [1][0x7d - 1] = "Quadratics Superconductor", 266 | [1][0x7e - 1] = "3COM", 267 | [2][0x01 - 1] = "Camintonn Corporation", 268 | [2][0x02 - 1] = "ISOA Incorporated", 269 | [2][0x03 - 1] = "Agate Semiconductor", 270 | [2][0x04 - 1] = "ADMtek Incorporated", 271 | [2][0x05 - 1] = "HYPERTEC", 272 | [2][0x06 - 1] = "Adhoc Technologies", 273 | [2][0x07 - 1] = "MOSAID Technologies", 274 | [2][0x08 - 1] = "Ardent Technologies", 275 | [2][0x09 - 1] = "Switchcore", 276 | [2][0x0a - 1] = "Cisco Systems Inc", 277 | [2][0x0b - 1] = "Allayer Technologies", 278 | [2][0x0c - 1] = "WorkX AG (Wichman)", 279 | [2][0x0d - 1] = "Oasis Semiconductor", 280 | [2][0x0e - 1] = "Novanet Semiconductor", 281 | [2][0x0f - 1] = "E-M Solutions", 282 | [2][0x10 - 1] = "Power General", 283 | [2][0x11 - 1] = "Advanced Hardware Arch.", 284 | [2][0x12 - 1] = "Inova Semiconductors GmbH", 285 | [2][0x13 - 1] = "Telocity", 286 | [2][0x14 - 1] = "Delkin Devices", 287 | [2][0x15 - 1] = "Symagery Microsystems", 288 | [2][0x16 - 1] = "C-Port Corporation", 289 | [2][0x17 - 1] = "SiberCore Technologies", 290 | [2][0x18 - 1] = "Southland Microsystems", 291 | [2][0x19 - 1] = "Malleable Technologies", 292 | [2][0x1a - 1] = "Kendin Communications", 293 | [2][0x1b - 1] = "Great Technology Microcomputer", 294 | [2][0x1c - 1] = "Sanmina Corporation", 295 | [2][0x1d - 1] = "HADCO Corporation", 296 | [2][0x1e - 1] = "Corsair", 297 | [2][0x1f - 1] = "Actrans System Inc", 298 | [2][0x20 - 1] = "ALPHA Technologies", 299 | [2][0x21 - 1] = "Silicon Laboratories Inc (Cygnal)", 300 | [2][0x22 - 1] = "Artesyn Technologies", 301 | [2][0x23 - 1] = "Align Manufacturing", 302 | [2][0x24 - 1] = "Peregrine Semiconductor", 303 | [2][0x25 - 1] = "Chameleon Systems", 304 | [2][0x26 - 1] = "Aplus Flash Technology", 305 | [2][0x27 - 1] = "MIPS Technologies", 306 | [2][0x28 - 1] = "Chrysalis ITS", 307 | [2][0x29 - 1] = "ADTEC Corporation", 308 | [2][0x2a - 1] = "Kentron Technologies", 309 | [2][0x2b - 1] = "Win Technologies", 310 | [2][0x2c - 1] = "Tezzaron Semiconductor", 311 | [2][0x2d - 1] = "Extreme Packet Devices", 312 | [2][0x2e - 1] = "RF Micro Devices", 313 | [2][0x2f - 1] = "Siemens AG", 314 | [2][0x30 - 1] = "Sarnoff Corporation", 315 | [2][0x31 - 1] = "Itautec SA", 316 | [2][0x32 - 1] = "Radiata Inc", 317 | [2][0x33 - 1] = "Benchmark Elect. (AVEX)", 318 | [2][0x34 - 1] = "Legend", 319 | [2][0x35 - 1] = "SpecTek Incorporated", 320 | [2][0x36 - 1] = "Hi/fn", 321 | [2][0x37 - 1] = "Enikia Incorporated", 322 | [2][0x38 - 1] = "SwitchOn Networks", 323 | [2][0x39 - 1] = "AANetcom Incorporated", 324 | [2][0x3a - 1] = "Micro Memory Bank", 325 | [2][0x3b - 1] = "ESS Technology", 326 | [2][0x3c - 1] = "Virata Corporation", 327 | [2][0x3d - 1] = "Excess Bandwidth", 328 | [2][0x3e - 1] = "West Bay Semiconductor", 329 | [2][0x3f - 1] = "DSP Group", 330 | [2][0x40 - 1] = "Newport Communications", 331 | [2][0x41 - 1] = "Chip2Chip Incorporated", 332 | [2][0x42 - 1] = "Phobos Corporation", 333 | [2][0x43 - 1] = "Intellitech Corporation", 334 | [2][0x44 - 1] = "Nordic VLSI ASA", 335 | [2][0x45 - 1] = "Ishoni Networks", 336 | [2][0x46 - 1] = "Silicon Spice", 337 | [2][0x47 - 1] = "Alchemy Semiconductor", 338 | [2][0x48 - 1] = "Agilent Technologies", 339 | [2][0x49 - 1] = "Centillium Communications", 340 | [2][0x4a - 1] = "W.L. Gore", 341 | [2][0x4b - 1] = "HanBit Electronics", 342 | [2][0x4c - 1] = "GlobeSpan", 343 | [2][0x4d - 1] = "Element 14", 344 | [2][0x4e - 1] = "Pycon", 345 | [2][0x4f - 1] = "Saifun Semiconductors", 346 | [2][0x50 - 1] = "Sibyte Incorporated", 347 | [2][0x51 - 1] = "MetaLink Technologies", 348 | [2][0x52 - 1] = "Feiya Technology", 349 | [2][0x53 - 1] = "I & C Technology", 350 | [2][0x54 - 1] = "Shikatronics", 351 | [2][0x55 - 1] = "Elektrobit", 352 | [2][0x56 - 1] = "Megic", 353 | [2][0x57 - 1] = "Com-Tier", 354 | [2][0x58 - 1] = "Malaysia Micro Solutions", 355 | [2][0x59 - 1] = "Hyperchip", 356 | [2][0x5a - 1] = "Gemstone Communications", 357 | [2][0x5b - 1] = "Anadigm (Anadyne)", 358 | [2][0x5c - 1] = "3ParData", 359 | [2][0x5d - 1] = "Mellanox Technologies", 360 | [2][0x5e - 1] = "Tenx Technologies", 361 | [2][0x5f - 1] = "Helix AG", 362 | [2][0x60 - 1] = "Domosys", 363 | [2][0x61 - 1] = "Skyup Technology", 364 | [2][0x62 - 1] = "HiNT Corporation", 365 | [2][0x63 - 1] = "Chiaro", 366 | [2][0x64 - 1] = "MDT Technologies GmbH", 367 | [2][0x65 - 1] = "Exbit Technology A/S", 368 | [2][0x66 - 1] = "Integrated Technology Express", 369 | [2][0x67 - 1] = "AVED Memory", 370 | [2][0x68 - 1] = "Legerity", 371 | [2][0x69 - 1] = "Jasmine Networks", 372 | [2][0x6a - 1] = "Caspian Networks", 373 | [2][0x6b - 1] = "nCUBE", 374 | [2][0x6c - 1] = "Silicon Access Networks", 375 | [2][0x6d - 1] = "FDK Corporation", 376 | [2][0x6e - 1] = "High Bandwidth Access", 377 | [2][0x6f - 1] = "MultiLink Technology", 378 | [2][0x70 - 1] = "BRECIS", 379 | [2][0x71 - 1] = "World Wide Packets", 380 | [2][0x72 - 1] = "APW", 381 | [2][0x73 - 1] = "Chicory Systems", 382 | [2][0x74 - 1] = "Xstream Logic", 383 | [2][0x75 - 1] = "Fast-Chip", 384 | [2][0x76 - 1] = "Zucotto Wireless", 385 | [2][0x77 - 1] = "Realchip", 386 | [2][0x78 - 1] = "Galaxy Power", 387 | [2][0x79 - 1] = "eSilicon", 388 | [2][0x7a - 1] = "Morphics Technology", 389 | [2][0x7b - 1] = "Accelerant Networks", 390 | [2][0x7c - 1] = "Silicon Wave", 391 | [2][0x7d - 1] = "SandCraft", 392 | [2][0x7e - 1] = "Elpida", 393 | [3][0x01 - 1] = "Solectron", 394 | [3][0x02 - 1] = "Optosys Technologies", 395 | [3][0x03 - 1] = "Buffalo (Formerly Melco)", 396 | [3][0x04 - 1] = "TriMedia Technologies", 397 | [3][0x05 - 1] = "Cyan Technologies", 398 | [3][0x06 - 1] = "Global Locate", 399 | [3][0x07 - 1] = "Optillion", 400 | [3][0x08 - 1] = "Terago Communications", 401 | [3][0x09 - 1] = "Ikanos Communications", 402 | [3][0x0a - 1] = "Princeton Technology", 403 | [3][0x0b - 1] = "Nanya Technology", 404 | [3][0x0c - 1] = "Elite Flash Storage", 405 | [3][0x0d - 1] = "Mysticom", 406 | [3][0x0e - 1] = "LightSand Communications", 407 | [3][0x0f - 1] = "ATI Technologies", 408 | [3][0x10 - 1] = "Agere Systems", 409 | [3][0x11 - 1] = "NeoMagic", 410 | [3][0x12 - 1] = "AuroraNetics", 411 | [3][0x13 - 1] = "Golden Empire", 412 | [3][0x14 - 1] = "Mushkin", 413 | [3][0x15 - 1] = "Tioga Technologies", 414 | [3][0x16 - 1] = "Netlist", 415 | [3][0x17 - 1] = "TeraLogic", 416 | [3][0x18 - 1] = "Cicada Semiconductor", 417 | [3][0x19 - 1] = "Centon Electronics", 418 | [3][0x1a - 1] = "Tyco Electronics", 419 | [3][0x1b - 1] = "Magis Works", 420 | [3][0x1c - 1] = "Zettacom", 421 | [3][0x1d - 1] = "Cogency Semiconductor", 422 | [3][0x1e - 1] = "Chipcon AS", 423 | [3][0x1f - 1] = "Aspex Technology", 424 | [3][0x20 - 1] = "F5 Networks", 425 | [3][0x21 - 1] = "Programmable Silicon Solutions", 426 | [3][0x22 - 1] = "ChipWrights", 427 | [3][0x23 - 1] = "Acorn Networks", 428 | [3][0x24 - 1] = "Quicklogic", 429 | [3][0x25 - 1] = "Kingmax Semiconductor", 430 | [3][0x26 - 1] = "BOPS", 431 | [3][0x27 - 1] = "Flasys", 432 | [3][0x28 - 1] = "BitBlitz Communications", 433 | [3][0x29 - 1] = "eMemory Technology", 434 | [3][0x2a - 1] = "Procket Networks", 435 | [3][0x2b - 1] = "Purple Ray", 436 | [3][0x2c - 1] = "Trebia Networks", 437 | [3][0x2d - 1] = "Delta Electronics", 438 | [3][0x2e - 1] = "Onex Communications", 439 | [3][0x2f - 1] = "Ample Communications", 440 | [3][0x30 - 1] = "Memory Experts Intl", 441 | [3][0x31 - 1] = "Astute Networks", 442 | [3][0x32 - 1] = "Azanda Network Devices", 443 | [3][0x33 - 1] = "Dibcom", 444 | [3][0x34 - 1] = "Tekmos", 445 | [3][0x35 - 1] = "API NetWorks", 446 | [3][0x36 - 1] = "Bay Microsystems", 447 | [3][0x37 - 1] = "Firecron Ltd", 448 | [3][0x38 - 1] = "Resonext Communications", 449 | [3][0x39 - 1] = "Tachys Technologies", 450 | [3][0x3a - 1] = "Equator Technology", 451 | [3][0x3b - 1] = "Concept Computer", 452 | [3][0x3c - 1] = "SILCOM", 453 | [3][0x3d - 1] = "3Dlabs", 454 | [3][0x3e - 1] = "c't Magazine", 455 | [3][0x3f - 1] = "Sanera Systems", 456 | [3][0x40 - 1] = "Silicon Packets", 457 | [3][0x41 - 1] = "Viasystems Group", 458 | [3][0x42 - 1] = "Simtek", 459 | [3][0x43 - 1] = "Semicon Devices Singapore", 460 | [3][0x44 - 1] = "Satron Handelsges", 461 | [3][0x45 - 1] = "Improv Systems", 462 | [3][0x46 - 1] = "INDUSYS GmbH", 463 | [3][0x47 - 1] = "Corrent", 464 | [3][0x48 - 1] = "Infrant Technologies", 465 | [3][0x49 - 1] = "Ritek Corp", 466 | [3][0x4a - 1] = "empowerTel Networks", 467 | [3][0x4b - 1] = "Hypertec", 468 | [3][0x4c - 1] = "Cavium Networks", 469 | [3][0x4d - 1] = "PLX Technology", 470 | [3][0x4e - 1] = "Massana Design", 471 | [3][0x4f - 1] = "Intrinsity", 472 | [3][0x50 - 1] = "Valence Semiconductor", 473 | [3][0x51 - 1] = "Terawave Communications", 474 | [3][0x52 - 1] = "IceFyre Semiconductor", 475 | [3][0x53 - 1] = "Primarion", 476 | [3][0x54 - 1] = "Picochip Designs Ltd", 477 | [3][0x55 - 1] = "Silverback Systems", 478 | [3][0x56 - 1] = "Jade Star Technologies", 479 | [3][0x57 - 1] = "Pijnenburg Securealink", 480 | [3][0x58 - 1] = "takeMS - Ultron AG", 481 | [3][0x59 - 1] = "Cambridge Silicon Radio", 482 | [3][0x5a - 1] = "Swissbit", 483 | [3][0x5b - 1] = "Nazomi Communications", 484 | [3][0x5c - 1] = "eWave System", 485 | [3][0x5d - 1] = "Rockwell Collins", 486 | [3][0x5e - 1] = "Picocel Co Ltd (Paion)", 487 | [3][0x5f - 1] = "Alphamosaic Ltd", 488 | [3][0x60 - 1] = "Sandburst", 489 | [3][0x61 - 1] = "SiCon Video", 490 | [3][0x62 - 1] = "NanoAmp Solutions", 491 | [3][0x63 - 1] = "Ericsson Technology", 492 | [3][0x64 - 1] = "PrairieComm", 493 | [3][0x65 - 1] = "Mitac International", 494 | [3][0x66 - 1] = "Layer N Networks", 495 | [3][0x67 - 1] = "MtekVision (Atsana)", 496 | [3][0x68 - 1] = "Allegro Networks", 497 | [3][0x69 - 1] = "Marvell Semiconductors", 498 | [3][0x6a - 1] = "Netergy Microelectronic", 499 | [3][0x6b - 1] = "NVIDIA", 500 | [3][0x6c - 1] = "Internet Machines", 501 | [3][0x6d - 1] = "Memorysolution GmbH", 502 | [3][0x6e - 1] = "Litchfield Communication", 503 | [3][0x6f - 1] = "Accton Technology", 504 | [3][0x70 - 1] = "Teradiant Networks", 505 | [3][0x71 - 1] = "Scaleo Chip", 506 | [3][0x72 - 1] = "Cortina Systems", 507 | [3][0x73 - 1] = "RAM Components", 508 | [3][0x74 - 1] = "Raqia Networks", 509 | [3][0x75 - 1] = "ClearSpeed", 510 | [3][0x76 - 1] = "Matsushita Battery", 511 | [3][0x77 - 1] = "Xelerated", 512 | [3][0x78 - 1] = "SimpleTech", 513 | [3][0x79 - 1] = "Utron Technology", 514 | [3][0x7a - 1] = "Astec International", 515 | [3][0x7b - 1] = "AVM gmbH", 516 | [3][0x7c - 1] = "Redux Communications", 517 | [3][0x7d - 1] = "Dot Hill Systems", 518 | [3][0x7e - 1] = "TeraChip", 519 | [4][0x01 - 1] = "T-RAM Incorporated", 520 | [4][0x02 - 1] = "Innovics Wireless", 521 | [4][0x03 - 1] = "Teknovus", 522 | [4][0x04 - 1] = "KeyEye Communications", 523 | [4][0x05 - 1] = "Runcom Technologies", 524 | [4][0x06 - 1] = "RedSwitch", 525 | [4][0x07 - 1] = "Dotcast", 526 | [4][0x08 - 1] = "Silicon Mountain Memory", 527 | [4][0x09 - 1] = "Signia Technologies", 528 | [4][0x0a - 1] = "Pixim", 529 | [4][0x0b - 1] = "Galazar Networks", 530 | [4][0x0c - 1] = "White Electronic Designs", 531 | [4][0x0d - 1] = "Patriot Scientific", 532 | [4][0x0e - 1] = "Neoaxiom Corporation", 533 | [4][0x0f - 1] = "3Y Power Technology", 534 | [4][0x10 - 1] = "Scaleo Chip", 535 | [4][0x11 - 1] = "Potentia Power Systems", 536 | [4][0x12 - 1] = "C-guys Incorporated", 537 | [4][0x13 - 1] = "Digital Communications Technology Inc", 538 | [4][0x14 - 1] = "Silicon-Based Technology", 539 | [4][0x15 - 1] = "Fulcrum Microsystems", 540 | [4][0x16 - 1] = "Positivo Informatica Ltd", 541 | [4][0x17 - 1] = "XIOtech Corporation", 542 | [4][0x18 - 1] = "PortalPlayer", 543 | [4][0x19 - 1] = "Zhiying Software", 544 | [4][0x1a - 1] = "ParkerVision Inc", 545 | [4][0x1b - 1] = "Phonex Broadband", 546 | [4][0x1c - 1] = "Skyworks Solutions", 547 | [4][0x1d - 1] = "Entropic Communications", 548 | [4][0x1e - 1] = "I'M Intelligent Memory Ltd", 549 | [4][0x1f - 1] = "Zensys A/S", 550 | [4][0x20 - 1] = "Legend Silicon Corp", 551 | [4][0x21 - 1] = "Sci-worx GmbH", 552 | [4][0x22 - 1] = "SMSC (Standard Microsystems)", 553 | [4][0x23 - 1] = "Renesas Electronics", 554 | [4][0x24 - 1] = "Raza Microelectronics", 555 | [4][0x25 - 1] = "Phyworks", 556 | [4][0x26 - 1] = "MediaTek", 557 | [4][0x27 - 1] = "Non-cents Productions", 558 | [4][0x28 - 1] = "US Modular", 559 | [4][0x29 - 1] = "Wintegra Ltd", 560 | [4][0x2a - 1] = "Mathstar", 561 | [4][0x2b - 1] = "StarCore", 562 | [4][0x2c - 1] = "Oplus Technologies", 563 | [4][0x2d - 1] = "Mindspeed", 564 | [4][0x2e - 1] = "Just Young Computer", 565 | [4][0x2f - 1] = "Radia Communications", 566 | [4][0x30 - 1] = "OCZ", 567 | [4][0x31 - 1] = "Emuzed", 568 | [4][0x32 - 1] = "LOGIC Devices", 569 | [4][0x33 - 1] = "Inphi Corporation", 570 | [4][0x34 - 1] = "Quake Technologies", 571 | [4][0x35 - 1] = "Vixel", 572 | [4][0x36 - 1] = "SolusTek", 573 | [4][0x37 - 1] = "Kongsberg Maritime", 574 | [4][0x38 - 1] = "Faraday Technology", 575 | [4][0x39 - 1] = "Altium Ltd", 576 | [4][0x3a - 1] = "Insyte", 577 | [4][0x3b - 1] = "ARM Ltd", 578 | [4][0x3c - 1] = "DigiVision", 579 | [4][0x3d - 1] = "Vativ Technologies", 580 | [4][0x3e - 1] = "Endicott Interconnect Technologies", 581 | [4][0x3f - 1] = "Pericom", 582 | [4][0x40 - 1] = "Bandspeed", 583 | [4][0x41 - 1] = "LeWiz Communications", 584 | [4][0x42 - 1] = "CPU Technology", 585 | [4][0x43 - 1] = "Ramaxel Technology", 586 | [4][0x44 - 1] = "DSP Group", 587 | [4][0x45 - 1] = "Axis Communications", 588 | [4][0x46 - 1] = "Legacy Electronics", 589 | [4][0x47 - 1] = "Chrontel", 590 | [4][0x48 - 1] = "Powerchip Semiconductor", 591 | [4][0x49 - 1] = "MobilEye Technologies", 592 | [4][0x4a - 1] = "Excel Semiconductor", 593 | [4][0x4b - 1] = "A-DATA Technology", 594 | [4][0x4c - 1] = "VirtualDigm", 595 | [4][0x4d - 1] = "G Skill Intl", 596 | [4][0x4e - 1] = "Quanta Computer", 597 | [4][0x4f - 1] = "Yield Microelectronics", 598 | [4][0x50 - 1] = "Afa Technologies", 599 | [4][0x51 - 1] = "KINGBOX Technology Co Ltd", 600 | [4][0x52 - 1] = "Ceva", 601 | [4][0x53 - 1] = "iStor Networks", 602 | [4][0x54 - 1] = "Advance Modules", 603 | [4][0x55 - 1] = "Microsoft", 604 | [4][0x56 - 1] = "Open-Silicon", 605 | [4][0x57 - 1] = "Goal Semiconductor", 606 | [4][0x58 - 1] = "ARC International", 607 | [4][0x59 - 1] = "Simmtec", 608 | [4][0x5a - 1] = "Metanoia", 609 | [4][0x5b - 1] = "Key Stream", 610 | [4][0x5c - 1] = "Lowrance Electronics", 611 | [4][0x5d - 1] = "Adimos", 612 | [4][0x5e - 1] = "SiGe Semiconductor", 613 | [4][0x5f - 1] = "Fodus Communications", 614 | [4][0x60 - 1] = "Credence Systems Corp", 615 | [4][0x61 - 1] = "Genesis Microchip Inc", 616 | [4][0x62 - 1] = "Vihana Inc", 617 | [4][0x63 - 1] = "WIS Technologies", 618 | [4][0x64 - 1] = "GateChange Technologies", 619 | [4][0x65 - 1] = "High Density Devices AS", 620 | [4][0x66 - 1] = "Synopsys", 621 | [4][0x67 - 1] = "Gigaram", 622 | [4][0x68 - 1] = "Enigma Semiconductor Inc", 623 | [4][0x69 - 1] = "Century Micro Inc", 624 | [4][0x6a - 1] = "Icera Semiconductor", 625 | [4][0x6b - 1] = "Mediaworks Integrated Systems", 626 | [4][0x6c - 1] = "O'Neil Product Development", 627 | [4][0x6d - 1] = "Supreme Top Technology Ltd", 628 | [4][0x6e - 1] = "MicroDisplay Corporation", 629 | [4][0x6f - 1] = "Team Group Inc", 630 | [4][0x70 - 1] = "Sinett Corporation", 631 | [4][0x71 - 1] = "Toshiba Corporation", 632 | [4][0x72 - 1] = "Tensilica", 633 | [4][0x73 - 1] = "SiRF Technology", 634 | [4][0x74 - 1] = "Bacoc Inc", 635 | [4][0x75 - 1] = "SMaL Camera Technologies", 636 | [4][0x76 - 1] = "Thomson SC", 637 | [4][0x77 - 1] = "Airgo Networks", 638 | [4][0x78 - 1] = "Wisair Ltd", 639 | [4][0x79 - 1] = "SigmaTel", 640 | [4][0x7a - 1] = "Arkados", 641 | [4][0x7b - 1] = "Compete IT gmbH Co KG", 642 | [4][0x7c - 1] = "Eudar Technology Inc", 643 | [4][0x7d - 1] = "Focus Enhancements", 644 | [4][0x7e - 1] = "Xyratex", 645 | [5][0x01 - 1] = "Specular Networks", 646 | [5][0x02 - 1] = "Patriot Memory (PDP Systems)", 647 | [5][0x03 - 1] = "U-Chip Technology Corp", 648 | [5][0x04 - 1] = "Silicon Optix", 649 | [5][0x05 - 1] = "Greenfield Networks", 650 | [5][0x06 - 1] = "CompuRAM GmbH", 651 | [5][0x07 - 1] = "Stargen Inc", 652 | [5][0x08 - 1] = "NetCell Corporation", 653 | [5][0x09 - 1] = "Excalibrus Technologies Ltd", 654 | [5][0x0a - 1] = "SCM Microsystems", 655 | [5][0x0b - 1] = "Xsigo Systems Inc", 656 | [5][0x0c - 1] = "CHIPS & Systems Inc", 657 | [5][0x0d - 1] = "Tier 1 Multichip Solutions", 658 | [5][0x0e - 1] = "CWRL Labs", 659 | [5][0x0f - 1] = "Teradici", 660 | [5][0x10 - 1] = "Gigaram Inc", 661 | [5][0x11 - 1] = "g2 Microsystems", 662 | [5][0x12 - 1] = "PowerFlash Semiconductor", 663 | [5][0x13 - 1] = "P.A. Semi Inc", 664 | [5][0x14 - 1] = "NovaTech Solutions S.A.", 665 | [5][0x15 - 1] = "c2 Microsystems Inc", 666 | [5][0x16 - 1] = "Level5 Networks", 667 | [5][0x17 - 1] = "COS Memory AG", 668 | [5][0x18 - 1] = "Innovasic Semiconductor", 669 | [5][0x19 - 1] = "02IC Co Ltd", 670 | [5][0x1a - 1] = "Tabula Inc", 671 | [5][0x1b - 1] = "Crucial Technology", 672 | [5][0x1c - 1] = "Chelsio Communications", 673 | [5][0x1d - 1] = "Solarflare Communications", 674 | [5][0x1e - 1] = "Xambala Inc", 675 | [5][0x1f - 1] = "EADS Astrium", 676 | [5][0x20 - 1] = "Terra Semiconductor Inc", 677 | [5][0x21 - 1] = "Imaging Works Inc", 678 | [5][0x22 - 1] = "Astute Networks Inc", 679 | [5][0x23 - 1] = "Tzero", 680 | [5][0x24 - 1] = "Emulex", 681 | [5][0x25 - 1] = "Power-One", 682 | [5][0x26 - 1] = "Pulse~LINK Inc", 683 | [5][0x27 - 1] = "Hon Hai Precision Industry", 684 | [5][0x28 - 1] = "White Rock Networks Inc", 685 | [5][0x29 - 1] = "Telegent Systems USA Inc", 686 | [5][0x2a - 1] = "Atrua Technologies Inc", 687 | [5][0x2b - 1] = "Acbel Polytech Inc", 688 | [5][0x2c - 1] = "eRide Inc", 689 | [5][0x2d - 1] = "ULi Electronics Inc", 690 | [5][0x2e - 1] = "Magnum Semiconductor Inc", 691 | [5][0x2f - 1] = "neoOne Technology Inc", 692 | [5][0x30 - 1] = "Connex Technology Inc", 693 | [5][0x31 - 1] = "Stream Processors Inc", 694 | [5][0x32 - 1] = "Focus Enhancements", 695 | [5][0x33 - 1] = "Telecis Wireless Inc", 696 | [5][0x34 - 1] = "uNav Microelectronics", 697 | [5][0x35 - 1] = "Tarari Inc", 698 | [5][0x36 - 1] = "Ambric Inc", 699 | [5][0x37 - 1] = "Newport Media Inc", 700 | [5][0x38 - 1] = "VMTS", 701 | [5][0x39 - 1] = "Enuclia Semiconductor Inc", 702 | [5][0x3a - 1] = "Virtium Technology Inc", 703 | [5][0x3b - 1] = "Solid State System Co Ltd", 704 | [5][0x3c - 1] = "Kian Tech LLC", 705 | [5][0x3d - 1] = "Artimi", 706 | [5][0x3e - 1] = "Power Quotient International", 707 | [5][0x3f - 1] = "Avago Technologies", 708 | [5][0x40 - 1] = "ADTechnology", 709 | [5][0x41 - 1] = "Sigma Designs", 710 | [5][0x42 - 1] = "SiCortex Inc", 711 | [5][0x43 - 1] = "Ventura Technology Group", 712 | [5][0x44 - 1] = "eASIC", 713 | [5][0x45 - 1] = "M.H.S. SAS", 714 | [5][0x46 - 1] = "Micro Star International", 715 | [5][0x47 - 1] = "Rapport Inc", 716 | [5][0x48 - 1] = "Makway International", 717 | [5][0x49 - 1] = "Broad Reach Engineering Co", 718 | [5][0x4a - 1] = "Semiconductor Mfg Intl Corp", 719 | [5][0x4b - 1] = "SiConnect", 720 | [5][0x4c - 1] = "FCI USA Inc", 721 | [5][0x4d - 1] = "Validity Sensors", 722 | [5][0x4e - 1] = "Coney Technology Co Ltd", 723 | [5][0x4f - 1] = "Spans Logic", 724 | [5][0x50 - 1] = "Neterion Inc", 725 | [5][0x51 - 1] = "Qimonda", 726 | [5][0x52 - 1] = "New Japan Radio Co Ltd", 727 | [5][0x53 - 1] = "Velogix", 728 | [5][0x54 - 1] = "Montalvo Systems", 729 | [5][0x55 - 1] = "iVivity Inc", 730 | [5][0x56 - 1] = "Walton Chaintech", 731 | [5][0x57 - 1] = "AENEON", 732 | [5][0x58 - 1] = "Lorom Industrial Co Ltd", 733 | [5][0x59 - 1] = "Radiospire Networks", 734 | [5][0x5a - 1] = "Sensio Technologies Inc", 735 | [5][0x5b - 1] = "Nethra Imaging", 736 | [5][0x5c - 1] = "Hexon Technology Pte Ltd", 737 | [5][0x5d - 1] = "CompuStocx (CSX)", 738 | [5][0x5e - 1] = "Methode Electronics Inc", 739 | [5][0x5f - 1] = "Connect One Ltd", 740 | [5][0x60 - 1] = "Opulan Technologies", 741 | [5][0x61 - 1] = "Septentrio NV", 742 | [5][0x62 - 1] = "Goldenmars Technology Inc", 743 | [5][0x63 - 1] = "Kreton Corporation", 744 | [5][0x64 - 1] = "Cochlear Ltd", 745 | [5][0x65 - 1] = "Altair Semiconductor", 746 | [5][0x66 - 1] = "NetEffect Inc", 747 | [5][0x67 - 1] = "Spansion Inc", 748 | [5][0x68 - 1] = "Taiwan Semiconductor Mfg", 749 | [5][0x69 - 1] = "Emphany Systems Inc", 750 | [5][0x6a - 1] = "ApaceWave Technologies", 751 | [5][0x6b - 1] = "Mobilygen Corporation", 752 | [5][0x6c - 1] = "Tego", 753 | [5][0x6d - 1] = "Cswitch Corporation", 754 | [5][0x6e - 1] = "Haier (Beijing) IC Design Co", 755 | [5][0x6f - 1] = "MetaRAM", 756 | [5][0x70 - 1] = "Axel Electronics Co Ltd", 757 | [5][0x71 - 1] = "Tilera Corporation", 758 | [5][0x72 - 1] = "Aquantia", 759 | [5][0x73 - 1] = "Vivace Semiconductor", 760 | [5][0x74 - 1] = "Redpine Signals", 761 | [5][0x75 - 1] = "Octalica", 762 | [5][0x76 - 1] = "InterDigital Communications", 763 | [5][0x77 - 1] = "Avant Technology", 764 | [5][0x78 - 1] = "Asrock Inc", 765 | [5][0x79 - 1] = "Availink", 766 | [5][0x7a - 1] = "Quartics Inc", 767 | [5][0x7b - 1] = "Element CXI", 768 | [5][0x7c - 1] = "Innovaciones Microelectronicas", 769 | [5][0x7d - 1] = "VeriSilicon Microelectronics", 770 | [5][0x7e - 1] = "W5 Networks", 771 | [6][0x01 - 1] = "MOVEKING", 772 | [6][0x02 - 1] = "Mavrix Technology Inc", 773 | [6][0x03 - 1] = "CellGuide Ltd", 774 | [6][0x04 - 1] = "Faraday Technology", 775 | [6][0x05 - 1] = "Diablo Technologies Inc", 776 | [6][0x06 - 1] = "Jennic", 777 | [6][0x07 - 1] = "Octasic", 778 | [6][0x08 - 1] = "Molex Incorporated", 779 | [6][0x09 - 1] = "3Leaf Networks", 780 | [6][0x0a - 1] = "Bright Micron Technology", 781 | [6][0x0b - 1] = "Netxen", 782 | [6][0x0c - 1] = "NextWave Broadband Inc", 783 | [6][0x0d - 1] = "DisplayLink", 784 | [6][0x0e - 1] = "ZMOS Technology", 785 | [6][0x0f - 1] = "Tec-Hill", 786 | [6][0x10 - 1] = "Multigig Inc", 787 | [6][0x11 - 1] = "Amimon", 788 | [6][0x12 - 1] = "Euphonic Technologies Inc", 789 | [6][0x13 - 1] = "BRN Phoenix", 790 | [6][0x14 - 1] = "InSilica", 791 | [6][0x15 - 1] = "Ember Corporation", 792 | [6][0x16 - 1] = "Avexir Technologies Corporation", 793 | [6][0x17 - 1] = "Echelon Corporation", 794 | [6][0x18 - 1] = "Edgewater Computer Systems", 795 | [6][0x19 - 1] = "XMOS Semiconductor Ltd", 796 | [6][0x1a - 1] = "GENUSION Inc", 797 | [6][0x1b - 1] = "Memory Corp NV", 798 | [6][0x1c - 1] = "SiliconBlue Technologies", 799 | [6][0x1d - 1] = "Rambus Inc", 800 | [6][0x1e - 1] = "Andes Technology Corporation", 801 | [6][0x1f - 1] = "Coronis Systems", 802 | [6][0x20 - 1] = "Achronix Semiconductor", 803 | [6][0x21 - 1] = "Siano Mobile Silicon Ltd", 804 | [6][0x22 - 1] = "Semtech Corporation", 805 | [6][0x23 - 1] = "Pixelworks Inc", 806 | [6][0x24 - 1] = "Gaisler Research AB", 807 | [6][0x25 - 1] = "Teranetics", 808 | [6][0x26 - 1] = "Toppan Printing Co Ltd", 809 | [6][0x27 - 1] = "Kingxcon", 810 | [6][0x28 - 1] = "Silicon Integrated Systems", 811 | [6][0x29 - 1] = "I-O Data Device Inc", 812 | [6][0x2a - 1] = "NDS Americas Inc", 813 | [6][0x2b - 1] = "Solomon Systech Limited", 814 | [6][0x2c - 1] = "On Demand Microelectronics", 815 | [6][0x2d - 1] = "Amicus Wireless Inc", 816 | [6][0x2e - 1] = "SMARDTV SNC", 817 | [6][0x2f - 1] = "Comsys Communication Ltd", 818 | [6][0x30 - 1] = "Movidia Ltd", 819 | [6][0x31 - 1] = "Javad GNSS Inc", 820 | [6][0x32 - 1] = "Montage Technology Group", 821 | [6][0x33 - 1] = "Trident Microsystems", 822 | [6][0x34 - 1] = "Super Talent", 823 | [6][0x35 - 1] = "Optichron Inc", 824 | [6][0x36 - 1] = "Future Waves UK Ltd", 825 | [6][0x37 - 1] = "SiBEAM Inc", 826 | [6][0x38 - 1] = "InicoreInc", 827 | [6][0x39 - 1] = "Virident Systems", 828 | [6][0x3a - 1] = "M2000 Inc", 829 | [6][0x3b - 1] = "ZeroG Wireless Inc", 830 | [6][0x3c - 1] = "Gingle Technology Co Ltd", 831 | [6][0x3d - 1] = "Space Micro Inc", 832 | [6][0x3e - 1] = "Wilocity", 833 | [6][0x3f - 1] = "Novafora Inc", 834 | [6][0x40 - 1] = "iKoa Corporation", 835 | [6][0x41 - 1] = "ASint Technology", 836 | [6][0x42 - 1] = "Ramtron", 837 | [6][0x43 - 1] = "Plato Networks Inc", 838 | [6][0x44 - 1] = "IPtronics AS", 839 | [6][0x45 - 1] = "Infinite-Memories", 840 | [6][0x46 - 1] = "Parade Technologies Inc", 841 | [6][0x47 - 1] = "Dune Networks", 842 | [6][0x48 - 1] = "GigaDevice Semiconductor", 843 | [6][0x49 - 1] = "Modu Ltd", 844 | [6][0x4a - 1] = "CEITEC", 845 | [6][0x4b - 1] = "Northrop Grumman", 846 | [6][0x4c - 1] = "XRONET Corporation", 847 | [6][0x4d - 1] = "Sicon Semiconductor AB", 848 | [6][0x4e - 1] = "Atla Electronics Co Ltd", 849 | [6][0x4f - 1] = "TOPRAM Technology", 850 | [6][0x50 - 1] = "Silego Technology Inc", 851 | [6][0x51 - 1] = "Kinglife", 852 | [6][0x52 - 1] = "Ability Industries Ltd", 853 | [6][0x53 - 1] = "Silicon Power Computer & Communications", 854 | [6][0x54 - 1] = "Augusta Technology Inc", 855 | [6][0x55 - 1] = "Nantronics Semiconductors", 856 | [6][0x56 - 1] = "Hilscher Gesellschaft", 857 | [6][0x57 - 1] = "Quixant Ltd", 858 | [6][0x58 - 1] = "Percello Ltd", 859 | [6][0x59 - 1] = "NextIO Inc", 860 | [6][0x5a - 1] = "Scanimetrics Inc", 861 | [6][0x5b - 1] = "FS-Semi Company Ltd", 862 | [6][0x5c - 1] = "Infinera Corporation", 863 | [6][0x5d - 1] = "SandForce Inc", 864 | [6][0x5e - 1] = "Lexar Media", 865 | [6][0x5f - 1] = "Teradyne Inc", 866 | [6][0x60 - 1] = "Memory Exchange Corp", 867 | [6][0x61 - 1] = "Suzhou Smartek Electronics", 868 | [6][0x62 - 1] = "Avantium Corporation", 869 | [6][0x63 - 1] = "ATP Electronics Inc", 870 | [6][0x64 - 1] = "Valens Semiconductor Ltd", 871 | [6][0x65 - 1] = "Agate Logic Inc", 872 | [6][0x66 - 1] = "Netronome", 873 | [6][0x67 - 1] = "Zenverge Inc", 874 | [6][0x68 - 1] = "N-trig Ltd", 875 | [6][0x69 - 1] = "SanMax Technologies Inc", 876 | [6][0x6a - 1] = "Contour Semiconductor Inc", 877 | [6][0x6b - 1] = "TwinMOS", 878 | [6][0x6c - 1] = "Silicon Systems Inc", 879 | [6][0x6d - 1] = "V-Color Technology Inc", 880 | [6][0x6e - 1] = "Certicom Corporation", 881 | [6][0x6f - 1] = "JSC ICC Milandr", 882 | [6][0x70 - 1] = "PhotoFast Global Inc", 883 | [6][0x71 - 1] = "InnoDisk Corporation", 884 | [6][0x72 - 1] = "Muscle Power", 885 | [6][0x73 - 1] = "Energy Micro", 886 | [6][0x74 - 1] = "Innofidei", 887 | [6][0x75 - 1] = "CopperGate Communications", 888 | [6][0x76 - 1] = "Holtek Semiconductor Inc", 889 | [6][0x77 - 1] = "Myson Century Inc", 890 | [6][0x78 - 1] = "FIDELIX", 891 | [6][0x79 - 1] = "Red Digital Cinema", 892 | [6][0x7a - 1] = "Densbits Technology", 893 | [6][0x7b - 1] = "Zempro", 894 | [6][0x7c - 1] = "MoSys", 895 | [6][0x7d - 1] = "Provigent", 896 | [6][0x7e - 1] = "Triad Semiconductor Inc", 897 | [7][0x01 - 1] = "Siklu Communication Ltd", 898 | [7][0x02 - 1] = "A Force Manufacturing Ltd", 899 | [7][0x03 - 1] = "Strontium", 900 | [7][0x04 - 1] = "ALi Corp (Abilis Systems)", 901 | [7][0x05 - 1] = "Siglead Inc", 902 | [7][0x06 - 1] = "Ubicom Inc", 903 | [7][0x07 - 1] = "Unifosa Corporation", 904 | [7][0x08 - 1] = "Stretch Inc", 905 | [7][0x09 - 1] = "Lantiq Deutschland GmbH", 906 | [7][0x0a - 1] = "Visipro.", 907 | [7][0x0b - 1] = "EKMemory", 908 | [7][0x0c - 1] = "Microelectronics Institute ZTE", 909 | [7][0x0d - 1] = "u-blox AG", 910 | [7][0x0e - 1] = "Carry Technology Co Ltd", 911 | [7][0x0f - 1] = "Nokia", 912 | [7][0x10 - 1] = "King Tiger Technology", 913 | [7][0x11 - 1] = "Sierra Wireless", 914 | [7][0x12 - 1] = "HT Micron", 915 | [7][0x13 - 1] = "Albatron Technology Co Ltd", 916 | [7][0x14 - 1] = "Leica Geosystems AG", 917 | [7][0x15 - 1] = "BroadLight", 918 | [7][0x16 - 1] = "AEXEA", 919 | [7][0x17 - 1] = "ClariPhy Communications Inc", 920 | [7][0x18 - 1] = "Green Plug", 921 | [7][0x19 - 1] = "Design Art Networks", 922 | [7][0x1a - 1] = "Mach Xtreme Technology Ltd", 923 | [7][0x1b - 1] = "ATO Solutions Co Ltd", 924 | [7][0x1c - 1] = "Ramsta", 925 | [7][0x1d - 1] = "Greenliant Systems Ltd", 926 | [7][0x1e - 1] = "Teikon", 927 | [7][0x1f - 1] = "Antec Hadron", 928 | [7][0x20 - 1] = "NavCom Technology Inc", 929 | [7][0x21 - 1] = "Shanghai Fudan Microelectronics", 930 | [7][0x22 - 1] = "Calxeda Inc", 931 | [7][0x23 - 1] = "JSC EDC Electronics", 932 | [7][0x24 - 1] = "Kandit Technology Co Ltd", 933 | [7][0x25 - 1] = "Ramos Technology", 934 | [7][0x26 - 1] = "Goldenmars Technology", 935 | [7][0x27 - 1] = "XeL Technology Inc", 936 | [7][0x28 - 1] = "Newzone Corporation", 937 | [7][0x29 - 1] = "ShenZhen MercyPower Tech", 938 | [7][0x2a - 1] = "Nanjing Yihuo Technology", 939 | [7][0x2b - 1] = "Nethra Imaging Inc", 940 | [7][0x2c - 1] = "SiTel Semiconductor BV", 941 | [7][0x2d - 1] = "SolidGear Corporation", 942 | [7][0x2e - 1] = "Topower Computer Ind Co Ltd", 943 | [7][0x2f - 1] = "Wilocity", 944 | [7][0x30 - 1] = "Profichip GmbH", 945 | [7][0x31 - 1] = "Gerad Technologies", 946 | [7][0x32 - 1] = "Ritek Corporation", 947 | [7][0x33 - 1] = "Gomos Technology Limited", 948 | [7][0x34 - 1] = "Memoright Corporation", 949 | [7][0x35 - 1] = "D-Broad Inc", 950 | [7][0x36 - 1] = "HiSilicon Technologies", 951 | [7][0x37 - 1] = "Syndiant Inc.", 952 | [7][0x38 - 1] = "Enverv Inc", 953 | [7][0x39 - 1] = "Cognex", 954 | [7][0x3a - 1] = "Xinnova Technology Inc", 955 | [7][0x3b - 1] = "Ultron AG", 956 | [7][0x3c - 1] = "Concord Idea Corporation", 957 | [7][0x3d - 1] = "AIM Corporation", 958 | [7][0x3e - 1] = "Lifetime Memory Products", 959 | [7][0x3f - 1] = "Ramsway", 960 | [7][0x40 - 1] = "Recore Systems B.V.", 961 | [7][0x41 - 1] = "Haotian Jinshibo Science Tech", 962 | [7][0x42 - 1] = "Being Advanced Memory", 963 | [7][0x43 - 1] = "Adesto Technologies", 964 | [7][0x44 - 1] = "Giantec Semiconductor Inc", 965 | [7][0x45 - 1] = "HMD Electronics AG", 966 | [7][0x46 - 1] = "Gloway International (HK)", 967 | [7][0x47 - 1] = "Kingcore", 968 | [7][0x48 - 1] = "Anucell Technology Holding", 969 | [7][0x49 - 1] = "Accord Software & Systems Pvt. Ltd", 970 | [7][0x4a - 1] = "Active-Semi Inc", 971 | [7][0x4b - 1] = "Denso Corporation", 972 | [7][0x4c - 1] = "TLSI Inc", 973 | [7][0x4d - 1] = "Qidan", 974 | [7][0x4e - 1] = "Mustang", 975 | [7][0x4f - 1] = "Orca Systems", 976 | [7][0x50 - 1] = "Passif Semiconductor", 977 | [7][0x51 - 1] = "GigaDevice Semiconductor (Beijing) Inc", 978 | [7][0x52 - 1] = "Memphis Electronic", 979 | [7][0x53 - 1] = "Beckhoff Automation GmbH", 980 | [7][0x54 - 1] = "Harmony Semiconductor Corp", 981 | [7][0x55 - 1] = "Air Computers SRL", 982 | [7][0x56 - 1] = "TMT Memory", 983 | [7][0x57 - 1] = "Eorex Corporation", 984 | [7][0x58 - 1] = "Xingtera", 985 | [7][0x59 - 1] = "Netsol", 986 | [7][0x5a - 1] = "Bestdon Technology Co Ltd", 987 | [7][0x5b - 1] = "Baysand Inc", 988 | [7][0x5c - 1] = "Uroad Technology Co Ltd", 989 | [7][0x5d - 1] = "Wilk Elektronik S.A.", 990 | [7][0x5e - 1] = "AAI", 991 | [7][0x5f - 1] = "Harman", 992 | [7][0x60 - 1] = "Berg Microelectronics Inc", 993 | [7][0x61 - 1] = "ASSIA Inc", 994 | [7][0x62 - 1] = "Visiontek Products LLC", 995 | [7][0x63 - 1] = "OCMEMORY", 996 | [7][0x64 - 1] = "Welink Solution Inc", 997 | [7][0x65 - 1] = "Shark Gaming", 998 | [7][0x66 - 1] = "Avalanche Technology", 999 | [7][0x67 - 1] = "R&D Center ELVEES OJSC", 1000 | [7][0x68 - 1] = "KingboMars Technology Co Ltd", 1001 | [7][0x69 - 1] = "High Bridge Solutions Industria Eletronica", 1002 | [7][0x6a - 1] = "Transcend Technology Co Ltd", 1003 | [7][0x6b - 1] = "Everspin Technologies", 1004 | [7][0x6c - 1] = "Hon-Hai Precision", 1005 | [7][0x6d - 1] = "Smart Storage Systems", 1006 | [7][0x6e - 1] = "Toumaz Group", 1007 | [7][0x6f - 1] = "Zentel Electronics Corporation", 1008 | [7][0x70 - 1] = "Panram International Corporation", 1009 | [7][0x71 - 1] = "Silicon Space Technology", 1010 | [7][0x72 - 1] = "LITE-ON IT Corporation", 1011 | [7][0x73 - 1] = "Inuitive", 1012 | [7][0x74 - 1] = "HMicro", 1013 | [7][0x75 - 1] = "BittWare Inc", 1014 | [7][0x76 - 1] = "GLOBALFOUNDRIES", 1015 | [7][0x77 - 1] = "ACPI Digital Co Ltd", 1016 | [7][0x78 - 1] = "Annapurna Labs", 1017 | [7][0x79 - 1] = "AcSiP Technology Corporation", 1018 | [7][0x7a - 1] = "Idea! Electronic Systems", 1019 | [7][0x7b - 1] = "Gowe Technology Co Ltd", 1020 | [7][0x7c - 1] = "Hermes Testing Solutions Inc", 1021 | [7][0x7d - 1] = "Positivo BGH", 1022 | [7][0x7e - 1] = "Intelligence Silicon Technology", 1023 | [8][0x01 - 1] = "3D PLUS", 1024 | [8][0x02 - 1] = "Diehl Aerospace", 1025 | [8][0x03 - 1] = "Fairchild", 1026 | [8][0x04 - 1] = "Mercury Systems", 1027 | [8][0x05 - 1] = "Sonics Inc", 1028 | [8][0x06 - 1] = "Emerson Automation Solutions", 1029 | [8][0x07 - 1] = "Shenzhen Jinge Information Co Ltd", 1030 | [8][0x08 - 1] = "SCWW", 1031 | [8][0x09 - 1] = "Silicon Motion Inc", 1032 | [8][0x0a - 1] = "Anurag", 1033 | [8][0x0b - 1] = "King Kong", 1034 | [8][0x0c - 1] = "FROM30 Co Ltd", 1035 | [8][0x0d - 1] = "Gowin Semiconductor Corp", 1036 | [8][0x0e - 1] = "Fremont Micro Devices Ltd", 1037 | [8][0x0f - 1] = "Ericsson Modems", 1038 | [8][0x10 - 1] = "Exelis", 1039 | [8][0x11 - 1] = "Satixfy Ltd", 1040 | [8][0x12 - 1] = "Galaxy Microsystems Ltd", 1041 | [8][0x13 - 1] = "Gloway International Co Ltd", 1042 | [8][0x14 - 1] = "Lab", 1043 | [8][0x15 - 1] = "Smart Energy Instruments", 1044 | [8][0x16 - 1] = "Approved Memory Corporation", 1045 | [8][0x17 - 1] = "Axell Corporation", 1046 | [8][0x18 - 1] = "Essencore Limited", 1047 | [8][0x19 - 1] = "Phytium", 1048 | [8][0x1a - 1] = "Xi'an UniIC Semiconductors Co Ltd", 1049 | [8][0x1b - 1] = "Ambiq Micro", 1050 | [8][0x1c - 1] = "eveRAM Technology Inc", 1051 | [8][0x1d - 1] = "Infomax", 1052 | [8][0x1e - 1] = "Butterfly Network Inc", 1053 | [8][0x1f - 1] = "Shenzhen City Gcai Electronics", 1054 | [8][0x20 - 1] = "Stack Devices Corporation", 1055 | [8][0x21 - 1] = "ADK Media Group", 1056 | [8][0x22 - 1] = "TSP Global Co Ltd", 1057 | [8][0x23 - 1] = "HighX", 1058 | [8][0x24 - 1] = "Shenzhen Elicks Technology", 1059 | [8][0x25 - 1] = "XinKai/Silicon Kaiser", 1060 | [8][0x26 - 1] = "Google Inc", 1061 | [8][0x27 - 1] = "Dasima International Development", 1062 | [8][0x28 - 1] = "Leahkinn Technology Limited", 1063 | [8][0x29 - 1] = "HIMA Paul Hildebrandt GmbH Co KG", 1064 | [8][0x2a - 1] = "Keysight Technologies", 1065 | [8][0x2b - 1] = "Techcomp International (Fastable)", 1066 | [8][0x2c - 1] = "Ancore Technology Corporation", 1067 | [8][0x2d - 1] = "Nuvoton", 1068 | [8][0x2e - 1] = "Korea Uhbele International Group Ltd", 1069 | [8][0x2f - 1] = "Ikegami Tsushinki Co Ltd", 1070 | [8][0x30 - 1] = "RelChip Inc", 1071 | [8][0x31 - 1] = "Baikal Electronics", 1072 | [8][0x32 - 1] = "Nemostech Inc", 1073 | [8][0x33 - 1] = "Memorysolution GmbH", 1074 | [8][0x34 - 1] = "Silicon Integrated Systems Corporation", 1075 | [8][0x35 - 1] = "Xiede", 1076 | [8][0x36 - 1] = "BRC", 1077 | [8][0x37 - 1] = "Flash Chi", 1078 | [8][0x38 - 1] = "Jone", 1079 | [8][0x39 - 1] = "GCT Semiconductor Inc", 1080 | [8][0x3a - 1] = "Hong Kong Zetta Device Technology", 1081 | [8][0x3b - 1] = "Unimemory Technology(s) Pte Ltd", 1082 | [8][0x3c - 1] = "Cuso", 1083 | [8][0x3d - 1] = "Kuso", 1084 | [8][0x3e - 1] = "Uniquify Inc", 1085 | [8][0x3f - 1] = "Skymedi Corporation", 1086 | [8][0x40 - 1] = "Core Chance Co Ltd", 1087 | [8][0x41 - 1] = "Tekism Co Ltd", 1088 | [8][0x42 - 1] = "Seagate Technology PLC", 1089 | [8][0x43 - 1] = "Hong Kong Gaia Group Co Limited", 1090 | [8][0x44 - 1] = "Gigacom Semiconductor LLC", 1091 | [8][0x45 - 1] = "V2 Technologies", 1092 | [8][0x46 - 1] = "TLi", 1093 | [8][0x47 - 1] = "Neotion", 1094 | [8][0x48 - 1] = "Lenovo", 1095 | [8][0x49 - 1] = "Shenzhen Zhongteng Electronic Corp Ltd", 1096 | [8][0x4a - 1] = "Compound Photonics", 1097 | [8][0x4b - 1] = "in2H2 inc", 1098 | [8][0x4c - 1] = "Shenzhen Pango Microsystems Co Ltd", 1099 | [8][0x4d - 1] = "Vasekey", 1100 | [8][0x4e - 1] = "Cal-Comp Industria de Semicondutores", 1101 | [8][0x4f - 1] = "Eyenix Co Ltd", 1102 | [8][0x50 - 1] = "Heoriady", 1103 | [8][0x51 - 1] = "Accelerated Memory Production Inc", 1104 | [8][0x52 - 1] = "INVECAS Inc", 1105 | [8][0x53 - 1] = "AP Memory", 1106 | [8][0x54 - 1] = "Douqi Technology", 1107 | [8][0x55 - 1] = "Etron Technology Inc", 1108 | [8][0x56 - 1] = "Indie Semiconductor", 1109 | [8][0x57 - 1] = "Socionext Inc", 1110 | [8][0x58 - 1] = "HGST", 1111 | [8][0x59 - 1] = "EVGA", 1112 | [8][0x5a - 1] = "Audience Inc", 1113 | [8][0x5b - 1] = "EpicGear", 1114 | [8][0x5c - 1] = "Vitesse Enterprise Co", 1115 | [8][0x5d - 1] = "Foxtronn International Corporation", 1116 | [8][0x5e - 1] = "Bretelon Inc", 1117 | [8][0x5f - 1] = "Graphcore", 1118 | [8][0x60 - 1] = "Eoplex Inc", 1119 | [8][0x61 - 1] = "MaxLinear Inc", 1120 | [8][0x62 - 1] = "ETA Devices", 1121 | [8][0x63 - 1] = "LOKI", 1122 | [8][0x64 - 1] = "IMS Electronics Co Ltd", 1123 | [8][0x65 - 1] = "Dosilicon Co Ltd", 1124 | [8][0x66 - 1] = "Dolphin Integration", 1125 | [8][0x67 - 1] = "Shenzhen Mic Electronics Technolog", 1126 | [8][0x68 - 1] = "Boya Microelectronics Inc", 1127 | [8][0x69 - 1] = "Geniachip (Roche)", 1128 | [8][0x6a - 1] = "Axign", 1129 | [8][0x6b - 1] = "Kingred Electronic Technology Ltd", 1130 | [8][0x6c - 1] = "Chao Yue Zhuo Computer Business Dept.", 1131 | [8][0x6d - 1] = "Guangzhou Si Nuo Electronic Technology.", 1132 | [8][0x6e - 1] = "Crocus Technology Inc", 1133 | [8][0x6f - 1] = "Creative Chips GmbH", 1134 | [8][0x70 - 1] = "GE Aviation Systems LLC.", 1135 | [8][0x71 - 1] = "Asgard", 1136 | [8][0x72 - 1] = "Good Wealth Technology Ltd", 1137 | [8][0x73 - 1] = "TriCor Technologies", 1138 | [8][0x74 - 1] = "Nova-Systems GmbH", 1139 | [8][0x75 - 1] = "JUHOR", 1140 | [8][0x76 - 1] = "Zhuhai Douke Commerce Co Ltd", 1141 | [8][0x77 - 1] = "DSL Memory", 1142 | [8][0x78 - 1] = "Anvo-Systems Dresden GmbH", 1143 | [8][0x79 - 1] = "Realtek", 1144 | [8][0x7a - 1] = "AltoBeam", 1145 | [8][0x7b - 1] = "Wave Computing", 1146 | [8][0x7c - 1] = "Beijing TrustNet Technology Co Ltd", 1147 | [8][0x7d - 1] = "Innovium Inc", 1148 | [8][0x7e - 1] = "Starsway Technology Limited", 1149 | [9][0x01 - 1] = "Weltronics Co LTD", 1150 | [9][0x02 - 1] = "VMware Inc", 1151 | [9][0x03 - 1] = "Hewlett Packard Enterprise", 1152 | [9][0x04 - 1] = "INTENSO", 1153 | [9][0x05 - 1] = "Puya Semiconductor", 1154 | [9][0x06 - 1] = "MEMORFI", 1155 | [9][0x07 - 1] = "MSC Technologies GmbH", 1156 | [9][0x08 - 1] = "Txrui", 1157 | [9][0x09 - 1] = "SiFive Inc", 1158 | [9][0x0a - 1] = "Spreadtrum Communications", 1159 | [9][0x0b - 1] = "XTX Technology Limited", 1160 | [9][0x0c - 1] = "UMAX Technology", 1161 | [9][0x0d - 1] = "Shenzhen Yong Sheng Technology", 1162 | [9][0x0e - 1] = "SNOAMOO (Shenzhen Kai Zhuo Yue)", 1163 | [9][0x0f - 1] = "Daten Tecnologia LTDA", 1164 | [9][0x10 - 1] = "Shenzhen XinRuiYan Electronics", 1165 | [9][0x11 - 1] = "Eta Compute", 1166 | [9][0x12 - 1] = "Energous", 1167 | [9][0x13 - 1] = "Raspberry Pi Trading Ltd", 1168 | [9][0x14 - 1] = "Shenzhen Chixingzhe Tech Co Ltd", 1169 | [9][0x15 - 1] = "Silicon Mobility", 1170 | [9][0x16 - 1] = "IQ-Analog Corporation", 1171 | [9][0x17 - 1] = "Uhnder Inc", 1172 | [9][0x18 - 1] = "Impinj", 1173 | [9][0x19 - 1] = "DEPO Computers", 1174 | [9][0x1a - 1] = "Nespeed Sysems", 1175 | [9][0x1b - 1] = "Yangtze Memory Technologies Co Ltd", 1176 | [9][0x1c - 1] = "MemxPro Inc", 1177 | [9][0x1d - 1] = "Tammuz Co Ltd", 1178 | [9][0x1e - 1] = "Allwinner Technology", 1179 | [9][0x1f - 1] = "Shenzhen City Futian District Qing Xuan Tong Computer Trading Firm", 1180 | [9][0x20 - 1] = "XMC", 1181 | [9][0x21 - 1] = "Teclast", 1182 | [9][0x22 - 1] = "Maxsun", 1183 | [9][0x23 - 1] = "Haiguang Integrated Circuit Design", 1184 | [9][0x24 - 1] = "RamCENTER Technology", 1185 | [9][0x25 - 1] = "Phison Electronics Corporation", 1186 | [9][0x26 - 1] = "Guizhou Huaxintong Semi-Conductor", 1187 | [9][0x27 - 1] = "Network Intelligence", 1188 | [9][0x28 - 1] = "Continental Technology (Holdings)", 1189 | [9][0x29 - 1] = "Guangzhou Huayan Suning Electronic", 1190 | [9][0x2a - 1] = "Guangzhou Zhouji Electronic Co Ltd", 1191 | [9][0x2b - 1] = "Shenzhen Giant Hui Kang Tech Co Ltd", 1192 | [9][0x2c - 1] = "Shenzhen Yilong Innovative Co Ltd", 1193 | [9][0x2d - 1] = "Neo Forza", 1194 | [9][0x2e - 1] = "Lyontek Inc", 1195 | [9][0x2f - 1] = "Shanghai Kuxin Microelectronics Ltd", 1196 | [9][0x30 - 1] = "Shenzhen Larix Technology Co Ltd", 1197 | [9][0x31 - 1] = "Qbit Semiconductor Ltd", 1198 | [9][0x32 - 1] = "Insignis Technology Corporation", 1199 | [9][0x33 - 1] = "Lanson Memory Co Ltd", 1200 | [9][0x34 - 1] = "Shenzhen Superway Electronics Co Ltd", 1201 | [9][0x35 - 1] = "Canaan-Creative Co Ltd", 1202 | [9][0x36 - 1] = "Black Diamond Memory", 1203 | [9][0x37 - 1] = "Shenzhen City Parker Baking Electronics", 1204 | [9][0x38 - 1] = "Shenzhen Baihong Technology Co Ltd", 1205 | [9][0x39 - 1] = "GEO Semiconductors", 1206 | [9][0x3a - 1] = "OCPC", 1207 | [9][0x3b - 1] = "Artery Technology Co Ltd", 1208 | [9][0x3c - 1] = "Jinyu", 1209 | [9][0x3d - 1] = "ShenzhenYing Chi Technology Development", 1210 | [9][0x3e - 1] = "Shenzhen Pengcheng Xin Technology", 1211 | [9][0x3f - 1] = "Pegasus Semiconductor (Shanghai) Co", 1212 | [9][0x40 - 1] = "Mythic Inc", 1213 | [9][0x41 - 1] = "Elmos Semiconductor AG", 1214 | [9][0x42 - 1] = "Kllisre", 1215 | [9][0x43 - 1] = "Shenzhen Winconway Technology", 1216 | [9][0x44 - 1] = "Shenzhen Xingmem Technology Corp", 1217 | [9][0x45 - 1] = "Gold Key Technology Co Ltd", 1218 | [9][0x46 - 1] = "Habana Labs Ltd", 1219 | [9][0x47 - 1] = "Hoodisk Electronics Co Ltd", 1220 | [9][0x48 - 1] = "SemsoTai (SZ) Technology Co Ltd", 1221 | [9][0x49 - 1] = "OM Nanotech Pvt. Ltd", 1222 | [9][0x4a - 1] = "Shenzhen Zhifeng Weiye Technology", 1223 | [9][0x4b - 1] = "Xinshirui (Shenzhen) Electronics Co", 1224 | [9][0x4c - 1] = "Guangzhou Zhong Hao Tian Electronic", 1225 | [9][0x4d - 1] = "Shenzhen Longsys Electronics Co Ltd", 1226 | [9][0x4e - 1] = "Deciso B.V.", 1227 | [9][0x4f - 1] = "Puya Semiconductor (Shenzhen)", 1228 | [9][0x50 - 1] = "Shenzhen Veineda Technology Co Ltd", 1229 | [9][0x51 - 1] = "Antec Memory", 1230 | [9][0x52 - 1] = "Cortus SAS", 1231 | [9][0x53 - 1] = "Dust Leopard", 1232 | [9][0x54 - 1] = "MyWo AS", 1233 | [9][0x55 - 1] = "J&A Information Inc", 1234 | [9][0x56 - 1] = "Shenzhen JIEPEI Technology Co Ltd", 1235 | [9][0x57 - 1] = "Heidelberg University", 1236 | [9][0x58 - 1] = "Flexxon PTE Ltd", 1237 | [9][0x59 - 1] = "Wiliot", 1238 | [9][0x5a - 1] = "Raysun Electronics International Ltd", 1239 | [9][0x5b - 1] = "Aquarius Production Company LLC", 1240 | [9][0x5c - 1] = "MACNICA DHW LTDA", 1241 | [9][0x5d - 1] = "Intelimem", 1242 | [9][0x5e - 1] = "Zbit Semiconductor Inc", 1243 | [9][0x5f - 1] = "Shenzhen Technology Co Ltd", 1244 | [9][0x60 - 1] = "Signalchip", 1245 | [9][0x61 - 1] = "Shenzen Recadata Storage Technology", 1246 | [9][0x62 - 1] = "Hyundai Technology", 1247 | [9][0x63 - 1] = "Shanghai Fudi Investment Development", 1248 | [9][0x64 - 1] = "Aixi Technology", 1249 | [9][0x65 - 1] = "Tecon MT", 1250 | [9][0x66 - 1] = "Onda Electric Co Ltd", 1251 | [9][0x67 - 1] = "Jinshen", 1252 | [9][0x68 - 1] = "Kimtigo Semiconductor (HK) Limited", 1253 | [9][0x69 - 1] = "IIT Madras", 1254 | [9][0x6a - 1] = "Shenshan (Shenzhen) Electronic", 1255 | [9][0x6b - 1] = "Hefei Core Storage Electronic Limited", 1256 | [9][0x6c - 1] = "Colorful Technology Ltd", 1257 | [9][0x6d - 1] = "Visenta (Xiamen) Technology Co Ltd", 1258 | [9][0x6e - 1] = "Roa Logic BV", 1259 | [9][0x6f - 1] = "NSITEXE Inc", 1260 | [9][0x70 - 1] = "Hong Kong Hyunion Electronics", 1261 | [9][0x71 - 1] = "ASK Technology Group Limited", 1262 | [9][0x72 - 1] = "GIGA-BYTE Technology Co Ltd", 1263 | [9][0x73 - 1] = "Terabyte Co Ltd", 1264 | [9][0x74 - 1] = "Hyundai Inc", 1265 | [9][0x75 - 1] = "EXCELERAM", 1266 | [9][0x76 - 1] = "PsiKick", 1267 | [9][0x77 - 1] = "Netac Technology Co Ltd", 1268 | [9][0x78 - 1] = "PCCOOLER", 1269 | [9][0x79 - 1] = "Jiangsu Huacun Electronic Technology", 1270 | [9][0x7a - 1] = "Shenzhen Micro Innovation Industry", 1271 | [9][0x7b - 1] = "Beijing Tongfang Microelectronics Co", 1272 | [9][0x7c - 1] = "XZN Storage Technology", 1273 | [9][0x7d - 1] = "ChipCraft Sp. z.o.o.", 1274 | [9][0x7e - 1] = "ALLFLASH Technology Limited", 1275 | [10][0x01 - 1] = "Foerd Technology Co Ltd", 1276 | [10][0x02 - 1] = "KingSpec", 1277 | [10][0x03 - 1] = "Codasip GmbH", 1278 | [10][0x04 - 1] = "SL Link Co Ltd", 1279 | [10][0x05 - 1] = "Shenzhen Kefu Technology Co Limited", 1280 | [10][0x06 - 1] = "Shenzhen ZST Electronics Technology", 1281 | [10][0x07 - 1] = "Kyokuto Electronic Inc", 1282 | [10][0x08 - 1] = "Warrior Technology", 1283 | [10][0x09 - 1] = "TRINAMIC Motion Control GmbH & Co", 1284 | [10][0x0a - 1] = "PixelDisplay Inc", 1285 | [10][0x0b - 1] = "Shenzhen Futian District Bo Yueda Elec", 1286 | [10][0x0c - 1] = "Richtek Power", 1287 | [10][0x0d - 1] = "Shenzhen LianTeng Electronics Co Ltd", 1288 | [10][0x0e - 1] = "AITC Memory", 1289 | [10][0x0f - 1] = "UNIC Memory Technology Co Ltd", 1290 | [10][0x10 - 1] = "Shenzhen Huafeng Science Technology", 1291 | [10][0x11 - 1] = "CXMT", 1292 | [10][0x12 - 1] = "Guangzhou Xinyi Heng Computer Trading Firm", 1293 | [10][0x13 - 1] = "SambaNova Systems", 1294 | [10][0x14 - 1] = "V-GEN", 1295 | [10][0x15 - 1] = "Jump Trading", 1296 | [10][0x16 - 1] = "Ampere Computing", 1297 | [10][0x17 - 1] = "Shenzhen Zhongshi Technology Co Ltd", 1298 | [10][0x18 - 1] = "Shenzhen Zhongtian Bozhong Technology", 1299 | [10][0x19 - 1] = "Tri-Tech International", 1300 | [10][0x1a - 1] = "Silicon Intergrated Systems Corporation", 1301 | [10][0x1b - 1] = "Shenzhen HongDingChen Information", 1302 | [10][0x1c - 1] = "Plexton Holdings Limited", 1303 | [10][0x1d - 1] = "AMS (Jiangsu Advanced Memory Semi)", 1304 | [10][0x1e - 1] = "Wuhan Jing Tian Interconnected Tech Co", 1305 | [10][0x1f - 1] = "Axia Memory Technology", 1306 | [10][0x20 - 1] = "Chipset Technology Holding Limited", 1307 | [10][0x21 - 1] = "Shenzhen Xinshida Technology Co Ltd", 1308 | [10][0x22 - 1] = "Shenzhen Chuangshifeida Technology", 1309 | [10][0x23 - 1] = "Guangzhou MiaoYuanJi Technology", 1310 | [10][0x24 - 1] = "ADVAN Inc", 1311 | [10][0x25 - 1] = "Shenzhen Qianhai Weishengda Electronic Commerce Company Ltd", 1312 | [10][0x26 - 1] = "Guangzhou Guang Xie Cheng Trading", 1313 | [10][0x27 - 1] = "StarRam International Co Ltd", 1314 | [10][0x28 - 1] = "Shen Zhen XinShenHua Tech Co Ltd", 1315 | [10][0x29 - 1] = "UltraMemory Inc", 1316 | [10][0x2a - 1] = "New Coastline Global Tech Industry Co", 1317 | [10][0x2b - 1] = "Sinker", 1318 | [10][0x2c - 1] = "Diamond", 1319 | [10][0x2d - 1] = "PUSKILL", 1320 | [10][0x2e - 1] = "Guangzhou Hao Jia Ye Technology Co", 1321 | [10][0x2f - 1] = "Ming Xin Limited", 1322 | [10][0x30 - 1] = "Barefoot Networks", 1323 | [10][0x31 - 1] = "Biwin Semiconductor (HK) Co Ltd", 1324 | [10][0x32 - 1] = "UD INFO Corporation", 1325 | [10][0x33 - 1] = "Trek Technology (S) PTE Ltd", 1326 | [10][0x34 - 1] = "Xiamen Kingblaze Technology Co Ltd", 1327 | [10][0x35 - 1] = "Shenzhen Lomica Technology Co Ltd", 1328 | [10][0x36 - 1] = "Nuclei System Technology Co Ltd", 1329 | [10][0x37 - 1] = "Wuhan Xun Zhan Electronic Technology", 1330 | [10][0x38 - 1] = "Shenzhen Ingacom Semiconductor Ltd", 1331 | [10][0x39 - 1] = "Zotac Technology Ltd", 1332 | [10][0x3a - 1] = "Foxline", 1333 | [10][0x3b - 1] = "Shenzhen Farasia Science Technology", 1334 | [10][0x3c - 1] = "Efinix Inc", 1335 | [10][0x3d - 1] = "Hua Nan San Xian Technology Co Ltd", 1336 | [10][0x3e - 1] = "Goldtech Electronics Co Ltd", 1337 | [10][0x3f - 1] = "Shanghai Han Rong Microelectronics Co", 1338 | [10][0x40 - 1] = "Shenzhen Zhongguang Yunhe Trading", 1339 | [10][0x41 - 1] = "Smart Shine(QingDao) Microelectronics", 1340 | [10][0x42 - 1] = "Thermaltake Technology Co Ltd", 1341 | [10][0x43 - 1] = "Shenzhen O'Yang Maile Technology Ltd", 1342 | [10][0x44 - 1] = "UPMEM", 1343 | [10][0x45 - 1] = "Chun Well Technology Holding Limited", 1344 | [10][0x46 - 1] = "Astera Labs Inc", 1345 | [10][0x47 - 1] = "Winconway", 1346 | [10][0x48 - 1] = "Advantech Co Ltd", 1347 | [10][0x49 - 1] = "Chengdu Fengcai Electronic Technology", 1348 | [10][0x4a - 1] = "The Boeing Company", 1349 | [10][0x4b - 1] = "Blaize Inc", 1350 | [10][0x4c - 1] = "Ramonster Technology Co Ltd", 1351 | [10][0x4d - 1] = "Wuhan Naonongmai Technology Co Ltd", 1352 | [10][0x4e - 1] = "Shenzhen Hui ShingTong Technology", 1353 | [10][0x4f - 1] = "Yourlyon", 1354 | [10][0x50 - 1] = "Fabu Technology", 1355 | [10][0x51 - 1] = "Shenzhen Yikesheng Technology Co Ltd", 1356 | [10][0x52 - 1] = "NOR-MEM", 1357 | [10][0x53 - 1] = "Cervoz Co Ltd", 1358 | [10][0x54 - 1] = "Bitmain Technologies Inc.", 1359 | [10][0x55 - 1] = "Facebook Inc", 1360 | [10][0x56 - 1] = "Shenzhen Longsys Electronics Co Ltd", 1361 | [10][0x57 - 1] = "Guangzhou Siye Electronic Technology", 1362 | [10][0x58 - 1] = "Silergy", 1363 | [10][0x59 - 1] = "Adamway", 1364 | [10][0x5a - 1] = "PZG", 1365 | [10][0x5b - 1] = "Shenzhen King Power Electronics", 1366 | [10][0x5c - 1] = "Guangzhou ZiaoFu Tranding Co Ltd", 1367 | [10][0x5d - 1] = "Shenzhen SKIHOTAR Semiconductor", 1368 | [10][0x5e - 1] = "PulseRain Technology", 1369 | [10][0x5f - 1] = "Seeker Technology Limited", 1370 | [10][0x60 - 1] = "Shenzhen OSCOO Tech Co Ltd", 1371 | [10][0x61 - 1] = "Shenzhen Yze Technology Co Ltd", 1372 | [10][0x62 - 1] = "Shenzhen Jieshuo Electronic Commerce", 1373 | [10][0x63 - 1] = "Gazda", 1374 | [10][0x64 - 1] = "Hua Wei Technology Co Ltd", 1375 | [10][0x65 - 1] = "Esperanto Technologies", 1376 | [10][0x66 - 1] = "JinSheng Electronic (Shenzhen) Co Ltd", 1377 | [10][0x67 - 1] = "Shenzhen Shi Bolunshuai Technology", 1378 | [10][0x68 - 1] = "Shanghai Rei Zuan Information Tech", 1379 | [10][0x69 - 1] = "Fraunhofer IIS", 1380 | [10][0x6a - 1] = "Kandou Bus SA", 1381 | [10][0x6b - 1] = "Acer", 1382 | [10][0x6c - 1] = "Artmem Technology Co Ltd", 1383 | [10][0x6d - 1] = "Gstar Semiconductor Co Ltd", 1384 | [10][0x6e - 1] = "ShineDisk", 1385 | [10][0x6f - 1] = "Shenzhen CHN Technology Co Ltd", 1386 | [10][0x70 - 1] = "UnionChip Semiconductor Co Ltd", 1387 | [10][0x71 - 1] = "Tanbassh", 1388 | [10][0x72 - 1] = "Shenzhen Tianyu Jieyun Intl Logistics", 1389 | [10][0x73 - 1] = "MCLogic Inc", 1390 | [10][0x74 - 1] = "Eorex Corporation", 1391 | [10][0x75 - 1] = "Arm Technology (China) Co Ltd", 1392 | [10][0x76 - 1] = "Lexar Co Limited", 1393 | [10][0x77 - 1] = "QinetiQ Group plc", 1394 | [10][0x78 - 1] = "Exascend", 1395 | [10][0x79 - 1] = "Hong Kong Hyunion Electronics Co Ltd", 1396 | [10][0x7a - 1] = "Shenzhen Banghong Electronics Co Ltd", 1397 | [10][0x7b - 1] = "MBit Wireless Inc", 1398 | [10][0x7c - 1] = "Hex Five Security Inc", 1399 | [10][0x7d - 1] = "ShenZhen Juhor Precision Tech Co Ltd", 1400 | [10][0x7e - 1] = "Shenzhen Reeinno Technology Co Ltd", 1401 | [11][0x01 - 1] = "ABIT Electronics (Shenzhen) Co Ltd", 1402 | [11][0x02 - 1] = "Semidrive", 1403 | [11][0x03 - 1] = "MyTek Electronics Corp", 1404 | [11][0x04 - 1] = "Wxilicon Technology Co Ltd", 1405 | [11][0x05 - 1] = "Shenzhen Meixin Electronics Ltd", 1406 | [11][0x06 - 1] = "Ghost Wolf", 1407 | [11][0x07 - 1] = "LiSion Technologies Inc", 1408 | [11][0x08 - 1] = "Power Active Co Ltd", 1409 | [11][0x09 - 1] = "Pioneer High Fidelity Taiwan Co. Ltd", 1410 | [11][0x0a - 1] = "LuoSilk", 1411 | [11][0x0b - 1] = "Shenzhen Chuangshifeida Technology", 1412 | [11][0x0c - 1] = "Black Sesame Technologies Inc", 1413 | [11][0x0d - 1] = "Jiangsu Xinsheng Intelligent Technology", 1414 | [11][0x0e - 1] = "MLOONG", 1415 | [11][0x0f - 1] = "Quadratica LLC", 1416 | [11][0x10 - 1] = "Anpec Electronics", 1417 | [11][0x11 - 1] = "Xi'an Morebeck Semiconductor Tech Co", 1418 | [11][0x12 - 1] = "Kingbank Technology Co Ltd", 1419 | [11][0x13 - 1] = "ITRenew Inc", 1420 | [11][0x14 - 1] = "Shenzhen Eaget Innovation Tech Ltd", 1421 | [11][0x15 - 1] = "Jazer", 1422 | [11][0x16 - 1] = "Xiamen Semiconductor Investment Group", 1423 | [11][0x17 - 1] = "Guangzhou Longdao Network Tech Co", 1424 | [11][0x18 - 1] = "Shenzhen Futian SEC Electronic Market", 1425 | [11][0x19 - 1] = "Allegro Microsystems LLC", 1426 | [11][0x1a - 1] = "Hunan RunCore Innovation Technology", 1427 | [11][0x1b - 1] = "C-Corsa Technology", 1428 | [11][0x1c - 1] = "Zhuhai Chuangfeixin Technology Co Ltd", 1429 | [11][0x1d - 1] = "Beijing InnoMem Technologies Co Ltd", 1430 | [11][0x1e - 1] = "YooTin", 1431 | [11][0x1f - 1] = "Shenzhen Pengxiong Technology Co Ltd", 1432 | [11][0x20 - 1] = "Dongguan Yingbang Commercial Trading Co", 1433 | [11][0x21 - 1] = "Shenzhen Ronisys Electronics Co Ltd", 1434 | [11][0x22 - 1] = "Hongkong Xinlan Guangke Co Ltd", 1435 | [11][0x23 - 1] = "Apex Microelectronics Co Ltd", 1436 | [11][0x24 - 1] = "Beijing Hongda Jinming Technology Co Ltd", 1437 | [11][0x25 - 1] = "Ling Rui Technology (Shenzhen) Co Ltd", 1438 | [11][0x26 - 1] = "Hongkong Hyunion Electronics Co Ltd", 1439 | [11][0x27 - 1] = "Starsystems Inc", 1440 | [11][0x28 - 1] = "Shenzhen Yingjiaxun Industrial Co Ltd", 1441 | [11][0x29 - 1] = "Dongguan Crown Code Electronic Commerce", 1442 | [11][0x2a - 1] = "Monolithic Power Systems Inc", 1443 | [11][0x2b - 1] = "WuHan SenNaiBo E-Commerce Co Ltd", 1444 | [11][0x2c - 1] = "Hangzhou Hikstorage Technology Co", 1445 | [11][0x2d - 1] = "Shenzhen Goodix Technology Co Ltd", 1446 | [11][0x2e - 1] = "Aigo Electronic Technology Co Ltd", 1447 | [11][0x2f - 1] = "Hefei Konsemi Storage Technology Co Ltd", 1448 | [11][0x30 - 1] = "Cactus Technologies Limited", 1449 | [11][0x31 - 1] = "DSIN", 1450 | [11][0x32 - 1] = "Blu Wireless Technology", 1451 | [11][0x33 - 1] = "Nanjing UCUN Technology Inc", 1452 | [11][0x34 - 1] = "Acacia Communications", 1453 | [11][0x35 - 1] = "Beijinjinshengyihe Technology Co Ltd", 1454 | [11][0x36 - 1] = "Zyzyx", 1455 | [11][0x37 - 1] = "T-HEAD Semiconductor Co Ltd", 1456 | [11][0x38 - 1] = "Shenzhen Hystou Technology Co Ltd", 1457 | [11][0x39 - 1] = "Syzexion", 1458 | [11][0x3a - 1] = "Kembona", 1459 | [11][0x3b - 1] = "Qingdao Thunderobot Technology Co Ltd", 1460 | [11][0x3c - 1] = "Morse Micro", 1461 | [11][0x3d - 1] = "Shenzhen Envida Technology Co Ltd", 1462 | [11][0x3e - 1] = "UDStore Solution Limited", 1463 | [11][0x3f - 1] = "Shunlie", 1464 | [11][0x40 - 1] = "Shenzhen Xin Hong Rui Tech Ltd", 1465 | [11][0x41 - 1] = "Shenzhen Yze Technology Co Ltd", 1466 | [11][0x42 - 1] = "Shenzhen Huang Pu He Xin Technology", 1467 | [11][0x43 - 1] = "Xiamen Pengpai Microelectronics Co Ltd", 1468 | [11][0x44 - 1] = "JISHUN", 1469 | [11][0x45 - 1] = "Shenzhen WODPOSIT Technology Co", 1470 | [11][0x46 - 1] = "Unistar", 1471 | [11][0x47 - 1] = "UNICORE Electronic (Suzhou) Co Ltd", 1472 | [11][0x48 - 1] = "Axonne Inc", 1473 | [11][0x49 - 1] = "Shenzhen SOVERECA Technology Co", 1474 | [11][0x4a - 1] = "Dire Wolf", 1475 | [11][0x4b - 1] = "Whampoa Core Technology Co Ltd", 1476 | [11][0x4c - 1] = "CSI Halbleiter GmbH", 1477 | [11][0x4d - 1] = "ONE Semiconductor", 1478 | [11][0x4e - 1] = "SimpleMachines Inc", 1479 | [11][0x4f - 1] = "Shenzhen Chengyi Qingdian Electronic", 1480 | [11][0x50 - 1] = "Shenzhen Xinlianxin Network Technology", 1481 | [11][0x51 - 1] = "Vayyar Imaging Ltd", 1482 | [11][0x52 - 1] = "Paisen Network Technology Co Ltd", 1483 | [11][0x53 - 1] = "Shenzhen Fengwensi Technology Co Ltd", 1484 | [11][0x54 - 1] = "Caplink Technology Limited", 1485 | [11][0x55 - 1] = "JJT Solution Co Ltd", 1486 | [11][0x56 - 1] = "HOSIN Global Electronics Co Ltd", 1487 | [11][0x57 - 1] = "Shenzhen KingDisk Century Technology", 1488 | [11][0x58 - 1] = "SOYO", 1489 | [11][0x59 - 1] = "DIT Technology Co Ltd", 1490 | [11][0x5a - 1] = "iFound", 1491 | [11][0x5b - 1] = "Aril Computer Company", 1492 | [11][0x5c - 1] = "ASUS", 1493 | [11][0x5d - 1] = "Shenzhen Ruiyingtong Technology Co", 1494 | [11][0x5e - 1] = "HANA Micron", 1495 | [11][0x5f - 1] = "RANSOR", 1496 | [11][0x60 - 1] = "Axiado Corporation", 1497 | [11][0x61 - 1] = "Tesla Corporation", 1498 | [11][0x62 - 1] = "Pingtouge (Shanghai) Semiconductor Co", 1499 | [11][0x63 - 1] = "S3Plus Technologies SA", 1500 | [11][0x64 - 1] = "Integrated Silicon Solution Israel Ltd", 1501 | [11][0x65 - 1] = "GreenWaves Technologies", 1502 | [11][0x66 - 1] = "NUVIA Inc", 1503 | [11][0x67 - 1] = "Guangzhou Shuvrwine Technology Co", 1504 | [11][0x68 - 1] = "Shenzhen Hangshun Chip Technology", 1505 | [11][0x69 - 1] = "Chengboliwei Electronic Business", 1506 | [11][0x6a - 1] = "Kowin Technology HK Limited", 1507 | [11][0x6b - 1] = "Euronet Technology Inc", 1508 | [11][0x6c - 1] = "SCY", 1509 | [11][0x6d - 1] = "Shenzhen Xinhongyusheng Electrical", 1510 | [11][0x6e - 1] = "PICOCOM", 1511 | [11][0x6f - 1] = "Shenzhen Toooogo Memory Technology", 1512 | [11][0x70 - 1] = "VLSI Solution", 1513 | [11][0x71 - 1] = "Costar Electronics Inc", 1514 | [11][0x72 - 1] = "Shenzhen Huatop Technology Co Ltd", 1515 | [11][0x73 - 1] = "Inspur Electronic Information Industry", 1516 | [11][0x74 - 1] = "Shenzhen Boyuan Computer Technology", 1517 | [11][0x75 - 1] = "Beijing Welldisk Electronics Co Ltd", 1518 | [11][0x76 - 1] = "Suzhou EP Semicon Co Ltd", 1519 | [11][0x77 - 1] = "Zhejiang Dahua Memory Technology", 1520 | [11][0x78 - 1] = "Virtu Financial", 1521 | [11][0x79 - 1] = "Datotek International Co Ltd", 1522 | [11][0x7a - 1] = "Telecom and Microelectronics Industries", 1523 | [11][0x7b - 1] = "Echow Technology Ltd", 1524 | [11][0x7c - 1] = "APEX-INFO", 1525 | [11][0x7d - 1] = "Yingpark", 1526 | [11][0x7e - 1] = "Shenzhen Bigway Tech Co Ltd", 1527 | [12][0x01 - 1] = "Beijing Haawking Technology Co Ltd", 1528 | [12][0x02 - 1] = "Open HW Group", 1529 | [12][0x03 - 1] = "JHICC", 1530 | [12][0x04 - 1] = "ncoder AG", 1531 | [12][0x05 - 1] = "ThinkTech Information Technology Co", 1532 | [12][0x06 - 1] = "Shenzhen Chixingzhe Technology Co Ltd", 1533 | [12][0x07 - 1] = "Biao Ram Technology Co Ltd", 1534 | [12][0x08 - 1] = "Shenzhen Kaizhuoyue Electronics Co Ltd", 1535 | [12][0x09 - 1] = "Shenzhen YC Storage Technology Co Ltd", 1536 | [12][0x0a - 1] = "Shenzhen Chixingzhe Technology Co", 1537 | [12][0x0b - 1] = "Wink Semiconductor (Shenzhen) Co Ltd", 1538 | [12][0x0c - 1] = "AISTOR", 1539 | [12][0x0d - 1] = "Palma Ceia SemiDesign", 1540 | [12][0x0e - 1] = "EM Microelectronic-Marin SA", 1541 | [12][0x0f - 1] = "Shenzhen Monarch Memory Technology", 1542 | [12][0x10 - 1] = "Reliance Memory Inc", 1543 | [12][0x11 - 1] = "Jesis", 1544 | [12][0x12 - 1] = "Espressif Systems (Shanghai) Co Ltd", 1545 | [12][0x13 - 1] = "Shenzhen Sati Smart Technology Co Ltd", 1546 | [12][0x14 - 1] = "NeuMem Co Ltd", 1547 | [12][0x15 - 1] = "Lifelong", 1548 | [12][0x16 - 1] = "Beijing Oitech Technology Co Ltd", 1549 | [12][0x17 - 1] = "Groupe LDLC", 1550 | [12][0x18 - 1] = "Semidynamics Technology Services SLU", 1551 | [12][0x19 - 1] = "swordbill", 1552 | [12][0x1a - 1] = "YIREN", 1553 | [12][0x1b - 1] = "Shenzhen Yinxiang Technology Co Ltd", 1554 | [12][0x1c - 1] = "PoweV Electronic Technology Co Ltd", 1555 | [12][0x1d - 1] = "LEORICE", 1556 | [12][0x1e - 1] = "Waymo LLC", 1557 | [12][0x1f - 1] = "Ventana Micro Systems", 1558 | [12][0x20 - 1] = "Hefei Guangxin Microelectronics Co Ltd", 1559 | [12][0x21 - 1] = "Shenzhen Sooner Industrial Co Ltd", 1560 | [12][0x22 - 1] = "Horizon Robotics", 1561 | [12][0x23 - 1] = "Tangem AG", 1562 | [12][0x24 - 1] = "FuturePath Technology (Shenzhen) Co", 1563 | [12][0x25 - 1] = "RC Module", 1564 | [12][0x26 - 1] = "Timetec International Inc", 1565 | [12][0x27 - 1] = "ICMAX Technologies Co Limited", 1566 | [12][0x28 - 1] = "Lynxi Technologies Ltd Co", 1567 | [12][0x29 - 1] = "Guangzhou Taisupanke Computer Equipment", 1568 | [12][0x2a - 1] = "Ceremorphic Inc", 1569 | [12][0x2b - 1] = "Biwin Storage Technology Co Ltd", 1570 | [12][0x2c - 1] = "Beijing ESWIN Computing Technology", 1571 | [12][0x2d - 1] = "WeForce Co Ltd", 1572 | [12][0x2e - 1] = "Shenzhen Fanxiang Information Technology", 1573 | [12][0x2f - 1] = "Unisoc", 1574 | [12][0x30 - 1] = "YingChu", 1575 | [12][0x31 - 1] = "GUANCUN", 1576 | [12][0x32 - 1] = "IPASON", 1577 | [12][0x33 - 1] = "Ayar Labs", 1578 | [12][0x34 - 1] = "Amazon", 1579 | [12][0x35 - 1] = "Shenzhen Xinxinshun Technology Co", 1580 | [12][0x36 - 1] = "Galois Inc", 1581 | [12][0x37 - 1] = "Ubilite Inc", 1582 | [12][0x38 - 1] = "Shenzhen Quanxing Technology Co Ltd", 1583 | [12][0x39 - 1] = "Group RZX Technology LTDA", 1584 | [12][0x3a - 1] = "Yottac Technology (XI'AN) Cooperation", 1585 | [12][0x3b - 1] = "Shenzhen RuiRen Technology Co Ltd", 1586 | [12][0x3c - 1] = "Group Star Technology Co Ltd", 1587 | [12][0x3d - 1] = "RWA (Hong Kong) Ltd", 1588 | [12][0x3e - 1] = "Genesys Logic Inc", 1589 | [12][0x3f - 1] = "T3 Robotics Inc.", 1590 | [12][0x40 - 1] = "Biostar Microtech International Corp", 1591 | [12][0x41 - 1] = "Shenzhen SXmicro Technology Co Ltd", 1592 | [12][0x42 - 1] = "Shanghai Yili Computer Technology Co", 1593 | [12][0x43 - 1] = "Zhixin Semicoducotor Co Ltd", 1594 | [12][0x44 - 1] = "uFound", 1595 | [12][0x45 - 1] = "Aigo Data Security Technology Co. Ltd", 1596 | [12][0x46 - 1] = ".GXore Technologies", 1597 | [12][0x47 - 1] = "Shenzhen Pradeon Intelligent Technology", 1598 | [12][0x48 - 1] = "Power LSI", 1599 | [12][0x49 - 1] = "PRIME", 1600 | [12][0x4a - 1] = "Shenzhen Juyang Innovative Technology", 1601 | [12][0x4b - 1] = "CERVO", 1602 | [12][0x4c - 1] = "SiEngine Technology Co., Ltd.", 1603 | [12][0x4d - 1] = "Beijing Unigroup Tsingteng MicroSystem", 1604 | [12][0x4e - 1] = "Brainsao GmbH", 1605 | [12][0x4f - 1] = "Credo Technology Group Ltd", 1606 | [12][0x50 - 1] = "Shanghai Biren Technology Co Ltd", 1607 | [12][0x51 - 1] = "Nucleu Semiconductor", 1608 | [12][0x52 - 1] = "Shenzhen Guangshuo Electronics Co Ltd", 1609 | [12][0x53 - 1] = "ZhongsihangTechnology Co Ltd", 1610 | [12][0x54 - 1] = "Suzhou Mainshine Electronic Co Ltd.", 1611 | [12][0x55 - 1] = "Guangzhou Riss Electronic Technology", 1612 | [12][0x56 - 1] = "Shenzhen Cloud Security Storage Co", 1613 | [12][0x57 - 1] = "ROG", 1614 | [12][0x58 - 1] = "Perceive", 1615 | [12][0x59 - 1] = "e-peas", 1616 | [12][0x5a - 1] = "Fraunhofer IPMS", 1617 | [12][0x5b - 1] = "Shenzhen Daxinlang Electronic Tech Co", 1618 | [12][0x5c - 1] = "Abacus Peripherals Private Limited", 1619 | [12][0x5d - 1] = "OLOy Technology", 1620 | [12][0x5e - 1] = "Wuhan P&S Semiconductor Co Ltd", 1621 | [12][0x5f - 1] = "Sitrus Technology", 1622 | [12][0x60 - 1] = "AnHui Conner Storage Co Ltd", 1623 | [12][0x61 - 1] = "Rochester Electronics", 1624 | [12][0x62 - 1] = "Wuxi Petabyte Technologies Co Ltd", 1625 | [12][0x63 - 1] = "Star Memory", 1626 | [12][0x64 - 1] = "Agile Memory Technology Co Ltd", 1627 | [12][0x65 - 1] = "MEJEC", 1628 | [12][0x66 - 1] = "Rockchip Electronics Co Ltd", 1629 | [12][0x67 - 1] = "Dongguan Guanma e-commerce Co Ltd", 1630 | [12][0x68 - 1] = "Rayson Hi-Tech (SZ) Limited", 1631 | [12][0x69 - 1] = "MINRES Technologies GmbH", 1632 | [12][0x6a - 1] = "Himax Technologies Inc", 1633 | [12][0x6b - 1] = "Shenzhen Cwinner Technology Co Ltd", 1634 | [12][0x6c - 1] = "Tecmiyo", 1635 | [12][0x6d - 1] = "Shenzhen Suhuicun Technology Co Ltd", 1636 | [12][0x6e - 1] = "Vickter Electronics Co. Ltd.", 1637 | [12][0x6f - 1] = "lowRISC", 1638 | [12][0x70 - 1] = "EXEGate FZE", 1639 | [12][0x71 - 1] = "Shenzhen 9 Chapter Technologies Co", 1640 | [12][0x72 - 1] = "Addlink", 1641 | [12][0x73 - 1] = "Starsway", 1642 | [12][0x74 - 1] = "Pensando Systems Inc.", 1643 | [12][0x75 - 1] = "AirDisk", 1644 | [12][0x76 - 1] = "Shenzhen Speedmobile Technology Co", 1645 | [12][0x77 - 1] = "PEZY Computing", 1646 | [12][0x78 - 1] = "Extreme Engineering Solutions Inc", 1647 | [12][0x79 - 1] = "Shangxin Technology Co Ltd", 1648 | [12][0x7a - 1] = "Shanghai Zhaoxin Semiconductor Co", 1649 | [12][0x7b - 1] = "Xsight Labs Ltd", 1650 | [12][0x7c - 1] = "Hangzhou Hikstorage Technology Co", 1651 | [12][0x7d - 1] = "Dell Technologies", 1652 | [12][0x7e - 1] = "Guangdong StarFive Technology Co", 1653 | [13][0x01 - 1] = "TECOTON", 1654 | [13][0x02 - 1] = "Abko Co Ltd", 1655 | [13][0x03 - 1] = "Shenzhen Feisrike Technology Co Ltd", 1656 | [13][0x04 - 1] = "Shenzhen Sunhome Electronics Co Ltd", 1657 | [13][0x05 - 1] = "Global Mixed-mode Technology Inc", 1658 | [13][0x06 - 1] = "Shenzhen Weien Electronics Co. Ltd.", 1659 | [13][0x07 - 1] = "Shenzhen Cooyes Technology Co Ltd", 1660 | [13][0x08 - 1] = "Keymos Electronics Co., Limited", 1661 | [13][0x09 - 1] = "E-Rockic Technology Company Limited", 1662 | [13][0x0a - 1] = "Aerospace Science Memory Shenzhen", 1663 | [13][0x0b - 1] = "Shenzhen Quanji Technology Co Ltd", 1664 | [13][0x0c - 1] = "Dukosi", 1665 | [13][0x0d - 1] = "Maxell Corporation of America", 1666 | [13][0x0e - 1] = "Shenshen Xinxintao Electronics Co Ltd", 1667 | [13][0x0f - 1] = "Zhuhai Sanxia Semiconductor Co Ltd", 1668 | [13][0x10 - 1] = "Groq Inc", 1669 | [13][0x11 - 1] = "AstraTek", 1670 | [13][0x12 - 1] = "Shenzhen Xinyuze Technology Co Ltd", 1671 | [13][0x13 - 1] = "All Bit Semiconductor", 1672 | [13][0x14 - 1] = "ACFlow", 1673 | [13][0x15 - 1] = "Shenzhen Sipeed Technology Co Ltd", 1674 | [13][0x16 - 1] = "Linzhi Hong Kong Co Limited", 1675 | [13][0x17 - 1] = "Supreme Wise Limited", 1676 | [13][0x18 - 1] = "Blue Cheetah Analog Design Inc", 1677 | [13][0x19 - 1] = "Hefei Laiku Technology Co Ltd", 1678 | [13][0x1a - 1] = "Zord", 1679 | [13][0x1b - 1] = "SBO Hearing A/S", 1680 | [13][0x1c - 1] = "Regent Sharp International Limited", 1681 | [13][0x1d - 1] = "Permanent Potential Limited", 1682 | [13][0x1e - 1] = "Creative World International Limited", 1683 | [13][0x1f - 1] = "Base Creation International Limited", 1684 | [13][0x20 - 1] = "Shenzhen Zhixin Chuanglian Technology", 1685 | [13][0x21 - 1] = "Protected Logic Corporation", 1686 | [13][0x22 - 1] = "Sabrent", 1687 | [13][0x23 - 1] = "Union Memory", 1688 | [13][0x24 - 1] = "NEUCHIPS Corporation", 1689 | [13][0x25 - 1] = "Ingenic Semiconductor Co Ltd", 1690 | [13][0x26 - 1] = "SiPearl", 1691 | [13][0x27 - 1] = "Shenzhen Actseno Information Technology", 1692 | [13][0x28 - 1] = "RIVAI Technologies (Shenzhen) Co Ltd", 1693 | [13][0x29 - 1] = "Shenzhen Sunny Technology Co Ltd", 1694 | [13][0x2a - 1] = "Cott Electronics Ltd", 1695 | [13][0x2b - 1] = "Shanghai Synsense Technologies Co Ltd", 1696 | [13][0x2c - 1] = "Shenzhen Jintang Fuming Optoelectronics", 1697 | [13][0x2d - 1] = "CloudBEAR LLC", 1698 | [13][0x2e - 1] = "Emzior, LLC", 1699 | [13][0x2f - 1] = "Ehiway Microelectronic Science Tech Co", 1700 | [13][0x30 - 1] = "UNIM Innovation Technology (Wu XI)", 1701 | [13][0x31 - 1] = "GDRAMARS", 1702 | [13][0x32 - 1] = "Meminsights Technology", 1703 | [13][0x33 - 1] = "Zhuzhou Hongda Electronics Corp Ltd", 1704 | [13][0x34 - 1] = "Luminous Computing Inc", 1705 | [13][0x35 - 1] = "PROXMEM", 1706 | [13][0x36 - 1] = "Draper Labs", 1707 | [13][0x37 - 1] = "ORICO Technologies Co. Ltd.", 1708 | [13][0x38 - 1] = "Space Exploration Technologies Corp", 1709 | [13][0x39 - 1] = "AONDEVICES Inc", 1710 | [13][0x3a - 1] = "Shenzhen Netforward Micro Electronic", 1711 | [13][0x3b - 1] = "Syntacore Ltd", 1712 | [13][0x3c - 1] = "Shenzhen Secmem Microelectronics Co", 1713 | [13][0x3d - 1] = "ONiO As", 1714 | [13][0x3e - 1] = "Shenzhen Peladn Technology Co Ltd", 1715 | [13][0x3f - 1] = "O-Cubes Shanghai Microelectronics", 1716 | [13][0x40 - 1] = "ASTC", 1717 | [13][0x41 - 1] = "UMIS", 1718 | [13][0x42 - 1] = "Paradromics", 1719 | [13][0x43 - 1] = "Sinh Micro Co Ltd", 1720 | [13][0x44 - 1] = "Metorage Semiconductor Technology Co", 1721 | [13][0x45 - 1] = "Aeva Inc", 1722 | [13][0x46 - 1] = "HongKong Hyunion Electronics Co Ltd", 1723 | [13][0x47 - 1] = "China Flash Co Ltd", 1724 | [13][0x48 - 1] = "Sunplus Technology Co Ltd", 1725 | [13][0x49 - 1] = "Idaho Scientific", 1726 | [13][0x4a - 1] = "Suzhou SF Micro Electronics Co Ltd", 1727 | [13][0x4b - 1] = "IMEX Cap AG", 1728 | [13][0x4c - 1] = "Fitipower Integrated Technology Co Ltd", 1729 | [13][0x4d - 1] = "ShenzhenWooacme Technology Co Ltd", 1730 | [13][0x4e - 1] = "KeepData Original Chips", 1731 | [13][0x4f - 1] = "Rivos Inc", 1732 | [13][0x50 - 1] = "Big Innovation Company Limited", 1733 | [13][0x51 - 1] = "Wuhan YuXin Semiconductor Co Ltd", 1734 | [13][0x52 - 1] = "United Memory Technology (Jiangsu)", 1735 | [13][0x53 - 1] = "PQShield Ltd", 1736 | [13][0x54 - 1] = "ArchiTek Corporation", 1737 | [13][0x55 - 1] = "ShenZhen AZW Technology Co Ltd", 1738 | [13][0x56 - 1] = "Hengchi Zhixin (Dongguan) Technology", 1739 | [13][0x57 - 1] = "Eggtronic Engineering Spa", 1740 | [13][0x58 - 1] = "Fusontai Technology", 1741 | [13][0x59 - 1] = "PULP Platform", 1742 | [13][0x5a - 1] = "Koitek Electronic Technology (Shenzhen) Co", 1743 | [13][0x5b - 1] = "Shenzhen Jiteng Network Technology Co", 1744 | [13][0x5c - 1] = "Aviva Links Inc", 1745 | [13][0x5d - 1] = "Trilinear Technologies Inc", 1746 | [13][0x5e - 1] = "Shenzhen Developer Microelectronics Co", 1747 | [13][0x5f - 1] = "Guangdong OPPO Mobile Telecommunication", 1748 | [13][0x60 - 1] = "Akeana", 1749 | [13][0x61 - 1] = "Lyczar", 1750 | [13][0x62 - 1] = "Shenzhen Qiji Technology Co Ltd", 1751 | [13][0x63 - 1] = "Shenzhen Shangzhaoyuan Technology", 1752 | [13][0x64 - 1] = "Han Stor", 1753 | [13][0x65 - 1] = "China Micro Semicon Co., Ltd.", 1754 | [13][0x66 - 1] = "Shenzhen Zhuqin Technology Co Ltd", 1755 | [13][0x67 - 1] = "Shanghai Ningyuan Electronic Technology", 1756 | [13][0x68 - 1] = "Auradine", 1757 | [13][0x69 - 1] = "Suzhou Yishuo Electronics Co Ltd", 1758 | [13][0x6a - 1] = "Faurecia Clarion Electronics", 1759 | [13][0x6b - 1] = "SiMa Technologies", 1760 | [13][0x6c - 1] = "CFD Sales Inc", 1761 | [13][0x6d - 1] = "Suzhou Comay Information Co Ltd", 1762 | [13][0x6e - 1] = "Yentek", 1763 | [13][0x6f - 1] = "Qorvo Inc", 1764 | [13][0x70 - 1] = "Shenzhen Youzhi Computer Technology", 1765 | [13][0x71 - 1] = "Sychw Technology (Shenzhen) Co Ltd", 1766 | [13][0x72 - 1] = "MK Founder Technology Co Ltd", 1767 | [13][0x73 - 1] = "Siliconwaves Technologies Co Ltd", 1768 | [13][0x74 - 1] = "Hongkong Hyunion Electronics Co Ltd", 1769 | [13][0x75 - 1] = "Shenzhen Xinxinzhitao Electronics Business", 1770 | [13][0x76 - 1] = "Shenzhen HenQi Electronic Commerce Co", 1771 | [13][0x77 - 1] = "Shenzhen Jingyi Technology Co Ltd", 1772 | [13][0x78 - 1] = "Xiaohua Semiconductor Co. Ltd.", 1773 | [13][0x79 - 1] = "Shenzhen Dalu Semiconductor Technology", 1774 | [13][0x7a - 1] = "Shenzhen Ninespeed Electronics Co Ltd", 1775 | [13][0x7b - 1] = "ICYC Semiconductor Co Ltd", 1776 | [13][0x7c - 1] = "Shenzhen Jaguar Microsystems Co Ltd", 1777 | [13][0x7d - 1] = "Beijing EC-Founder Co Ltd", 1778 | [13][0x7e - 1] = "Shenzhen Taike Industrial Automation Co", 1779 | [14][0x01 - 1] = "Kalray SA", 1780 | [14][0x02 - 1] = "Shanghai Iluvatar CoreX Semiconductor Co", 1781 | [14][0x03 - 1] = "Fungible Inc", 1782 | [14][0x04 - 1] = "Song Industria E Comercio de Eletronicos", 1783 | [14][0x05 - 1] = "DreamBig Semiconductor Inc", 1784 | [14][0x06 - 1] = "ChampTek Electronics Corp", 1785 | [14][0x07 - 1] = "Fusontai Technology", 1786 | [14][0x08 - 1] = "Endress Hauser AG", 1787 | [14][0x09 - 1] = "altec ComputerSysteme GmbH", 1788 | [14][0x0a - 1] = "UltraRISC Technology (Shanghai) Co Ltd", 1789 | [14][0x0b - 1] = "Shenzhen Jing Da Kang Technology Co Ltd", 1790 | [14][0x0c - 1] = "Hangzhou Hongjun Microelectronics Co Ltd", 1791 | /* EOF */ 1792 | --------------------------------------------------------------------------------