| 31 | //////////////////////////////////////////////////////////////////////////////// |
| 32 | |
| 33 | Generator::Generator(InterfaceDefinition *def, generator_type_t generatorType) : |
| 34 | m_idlCrc16(def->getIdlCrc16()), m_def(def), m_globals(&(def->getGlobals())), m_generatorType(generatorType) |
| 35 | { |
| 36 | string scopeName = "erpcShim"; |
| 37 | string scopeNameC; |
| 38 | string scopeNamePrefix = ""; |
| 39 | string namespaceVal = scopeName; |
| 40 | |
| 41 | m_templateData["erpcVersion"] = ERPC_VERSION; |
| 42 | m_templateData["erpcVersionNumber"] = ERPC_VERSION_NUMBER; |
| 43 | |
| 44 | // crc of erpcgen version and idl files. |
| 45 | m_templateData["crc16"] = ""; |
| 46 | |
| 47 | m_templateData["todaysDate"] = getTime(); |
| 48 | |
| 49 | m_templateData["sharedMemBeginAddr"] = ""; |
| 50 | m_templateData["sharedMemEndAddr"] = ""; |
| 51 | |
| 52 | m_outputDirectory = m_def->getOutputDirectory(); |
| 53 | |
| 54 | if (m_def->hasProgramSymbol()) |
| 55 | { |
| 56 | Log::info("program: "); |
| 57 | Log::info("%s\n", m_def->getOutputFilename().c_str()); |
| 58 | |
| 59 | Program *program = m_def->getProgramSymbol(); |
| 60 | |
| 61 | /* Shared memory area. */ |
| 62 | Value *sharedMemBValue = getAnnValue(program, SHARED_MEMORY_BEGIN_ANNOTATION); |
| 63 | Value *sharedMemEValue = getAnnValue(program, SHARED_MEMORY_END_ANNOTATION); |
| 64 | if (sharedMemBValue && sharedMemEValue) |
| 65 | { |
| 66 | m_templateData["sharedMemBeginAddr"] = sharedMemBValue->toString(); |
| 67 | m_templateData["sharedMemEndAddr"] = sharedMemEValue->toString(); |
| 68 | Log::warning("Shared memory is supported only for C language used on embedded devices.\n"); |
| 69 | } |
| 70 | else if (sharedMemBValue || sharedMemEValue) |
| 71 | { |
| 72 | throw semantic_error( |
| 73 | "Annotations @shared_memory_begin and @shared_memory_end both (or no one) need exists and contains " |
| 74 | "addresses."); |
| 75 | } |
| 76 | |
| 77 | if (findAnnotation(program, CRC_ANNOTATION) != nullptr) |
| 78 | { |
| 79 | m_templateData["crc16"] = m_idlCrc16; |
| 80 | } |
| 81 | |
| 82 | m_outputDirectory /= getAnnStringValue(program, OUTPUT_DIR_ANNOTATION); |
| 83 | |
| 84 | if (findAnnotation(program, SCOPE_NAME_ANNOTATION) == nullptr) |
| 85 | { |
| 86 | scopeName = program->getName(); |
| 87 | } |
| 88 | else |
| 89 | { |
| 90 | scopeName = getAnnStringValue(program, SCOPE_NAME_ANNOTATION); |
nothing calls this directly
no test coverage detected