reworking pins, flash doesnt work

This commit is contained in:
2017-12-28 13:52:04 +01:00
parent 9a32962c95
commit 393ec1e951
13 changed files with 570 additions and 55 deletions
+6 -21
View File
@@ -3,16 +3,19 @@
//
#include "str_utils.h"
#include "platform.h"
#include "avrlibc.h"
bool str_parse_yn(const char *str, bool *suc)
{
// TODO implement strcasecmp without the locale crap from newlib and use it here
if (streq(str, "Y")) return true;
if (streq(str, "1")) return true;
if (streq(str, "YES")) return true;
if (streq(str, "N")) return false;
if (streq(str, "1")) return true;
if (streq(str, "0")) return false;
if (streq(str, "YES")) return true;
if (streq(str, "NO")) return false;
*suc = false;
@@ -37,21 +40,3 @@ uint8_t str_parse_012(const char *str, const char *a, const char *b, const char
*suc = false;
return 0;
}
bool str_parse_pin(const char *value, char *targetName, uint8_t *targetNumber)
{
// discard leading 'P'
if (value[0] == 'P') {
value++;
}
size_t len = strlen(value);
if (len<2||len>3) return false;
*targetName = (uint8_t) value[0];
if (!(*targetName >= 'A' && *targetName <= 'H')) return false;
// lets just hope it's OK
*targetNumber = (uint8_t) avr_atoi(value + 1);
return true;
}
+61 -4
View File
@@ -5,55 +5,112 @@
#include <string.h>
#include "stringbuilder.h"
/**
* Test equality two strings
*
* @param str1
* @param str2
* @param limit
* @return
*/
static inline bool __attribute__((const))
streq(const char *restrict str1, const char *restrict str2)
{
return strcmp(str1, str2) == 0;
}
/**
* Test equality of two strings, case insensitive
*
* @param str1
* @param str2
* @param limit
* @return
*/
static inline bool __attribute__((const))
strcaseq(const char *restrict str1, const char *restrict str2)
{
return strcasecmp(str1, str2) == 0;
}
/**
* Test if a string starts with another
*
* @param str
* @param prefix
* @param limit
* @return
*/
static inline bool __attribute__((const))
strneq(const char *restrict str1, const char *restrict str2, uint32_t limit)
strneq(const char *restrict str, const char *restrict prefix, uint32_t limit)
{
return strncmp(str1, str2, limit) == 0;
return strncmp(str, prefix, limit) == 0;
}
/**
* Test if a string starts with another, case insensitive
*
* @param str1
* @param str2
* @return match
*/
static inline bool __attribute__((const))
strncaseq(const char *restrict str1, const char *restrict str2, uint32_t limit)
{
return strncasecmp(str1, str2, limit) == 0;
}
/**
* Test if a string starts with another
*
* @param str
* @param prefix
* @return match
*/
static inline bool __attribute__((const))
strstarts(const char *restrict str, const char *restrict prefix)
{
return strncmp(str, prefix, strlen(prefix)) == 0;
}
/**
* Get n-th character from the end
*
* @param str
* @param nth - n-th character (1 means last char)
* @return the char
*/
static inline char __attribute__((const))
last_char_n(const char *str, uint32_t nth)
{
return str[strlen(str) - nth];
}
/**
* Get last character of a string
*
* @param str
* @return last char
*/
static inline char __attribute__((const))
last_char(const char *str)
{
return str[strlen(str) - 1];
}
/** Parse Y/N to bool */
bool str_parse_yn(const char *str, bool *suc);
/** Compare string with two options */
uint8_t str_parse_01(const char *str, const char *a, const char *b, bool *suc);
/** Compare string with three options */
uint8_t str_parse_012(const char *str, const char *a, const char *b, const char *c, bool *suc);
/** Convert bool to one of two options */
#define str_01(cond, a, b) ((cond) ? (b) : (a))
/** Convert bool to Y or N */
#define str_yn(cond) ((cond) ? ("Y") : ("N"))
bool str_parse_pin(const char *str, char *targetName, uint8_t *targetNumber);
#endif