/*! * \brief Adds the name and its associated number to the names database. * * \param[in] name The name to add. * \param[in] number The number to be associated with the name. * * \return MQX_OK * \return MQX_CANNOT_CALL_FUNCTION_FROM_ISR (Function cannot be called from an ISR.) * \return MQX_INVALID_COMPONENT_BASE (Name component data is not valid.) * \return MQX_OUT_OF_MEMORY (MQX cannot allocate memory for the name component.) * \return NAME_EXISTS (Name is already in the names database.) * \return NAME_TABLE_FULL (Names database is full.) * \return NAME_TOO_LONG (Name is longer than NAME_MAX_NAME_SIZE.) * \return NAME_TOO_SHORT (Name is 0 length string.) * * \warning Creates the name component with default values if it was not previously * created. * \warning Cannot be called from an ISR. * * \see _name_create_component * \see _name_delete * \see _name_find */ _mqx_uint _name_add ( char *name, _mqx_max_type number ) { /* Body */ KERNEL_DATA_STRUCT_PTR kernel_data; void *handle; _mqx_uint result; _GET_KERNEL_DATA(kernel_data); _KLOGE3(KLOG_name_add, name, number); #if MQX_CHECK_ERRORS if (kernel_data->IN_ISR) { _KLOGX2(KLOG_name_add, MQX_CANNOT_CALL_FUNCTION_FROM_ISR); return (MQX_CANNOT_CALL_FUNCTION_FROM_ISR); } /* Endif */ #endif /* MQX_CHECK_ERRORS */ handle = kernel_data->KERNEL_COMPONENTS[KERNEL_NAME_MANAGEMENT]; if (handle == NULL) { result = _name_create_component(NAME_DEFAULT_INITIAL_NUMBER, NAME_DEFAULT_GROW_NUMBER, NAME_DEFAULT_MAXIMUM_NUMBER); handle = kernel_data->KERNEL_COMPONENTS[KERNEL_NAME_MANAGEMENT]; #if MQX_CHECK_MEMORY_ALLOCATION_ERRORS if (handle == NULL) { _KLOGX2(KLOG_name_add, result); return (result); } /* Endif */ #endif /* MQX_CHECK_MEMORY_ALLOCATION_ERRORS */ } /* Endif */ result = _name_add_internal(handle, name, number); _KLOGX2(KLOG_name_add, result); return (result); } /* Endbody */
_mqx_uint _event_create_internal ( /* [IN] the string name for the event */ char _PTR_ name_ptr, /* [OUT] where the event pointer is */ EVENT_STRUCT_PTR _PTR_ event_ptr_ptr ) { /* Body */ KERNEL_DATA_STRUCT_PTR kernel_data; register EVENT_COMPONENT_STRUCT_PTR event_component_ptr; register EVENT_STRUCT_PTR event_ptr; _mqx_uint result; _GET_KERNEL_DATA(kernel_data); _KLOGE2(KLOG_event_create, name_ptr); #if MQX_CHECK_ERRORS if (kernel_data->IN_ISR) { _KLOGX2(KLOG_event_create, MQX_CANNOT_CALL_FUNCTION_FROM_ISR); return(MQX_CANNOT_CALL_FUNCTION_FROM_ISR); } /* Endif */ #endif event_component_ptr = (EVENT_COMPONENT_STRUCT_PTR) kernel_data->KERNEL_COMPONENTS[KERNEL_EVENTS]; if (event_component_ptr == NULL) { result = _event_create_component(EVENT_DEFAULT_INITIAL_NUMBER, EVENT_DEFAULT_GROW_NUMBER, EVENT_DEFAULT_MAXIMUM_NUMBER); event_component_ptr = (EVENT_COMPONENT_STRUCT_PTR) kernel_data->KERNEL_COMPONENTS[KERNEL_EVENTS]; #if MQX_CHECK_MEMORY_ALLOCATION_ERRORS if (event_component_ptr == NULL){ _KLOGX2(KLOG_event_create, result); return(result); } /* Endif */ #endif } /* Endif */ #if MQX_CHECK_VALIDITY if (event_component_ptr->VALID != EVENT_VALID){ _KLOGX2(KLOG_event_create, MQX_INVALID_COMPONENT_BASE); return(MQX_INVALID_COMPONENT_BASE); } /* Endif */ #endif event_ptr = (EVENT_STRUCT_PTR)_mem_alloc_system_zero( (_mem_size)sizeof(EVENT_STRUCT)); #if MQX_CHECK_MEMORY_ALLOCATION_ERRORS if (event_ptr == NULL) { _KLOGX2(KLOG_event_create, MQX_OUT_OF_MEMORY); return(MQX_OUT_OF_MEMORY); } /* Endif */ #endif _mem_set_type(event_ptr, MEM_TYPE_EVENT); _QUEUE_INIT(&event_ptr->WAITING_TASKS, EVENT_MAX_WAITING_TASKS); strncpy(event_ptr->NAME, name_ptr, (_mqx_uint)NAME_MAX_NAME_SIZE-1); event_ptr->NAME[NAME_MAX_NAME_SIZE-1] = '\0'; result = _name_add_internal(event_component_ptr->NAME_TABLE_HANDLE, event_ptr->NAME, (_mqx_uint)event_ptr); #if MQX_CHECK_ERRORS if (result != MQX_OK) { _mem_free(event_ptr); if (result == NAME_EXISTS) { _KLOGX2(KLOG_event_create, EVENT_EXISTS); return(EVENT_EXISTS); } else if (result == NAME_TABLE_FULL) { _KLOGX2(KLOG_event_create, EVENT_TABLE_FULL); return(EVENT_TABLE_FULL); } /* Endif */ _KLOGX2(KLOG_event_create, result); return(result); } /* Endif */ #endif event_ptr->VALID = EVENT_VALID; *event_ptr_ptr = event_ptr; _KLOGX2(KLOG_event_create, result); return(result); } /* Endbody */