From 9f1f5806da689abdd461aaf2385a76230e1585e1 Mon Sep 17 00:00:00 2001 From: koennecke Date: Tue, 13 Apr 2010 15:36:03 +0000 Subject: [PATCH] - Added missing files --- fetchwrite.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 fetchwrite.c diff --git a/fetchwrite.c b/fetchwrite.c new file mode 100644 index 0000000..5c58c11 --- /dev/null +++ b/fetchwrite.c @@ -0,0 +1,80 @@ +/* + * fetchwrite.c + * + * This is the implementation for the Siemens S5 FETCH/Write + * protocol support functions. Docs see header file + * + * Created on: Mar 24, 2010 + * Author: koennecke + */ +#include +#include +#include "fetchwrite.h" + +Request makeS5WriteRequest(int orgID, unsigned char dbNo, + int offset, int length, void *data) +{ + Request result; + + result.totalLength = 16 + length; + result.data = malloc(result.totalLength*sizeof(char)); + if(result.data == NULL){ + return result; + } + memset(result.data,0,result.totalLength*sizeof(char)); + + result.data[0] = 'S'; + result.data[1] = '5'; + result.data[2] = 0x10; + result.data[3] = 0x01; + result.data[4] = 0x03; + result.data[5] = 0x03; + result.data[6] = 0x03; + result.data[7] = 0x08; + result.data[8] = (unsigned char)orgID; + result.data[9] = dbNo; + result.data[10] = (unsigned short)offset; + result.data[12] = (unsigned short)length; + result.data[14] = 0xFF; + result.data[15] = 0x02; + memcpy(result.data+16,data,length); + + return result; +} +/*-------------------------------------------------------------*/ +int decodeS5Response(unsigned char data[16]) +{ + if(data[0] != 'S' || data[1] != '5'){ + return S5INVALID; + } + return (int)data[8]; +} +/*---------------------------------------------------------------*/ +Request makeS5FetchRequest(int orgID, unsigned char dbNo, + int offset, int length) +{ + Request result; + + result.totalLength = 16; + result.data = malloc(result.totalLength*sizeof(char)); + if(result.data == NULL){ + return result; + } + memset(result.data,0,result.totalLength*sizeof(char)); + + result.data[0] = 'S'; + result.data[1] = '5'; + result.data[2] = 0x10; + result.data[3] = 0x01; + result.data[4] = 0x03; + result.data[5] = 0x05; + result.data[6] = 0x03; + result.data[7] = 0x08; + result.data[8] = (unsigned char)orgID; + result.data[9] = dbNo; + result.data[10] = (unsigned short)offset; + result.data[12] = (unsigned short)length; + result.data[14] = 0xFF; + result.data[15] = 0x02; + return result; +}