📄 manip.c
字号:
/* * Embedded SLP Message Manipulation Functions * * ./software/ch10/emslp * * mtj@cogitollc.com * */#include <stdio.h>#include "manip.h"/* * emitByte() * * Emit an octet into an slpMsg stream. * */void emitByte( slpMsgType *slpMsg, uint8_t value){ if (slpMsg == NULL) return; slpMsg->buffer[slpMsg->index++] = value; slpMsg->len++;}/* * emitShort() * * Emit a short (16 bits) into an slpMsg stream. * */void emitShort( slpMsgType *slpMsg, uint16_t value){ if (slpMsg == NULL) return; slpMsg->buffer[slpMsg->index++] = (unsigned char )(value >> 8); slpMsg->buffer[slpMsg->index++] = (unsigned char )(value & 0xff); slpMsg->len+=2;}/* * emitString() * * Emit a variable length string into an slpMsg stream. * */void emitString( slpMsgType *slpMsg, const char *string){ int i, len = strlen(string); if ((slpMsg == NULL) || (string == NULL)) return; for (i = 0 ; i < len ; i++) emitByte(slpMsg, string[i]);}/* * getByte() * * Get an octet from an slpMsg stream. * */int getByte( slpMsgType *slpMsg, uint8_t *value){ int ret = -1; if (slpMsg == NULL) return -1; if (slpMsg->index < slpMsg->len) { if (value) { *value = slpMsg->buffer[slpMsg->index++]; } else { slpMsg->index++; } ret = 0; } return ret;}/* * getShort() * * Get a short from an slpMsg stream. * */int getShort( slpMsgType *slpMsg, uint16_t *value){ int ret = -1; if (slpMsg == NULL) return -1; if (slpMsg->index+1 < slpMsg->len) { if (value) { *value = slpMsg->buffer[slpMsg->index++] << 8; *value |= slpMsg->buffer[slpMsg->index++]; } else { slpMsg->index+=2; } ret = 0; } return ret;}/* * getTriOctet() * * Get a 3 octet word from the slpMsg stream. * */int getTriOctet( slpMsgType *slpMsg, uint32_t *value){ int ret = -1; if (slpMsg == NULL) return -1; if (slpMsg->index+2 < slpMsg->len) { if (value) { *value = slpMsg->buffer[slpMsg->index++] << 16; *value |= slpMsg->buffer[slpMsg->index++] << 8; *value |= slpMsg->buffer[slpMsg->index++]; } else { slpMsg->index+=3; } ret = 0; } return ret;}/* * getString() * * Get a variable length string from an slpMsg stream. * */int getString( slpMsgType *slpMsg, int len, char *string){ int i, ret = -1; if (slpMsg == NULL) return -1; if (slpMsg->index+len < slpMsg->len) { if (string) { for (i = 0 ; i < len ; i++) { string[i] = slpMsg->buffer[slpMsg->index+i]; } string[i] = 0; } slpMsg->index += len; ret = 0; } return ret;}/* * Copyright (c) 2002 Charles River Media. All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, is hereby granted without fee provided * that the following conditions are met: * * 1. Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * 3. Neither the name of Charles River Media nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY CHARLES RIVER MEDIA AND CONTRIBUTERS * 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CHARLES * RIVER MEDIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARAY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -