- OWINIT save Register used in C
[owSlave2.git] / tools_cmd / rwOW / tmexses.c
diff --git a/tools_cmd/rwOW/tmexses.c b/tools_cmd/rwOW/tmexses.c
new file mode 100644 (file)
index 0000000..793d650
--- /dev/null
@@ -0,0 +1,212 @@
+//---------------------------------------------------------------------------
+// Copyright (C) 2001 Dallas Semiconductor Corporation, All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
+// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+// Except as contained in this notice, the name of Dallas Semiconductor
+// shall not be used except as stated in the Dallas Semiconductor
+// Branding Policy.
+//---------------------------------------------------------------------------
+//
+//  owsestmx.c - Acquire and release a Session on the 1-Wire Net using TMEX.
+//               (Requires TMEX 3.11 or newer)
+//
+//  Version: 2.01
+//
+//  History: 1.03 -> 2.00  Changed 'MLan' to 'ow'. Added support for
+//                         multiple ports.
+//           2.00 -> 2.01  Added support for owError library.
+//
+
+#include <stdio.h>
+#include <windows.h>
+#include "ownet.h"
+
+// external function prototypes
+extern long  far pascal TMExtendedStartSession(short, short, void far *);
+extern short far pascal TMEndSession(long);
+extern short far pascal TMClose(long);
+extern short far pascal TMSetup(long);
+extern short far pascal TMReadDefaultPort(short far *, short far *);
+
+short PortNum=1,PortType=2;
+long  SessionHandle[MAX_PORTNUM];
+SMALLINT handle_init = FALSE;
+
+//---------------------------------------------------------------------------
+// Attempt to acquire a 1-Wire net using a com port and a DS2480 based
+// adapter.
+//
+// 'port_zstr'     - zero terminated port name.  For this platform
+//                   use format {port number, port type}.
+//
+// Returns: port number and -1 if not successful in setting up the port.
+//
+int owAcquireEx(char *port_zstr)
+{
+   int portnum;
+   int string_counter, counter, i, lenmax;
+   char portnum_str[15];
+   char porttype_str[15];
+   void *tmex_options = NULL;
+
+   if(!handle_init)
+   {
+      for(i=0; i<MAX_PORTNUM; i++)
+         SessionHandle[i] = 0;
+      handle_init = TRUE;
+   }
+
+   // check to find first available handle slot
+   for(portnum = 0; portnum<MAX_PORTNUM; portnum++)
+   {
+      if(!SessionHandle[portnum])
+         break;
+   }
+   OWASSERT( portnum<MAX_PORTNUM, OWERROR_PORTNUM_ERROR, -1 );
+
+   // convert the string in port_zstr to be the port number and port type
+   if(port_zstr)
+   {
+      lenmax = strlen(port_zstr);
+      if (lenmax > 12)
+         lenmax = 12;
+      string_counter = 1;
+      counter = 0;
+      do
+      {
+         portnum_str[counter] = port_zstr[string_counter];
+
+         counter++;
+         string_counter++;
+      }
+      while((port_zstr[string_counter] != ',') && (string_counter <= lenmax));
+
+      portnum_str[counter] = '\0';
+
+      string_counter++;
+      counter = 0;
+
+      do
+      {
+         porttype_str[counter] = port_zstr[string_counter];
+
+         counter++;
+         string_counter++;
+      }
+      while((port_zstr[string_counter] != '}') && (string_counter <= lenmax));
+
+      porttype_str[counter] = '\0';
+
+      PortNum = atoi(portnum_str);
+      PortType = atoi(porttype_str);
+   }
+
+   // open a session
+   SessionHandle[portnum] = TMExtendedStartSession(PortNum,PortType,tmex_options);
+
+   // check the session handle
+   if (SessionHandle[portnum] <= 0)
+   {
+      OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED);
+      SessionHandle[portnum] = 0;
+      return -1;
+   }
+
+   // setup the port
+   if (TMSetup(SessionHandle[portnum]) != 1)
+   {
+      TMClose(SessionHandle[portnum]);
+      TMEndSession(SessionHandle[portnum]);
+      OWERROR(OWERROR_SYSTEM_RESOURCE_INIT_FAILED);
+      SessionHandle[portnum] = 0;
+      return -1;
+   }
+
+   return portnum;
+}
+
+//---------------------------------------------------------------------------
+// Attempt to acquire a 1-Wire net using a com port and a DS2480 based
+// adapter.
+//
+// 'portnum'    - number 0 to MAX_PORTNUM-1.  This number is provided to
+//                indicate the symbolic port number.
+// 'port_zstr'  - zero terminated port name.  For this platform
+//                use format COMX where X is the port number.
+//
+// Returns: TRUE - success, COM port opened
+//
+SMALLINT owAcquire(int portnum, char *port_zstr)
+{
+   int i;
+
+   if(!handle_init)
+   {
+      for(i=0; i<MAX_PORTNUM; i++)
+         SessionHandle[i] = 0;
+      handle_init = TRUE;
+   }
+
+   OWASSERT( portnum<MAX_PORTNUM && portnum>=0 && !SessionHandle[portnum],
+             OWERROR_PORTNUM_ERROR, FALSE );
+
+   // read the default PortNum and PortType
+   TMReadDefaultPort(&PortNum,&PortType);
+
+   // convert the string in port_zstr to be the port number
+   PortNum = atoi(port_zstr);
+
+   // open a session
+   SessionHandle[portnum] = TMExtendedStartSession(PortNum,PortType,NULL);
+
+   // check the session handle
+   if (SessionHandle[portnum] <= 0)
+   {
+      OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED);
+      SessionHandle[portnum] = 0;
+      return FALSE;
+   }
+
+   // setup the port
+   if (TMSetup(SessionHandle[portnum]) != 1)
+   {
+      TMClose(SessionHandle[portnum]);
+      TMEndSession(SessionHandle[portnum]);
+      OWERROR(OWERROR_SYSTEM_RESOURCE_INIT_FAILED);
+      SessionHandle[portnum] = 0;
+      return FALSE;
+   }
+
+   return TRUE;
+}
+
+//---------------------------------------------------------------------------
+// Release the previously acquired a 1-Wire net.
+//
+// 'portnum'    - number 0 to MAX_PORTNUM-1.  This number is provided to
+//                indicate the symbolic port number.
+//
+void owRelease(int portnum)
+{
+   TMClose(SessionHandle[portnum]);
+   TMEndSession(SessionHandle[portnum]);
+   SessionHandle[portnum] = 0;
+}
+