cmd line parser completed.
This commit is contained in:
BIN
tinio/a.out
BIN
tinio/a.out
Binary file not shown.
@@ -8,13 +8,13 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
// Those are flags used for flow control inside the program
|
// Those are flags used for flow control inside the program
|
||||||
uint8_t whichDev;
|
uint8_t whichDev=177; // 177 values indicate unset variables.
|
||||||
uint8_t interfaceNum;
|
uint8_t interfaceNum=177;
|
||||||
uint8_t writeFlag;
|
uint8_t writeFlag=0;
|
||||||
uint8_t readFlag;
|
uint8_t readFlag=0;
|
||||||
uint8_t exitFlag;
|
uint8_t exitFlag=1;
|
||||||
uint8_t pinNumber;
|
uint8_t pinNumber=177;
|
||||||
uint8_t valueToWrite;
|
uint8_t valueToWrite=177;
|
||||||
// those vars are to be used with locateDevice function
|
// those vars are to be used with locateDevice function
|
||||||
const uint8_t maxDevs = 16; // 16 connected devices should be enough...
|
const uint8_t maxDevs = 16; // 16 connected devices should be enough...
|
||||||
const CY_VID_PID deviceVidPid{UINT16(0x04b4),
|
const CY_VID_PID deviceVidPid{UINT16(0x04b4),
|
||||||
@@ -169,24 +169,41 @@ int isstrdigit(const char *str) {
|
|||||||
|
|
||||||
void unknownOptarg(int option, char *argument)
|
void unknownOptarg(int option, char *argument)
|
||||||
{
|
{
|
||||||
printf("Unknown option argument -- \'%s\' at option -%c \n", argument, option);
|
printf("Error: Unknown option argument -- \'%s\' at option -%c \n", argument, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pinNum2HiLo()
|
void pinNum2HiLo(int number)
|
||||||
{
|
{
|
||||||
puts("Pin number you specified is too high.");
|
printf("Error: The specified pin number - %i is too high.", number);
|
||||||
puts("Pin numbers must be between 0 and 11");
|
puts("Pin numbers must be between 0 and 11");
|
||||||
}
|
}
|
||||||
|
|
||||||
void rwConflict()
|
void rwConflict()
|
||||||
{
|
{
|
||||||
puts("Can't write and read at the same time!");
|
puts("Error: Can't write and read at the same time!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uselessValue()
|
||||||
|
{
|
||||||
|
puts("Error: -v option can't be used when reading!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void value2Hi(int number)
|
||||||
|
{
|
||||||
|
printf("Error: The specified value - %i is too big/small.", number);
|
||||||
|
puts("Values must be zero or positive integers, smaller than 255.");
|
||||||
|
}
|
||||||
|
void devNum2Hi(int number)
|
||||||
|
{
|
||||||
|
printf("Error: The specified device number - %i is bigger than 15 or negative\n", number);
|
||||||
|
puts("Note: The number of allowed devices can be adjusted by manipulating maxDevs");
|
||||||
|
puts("variable in the source code.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void test() {
|
void test() {
|
||||||
char trash;
|
printf("read: %i | write: %i | pinNumber: %i | valueToWrite: %i \n", readFlag, writeFlag, pinNumber, valueToWrite);
|
||||||
trash = getchar();
|
printf("whichDev: %i | interfaceNum: %i \n \n", whichDev, interfaceNum);
|
||||||
CySetGpioValue(deviceHandleList[0], 8, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int parseCmdLine(int acount, char **arglist) {
|
int parseCmdLine(int acount, char **arglist) {
|
||||||
@@ -200,6 +217,12 @@ int parseCmdLine(int acount, char **arglist) {
|
|||||||
unknownOptarg(opt, optarg);
|
unknownOptarg(opt, optarg);
|
||||||
}
|
}
|
||||||
whichDev = atoi(optarg);
|
whichDev = atoi(optarg);
|
||||||
|
if(whichDev > 15 || whichDev < 0 )
|
||||||
|
{
|
||||||
|
devNum2Hi(whichDev);
|
||||||
|
whichDev=177;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
@@ -208,17 +231,19 @@ int parseCmdLine(int acount, char **arglist) {
|
|||||||
unknownOptarg(opt, optarg);
|
unknownOptarg(opt, optarg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
pinNumber=atoi(optarg);
|
||||||
if(pinNumber > 11) {
|
if(pinNumber > 11) {
|
||||||
pinNum2HiLo();
|
pinNum2HiLo(pinNumber);
|
||||||
|
pinNumber=177;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(readFlag == 1){
|
if(readFlag == 1){
|
||||||
rwConflict();
|
rwConflict();
|
||||||
|
pinNumber=177;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
writeFlag=1;
|
writeFlag=1;
|
||||||
pinNumber=atoi(optarg);
|
readFlag=0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'r':
|
case 'r':
|
||||||
@@ -227,17 +252,19 @@ int parseCmdLine(int acount, char **arglist) {
|
|||||||
unknownOptarg(opt, optarg);
|
unknownOptarg(opt, optarg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
pinNumber=atoi(optarg);
|
||||||
if(pinNumber > 11) {
|
if(pinNumber > 11) {
|
||||||
pinNum2HiLo();
|
pinNum2HiLo(pinNumber);
|
||||||
|
pinNumber=177;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(writeFlag == 1){
|
if(writeFlag == 1){
|
||||||
rwConflict();
|
rwConflict();
|
||||||
|
pinNumber=177;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
readFlag=1;
|
readFlag=1;
|
||||||
pinNumber=atoi(optarg);
|
writeFlag=0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'i':
|
case 'i':
|
||||||
@@ -248,14 +275,40 @@ int parseCmdLine(int acount, char **arglist) {
|
|||||||
}
|
}
|
||||||
interfaceNum=atoi(optarg);
|
interfaceNum=atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'v':
|
||||||
|
if(!isstrdigit(optarg))
|
||||||
|
{
|
||||||
|
unknownOptarg(opt, optarg);
|
||||||
|
valueToWrite=177;
|
||||||
|
writeFlag=0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(readFlag==1)
|
||||||
|
{
|
||||||
|
uselessValue();
|
||||||
|
valueToWrite=177;
|
||||||
|
writeFlag=0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
valueToWrite=atoi(optarg);
|
||||||
|
if(valueToWrite > 255 || valueToWrite < 0)
|
||||||
|
{
|
||||||
|
value2Hi(valueToWrite);
|
||||||
|
valueToWrite=177;
|
||||||
|
writeFlag=0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
opt = getopt(acount, arglist, "d:s:r:v:i:");
|
opt = getopt(acount, arglist, "d:s:r:v:i:");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
initLib();
|
initLib();
|
||||||
locateDevice();
|
locateDevice();
|
||||||
attachDevices();
|
attachDevices();
|
||||||
parseCmdLine(argc, argv);
|
parseCmdLine(argc, argv);
|
||||||
// test();
|
test();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user