user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<getDeviceTypeFromCode>:
  endbr64
  cmp    $0x19,%dil
  ja     L0
  lea    D208(%rip),%rdx
  movzbl %dil,%edi
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nop
  lea    D40(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D147(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
L0:
  lea    D76(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D24(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D114(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D41(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D106(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D206(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D0(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D64(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D122(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D51(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D22(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D135(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D36(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D32(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D134(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D160(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D148(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D45(%rip),%rax
  ret
```

tool_calls: name: read_data
arguments: label: D40
data_type: string
name: read_data
arguments: label: D147
data_type: string
name: read_data
arguments: label: D76
data_type: string
name: read_data
arguments: label: D24
data_type: string
name: read_data
arguments: label: D114
data_type: string
name: read_data
arguments: label: D41
data_type: string
name: read_data
arguments: label: D106
data_type: string
name: read_data
arguments: label: D206
data_type: string
name: read_data
arguments: label: D0
data_type: string
name: read_data
arguments: label: D64
data_type: string
name: read_data
arguments: label: D122
data_type: string
name: read_data
arguments: label: D51
data_type: string
name: read_data
arguments: label: D22
data_type: string
name: read_data
arguments: label: D135
data_type: string
name: read_data
arguments: label: D36
data_type: string
name: read_data
arguments: label: D32
data_type: string
name: read_data
arguments: label: D134
data_type: string
name: read_data
arguments: label: D160
data_type: string
name: read_data
arguments: label: D148
data_type: string
name: read_data
arguments: label: D45
data_type: string

tool: D40: Heat

tool: D147: Cooling load meter

tool: D76: Reserved

tool: D24: Electricity

tool: D114: A/D Converter

tool: D41: Heat / Cooling load meter

tool: D106: Compressed Air

tool: D206: Heat Cost Allocator

tool: D0: Cold Water

tool: D64: Hot Water

tool: D122: Unknown medium

tool: D51: Dual register Water meter

tool: D22: Water

tool: D135: Warm Water

tool: D36: Gas

tool: D32: Steam

tool: D134: Pressure

tool: D160: Bus / System component

tool: D148: Other

tool: D45: Oil

assistant: ```c
char *getDeviceTypeFromCode(unsigned char c) {
  switch (c) {
  case 0x00:
    return "Other";
  case 0x01:
    return "Oil";
  case 0x02:
    return "Electricity";
  case 0x03:
    return "Gas";
  case 0x04:
    return "Heat";
  case 0x05:
    return "Steam";
  case 0x06:
    return "Warm Water";
  case 0x07:
    return "Water";
  case 0x08:
    return "Heat Cost Allocator";
  case 0x09:
    return "Compressed Air";
  case 0x0A:
    return "Cooling load meter";
  case 0x0B:
    return "Cooling load meter";
  case 0x0C:
    return "Heat";
  case 0x0D:
    return "Heat / Cooling load meter";
  case 0x0E:
    return "Bus / System component";
  case 0x0F:
    return "Unknown medium";
  case 0x15:
    return "Hot Water";
  case 0x16:
    return "Cold Water";
  case 0x17:
    return "Dual register Water meter";
  case 0x18:
    return "Pressure";
  case 0x19:
    return "A/D Converter";
  default:
    return "Reserved";
  }
  if (c >= 0x1A || (c >= 0x10 && c <= 0x14)) {
    return "Reserved";
  }
}
```