1 ) { // called from the command-line parse_str($argv[1], $_GET); } else { // live data: do not cache header('Pragma: no-cache'); header('Expires: ' . date("r", strtotime("+1 year"))); // // Check inputs for SQL statement injection and such. // Items not tested below are not vulnerable for SQL statement injection, e.g. // a time is always converted using 'strtotime()' and other items are only // used in the PHP but never in the composition of an SQL statement // [security audit 2013-10-23] // if( (isset($_GET['zkl']) && !is_numeric($_GET['zkl'])) || (isset($_GET['db']) && dirname($_GET['db']) != ".") ) { // don't do anything fancy or interruptive as fiddling with the GET parameters // is intended by the author die("Parameter error"); } ?>
| Database: | " . $zkl_info['id'] . " |
| Serienr: | " . $zkl_info['serienr'] . " |
| ID-code: | " . $zkl_info['idcode'] . " |
| IMEI: | " . $zkl_info['imei'] . " |
| IMSI: | " . $zkl_info['imsi'] . " |
| SIM-card: | " . $zkl_info['sim'] . " |
| Telefoonnr: | " . $zkl_info['telefoonnr'] . " |
| Firmware: | " .
"MCU: " . $zkl_info['mcu_versie'] . " " . "WCPU: " . $zkl_info['wcpu_versie'] . " " . ($zkl_info['sw3000_dversie'] ? ("Switch3000, drive: " . $zkl_info['sw3000_dversie'] . " ") : "") . ($zkl_info['sw3000_mversie'] ? ("Switch3000, measure: " . $zkl_info['sw3000_mversie'] . " ") : "") . " |
| Hardware: | " .
"ZKL: pcb-versie " . $zkl_info['pcb_versie'] . ", revisie " . $zkl_info['pcb_revisie'] . ", productienr " . $zkl_info['fabrieksnr'] . " " . "Wavecom: firmware " . $zkl_info['wavecom_versie'] . ", hardware-revisie " . $zkl_info['wavecom_revisie'] . ", serienr " . $zkl_info['wavecom_serienr'] . " " . "µALFAT: " . $zkl_info['ualfat_versie'] . " |
| Timezone: | " . $zkl_info['tz'] . " |
Beweeg de muis over de velden en tussenkopjes om de ruwe data te zien.
\n"; // login with the TCP-server if( FALSE ) {//isset($zkl_info['stcp_server']) ) { $server = $zkl_info['stcp_server']; zkl_set_private_key( "cert/private/mtinfo.key", "cert/private/passphrase" ); zkl_set_public_key( "cert/public/mtinfo.crt", "cert/public/di-ca.crt" ); } else $server = $zkl_info['tcp_server']; if( ($tcp_channel = zkl_tcplogin($_GET['zkl'], $server)) === FALSE ) { global $error_str; if( !$_GET['zkl'] || !$server ) $error_str = "Invalid parameters"; else $error_str = sprintf("%02X: %s", $zkl_status, $zkl_error); error_log("debugreport: log-in with " . $server . " failed: " . $error_str); echo "Error: " . $error_str . "
\n"; goto debugreport_exit; } $keys = array( array( 'key' => "DEBUG[MCU]", 'title' => "MCU interne status", 'fields' => array( 0 => array( 'key' => "actions", 'base' => 16, 'values' => array( array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "ACTION_START_MEASUREMENT" ), // measurement cycle requested array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "ACTION_START_SINEGEN" ), // start sine wave generator array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "ACTION_AD_START" ), // start the sine wave A/D conversion array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "ACTION_AD_COMPLETE" ), // measurement done; determine result array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "ACTION_AD_DEINIT" ), // measurement done; release A/D array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "ACTION_START_SWEEP" ), // start frequency sweep array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "ACTION_TEMPERATURE" ), // do a temperature reading array( 'mask' => 0x0080, 'val' => 0x0080, 'text' => "ACTION_TEMPERATURE_DONE" ), // temperature measurement done array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "ACTION_BATTERY" ), // battery measurement requested array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "ACTION_BATTERY_DONE" ), // battery measurement done array( 'mask' => 0x0400, 'val' => 0x0400, 'text' => "ACTION_BATTERY_CHANGED" ), // battery state changed array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "ACTION_SWITCH" ), // Swith 3000 and Power Management 3000 actions (ACTIONDEP_xxx) array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "ACTION_START_SIGNALING1" ), // start sine wave generator to signal a short circuit on the rail array( 'mask' => 0x2000, 'val' => 0x2000, 'text' => "ACTION_START_SIGNALING2" ), // start sine wave generator to signal a short circuit on the rail array( 'mask' => 0x4000, 'val' => 0x4000, 'text' => "ACTION_STOP_SIGNALING" ), // stop the sine wave generator array( 'mask' => 0x8000, 'val' => 0x8000, 'text' => "ACTION_GPSPOWER" ), // enable GPS for trace&trace array( 'mask' => 0xFFFF, 'val' => 0x0000, 'text' => "ACTION_NONE" ) ) ), 1 => array( 'key' => "log actions", 'base' => 16, 'values' => array( array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "LOGACTION_COMMIT_LOG" ), // flush the log file to media array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "LOGACTION_FLUSH_ISR_LOG" ), // write ISR log data array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "LOGACTION_LOG_RESET_TIMEOUT" ), // restart log flush time-out array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "LOGACTION_LOG_SET_TIME" ), // new clock data; set the time for the log file array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "LOGACTION_RESET" ), // reset and restart the µALFAT after a fatal error array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "LOGACTION_INIT_DONE" ), // initialization complete array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "LOGACTION_SYSINFO_CHANGED" ), // new version (product id) received array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "LOGACTION_GPS_RECEIVED" ), // new GPS co-ordinates received array( 'mask' => 0x0400, 'val' => 0x0400, 'text' => "LOGACTION_GPS_TIMEOUT" ), // no new GPS co-ordinates received witin time-out array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "LOGACTION_GPS_ENABLE" ), // enable GPS receiver array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "LOGACTION_TIMESTAMP" ), // force a timestamp to be logged array( 'mask' => 0x8000, 'val' => 0x8000, 'text' => "LOGACTION_ERROR" ) // internal state: in error routine ) ), 2 => array( 'key' => "dependent actions", 'base' => 16, 'values' => array( array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "ACTIONDEP_BATTERY1_ALARM" ), // set battery alarm level array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "ACTIONDEP_BATTERY2_ALARM" ), // set battery alarm level // if ACTION_SWITCH is set array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "ACTIONDEP_SWITCH_ON" ), // turn the Switch 3000 on array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "ACTIONDEP_SWITCH_OFF" ), // turn the Switch 3000 off array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "ACTIONDEP_SWITCH_GET_STATUS" ), // read status info from the Switch 3000 array( 'mask' => 0x0080, 'val' => 0x0080, 'text' => "ACTIONDEP_SWITCH_READY" ), // communication with Switch 3000 ready array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "ACTIONDEP_MEASUREMENT_ON" ), // turn the measurements on array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "ACTIONDEP_MEASUREMENT_OFF" ), // turn the measurements off array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "ACTIONDEP_SWITCH_DONE" ), // communication with Switch 3000 done (okay to power off) array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "ACTIONDEP_SW1W_EVENT" ) // software 1-Wire bus event ) ), 3 => array( 'key' => "gsm actions", 'base' => 16, 'values' => array( array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "GSMACTION_ACTIVATE_GSM" ), // activate GSM subsystem array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "GSMACTION_POWEROFF" ), // GSM has powered off array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "GSMACTION_WATCHDOG_RESET" ), // restart GSM watchdog array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "GSMACTION_AFT_DONE" ), // AFT tests done (test mode only) array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "GSMACTION_SMS_DEVICE_ON" ), // MSG_DEVICE_ON array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "GSMACTION_SMS_DEVICE_OFF" ), // MSG_DEVICE_OFF array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "GSMACTION_DETECT_TRAIN" ), // MSG_DETECT_TRAIN array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "GSMACTION_SMS_BATTERY" ), // MSG_BATTERY_LOW array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "GSMACTION_SMS_RELAY" ), // MSG_RELAY_OPEN array( 'mask' => 0x0400, 'val' => 0x0400, 'text' => "GSMACTION_SHORT_FAIL" ), // MSG_SHORTCUT_FAIL array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "GSMACTION_MEASURE_FAIL" ), // MSG_MEASURE_FAIL array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "GSMACTION_DISK_FULL" ), // MSG_DISK_FULL array( 'mask' => 0x2000, 'val' => 0x2000, 'text' => "GSMACTION_DISK_ERROR" ), // MSG_DISK_ERROR array( 'mask' => 0x4000, 'val' => 0x4000, 'text' => "GSMACTION_STATUS_UPDATE" ), // request WCPU to send a status update array( 'mask' => 0x8000, 'val' => 0x8000, 'text' => "GSMACTION_SMS_STATUS" ) // status requested ) ), 4 => array( 'key' => "t1" ), 5 => array( 'key' => "t1[measurement_button]" ), 6 => array( 'key' => "t1[short_okay]" ), 7 => array( 'key' => "t1[sweep_timeout]" ), 8 => array( 'key' => "t1[flush_log]" ), 9 => array( 'key' => "t1[gsm_timeout]" ), 10 => array( 'key' => "t1[gsm_activate]" ), 11 => array( 'key' => "t1[enable_gps]" ), 12 => array( 'key' => "t1[gps_timeout]" ), 13 => array( 'key' => "t1[power_save]" ), 14 => array( 'key' => "t1[generator]" ), 15 => array( 'key' => "log[state][mcu]", 'base' => 16, 'values' => array( // MCU log file state (MCURD_ES_LOGFILE_STATE) array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "LFS_WROPEN" ), // log file is open for writing array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "LFS_RDOPEN" ), // log file is open for reading array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "LFS_HIBERNATE" ), // uALFAT is hibernating array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "LFS_uALFAT_OK" ), // uALFAT is accessible and SD-card present array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "LFS_HAS_DATA" ), // data written to uALFAT; flush needed array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "LFS_READREQ" ), // read request posted by WCPU array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "LFS_READNEW" ), // read request posted for new log file (close old one) array( 'mask' => 0x0080, 'val' => 0x0080, 'text' => "LFS_BUSY" ), // command to the uALFAT; waiting for reply array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "LFS_SDCARD_ERROR" ), // SD-card cannot be mounted // asynchronous commands (MCURD_ES_LOGFILE_STATE) array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "LFS_ASYNC_BUSY" ), // any of the asynchronous commands below is busy array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "LFS_DIR_BUSY" ), // directory listing is busy array( 'mask' => 0x0400, 'val' => 0x0400, 'text' => "LFS_OPEN_BUSY" ), // opening logfile for reading // other commands (MCURD_ES_LOGFILE_STATE) array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "LFS_ASYNC_INT" ), // timer expired (not necessarily a time-out) array( 'mask' => 0x2000, 'val' => 0x2000, 'text' => "LFS_RDCLOSE" ), // close the read handle to abort the replay array( 'mask' => 0x4000, 'val' => 0x4000, 'text' => "LFS_DIRINIT" ), // start reading the directory listing array( 'mask' => 0x8000, 'val' => 0x8000, 'text' => "LFS_DIR" ) // read the next directory entry ) ), 16 => array( 'key' => "log[state][async]", 'base' => 10, 'values' => array( array( 'val' => 0, 'text' => "LFS_IDLE" ), array( 'val' => 1, 'text' => "LFS_FLUSH" ), // asynchronous flush is busy array( 'val' => 2, 'text' => "LFS_SEEK" ), // asynchronous seek is busy array( 'val' => 3, 'text' => "LFS_RDCMD" ), // asynchronous read (command phase) is busy array( 'val' => 4, 'text' => "LFS_RDDATA" ), // asynchronous read (data phase) is busy array( 'val' => 5, 'text' => "LFS_RDOPENFILE" ), // asynchrounous file open array( 'val' => 6, 'text' => "LFS_INIT_WELCOME" ), // initialization: wait for welcome message array( 'val' => 7, 'text' => "LFS_INIT_MOUNT" ), // mount SD-card array( 'val' => 8, 'text' => "LFS_INIT_WROPEN" ) // open the log file for writing ) ), 17 => array( 'key' => "log[count]" ), 18 => array( 'key' => "log[state][replay]7..0", 'base' => 16, 'values' => array( array( 'mask' => 0x01, 'val' => 0x01, 'text' => "LFS_STALLED" ), // MCU read back is waiting for new data array( 'mask' => 0x02, 'val' => 0x02, 'text' => "LFS_READY" ), // MCU read buffer is ready to be transferred to WCPU array( 'mask' => 0x04, 'val' => 0x04, 'text' => "LFS_ABORTED" ) // Log replay is aborted ) ), 19 => array( 'key' => "log[error]", 'base' => 10, 'values' => array( // I2C, SPI or SD-card errors array( 'val' => 0, 'text' => "I2CSTAT_OK" ), array( 'val' => -1, 'text' => "I2CSTAT_BUSY" ), // (not a real error) array( 'val' => -2, 'text' => "I2CERROR_BUS" ), // generic bus error array( 'val' => -3, 'text' => "I2CERROR_BUS_TIMEOUT" ), // time-out while accessing the I2C bus array( 'val' => -4, 'text' => "I2CERROR_MASTER" ), // generic failure of the master array( 'val' => -5, 'text' => "I2CERROR_MASTER_TIMEOUT" ), // master s/m or transfer timed out array( 'val' => -6, 'text' => "I2CERROR_SLAVE" ), // generic failure of the slave or SD-card array( 'val' => -7, 'text' => "I2CERROR_SLAVE_TIMEOUT" ), // time-out accessing or waiting for a slave array( 'val' => -8, 'text' => "I2CERROR_DATA" ), // generic data error (not enough bytes) array( 'val' => -9, 'text' => "I2CERROR_CRC" ), // parity or CRC error (SD-card access) // software errors array( 'val' => -12, 'text' => "I2CERROR_BUSY" ), // (software) busy while this was not expected array( 'val' => -13, 'text' => "I2CERROR_BUFFER_OVERRUN" ), // (software) buffer overrun array( 'val' => -14, 'text' => "I2CERROR_BUFFER_UNDERRUN" ), // (software) buffer contains too little data array( 'val' => -15, 'text' => "I2CERROR_WRONG_STATE" ), // (software) state machine is not idle or in the // wrong state in general (e.g. hibernating) array( 'val' => -30, 'text' => "I2CERROR_RETRY" ), // action is retried array( 'val' => -31, 'text' => "I2CERROR_INIT_TIMEOUT" ), // initialization timed out array( 'val' => -32, 'text' => "I2CERROR_ERROR" ), // unspecified error array( 'val' => -33, 'text' => "I2CERROR_STATE" ), // invalid/unknown/unexpected state array( 'val' => -34, 'text' => "I2CERROR_INVAL" ), // invalid parameter array( 'val' => -35, 'text' => "I2CERROR_NOSUPP" ), // operation not supported array( 'val' => -36, 'text' => "I2CERROR_NO_DEVICE" ), // slave does not respond and is probably not // present or defective array( 'val' => -37, 'text' => "I2CERROR_WRONG_VERSION" ), // wrong software or log version array( 'val' => -38, 'text' => "I2CERROR_BAD_TIME" ), // date/time is invalid // SPI or SD-card errors array( 'val' => -10, 'text' => "SDERROR_BUS_BUSY" ), // SPI bus or SPI state machine is busy array( 'val' => -11, 'text' => "SDERROR_WRITE" ), // SD-card write error // SD-card specific errors array( 'val' => -16, 'text' => "SDERROR_NO_CARD" ), // No card detected array( 'val' => -17, 'text' => "SDERROR_INVALID_CARD" ), // Card is not usable (wrong voltage range or other error) array( 'val' => -18, 'text' => "SDERROR_INVALID_CMD" ), // invalid command // Config file errors array( 'val' => -64, 'text' => "FILEERROR_INVAL" ), // Invalid argument array( 'val' => -65, 'text' => "FILEERROR_PARAM" ), // Invalid parameter name array( 'val' => -66, 'text' => "FILEERROR_SECTION" ), // Invalid section name array( 'val' => -67, 'text' => "FILEERROR_EOF" ), // Unexpected end of file array( 'val' => -68, 'text' => "FILEERROR_INCORRECT_FORMAT" ), // File has incorrect format or is invalid // uALFAT errors // Hardware Error codes array( 'val' => 0x01, 'text' => "ERROR_READ_SECTOR" ), array( 'val' => 0x02, 'text' => "ERROR_WRITE_SECTOR" ), array( 'val' => 0x03, 'text' => "ERROR_ERASE_SECTOR" ), array( 'val' => 0x04, 'text' => "ERROR_SD_UNEXPECTED_VALUE" ), array( 'val' => 0x05, 'text' => "ERROR_MMC_INIT_TIMEOUT" ), array( 'val' => 0x06, 'text' => "ERROR_SET_BLOCK_SIZE_FAIL" ), array( 'val' => 0x07, 'text' => "ERROR_MMC_SEND_COMMAND_FAIL" ), // FAT_mount Error codes array( 'val' => 0x11, 'text' => "ERROR_MBR_SIGNATURE_MISSMATCH" ), array( 'val' => 0x12, 'text' => "ERROR_BS_SIGNATURE_MISSMATCH" ), array( 'val' => 0x13, 'text' => "ERROR_SECTOR_SIZE_NOT_512" ), array( 'val' => 0x14, 'text' => "ERROR_FSINFO_SIGNATURE_MISSMATCH" ), array( 'val' => 0x15, 'text' => "ERROR_FAT12_NOT_SUPPORTED" ), array( 'val' => 0x16, 'text' => "ERROR_FAT16_NOT_SUPPORTED" ), // FAT functions array( 'val' => 0x21, 'text' => "ERROR_CLUSTER_OVER_RANGE" ), array( 'val' => 0x22, 'text' => "ERROR_CLUSTER_UNDER_RANGE" ), array( 'val' => 0x23, 'text' => "ERROR_NEXT_CLUSTER_VALUE_OVER_RANGE" ), array( 'val' => 0x24, 'text' => "ERROR_NEXT_CLUSTER_VALUE_UNDER_RANGE" ), array( 'val' => 0x25, 'text' => "ERROR_NO_FREE_CLUSTERS" ), // FAT filename error codes array( 'val' => 0x31, 'text' => "ERROR_FILE_NAME_FORBIDDEN_CHAR" ), array( 'val' => 0x32, 'text' => "ERROR_FILE_NAME_DIR_NAME_OVER_8" ), array( 'val' => 0x33, 'text' => "ERROR_FILE_NAME_DIR_EXTENSION_OVER_3" ), array( 'val' => 0x34, 'text' => "ERROR_FILE_NAME_FIRST_CHAR_ZERO" ), array( 'val' => 0x35, 'text' => "ERROR_MEDIA_FULL" ), // FAT main functions Error Codes array( 'val' => 0x40, 'text' => "DIR_ENT_FOUND" ), array( 'val' => 0x41, 'text' => "DIR_ENT_NOT_FOUND" ), array( 'val' => 0x42, 'text' => "ERROR_FOLDER_IS_CORRUPTED_FIRST_CLUSTER" ), array( 'val' => 0x43, 'text' => "ERROR_FOLDER_IS_CORRUPTED_DIR_DOT_NOT_FOUND" ), array( 'val' => 0x44, 'text' => "ERROR_FOLDER_IS_CORRUPTED_DIR_DOTDOT_NOT_FOUND" ), array( 'val' => 0x45, 'text' => "ERROR_ROOT_DIRECTORY_IS_FULL" ), array( 'val' => 0x46, 'text' => "ERROR_OPEN_FOLDER_FILE" ), array( 'val' => 0x47, 'text' => "ERROR_WRTIE_TO_READ_MODE_FILE" ), array( 'val' => 0x48, 'text' => "ERROR_SEEK_REQUIER_READ_MODE" ), array( 'val' => 0x49, 'text' => "ERROR_INVALID_SEEK_POINTER" ), array( 'val' => 0x4A, 'text' => "ERROR_FOLDER_NOT_EMPTY" ), array( 'val' => 0x4B, 'text' => "ERROR_IS_NOT_FOLDER" ), array( 'val' => 0x4C, 'text' => "ERROR_READ_MODE_REQUIRED" ), array( 'val' => 0x4D, 'text' => "ERROR_END_OF_DIR_LIST" ), array( 'val' => 0x4E, 'text' => "ERROR_FILE_PARAMETERS" ), array( 'val' => 0x4F, 'text' => "ERROR_HANDLE_IN_USE" ), array( 'val' => 0X4F, 'text' => "ERROR_INVALID_HANDLE" ), array( 'val' => 0x50, 'text' => "ERROR_ZERO_SIZE_FILE" ), array( 'val' => 0x51, 'text' => "ERROR_FILE_MODE_INVALID" ), array( 'val' => 0x52, 'text' => "ERROR_FILE_CORRUPTED" ), array( 'val' => 0x53, 'text' => "ERROR_FILE_POINTER_OUT_OF_BOUNDS" ), // FAT Driver array( 'val' => 0x54, 'text' => "ERROR_ATTACH_IDE_DEVICE_RESET_TIMEOUT" ), array( 'val' => 0x55, 'text' => "ERROR_ATTACH_IDE_DEVICE_IDENTIFY_TIMEOUT" ), array( 'val' => 0x56, 'text' => "ERROR_READ_IDE_SECTOR_TIMEOUT" ), array( 'val' => 0x57, 'text' => "FILE_UNKNOWN_DRIVE_LETTER" ), // Commander Error Code array( 'val' => 0x61, 'text' => "ERROR_COMMANDER_BAD_COMMAND" ), array( 'val' => 0x62, 'text' => "ERROR_COMMANDER_STR_LEN_TOO_LONG" ), // or string is not null terminated array( 'val' => 0x63, 'text' => "ERROR_COMMANDER_NAME_NOT_VALID" ), array( 'val' => 0x64, 'text' => "ERROR_COMMANDER_NUMBER_INVALID" ), array( 'val' => 0x65, 'text' => "ERROR_COMMANDER_WRITE_PARTIAL_FAILURE" ), array( 'val' => 0x66, 'text' => "ERROR_COMMANDER_UNKNOWN_MEDIA_LETTER" ), array( 'val' => 0x67, 'text' => "ERROR_COMMANDER_FAILED_TO_OPEN_MEDIA" ), array( 'val' => 0x68, 'text' => "ERROR_COMMANDER_INCORRECT_CMD_PARAMETER" ), array( 'val' => 0x69, 'text' => "ERROR_CHECK_SUM" ), array( 'val' => 0xFD, 'text' => "ERROR_COMMANDER_UNKNOWN_ERROR" ), array( 'val' => 0xFE, 'text' => "COMMANDER_RUN_FRAMED_MODE" ), array( 'val' => 0xFF, 'text' => "COMMANDER_RETURN_IN_STRING" ), array( 'val' => 0x70, 'text' => "USBD" ), array( 'val' => 0x71, 'text' => "ERROR_USBD_NO_ENOUGH_PIPES" ), array( 'val' => 0x72, 'text' => "ERROR_USBD_HANDLE_INUSE" ), array( 'val' => 0x73, 'text' => "ERROR_USBD_INCORRECT_DESCRIPTOR" ), array( 'val' => 0x74, 'text' => "ERROR_USBD_NONCONTROL_TRANSFER_FUNCTION" ), array( 'val' => 0x75, 'text' => "ERROR_USBD_DATA_SIZE_IS_BIG_FOR_ENDPOINT" ), array( 'val' => 0x76, 'text' => "ERROR_USBD_TIMEOUT" ), array( 'val' => 0x77, 'text' => "ERROR_USBD_CONTROL_TRANSFER_REQUIERED" ), array( 'val' => 0x78, 'text' => "ERROR_USBD_NACK" ), array( 'val' => 0x79, 'text' => "ERROR_USBD_HANDLE_CORRUPTED" ), array( 'val' => 0x7A, 'text' => "ERROR_USBD_DESCRIPTOR_CORRUPTED" ), array( 'val' => 0x7B, 'text' => "ERROR_DESCRIPTOR_NOT_FOUND" ), array( 'val' => 0x7C, 'text' => "ERROR_USB_HUB_NOT_FOUND" ), array( 'val' => 0x7D, 'text' => "ERROR_HCD_USB_DEVICE_NOT_CONNECTED" ), // MassStorage driver array( 'val' => 0x80, 'text' => "ERROR_BOMS" ), array( 'val' => 0x81, 'text' => "ERROR_BOMS_CSW_COMMAND_FAILD" ), array( 'val' => 0x82, 'text' => "ERROR_BOMS_CSW_STATUS_PHASE_ERROR" ), array( 'val' => 0x83, 'text' => "ERROR_BOMS_CSW" ), array( 'val' => 0x84, 'text' => "ERROR_BOMS_WORNG_LUN_NUMBER" ), array( 'val' => 0x85, 'text' => "ERROR_BOMS_WORNG_CSW_SIGNATURE" ), array( 'val' => 0x86, 'text' => "ERROR_BOMS_WORNG_TAG_MISSMATCHED" ), array( 'val' => 0x81, 'text' => "ERROR_USB_MASSSTORAGE_COMMAD_FAILED" ), array( 'val' => 0xA0, 'text' => "ERROR_USB_MASS_STORAGE_DEVICE_NOT_READY" ), array( 'val' => 0xA1, 'text' => "ERROR_USB_MASSSTORAGE_PROTOCOL_NOT_SUPPORTED" ), array( 'val' => 0xA2, 'text' => "ERROR_USB_MASSSTORAGE_SUBCLASS_NOT_SUPPORTED" ), array( 'val' => 0xA3, 'text' => "ERROR_SPC_INVALID_SENSE" ), array( 'val' => 0xA4, 'text' => "ERROR_SPC_NO_ASC_ASCQ" ), array( 'val' => 0xA5, 'text' => "ERROR_USB_MASSSTORAGE_NOT_FOUND" ), array( 'val' => 0x90, 'text' => "ERROR_HCD_INIT_FAIL" ), array( 'val' => 0x91, 'text' => "ERROR_HCD_UNDEFINED_CASE" ), // Host error result codes, the 4 LSB's in the HRSL register. array( 'val' => 0xB1, 'text' => "ERROR_HCD_BUSY" ), array( 'val' => 0xB2, 'text' => "ERROR_HCD_BADREQ" ), array( 'val' => 0xB3, 'text' => "ERROR_HCD_UNDEF" ), array( 'val' => 0xB4, 'text' => "ERROR_HCD_NAK" ), array( 'val' => 0xB5, 'text' => "ERROR_HCD_STALL" ), array( 'val' => 0xB6, 'text' => "ERROR_HCD_TOGERR" ), array( 'val' => 0xB7, 'text' => "ERROR_HCD_WRONGPID" ), array( 'val' => 0xB8, 'text' => "ERROR_HCD_BADBC" ), array( 'val' => 0xB9, 'text' => "ERROR_HCD_PIDERR" ), array( 'val' => 0xBA, 'text' => "ERROR_HCD_PKTERR" ), array( 'val' => 0xBB, 'text' => "ERROR_HCD_CRCERR" ), array( 'val' => 0xBC, 'text' => "ERROR_HCD_KERR" ), array( 'val' => 0xBD, 'text' => "ERROR_HCD_JERR" ), array( 'val' => 0xBE, 'text' => "ERROR_HCD_TIMEOUT" ), array( 'val' => 0xBF, 'text' => "ERROR_HCD_BABBLE" ), // FLASH driver array( 'val' => 0xD0, 'text' => "ERROR_ADDRESS_RANGE" ), array( 'val' => 0xD1, 'text' => "ERROR_FLASH_NOT_BLANK" ), array( 'val' => 0xD2, 'text' => "ERROR_VERIFY" ), array( 'val' => 0xD3, 'text' => "ERROR_INTERNAL" ), array( 'val' => 0xD4, 'text' => "ERROR_CHECKSUM" ), array( 'val' => 0xD5, 'text' => "ERROR_ERASE_COMMAND" ), array( 'val' => 0xD6, 'text' => "ERROR_BROKEN_ACTIVATE_SEQUENCE" ), array( 'val' => 0xD7, 'text' => "ERROR_INVALID_FIRMWARE" ), array( 'val' => 0xD8, 'text' => "ERROR_BR_COMMAND" ), array( 'val' => 0xDA, 'text' => "ERROR_FILE_IS_EMPTY" ), array( 'val' => 0xDB, 'text' => "ERROR_FILE_NOT_FOUND" ), array( 'val' => 0xDE, 'text' => "ERROR_UNKNOWN_COMMAND" ), array( 'val' => 0xF0, 'text' => "ERROR_UNEXPECTED_VALUE" ), array( 'val' => 0xFD, 'text' => "ERROR_UNEXPECTED_COMMAND" ), ) ) ) ), array( 'key' => "STAT[FLAGS]", 'title' => "Systeemstatus", 'fields' => array( 'mcu[status]' => array( 'fields' => array( 0 => array( 'key' => "[mcu]", 'base' => 16, 'values' => array( array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "meting 'aan'" ), array( 'mask' => 0x0001, 'val' => 0x0000, 'text' => "meting 'uit'" ), array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "detectie 'ok'" ), array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "meetfout geconstateerd" ), array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "relais open" ), array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "i2c fout" ), array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "logfile fout" ), array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "gsm/wcpu fout" ), array( 'mask' => 0x0080, 'val' => 0x0080, 'text' => "sms fout" ), array( 'mask' => 0x0F00, 'val' => 0x0000, 'text' => "batterij 1 'ok'" ), array( 'mask' => 0x0F00, 'val' => 0x0100, 'text' => "batterij 1 'alarm'" ), array( 'mask' => 0x0F00, 'val' => 0x0300, 'text' => "batterij 1 'leeg'" ), array( 'mask' => 0x0F00, 'val' => 0x0700, 'text' => "batterij 1 'verwijderd'" ), array( 'mask' => 0xF000, 'val' => 0x0000, 'text' => "batterij 2 'ok'" ), array( 'mask' => 0xF000, 'val' => 0x1000, 'text' => "batterij 2 'alarm'" ), array( 'mask' => 0xF000, 'val' => 0x3000, 'text' => "batterij 2 'leeg'" ), array( 'mask' => 0xF000, 'val' => 0x7000, 'text' => "batterij 2 'verwijderd'" ), ) ), 1 => array( 'key' => "[local_state]", 'base' => 16, 'values' => array( array( 'mask' => 0x0100, 'val' => 0x0100, 'text' => "auto-calibratie bezig" ), array( 'mask' => 0x0200, 'val' => 0x0200, 'text' => "auto-calibratie gefaald" ), array( 'mask' => 0x1000, 'val' => 0x1000, 'text' => "meting gedaan" ), array( 'mask' => 0x0001, 'val' => 0x0001, 'text' => "frequentie-sweep" ), array( 'mask' => 0x0002, 'val' => 0x0002, 'text' => "amplitude-sweep" ), array( 'mask' => 0x0008, 'val' => 0x0008, 'text' => "gps aan voor track&trace" ), array( 'mask' => 0x0010, 'val' => 0x0010, 'text' => "gps coördinaten ontvangen" ), array( 'mask' => 0x0020, 'val' => 0x0020, 'text' => "gps tijd ontvangen" ), array( 'mask' => 0x0040, 'val' => 0x0040, 'text' => "leds 'hoog'" ), array( 'mask' => 0x0080, 'val' => 0x0080, 'text' => "lantaarn 'aan'" ), array( 'mask' => 0x0400, 'val' => 0x0400, 'text' => "extern contact 'aan'" ), array( 'mask' => 0x0800, 'val' => 0x0800, 'text' => "relais-aansturing 'aan'" ), array( 'mask' => 0x2000, 'val' => 0x2000, 'text' => "gsm: geregistreerd" ), array( 'mask' => 0x4000, 'val' => 0x4000, 'text' => "tcp: ingelogd" ), array( 'mask' => 0x0004, 'val' => 0x0004, 'text' => "in service" ), array( 'mask' => 0x8000, 'val' => 0x0000, 'text' => "initialisatie bezig" ) ) ), 2 => array( 'key' => "[flags]", 'base' => 16, 'values' => array( array( 'mask' => 0x00000001, 'val' => 0x00000001, 'text' => "gecalibreerd" ), array( 'mask' => 0x00000002, 'val' => 0x00000002, 'text' => "oplader 'uit'" ), array( 'mask' => 0x00000040, 'val' => 0x00000040, 'text' => "gsm-status altijd tonen" ), array( 'mask' => 0x00000004, 'val' => 0x00000004, 'text' => "switch3000 gedetecteerd" ), array( 'mask' => 0x00000008, 'val' => 0x00000008, 'text' => "pm3000 gedetecteerd" ), array( 'mask' => 0x00100000, 'val' => 0x00100000, 'text' => "td3000 gedetecteerd" ), array( 'mask' => 0x00200000, 'val' => 0x00200000, 'text' => "powercycle gedetecteerd" ), array( 'mask' => 0x00000010, 'val' => 0x00000010, 'text' => "meting 'aan'" ), array( 'mask' => 0x00000020, 'val' => 0x00000020, 'text' => "meting 'aan' vanuit mtinfo" ), array( 'mask' => 0x00000080, 'val' => 0x00000080, 'text' => "vrijgegeven voor schakelen" ), array( 'mask' => 0x00000080, 'val' => 0x00000000, 'text' => "niet vrijgegeven" ), array( 'mask' => 0x00000F00, 'val' => 0x00000000, 'text' => "batterij 1: 12V NiMH" ), array( 'mask' => 0x00000F00, 'val' => 0x00000100, 'text' => "batterij 1: 6V NiMH" ), array( 'mask' => 0x00000F00, 'val' => 0x00000200, 'text' => "batterij 1: 3V NiMH" ), array( 'mask' => 0x00000F00, 'val' => 0x00000300, 'text' => "batterij 1: 24V NiMH" ), array( 'mask' => 0x00000C00, 'val' => 0x00000400, 'text' => "batterij 1: vaste voeding" ), array( 'mask' => 0x00000F00, 'val' => 0x00000800, 'text' => "batterij 1: 6.4V LiFePO4" ), array( 'mask' => 0x00000F00, 'val' => 0x00000900, 'text' => "batterij 1: 9.6V LiFePO4" ), array( 'mask' => 0x00000F00, 'val' => 0x00000A00, 'text' => "batterij 1: 12.8V LiFePO4" ), array( 'mask' => 0x00000F00, 'val' => 0x00000B00, 'text' => "batterij 1: 3.2V LiFePO4" ), array( 'mask' => 0x00000F00, 'val' => 0x00000C00, 'text' => "batterij 1: 12V Alkaline" ), array( 'mask' => 0x00000F00, 'val' => 0x00000D00, 'text' => "batterij 1: 6V Alkaline" ), array( 'mask' => 0x00000F00, 'val' => 0x00000E00, 'text' => "batterij 1: 3V Alkaline" ), array( 'mask' => 0x00000F00, 'val' => 0x00000F00, 'text' => "batterij 1: 24V Alkaline" ), array( 'mask' => 0x0000F000, 'val' => 0x00000000, 'text' => "batterij 2: 12V NiMH" ), array( 'mask' => 0x0000F000, 'val' => 0x00001000, 'text' => "batterij 2: 6V NiMH" ), array( 'mask' => 0x0000F000, 'val' => 0x00002000, 'text' => "batterij 2: 3V NiMH" ), array( 'mask' => 0x0000F000, 'val' => 0x00003000, 'text' => "batterij 2: 24V NiMH" ), array( 'mask' => 0x0000C000, 'val' => 0x00004000, 'text' => "batterij 2: vaste voeding" ), array( 'mask' => 0x0000F000, 'val' => 0x00008000, 'text' => "batterij 2: 6.4V LiFePO4" ), array( 'mask' => 0x0000F000, 'val' => 0x00009000, 'text' => "batterij 2: 9.6V LiFePO4" ), array( 'mask' => 0x0000F000, 'val' => 0x0000A000, 'text' => "batterij 2: 12.8V LiFePO4" ), array( 'mask' => 0x0000F000, 'val' => 0x0000B000, 'text' => "batterij 2: 3.2V LiFePO4" ), array( 'mask' => 0x0000F000, 'val' => 0x0000C000, 'text' => "batterij 2: 12V Alkaline" ), array( 'mask' => 0x0000F000, 'val' => 0x0000D000, 'text' => "batterij 2: 6V Alkaline" ), array( 'mask' => 0x0000F000, 'val' => 0x0000E000, 'text' => "batterij 2: 3V Alkaline" ), array( 'mask' => 0x0000F000, 'val' => 0x0000F000, 'text' => "batterij 2: 24V Alkaline" ), ) ) ) ), 'wcpu[status]' => array( 'base' => 16, 'values' => array( array( 'mask' => 0x00008000, 'val' => 0x00008000, 'text' => "gps fix" ), array( 'mask' => 0x00040000, 'val' => 0x00040000, 'text' => "gps tijd" ), array( 'mask' => 0x00080000, 'val' => 0x00080000, 'text' => "binnen geofence" ), array( 'mask' => 0x00000001, 'val' => 0x00000001, 'text' => "programmeer-interface geblokkeerd" ), array( 'mask' => 0x00000002, 'val' => 0x00000002, 'text' => "gprs/tcp fout" ), array( 'mask' => 0x00000004, 'val' => 0x00000004, 'text' => "sms fout" ), array( 'mask' => 0x00000008, 'val' => 0x00000008, 'text' => "sim fout" ), array( 'mask' => 0x00000010, 'val' => 0x00000010, 'text' => "uart #1 (mcu) fout" ), array( 'mask' => 0x00000020, 'val' => 0x00000020, 'text' => "uart #2 (gps) fout" ), array( 'mask' => 0x00000040, 'val' => 0x00000040, 'text' => "i2c fout" ), array( 'mask' => 0x00000080, 'val' => 0x00000080, 'text' => "mcu fout" ), array( 'mask' => 0x00000100, 'val' => 0x00000100, 'text' => "gsm 'ok'" ), array( 'mask' => 0x00000200, 'val' => 0x00000200, 'text' => "sim 'ok'" ), array( 'mask' => 0x00000400, 'val' => 0x00000400, 'text' => "gprs 'ok'" ), array( 'mask' => 0x00000800, 'val' => 0x00000800, 'text' => "tcp 'ok'" ), array( 'mask' => 0x00001000, 'val' => 0x00001000, 'text' => "gps 'ok'" ), array( 'mask' => 0x00002000, 'val' => 0x00002000, 'text' => "sms 'ok'" ), array( 'mask' => 0x00004000, 'val' => 0x00004000, 'text' => "ssl 'ok'" ), array( 'mask' => 0x00100000, 'val' => 0x00100000, 'text' => "temp on-board boven drempel" ), array( 'mask' => 0x00200000, 'val' => 0x00200000, 'text' => "temp extern boven drempel" ), array( 'mask' => 0x00400000, 'val' => 0x00400000, 'text' => "tempError " . $result . ": " . cp3000_error_string($tcp_channel, $result) . "
\n"; } } // close connection to TCP server zkl_tcplogout($tcp_channel); function tokenize($data, $metainfo) { $info = array(); $i = 0; $start = 0; $key = null; $level = 0; $field = 0; while( $i < strlen($data) ) { if( $level == 0 ) { if( substr($data, $i, 1) == "," || substr($data, $i, 1) == ";" ) { if( substr($data, $start, 1) == "\"" || substr($data, $start, 1) == "(" ) { $n = $i - (++$start) - 1; // end quote or closing bracket assumed present... } else $n = $i - $start; if( $key ) { $info[$key] = array( 'data' => substr($data, $start, $n), 'info' => $metainfo[$key] ); } else if( $metainfo && ($key = $metainfo[$field]['key']) ) { $info[$metainfo[$field]['key']] = array( 'data' => substr($data, $start, $n), 'info' => $metainfo[$field] ); } else { $info[] = array( 'data' => substr($data, $start, $n) ); } $start = ++$i; $field++; $key = null; continue; } else if( substr($data, $i, 1) == "=" ) { $key = substr($data, $start, $i - $start); $start = ++$i; continue; } } // quoted string if( substr($data, $i, 1) == "\"" ) { do { $i++; if( substr($data, $i, 1) == "\\" ) $i++; } while( substr($data, $i, 1) != "\"" && $i < strlen($data) ); $i++; continue; } // item group if( substr($data, $i, 1) == "(" ) { $level++; $i++; continue; } if( substr($data, $i, 1) == ")" ) { $level--; $i++; continue; } // default: normal char $i++; } // last item if( substr($data, $start, 1) == "\"" || substr($data, $start, 1) == "(" ) { $n = $i - (++$start) - 1; // end quote or closing bracket assumed present... } else $n = $i - $start; if( $key ) { $info[$key] = array( 'data' => substr($data, $start, $n), 'info' => $metainfo[$key] ); } else if( $metainfo && ($key = $metainfo[$field]['key']) ) { $info[$metainfo[$field]['key']] = array( 'data' => substr($data, $start, $n), 'info' => $metainfo[$field] ); } else { $info[] = array( 'data' => substr($data, $start, $n) ); } return $info; } function print_item($item_data, $key) { echo "| "; if( $item['info']['text'] ) echo $item['info']['text']; else echo $item_key; echo " | "; echo "";
if( $item['info'] ) {
switch( $item['info']['base'] ) {
case 2: $item_value = intval($item['data'], 2); break;
case 8: $item_value = intval($item['data'], 8); break;
case 10: $item_value = intval($item['data'], 10); break;
case 16: $item_value = intval($item['data'], 16); break;
case 'time_t': $item_value = date("Y-m-d H:i:s", $item['data']); break;
default: $item_value = $item['data']; break;
}
$sep = "";
if( $item['info']['fields'] ) {
print_item($item['data'], $item['info']);
}
else if( $item['info']['values'] ) {
foreach( $item['info']['values'] as $values ) {
if( $values['mask'] ) {
if( ($item_value & $values['mask']) == $values['val'] ) {
echo $sep . $values['text'];
$sep = " \n"; } } else if( $item_value == $values['val'] ) { echo $sep . $values['text']; $sep = " \n"; } } } else if( $item['info']['callback'] ) { $data = call_user_func($item['info']['callback'], $item_value); if( is_array($data) ) foreach( $data as $row ) { echo $sep . $row; $sep = " \n"; } else { echo $sep . $data; $sep = " \n"; } } else { echo $sep . $item_value; $sep = " \n"; } } else { echo htmlentities($item['data']); } echo " | ";
echo "