diff gsm-fw/gpf/osl/os_com_fl.c @ 350:5bc6a8f8b4a8

OSL: os_com_fl.c: reconstructed up to os_GetQueueData()
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 08 May 2014 07:55:06 +0000
parents a163da322bc5
children fd015570cacc
line wrap: on
line diff
--- a/gsm-fw/gpf/osl/os_com_fl.c	Thu May 08 05:47:38 2014 +0000
+++ b/gsm-fw/gpf/osl/os_com_fl.c	Thu May 08 07:55:06 2014 +0000
@@ -19,7 +19,6 @@
 extern T_OS_COM_TABLE_ENTRY ComTable[];
 
 static NU_SEMAPHORE ComSemCB;
-static USHORT entry = 0;
 
 static int
 os_GetQueueEntry(USHORT Index, OS_HANDLE *Handle)
@@ -62,3 +61,84 @@
 		ent->MaxUsed);
 	return(OS_OK);
 }
+
+GLOBAL LONG
+os_OpenQueue(OS_HANDLE TaskHandle, char *Name, OS_HANDLE *ComHandle)
+{
+	USHORT i;
+
+	if (!Name)
+		return(OS_ERROR);
+	for (i = 1; i <= MaxCommunications; i++)
+		if (ComTable[i].Name[0] &&
+		    !strncmp(ComTable[i].Name, Name, RESOURCE_NAMELEN - 1)) {
+			*ComHandle = i;
+			return(OS_OK);
+		}
+	return(OS_ERROR);
+}
+
+GLOBAL LONG
+os_GetQueueState(OS_HANDLE Caller, OS_HANDLE Handle, ULONG *Used, ULONG *Free)
+{
+	if (ComTable[Handle].Name[0]) {
+		*Used = ComTable[Handle].UsedSemCB.sm_semaphore_count;
+		*Free = ComTable[Handle].FreeSemCB.sm_semaphore_count;
+		return(OS_OK);
+	} else
+		return(OS_ERROR);
+}
+
+GLOBAL LONG
+os_GetQueueName(OS_HANDLE Caller, OS_HANDLE ComHandle, char *Name)
+{
+	if (ComHandle > MaxCommunications)
+		return(OS_ERROR);
+	if (!ComTable[ComHandle].Name[0])
+		return(OS_ERROR);
+	strcpy(Name, ComTable[ComHandle].Name);
+	return(OS_OK);
+}
+
+GLOBAL LONG
+os_GetQueueHandle(OS_HANDLE Caller, char *Name, OS_HANDLE *ComHandle)
+{
+	USHORT i;
+
+	for (i = 1; i <= MaxCommunications; i++)
+		if (ComTable[i].Name[0] &&
+		    !strncmp(Name, ComTable[i].Name, RESOURCE_NAMELEN - 1)) {
+			*ComHandle = i;
+			return(OS_OK);
+		}
+	return(OS_ERROR);
+}
+
+GLOBAL LONG
+os_GetQueueData(OS_HANDLE Caller, OS_HANDLE Handle, USHORT Index, USHORT *Type,
+		ULONG *opc, ULONG *ptr, ULONG *time)
+{
+	static USHORT entry;
+	static T_QDATA_ELEMENT *p;
+
+	if (!ComTable[Handle].Name[0])
+		return(OS_ERROR);
+	if (Index == FIRST_ENTRY) {
+		*Type = ComTable[Handle].current_msg.type;
+		*opc  = ComTable[Handle].current_msg.opc;
+		*time = ComTable[Handle].current_msg.time;
+		*ptr  = (ULONG) ComTable[Handle].current_msg.ptr;
+		p = ComTable[Handle].pQueueMemory;
+		entry = 0;
+		return(OS_OK);
+	}
+	if (entry >= ComTable[Handle].Entries)
+		return(OS_ERROR);
+	entry++;
+	*Type = p->Data.data16;
+	*ptr  = (ULONG) p->Data.ptr;
+	*opc  = p->Data.data32;
+	*time = p->Data.time;
+	p++;
+	return(OS_OK);
+}