1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*
* This file is part of the libjaylink project.
*
* Copyright (C) 2016 Marc Schink <jaylink-dev@marcschink.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdint.h>
#include <errno.h>
#include "libjaylink.h"
/**
* @file
*
* String utility functions.
*/
/**
* Convert a string representation of a serial number to an integer.
*
* The string representation of the serial number must be in decimal form.
*
* @param[in] str String representation to convert.
* @param[out] serial_number Serial number on success, and undefined on
* failure.
*
* @retval JAYLINK_OK Success.
* @retval JAYLINK_ERR_ARG Invalid arguments.
* @retval JAYLINK_ERR Conversion error. Serial number is invalid or string
* representation contains invalid character(s).
*
* @since 0.1.0
*/
JAYLINK_API int jaylink_parse_serial_number(const char *str,
uint32_t *serial_number)
{
char *end_ptr;
unsigned long long tmp;
if (!str || !serial_number)
return JAYLINK_ERR_ARG;
errno = 0;
tmp = strtoull(str, &end_ptr, 10);
if (*end_ptr != '\0' || errno != 0 || tmp > UINT32_MAX)
return JAYLINK_ERR;
*serial_number = tmp;
return JAYLINK_OK;
}
/**
* Get the string representation of a hardware type.
*
* @param[in] type Hardware type.
*
* @return The string representation of the given hardware type, or NULL
* for an unknown type.
*
* @since 0.3.0
*/
JAYLINK_API const char *jaylink_hardware_type_string(
enum jaylink_hardware_type type)
{
switch (type) {
case JAYLINK_HW_TYPE_JLINK:
return "J-Link";
case JAYLINK_HW_TYPE_FLASHER:
return "Flasher";
case JAYLINK_HW_TYPE_JLINK_PRO:
return "J-Link PRO";
default:
break;
}
return NULL;
}
/**
* Get the string representation of a target interface.
*
* @param[in] iface Target interface.
*
* @return The string representation of the given target interface, or NULL
* for an unknown interface.
*
* @since 0.3.0
*/
JAYLINK_API const char *jaylink_target_interface_string(
enum jaylink_target_interface iface)
{
switch (iface) {
case JAYLINK_TIF_JTAG:
return "JTAG";
case JAYLINK_TIF_SWD:
return "SWD";
case JAYLINK_TIF_BDM3:
return "BDM3";
case JAYLINK_TIF_FINE:
return "FINE";
case JAYLINK_TIF_2W_JTAG_PIC32:
return "2-wire JTAG for PIC32";
case JAYLINK_TIF_SPI:
return "SPI";
case JAYLINK_TIF_C2:
return "C2";
case JAYLINK_TIF_CJTAG:
return "cJTAG";
default:
break;
}
return NULL;
}
|