2016-08-03 20:46:46 +02:00
/****************************************************************************
2017-03-30 17:53:36 +02:00
* Copyright ( C ) 2016 , 2017 Maschell
2016-08-03 20:46:46 +02:00
*
* 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 3 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/>.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2017-05-07 14:44:09 +02:00
# include "./ConfigParser.hpp"
2017-10-29 09:34:47 +01:00
# include <utils/StringTools.h>
2016-08-03 20:46:46 +02:00
# include <algorithm>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
2018-06-19 17:46:37 +02:00
ConfigParser : : ConfigParser ( std : : string configData ) {
2016-08-03 20:46:46 +02:00
this - > content = configData ;
2017-10-29 09:34:47 +01:00
this - > contentLines = StringTools : : stringSplit ( content , " \n " ) ;
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
if ( contentLines . empty ( ) ) {
return ;
2017-10-14 13:22:47 +02:00
}
2016-08-03 20:46:46 +02:00
//remove the comments and make everything uppercase
2018-06-19 17:46:37 +02:00
for ( u32 i = 0 ; i < contentLines . size ( ) ; i + + ) {
2017-10-29 09:34:47 +01:00
std : : vector < std : : string > comments = StringTools : : stringSplit ( contentLines [ i ] , " // " ) ;
2018-06-19 17:46:37 +02:00
if ( ! comments . empty ( ) ) {
2016-08-03 20:46:46 +02:00
contentLines [ i ] = comments [ 0 ] ;
}
//we want everything uppercase
std : : transform ( contentLines [ i ] . begin ( ) , contentLines [ i ] . end ( ) , contentLines [ i ] . begin ( ) , : : toupper ) ;
}
//remove empty lines
std : : vector < std : : string > contentline2 ;
2018-06-19 17:46:37 +02:00
for ( u32 i = 0 ; i < contentLines . size ( ) ; i + + ) {
if ( strlen ( contentLines [ i ] . c_str ( ) ) > 0 ) {
contentline2 . push_back ( contentLines [ i ] ) ;
2016-08-03 20:46:46 +02:00
}
}
contentLines = contentline2 ;
Init ( ) ;
}
2018-06-19 17:46:37 +02:00
ConfigParser : : ~ ConfigParser ( ) {
2016-08-03 20:46:46 +02:00
}
2018-06-19 17:46:37 +02:00
PARSE_TYPE ConfigParser : : getType ( ) {
2016-08-03 20:46:46 +02:00
return type_b ;
}
2018-06-19 17:46:37 +02:00
void ConfigParser : : setType ( PARSE_TYPE newType ) {
2016-08-03 20:46:46 +02:00
this - > type_b = newType ;
}
2018-06-19 17:46:37 +02:00
u16 ConfigParser : : getSlot ( ) {
2016-08-03 20:46:46 +02:00
return this - > slot_b ;
}
2018-06-19 17:46:37 +02:00
void ConfigParser : : setSlot ( u16 newSlot ) {
2016-08-03 20:46:46 +02:00
this - > slot_b = newSlot ;
}
2018-06-19 17:46:37 +02:00
bool ConfigParser : : Init ( ) {
if ( contentLines . size ( ) = = 0 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " File seems to be empty. Make sure to have a proper header \n " ) ;
2017-03-30 17:53:36 +02:00
return false ;
}
2016-08-03 20:46:46 +02:00
const char * line = contentLines [ 0 ] . c_str ( ) ;
2017-04-10 11:00:55 +02:00
s32 len = strlen ( line ) ;
2018-06-19 17:46:37 +02:00
if ( len < = 4 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Header is too short. \n " ) ;
return false ;
}
2016-08-03 20:46:46 +02:00
std : : string identify ;
2017-10-14 13:22:47 +02:00
2018-06-19 17:46:37 +02:00
if ( line [ 0 ] = = ' [ ' & & line [ len - 1 ] = = ' ] ' ) {
2016-08-03 20:46:46 +02:00
identify = contentLines [ 0 ] . substr ( 1 , len - 2 ) ;
2018-06-19 17:46:37 +02:00
} else {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Not a proper config file! \n " ) ;
2016-08-03 20:46:46 +02:00
return false ;
}
2018-06-19 17:46:37 +02:00
if ( identify . compare ( " GAMEPAD " ) = = 0 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Its a gamepad config file! \n " ) ;
2016-08-03 20:46:46 +02:00
setSlot ( gGamePadSlot ) ;
setType ( PARSE_GAMEPAD ) ;
2018-06-19 17:46:37 +02:00
} else if ( identify . compare ( " MOUSE " ) = = 0 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Its a mouse config file! \n " ) ;
2016-08-03 20:46:46 +02:00
setSlot ( gMouseSlot ) ;
setType ( PARSE_MOUSE ) ;
2017-03-30 17:53:36 +02:00
this - > vid = HID_MOUSE_VID ;
this - > pid = HID_MOUSE_PID ;
2018-06-19 17:46:37 +02:00
} else if ( identify . compare ( " KEYBOARD " ) = = 0 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Its a keyboard config file! \n " ) ;
2016-08-03 20:46:46 +02:00
setSlot ( gHID_SLOT_KEYBOARD ) ;
setType ( PARSE_KEYBOARD ) ;
2017-03-30 17:53:36 +02:00
this - > vid = HID_KEYBOARD_VID ;
this - > pid = HID_KEYBOARD_PID ;
2018-06-19 17:46:37 +02:00
} else {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Its a controller config file! \n " ) ;
2016-08-03 20:46:46 +02:00
setSlot ( getSlotController ( identify ) ) ;
setType ( PARSE_CONTROLLER ) ;
}
2018-06-19 17:46:37 +02:00
if ( getSlot ( ) = = HID_INVALID_SLOT ) {
2016-08-03 20:46:46 +02:00
return false ;
}
ConfigReader : : increaseNumberOfLoadedFiles ( ) ;
return true ;
}
2018-06-19 17:46:37 +02:00
void ConfigParser : : parseSingleLine ( std : : string line ) {
if ( line . empty ( ) ) {
DEBUG_FUNCTION_LINE ( " Can't parse line. it's empty \n " ) ;
return ;
}
2017-10-29 09:34:47 +01:00
std : : vector < std : : string > cur_values = StringTools : : stringSplit ( line , " = " ) ;
2018-06-19 17:46:37 +02:00
if ( cur_values . size ( ) ! = 2 ) {
if ( HID_DEBUG | | cur_values . size ( ) > 2 ) {
DEBUG_FUNCTION_LINE ( " Not a valid key=pair line %s \n " , line . c_str ( ) ) ;
}
2016-08-03 20:46:46 +02:00
return ;
2018-06-19 17:46:37 +02:00
} else {
2016-08-03 20:46:46 +02:00
u16 hid_slot = getSlot ( ) ;
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " leftpart = \" %s \" \n " , cur_values [ 0 ] . c_str ( ) ) ;
}
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " rightpart = \" %s \" \n " , cur_values [ 1 ] . c_str ( ) ) ;
}
2017-04-10 11:00:55 +02:00
s32 keyslot = - 1 ;
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Checking single value \n " ) ;
}
if ( getType ( ) = = PARSE_GAMEPAD | | getType ( ) = = PARSE_KEYBOARD ) {
2016-08-03 20:46:46 +02:00
keyslot = ConfigValues : : getKeySlotGamePad ( cur_values [ 0 ] ) ;
2018-06-19 17:46:37 +02:00
} else if ( getType ( ) = = PARSE_MOUSE ) {
2016-08-03 20:46:46 +02:00
keyslot = ConfigValues : : getKeySlotMouse ( cur_values [ 0 ] ) ;
2018-06-19 17:46:37 +02:00
} else {
2016-08-03 20:46:46 +02:00
keyslot = ConfigValues : : getKeySlotDefaultSingleValue ( cur_values [ 0 ] ) ;
}
2018-06-19 17:46:37 +02:00
if ( keyslot ! = - 1 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Its a single value \n " ) ;
}
2016-08-03 20:46:46 +02:00
long rightValue = - 1 ;
bool valueSet = false ;
2018-06-19 17:46:37 +02:00
if ( cur_values [ 0 ] . compare ( " DPAD_MODE " ) = = 0 ) {
2016-08-03 20:46:46 +02:00
const u8 * values_ = NULL ;
2018-06-19 17:46:37 +02:00
if ( ( values_ = ConfigValues : : getValuesStickPreset ( cur_values [ 1 ] ) ) ! = NULL ) {
2016-08-03 20:46:46 +02:00
if ( values_ [ STICK_CONF_MAGIC_VERSION ] ! = STICK_CONF_MAGIC_VALUE )
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Settings preset DPAD MODE and Mask \n " ) ;
}
2016-08-03 20:46:46 +02:00
config_controller [ hid_slot ] [ CONTRPS_DPAD_MODE ] [ 0 ] = CONTROLLER_PATCHER_VALUE_SET ;
config_controller [ hid_slot ] [ CONTRPS_DPAD_MODE ] [ 1 ] = values_ [ CONTRDPAD_MODE ] ;
2018-06-19 17:46:37 +02:00
if ( values_ [ CONTRDPAD_MASK ] ! = 0x00 ) {
2016-08-03 20:46:46 +02:00
config_controller [ hid_slot ] [ CONTRPS_DPAD_MASK ] [ 0 ] = CONTROLLER_PATCHER_VALUE_SET ;
config_controller [ hid_slot ] [ CONTRPS_DPAD_MASK ] [ 1 ] = values_ [ CONTRDPAD_MASK ] ;
}
valueSet = true ;
}
}
2018-06-19 17:46:37 +02:00
if ( ! valueSet ) {
if ( getType ( ) = = PARSE_KEYBOARD ) {
if ( ( rightValue = ConfigValues : : getPresetValuesKeyboard ( cur_values [ 1 ] ) ) ! = - 1 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Used pre-defined Keyboard! \" %s \" is %d \n " , cur_values [ 1 ] . c_str ( ) , rightValue ) ;
}
} else {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " I need to parse %s \n " , cur_values [ 1 ] . c_str ( ) ) ;
}
2016-08-03 20:46:46 +02:00
char * ptr ;
rightValue = strtol ( cur_values [ 1 ] . c_str ( ) , & ptr , 16 ) ;
}
2018-06-19 17:46:37 +02:00
} else {
2016-08-03 20:46:46 +02:00
rightValue = ConfigValues : : getPresetValue ( cur_values [ 1 ] ) ;
2018-06-19 17:46:37 +02:00
if ( getType ( ) = = PARSE_MOUSE ) { //No parsing for the mouse
if ( rightValue = = - 1 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Invalid mouse value, lets skip it %s \n " , cur_values [ 1 ] . c_str ( ) ) ;
}
return ;
}
} else {
if ( rightValue = = - 1 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " I need to parse %s \n " , cur_values [ 1 ] . c_str ( ) ) ;
}
2016-08-03 20:46:46 +02:00
char * ptr ;
rightValue = strtol ( cur_values [ 1 ] . c_str ( ) , & ptr , 16 ) ;
}
}
}
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Setting value to %d \n " , rightValue ) ;
}
2016-08-03 20:46:46 +02:00
config_controller [ hid_slot ] [ keyslot ] [ 0 ] = CONTROLLER_PATCHER_VALUE_SET ;
config_controller [ hid_slot ] [ keyslot ] [ 1 ] = rightValue ;
}
2018-06-19 17:46:37 +02:00
} else {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Check pair value \n " ) ;
}
2016-08-03 20:46:46 +02:00
keyslot = ConfigValues : : getKeySlotDefaultPairedValue ( cur_values [ 0 ] ) ;
2018-06-19 17:46:37 +02:00
if ( keyslot ! = - 1 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Its a pair value \n " ) ;
}
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
if ( ! ConfigValues : : getInstance ( ) - > setIfValueIsAControllerPreset ( cur_values [ 1 ] , getSlot ( ) , keyslot ) ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " And its no preset \n " ) ;
}
2017-10-29 09:34:47 +01:00
std : : vector < std : : string > rightvalues = StringTools : : stringSplit ( cur_values [ 1 ] , " , " ) ;
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
if ( rightvalues . size ( ) ! = 2 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " %d instead of 2 key=values pairs in line \n " , rightvalues . size ( ) ) ;
2016-08-03 20:46:46 +02:00
return ;
}
char * ptr ;
long firstValue = strtol ( rightvalues [ 0 ] . c_str ( ) , & ptr , 16 ) ;
long secondValue = strtol ( rightvalues [ 1 ] . c_str ( ) , & ptr , 16 ) ;
config_controller [ hid_slot ] [ keyslot ] [ 0 ] = firstValue ;
config_controller [ hid_slot ] [ keyslot ] [ 1 ] = secondValue ;
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Set %02X,%02X \n " , firstValue , secondValue ) ;
}
} else {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Found preset value!! \n " ) ;
}
2016-08-03 20:46:46 +02:00
}
2018-06-19 17:46:37 +02:00
} else {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " The setting \" %s \" is unknown! \n " , cur_values [ 0 ] . c_str ( ) ) ;
2016-08-03 20:46:46 +02:00
}
}
}
}
2018-06-19 17:46:37 +02:00
bool ConfigParser : : resetConfig ( ) {
2017-04-10 11:00:55 +02:00
s32 slot = getSlot ( ) ;
2017-10-14 13:22:47 +02:00
if ( ( slot = = HID_INVALID_SLOT ) | | ( slot > = gHIDMaxDevices ) ) return false ;
2018-06-19 17:46:37 +02:00
for ( s32 j = ( CONTRPS_PID + 1 ) ; j < CONTRPS_MAX_VALUE ; j + + ) {
2016-08-03 20:46:46 +02:00
config_controller [ slot ] [ j ] [ 0 ] = CONTROLLER_PATCHER_INVALIDVALUE ;
config_controller [ slot ] [ j ] [ 1 ] = CONTROLLER_PATCHER_INVALIDVALUE ;
}
return true ;
}
2018-06-19 17:46:37 +02:00
s32 ConfigParser : : getSlotController ( std : : string identify ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Getting Controller Slot \n " ) ;
}
2016-08-03 20:46:46 +02:00
2017-10-29 09:34:47 +01:00
std : : vector < std : : string > values = StringTools : : stringSplit ( identify , " , " ) ;
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
if ( values . size ( ) ! = 2 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " You need to provide a VID and PID. e.g. \" [vid=0x451,pid=0x152] \" . (%s) \n " , identify . c_str ( ) ) ;
2016-08-03 20:46:46 +02:00
return HID_INVALID_SLOT ;
}
2017-04-10 11:00:55 +02:00
s32 vid = getValueFromKeyValue ( values [ 0 ] , " VID " , " = " ) ;
2018-06-19 17:46:37 +02:00
if ( vid < 0 ) {
2016-08-03 20:46:46 +02:00
return HID_INVALID_SLOT ;
}
2017-04-10 11:00:55 +02:00
s32 pid = getValueFromKeyValue ( values [ 1 ] , " PID " , " = " ) ;
2018-06-19 17:46:37 +02:00
if ( pid < 0 ) {
2016-08-03 20:46:46 +02:00
return HID_INVALID_SLOT ;
}
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " VID: %04x PID: %04x \n " , vid , pid ) ;
2017-03-30 17:53:36 +02:00
this - > vid = vid ;
this - > pid = pid ;
DeviceInfo deviceinfo ;
memset ( & deviceinfo , 0 , sizeof ( deviceinfo ) ) ;
2017-03-31 16:48:12 +02:00
deviceinfo . vidpid . vid = vid ;
deviceinfo . vidpid . pid = pid ;
2017-04-10 11:00:55 +02:00
s32 result = ControllerPatcherUtils : : getDeviceInfoFromVidPid ( & deviceinfo ) ;
s32 slot = deviceinfo . slotdata . deviceslot ;
s32 hid = 0 ;
2018-06-19 17:46:37 +02:00
if ( result < 0 ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Its a new controller, lets save it \n " ) ;
}
2017-03-30 17:53:36 +02:00
HIDSlotData slotdata ;
ControllerPatcherUtils : : getNextSlotData ( & slotdata ) ;
slot = slotdata . deviceslot ;
hid = slotdata . hidmask ;
2018-06-19 17:46:37 +02:00
if ( slot > = gHIDMaxDevices ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " We don't a space for a new controller, please delete .inis \n " ) ;
2016-08-03 20:46:46 +02:00
return HID_INVALID_SLOT ;
}
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Got new slot! slot: %d hid %s .. Lets registrate it! \n " , slot , StringTools : : byte_to_binary ( hid ) ) ;
}
2016-08-03 20:46:46 +02:00
config_controller [ slot ] [ CONTRPS_VID ] [ 0 ] = ( vid & 0xFF00 ) > > 8 ;
config_controller [ slot ] [ CONTRPS_VID ] [ 1 ] = ( vid & 0x00FF ) ;
config_controller [ slot ] [ CONTRPS_PID ] [ 0 ] = ( pid & 0xFF00 ) > > 8 ;
config_controller [ slot ] [ CONTRPS_PID ] [ 1 ] = ( pid & 0x00FF ) ;
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Saved vid: %04X pid: %04X \n " ,
config_controller [ slot ] [ CONTRPS_VID ] [ 0 ] * 0x100 + config_controller [ slot ] [ CONTRPS_VID ] [ 1 ] ,
config_controller [ slot ] [ CONTRPS_PID ] [ 0 ] * 0x100 + config_controller [ slot ] [ CONTRPS_PID ] [ 1 ] ) ;
}
2016-08-03 20:46:46 +02:00
2017-03-30 17:53:36 +02:00
config_controller_hidmask [ slot ] = hid ;
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Saved the hid \n " ) ;
}
2016-08-03 20:46:46 +02:00
2018-06-19 17:46:37 +02:00
} else {
if ( slot < gHIDMaxDevices ) {
2017-03-30 17:53:36 +02:00
hid = config_controller_hidmask [ slot ] ;
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " >>>>>> found slot %d (hid:%s). Modifing existing data <<<<<<<< \n " , slot , StringTools : : byte_to_binary ( hid ) ) ;
}
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " We already have data of this controller, lets modify it \n " ) ;
2018-06-19 17:46:37 +02:00
} else {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Something really odd happend to the slots. %d is bigger then max (%d) \n " , slot , gHIDMaxDevices ) ;
2016-08-03 20:46:46 +02:00
return HID_INVALID_SLOT ;
}
}
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " using slot: %d hid %08X \n " , slot , hid ) ;
2016-08-03 20:46:46 +02:00
return slot ;
}
2018-06-19 17:46:37 +02:00
bool ConfigParser : : parseIni ( ) {
if ( getSlot ( ) = = HID_INVALID_SLOT ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Couldn't parse file. Not a valid slot. Probably broken config. Or you tried to have more than %d devices \n " , getType ( ) , gHIDMaxDevices ) ;
return false ;
2016-08-03 20:46:46 +02:00
}
2017-10-14 13:22:47 +02:00
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Parsing content, type %d \n " , getType ( ) ) ;
}
2016-08-03 20:46:46 +02:00
2017-04-10 11:00:55 +02:00
s32 start = 1 ;
2018-06-19 17:46:37 +02:00
if ( contentLines . size ( ) < = 1 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " File only contains a header. \n " ) ;
return false ;
}
2018-06-19 17:46:37 +02:00
if ( contentLines [ 1 ] . compare ( " [IGNOREDEFAULT] " ) = = 0 ) {
2016-08-03 20:46:46 +02:00
resetConfig ( ) ;
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Ignoring existing settings of this device \n " ) ;
2016-08-03 20:46:46 +02:00
start + + ;
}
2018-06-19 17:46:37 +02:00
for ( u32 i = start ; i < contentLines . size ( ) ; i + + ) {
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " line %d: \" %s \" \n " , ( i + 1 ) , contentLines [ i ] . c_str ( ) ) ;
}
2016-08-03 20:46:46 +02:00
parseSingleLine ( contentLines [ i ] ) ;
}
2018-06-19 17:46:37 +02:00
if ( HID_DEBUG ) {
DEBUG_FUNCTION_LINE ( " Parsing of the file is done. \n " ) ;
}
2016-08-03 20:46:46 +02:00
return true ;
}
2018-06-19 17:46:37 +02:00
s32 ConfigParser : : getValueFromKeyValue ( std : : string value_pair , std : : string expectedKey , std : : string delimiter ) {
2017-10-29 09:34:47 +01:00
std : : vector < std : : string > string_value = StringTools : : stringSplit ( value_pair , delimiter ) ;
2018-06-19 17:46:37 +02:00
if ( string_value . size ( ) ! = 2 ) {
if ( HID_DEBUG | | string_value . size ( ) > 2 ) {
DEBUG_FUNCTION_LINE ( " Not a valid key=pair line %s \n " , value_pair . c_str ( ) ) ;
}
2016-08-03 20:46:46 +02:00
return - 1 ;
}
2018-06-19 17:46:37 +02:00
if ( string_value [ 0 ] . compare ( expectedKey ) ! = 0 ) {
2017-10-14 13:22:47 +02:00
DEBUG_FUNCTION_LINE ( " Key part not %s, its %s " , expectedKey . c_str ( ) , string_value [ 0 ] . c_str ( ) ) ;
2016-08-03 20:46:46 +02:00
return - 1 ;
}
char * ptr ;
2017-04-10 11:00:55 +02:00
s32 value = strtol ( string_value [ 1 ] . c_str ( ) , & ptr , 16 ) ;
2016-08-03 20:46:46 +02:00
return value ;
}