2 These are command definitions. This file should correspond exactly to usb_cmd.h. 
 
   4 --// For the bootloader
 
   6         CMD_DEVICE_INFO =                                                    0x0000,
 
   7         CMD_SETUP_WRITE =                                                    0x0001,
 
   8         CMD_FINISH_WRITE =                                                   0x0003,
 
   9         CMD_HARDWARE_RESET =                                                 0x0004,
 
  10         CMD_START_FLASH =                                                    0x0005,
 
  14         --// For general mucking around
 
  15         CMD_DEBUG_PRINT_STRING =                                             0x0100,
 
  16         CMD_DEBUG_PRINT_INTEGERS =                                           0x0101,
 
  17         CMD_DEBUG_PRINT_BYTES =                                              0x0102,
 
  18         CMD_LCD_RESET =                                                      0x0103,
 
  20         CMD_BUFF_CLEAR =                                                     0x0105,
 
  21         CMD_READ_MEM =                                                       0x0106,
 
  24         --// For low-frequency tags
 
  25         CMD_READ_TI_TYPE =                                                   0x0202,
 
  26         CMD_WRITE_TI_TYPE =                                                  0x0203,
 
  27         CMD_DOWNLOADED_RAW_BITS_TI_TYPE =                                    0x0204,
 
  28         CMD_ACQUIRE_RAW_ADC_SAMPLES_125K =                                   0x0205,
 
  29         CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K =                          0x0206,
 
  30         CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K =                                  0x0207,
 
  31         CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K =                                0x0208,
 
  32         CMD_DOWNLOADED_SIM_SAMPLES_125K =                                    0x0209,
 
  33         CMD_SIMULATE_TAG_125K =                                              0x020A,
 
  34         CMD_HID_DEMOD_FSK =                                                  0x020B,
 
  35         CMD_HID_SIM_TAG =                                                    0x020C,
 
  36         CMD_SET_LF_DIVISOR =                                                 0x020D,
 
  37         CMD_LF_SIMULATE_BIDIR =                                              0x020E,
 
  38         CMD_SET_ADC_MUX =                                                    0x020F,
 
  39         CMD_HID_CLONE_TAG =                                                  0x0210,
 
  40         CMD_EM410X_WRITE_TAG =                                               0x0211,
 
  41         CMD_INDALA_CLONE_TAG =                                               0x0212,
 
  43         CMD_INDALA_CLONE_TAG_L =                                             0x0213,
 
  44         CMD_T55XX_READ_BLOCK =                                               0x0214,
 
  45         CMD_T55XX_WRITE_BLOCK =                                              0x0215,
 
  46         CMD_T55XX_READ_TRACE =                                               0x0216,
 
  47         CMD_PCF7931_READ =                                                   0x0217,
 
  48         CMD_EM4X_READ_WORD =                                                 0x0218,
 
  49         CMD_EM4X_WRITE_WORD =                                                0x0219,
 
  50         CMD_IO_DEMOD_FSK =                                                   0x021A,
 
  51         CMD_IO_CLONE_TAG =                                                   0x021B,
 
  52         CMD_EM410X_DEMOD =                                                   0x021c,
 
  53         CMD_SET_LF_SAMPLING_CONFIG =                                         0x021d,
 
  54         CMD_FSK_SIM_TAG =                                                    0x021E,
 
  55         CMD_ASK_SIM_TAG =                                                    0x021F,
 
  56         CMD_PSK_SIM_TAG =                                                    0x0220,
 
  58         --/* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */
 
  60         --// For the 13.56 MHz tags
 
  61         CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 =                              0x0300,
 
  62         CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443 =                              0x0301,
 
  63         CMD_READ_SRI512_TAG =                                                0x0303,
 
  64         CMD_READ_SRIX4K_TAG =                                                0x0304,
 
  65         CMD_READER_ISO_15693 =                                               0x0310,
 
  66         CMD_SIMTAG_ISO_15693 =                                               0x0311,
 
  67         CMD_RECORD_RAW_ADC_SAMPLES_ISO_15693 =                               0x0312,
 
  68         CMD_ISO_15693_COMMAND =                                              0x0313,
 
  69         CMD_ISO_15693_COMMAND_DONE =                                         0x0314,
 
  70         CMD_ISO_15693_FIND_AFI =                                             0x0315,
 
  71         CMD_ISO_15693_DEBUG =                                                0x0316,
 
  72         CMD_LF_SNOOP_RAW_ADC_SAMPLES =                                       0x0317,
 
  74         --// For Hitag2 transponders
 
  75         CMD_SNOOP_HITAG =                                                    0x0370,
 
  76         CMD_SIMULATE_HITAG =                                                 0x0371,
 
  77         CMD_READER_HITAG =                                                   0x0372,
 
  79         CMD_SIMULATE_TAG_HF_LISTEN =                                         0x0380,
 
  80         CMD_SIMULATE_TAG_ISO_14443 =                                         0x0381,
 
  81         CMD_SNOOP_ISO_14443 =                                                0x0382,
 
  82         CMD_SNOOP_ISO_14443a =                                               0x0383,
 
  83         CMD_SIMULATE_TAG_ISO_14443a =                                        0x0384,
 
  84         CMD_READER_ISO_14443a =                                              0x0385,
 
  85         CMD_SIMULATE_TAG_LEGIC_RF =                                          0x0387,
 
  86         CMD_READER_LEGIC_RF =                                                0x0388,
 
  87         CMD_WRITER_LEGIC_RF =                                                0x0389,
 
  88         CMD_EPA_PACE_COLLECT_NONCE =                                         0x038A,
 
  89         --//CMD_EPA_ =                                                         0x038B,
 
  91         CMD_SNOOP_ICLASS =                                                   0x0392,
 
  92         CMD_SIMULATE_TAG_ICLASS =                                            0x0393,
 
  93         CMD_READER_ICLASS =                                                  0x0394,
 
  94         CMD_READER_ICLASS_REPLAY =                                                                                       0x0395,
 
  95         CMD_ICLASS_ISO14443A_WRITE =                                                                             0x0397,
 
  97         --// For measurements of the antenna tuning
 
  98         CMD_MEASURE_ANTENNA_TUNING =                                         0x0400,
 
  99         CMD_MEASURE_ANTENNA_TUNING_HF =                                      0x0401,
 
 100         CMD_MEASURED_ANTENNA_TUNING =                                        0x0410,
 
 101         CMD_LISTEN_READER_FIELD =                                            0x0420,
 
 103         --// For direct FPGA control
 
 104         CMD_FPGA_MAJOR_MODE_OFF =                                            0x0500,
 
 106         --// For mifare commands
 
 107         CMD_MIFARE_SET_DBGMODE =                                             0x0600,
 
 108         CMD_MIFARE_EML_MEMCLR =                                              0x0601,
 
 109         CMD_MIFARE_EML_MEMSET =                                              0x0602,
 
 110         CMD_MIFARE_EML_MEMGET =                                              0x0603,
 
 111         CMD_MIFARE_EML_CARDLOAD =                                            0x0604,
 
 113         --// magic chinese card commands
 
 114         CMD_MIFARE_CSETBLOCK =                                               0x0605,
 
 115         CMD_MIFARE_CGETBLOCK =                                               0x0606,
 
 116         CMD_MIFARE_CIDENT =                                                  0x0607,
 
 118         CMD_SIMULATE_MIFARE_CARD =                                           0x0610,
 
 120         CMD_READER_MIFARE =                                                  0x0611,
 
 121         CMD_MIFARE_NESTED =                                                  0x0612,
 
 123         CMD_MIFARE_READBL =                                                  0x0620,
 
 124         CMD_MIFAREU_READBL =                                                 0x0720,
 
 126         CMD_MIFARE_READSC =                                                  0x0621,
 
 127         CMD_MIFAREU_READCARD =                                               0x0721,
 
 129         CMD_MIFARE_WRITEBL =                                                 0x0622,
 
 130         CMD_MIFAREU_WRITEBL =                                                0x0722,
 
 131         CMD_MIFAREU_WRITEBL_COMPAT =                                         0x0723,
 
 133         CMD_MIFARE_CHKKEYS =                                                 0x0623,
 
 135         CMD_MIFARE_SNIFFER =                                                 0x0630,
 
 138         CMD_MIFAREUC_AUTH =                                                  0x0724,
 
 139         CMD_MIFAREUC_SETPWD =                                                0x0727,
 
 140         CMD_MIFAREU_SETUID =                                                 0x0728,
 
 143         CMD_MIFARE_DESFIRE_READBL =                                          0x0728,
 
 144         CMD_MIFARE_DESFIRE_WRITEBL =                                         0x0729,
 
 145         CMD_MIFARE_DESFIRE_AUTH1 =                                           0x072a,
 
 146         CMD_MIFARE_DESFIRE_AUTH2 =                                           0x072b,
 
 147         CMD_MIFARE_DES_READER =                                              0x072c,
 
 148         CMD_MIFARE_DESFIRE_INFO =                                            0x072d,
 
 149         CMD_MIFARE_DESFIRE =                                                 0x072e,
 
 151         CMD_UNKNOWN =                                                        0xFFFF,
 
 155 local _reverse_lookup,k,v = {}
 
 156         for k, v in pairs(_commands) do
 
 157                 _reverse_lookup[v] =  k
 
 159         _commands.tostring = function(command)
 
 160         if(type(command) == 'number') then
 
 161                 return ("%s (%d)"):format(_reverse_lookup[command]or "ERROR UNDEFINED!", command) 
 
 163         return ("Error, numeric argument expected, got : %s"):format(tostring(command))
 
 168         new = function(self, o)
 
 170                 local o = o or {}   -- create object if user does not provide one
 
 171                 setmetatable(o, self) -- DIY inheritance a'la javascript
 
 174                 o.cmd = o.cmd or _commands.CMD_UNKNOWN
 
 179                 local data = o.data or "0"
 
 181                 if(type(data) == 'string') then
 
 182                         -- We need to check if it is correct length, otherwise pad it
 
 183                         local len = string.len(data)
 
 185                                 --Should be 1024 hex characters to represent 512 bytes of data 
 
 186                                 data = data .. string.rep("0",1024 - len ) 
 
 189                                 -- OOps, a bit too much data here
 
 190                                 print( ( "WARNING: data size too large, was %s chars, will be truncated "):format(len) )
 
 192                                 data = data:sub(1,1024)
 
 195                         print(("WARNING; data was NOT a (hex-) string, but was %s"):format(type(data)))
 
 201         parse = function (packet)
 
 202                 local count,cmd,arg1,arg2,arg3,data = bin.unpack('LLLLH512',packet)
 
 203                 return Command:new{cmd = cmd, arg1 = arg1, arg2 = arg2, arg3 = arg3, data = data}
 
 206 function Command:__tostring()
 
 207         local output = ("%s\r\nargs : (%s, %s, %s)\r\ndata:\r\n%s\r\n"):format(
 
 208                 _commands.tostring(self.cmd),
 
 215 function Command:getBytes()
 
 216         --If a hex-string has been used
 
 217         local data  = self.data
 
 219         local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3
 
 220         return bin.pack("LLLLH",cmd, arg1, arg2, arg3, data);