in BusTools/SpiTestTool/main.cpp [316:418]
int main (Platform::Array<Platform::String^>^ args)
{
String^ friendlyName;
int chipSelectLine = 0;
SpiMode mode = SpiMode(-1);
int dataBitLength = 0;
int clockFrequency = 0;
for (unsigned int optind = 1; optind < args->Length; optind += 2) {
PCWSTR arg1 = args->get(optind)->Data();
if (!_wcsicmp(arg1, L"-h") || !_wcsicmp(arg1, L"/h") ||
!_wcsicmp(arg1, L"-?") || !_wcsicmp(arg1, L"/?")) {
PrintUsage(args->get(0)->Data());
return 0;
}
if (!_wcsicmp(arg1, L"-l") || !_wcsicmp(arg1, L"-list")) {
ListSpiControllers();
return 0;
}
if (arg1[0] != L'-') {
std::wcerr << L"Unexpected positional parameter: " << arg1 << L"\n";
return 1;
}
if (args->get(optind)->Length() != 2) {
std::wcerr << L"Invalid option format: " << arg1 << L"\n";
return 1;
}
if ((optind + 1) >= args->Length) {
std::wcerr << L"Missing required parameter for option: " << arg1 << L"\n";
return 1;
}
PCWSTR arg2 = args->get(optind + 1)->Data();
wchar_t *endptr;
switch (towlower(arg1[1])) {
case L'n':
friendlyName = args->get(optind + 1);
break;
case L'c':
chipSelectLine = static_cast<int>(
wcstoul(arg2, &endptr, 0));
break;
case L'm':
{
unsigned long modeUlong = wcstoul(arg2, &endptr, 0);
if ((modeUlong < 0) || (modeUlong > 3)) {
std::wcerr << L"Invalid mode value: " << modeUlong <<
L". Mode must be in the range [0, 3]\n";
return 1;
}
mode = static_cast<SpiMode>(modeUlong);
static_assert(int(SpiMode::Mode0) == 0, "Verifying SpiMode::Mode0 is 0");
static_assert(int(SpiMode::Mode1) == 1, "Verifying SpiMode::Mode1 is 1");
static_assert(int(SpiMode::Mode2) == 2, "Verifying SpiMode::Mode2 is 2");
static_assert(int(SpiMode::Mode3) == 3, "Verifying SpiMode::Mode3 is 3");
break;
}
case L'd':
dataBitLength = static_cast<int>(wcstoul(arg2, &endptr, 0));
if (dataBitLength == 0) {
std::wcerr << L"Invalid data bit length\n";
return 1;
}
break;
case L'f':
clockFrequency = static_cast<int>(wcstoul(arg2, &endptr, 0));
if (clockFrequency == 0) {
std::wcerr << L"Invalid clock frequency\n";
return 1;
}
break;
default:
std::wcerr << L"Unrecognized option: " << arg1 << L"\n";
return 1;
}
}
try {
auto device = MakeDevice(
friendlyName,
chipSelectLine,
mode,
dataBitLength,
clockFrequency);
std::wcout << L" Type 'help' for a list of commands\n";
ShowPrompt(device);
} catch (const wexception& ex) {
std::wcerr << L"Error: " << ex.wwhat() << L"\n";
return 1;
} catch (Platform::Exception^ ex) {
std::wcerr << L"Error: " << ex->Message->Data() << L"\n";
return 1;
}
return 0;
}