⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp.c

📁 myTemp is used to connect PalmOS PDAs to Dallas Microlan(tm) Devices. It currently supports DS1820
💻 C
字号:
/*  myTemp is used to connect PalmOS PDAs to Dallas Microlan(tm) Devices  It currently supports DS1820/DS18S20 Digital Thermometers  Copyright (C) 2000 Christof Klaiber  This program is free software; you can redistribute it and/or modify it under  the terms of the GNU General Public License as published by the Free Software  Foundation; either version 2 of the License, or any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with  this program; if not, write to the Free Software Foundation, Inc., 59 Temple  Place, Suite 330, Boston, MA  02111-1307  USA  Christof Klaiber <christof.klaiber@gmx.de>  Lachnerstr. 22  76131 Karlsruhe  Germany*/#include <PalmOS.h>#include <SerialMgrOld.h>#include "com.h"#include "temp.h"#include "ds1820.h"/*	Name:		TempConvertTemp	Purpose:	compute the temperature from the values read from sensor	Input:		Int16*	temp	<out>	temperature				UInt8	scratchPad[kScratchPadLength]	the nine values read from the sensor's scratchpad	Result:		error	Name:		Christof Klaiber <cklaiber@sourceforge.net>	Versions:	11.12.2003	introduced				12.12.2003	error handling*/UInt32	TempConvertTemp(Int16*, UInt8[kScratchPadLength]);UInt32 TempGetTemp(Int16* temp, UInt32* state, UInt16* serialRefNum){	Err err = 0;	UInt32	tempErr = tempNoError;	UInt8	scratchPad[kScratchPadLength];		switch (*state)	{	case OpenSerialState:      	err = SysLibFind("Serial Library", serialRefNum);      	if(err == sysErrLibNotFound )		{        	err = SysLibLoad('libr', 'swrp', serialRefNum);      	}		if (err)		{			tempErr = tempSerErrLibCantLoad;			break;		}				err = SerOpen(*serialRefNum, 0, 115200);		if (err)		{			if(err == serErrAlreadyOpen)			{				SerClose(*serialRefNum);				tempErr = serErrAlreadyOpen;			}			else			{				tempErr = tempSerErrCantOpen;			}			break;		}		*state = SkipRomForConvState;		break;		/* falls through */			case SkipRomForConvState:		tempErr = DSSkipROM(*serialRefNum);		if (tempErr)		{			break;		}	case TempConvState:		tempErr = DSReadTemperature(*serialRefNum);		if (tempErr)		{			break;		}		*state = TempConvResetState;		break;/* falls through */		case TempConvResetState:			tempErr = DSResetTemperature(*serialRefNum);		if (tempErr)		{			break;		}/* falls through*/		case SkipRomForReadState:		tempErr = DSSkipROM(*serialRefNum);		if (tempErr)		{			break;		}	case ReadScratchpadState:			tempErr = DSReadScratchpad(*serialRefNum, scratchPad);		if (tempErr)		{			break;		}		tempErr = TempConvertTemp(temp, scratchPad);		if (tempErr)		{			break;		}		err = SerClose(*serialRefNum);		if (err)		{			tempErr = tempSerErrCantClose;			break;		} else {			*state = TempReadyState;		}		break;		default:		break;	}		if (tempErr && tempErr != tempSerErrCantClose)	{		err = SerClose(*serialRefNum);		if (err)		{			tempErr = tempSerErrCantClose;		}	}		return tempErr;}UInt32 TempConvertTemp(Int16* temp, UInt8 scratchPad[kScratchPadLength]){	UInt16	hiPrec;		if (scratchPad[1] == 0)	{		*temp = scratchPad[0] >> 1;	} else {		*temp = -1 * (0x100 - scratchPad[0]) >> 1;	}		*temp *= 100;	*temp -= 25;	hiPrec = scratchPad[7] - scratchPad[6];	hiPrec *= 100;		if (!scratchPad[7])	{		return tempErrConvErr;	}	hiPrec /= scratchPad[7];	*temp += hiPrec;		return tempNoError;}UInt32	TempStopLogging(UInt32* state, UInt16* serialRefNum){	UInt32	tempErr = tempNoError;	Err		err;		if (*state != TempReadyState && *state != OpenSerialState)	{		err = SerClose(*serialRefNum);		if (err)		{			tempErr = tempSerErrCantClose;		} else {			*state = OpenSerialState;		}	}	return tempErr;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -