/** * @private. * Print Argument Or Result * @return the size of the argument */ unsigned int printArgument(OutputStream* outputStream, DeviceArgument* deviceArgument, int argumentIndex) { if (argumentIndex > 0) { appendString(outputStream, ARGUMENTS_SEPARATOR); } char* argumentName = deviceArgument->name; char type = deviceArgument->type; unsigned int result = getLengthOfType(type); if (result == -1) { writeError(DEVICE_INTERFACE_PROBLEM); appendStringAndDec(outputStream, "type length Problem !!! : ", type); } printTypeAsString(outputStream, type); // Argument name append(outputStream, ARGUMENTS_NAME_AND_TYPE_SEPARATOR); appendString(outputStream, argumentName); return result; }
/** * @private. * Print Argument Or Result * @return the size of the argument */ unsigned int printArgument(OutputStream* outputStream, DeviceArgument* deviceArgument, int argumentIndex) { appendStringTableData(outputStream, "", DEVICE_USAGE_HEADER_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_NAME_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_IO_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_IO_SIZE_COLUMN_LENGTH); const char* argumentName = deviceArgument->name; appendStringTableData(outputStream, argumentName, DEVICE_USAGE_PARAM_NAME_COLUMN_LENGTH); unsigned char type = deviceArgument->type; unsigned int result = getLengthOfType(type); appendDecTableData(outputStream, result, DEVICE_USAGE_PARAM_SIZE_COLUMN_LENGTH); if (result == -1) { writeError(DEVICE_INTERFACE_PROBLEM); } const char* typeAsString = getTypeAsString(outputStream, type); appendStringTableData(outputStream, typeAsString, DEVICE_USAGE_PARAM_TYPE_COLUMN_LENGTH); appendTableSeparator(outputStream); println(outputStream); return result; }
/** * @private * @return true if it's ok, false if there is an error */ bool printMethodOrNotificationMetaData(OutputStream* outputStream, DeviceInterface* deviceInterface, unsigned char commandHeader, char argumentLength, char resultLength, bool notification) { bool result = true; if (argumentLength != DEVICE_HEADER_NOT_HANDLED) { DeviceMethodMetaData* deviceMethodMetaData = getDeviceMethodMetaData(); // Function Header appendCharTableData(outputStream, commandHeader, DEVICE_USAGE_HEADER_COLUMN_LENGTH); // functionName const char* functionName = deviceMethodMetaData->functionName; appendStringTableData(outputStream, functionName, DEVICE_USAGE_NAME_COLUMN_LENGTH); // arguments appendStringTableData(outputStream, "IN", DEVICE_USAGE_IO_COLUMN_LENGTH); int argumentCount = deviceMethodMetaData->argumentsSize; int argumentIndex; int realArgumentLength = 0; for (argumentIndex = 0; argumentIndex < argumentCount; argumentIndex++) { DeviceArgument deviceArgument = deviceMethodMetaData->arguments[argumentIndex]; realArgumentLength += getLengthOfType(deviceArgument.type); } appendDecTableData(outputStream, realArgumentLength, DEVICE_USAGE_IO_SIZE_COLUMN_LENGTH); // param name empty appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_NAME_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_SIZE_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_TYPE_COLUMN_LENGTH); appendTableSeparator(outputStream); println(outputStream); for (argumentIndex = 0; argumentIndex < argumentCount; argumentIndex++) { DeviceArgument deviceArgument = deviceMethodMetaData->arguments[argumentIndex]; printArgument(outputStream, &deviceArgument, argumentIndex); } // TODO : Error must be check at the beginning of the function and not Inside if (argumentLength != realArgumentLength) { writeError(DEVICE_INTERFACE_PROBLEM); result = false; appendStringLN(outputStream, "Arguments Definition ERROR !!!!!!"); println(outputStream); appendStringAndDec(outputStream, "argumentCount=", argumentCount); println(outputStream); appendStringAndDec(outputStream, "argumentLength=", argumentLength); println(outputStream); appendStringAndDec(outputStream, "realArgumentLength=", realArgumentLength); println(outputStream); } // results if (!notification) { appendStringTableData(outputStream, "", DEVICE_USAGE_HEADER_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_NAME_COLUMN_LENGTH); appendStringTableData(outputStream, "OUT", DEVICE_USAGE_IO_COLUMN_LENGTH); int resultCount = deviceMethodMetaData->resultsSize; int realResultLength = 0; int resultIndex; for (resultIndex = 0; resultIndex < resultCount; resultIndex++) { DeviceArgument resultArgument = deviceMethodMetaData->results[resultIndex]; realResultLength += getLengthOfType(resultArgument.type); } appendDecTableData(outputStream, realResultLength, DEVICE_USAGE_IO_SIZE_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_NAME_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_SIZE_COLUMN_LENGTH); appendStringTableData(outputStream, "", DEVICE_USAGE_PARAM_TYPE_COLUMN_LENGTH); appendTableSeparator(outputStream); println(outputStream); for (resultIndex = 0; resultIndex < resultCount; resultIndex++) { DeviceArgument resultArgument = deviceMethodMetaData->results[resultIndex]; printArgument(outputStream, &resultArgument, resultIndex); } if (resultLength != realResultLength) { result = false; writeError(DEVICE_INTERFACE_PROBLEM); appendString(outputStream, "Result Parameters Definition ERROR !!!!!!"); appendCRLF(outputStream); appendStringAndDec(outputStream, "resultCount=", resultCount); appendCRLF(outputStream); appendStringAndDec(outputStream, "resultLength=", resultLength); appendCRLF(outputStream); appendStringAndDec(outputStream, "realResultLength=", realResultLength); appendCRLF(outputStream); } } appendTableHeaderSeparatorLine(outputStream); } return result; }