123
Fork of LG by
DeviceUserProtocolEncoder.c
- Committer:
- Diletant
- Date:
- 2016-06-05
- Revision:
- 167:bedc0a9d559a
- Parent:
- 161:efd949e8d536
- Child:
- 174:0f86eedd511c
File content as of revision 167:bedc0a9d559a:
#include "Device.h" extern Device device; extern HashParam hashParamTable[HASH_PARAM_COUNT]; extern HashFunc hashFuncTable[HASH_FUNC_COUNT]; void InitUserProtocolEncoderDefaultSettings(void) { } void InitUserProtocolEncoderState(void) { device.user.encoder.error = 0; device.user.encoder.count = 0; device.user.encoder.CRC = 0; } void DeviceStartUserProtocolEncoder(void) { } //Next to LineDecode(), PinDecode() void DeviceEncodeUserResponse(void) { if (device.user.response.enabled) { if ((device.user.response.type == RESPONSE_PERIODIC) && (!device.user.response.triggered)) return; switch(device.user.response.code){ case DEV_MODE: EncodeStart(); EncodeAddress(); EncodeDeviceMode(); EncodeSysRgR(); EncodeCRC(); break; case DELTA_BINS: EncodeStart(); EncodeAddress(); EncodeBINSDiff(); EncodeValidBINS(); EncodeCRC(); break; //case DELTA_PS: break; //case DELTA_SF: break; //case DEV_MODE: break; //case BIT_MODE: break; //case RATE: break; //case D_PERIOD_W: break; case MAINTENANCE: EncodeStart(); EncodeAddress(); Encode8(0); Encode8(0); EncodeMessage(); EncodeCRC(); break; //case M0_BASIC: break; //case M0_RATE: break; case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(M0_GPH_W >> 8); Encode8(0); EncodeCRC(); break; case H_PARAM8_W: case H_PARAM8_R: case H_PARAM16_W: case H_PARAM16_R: case H_PARAM32_W: case H_PARAM32_R: case H_BYTES_W: case H_BYTES_R: case FLASH_READ_ALL: case FLASH_WRITE_ALL: EncodeStart(); EncodeAddress(); Encode16(device.user.response.code); EncodeMessage(); if (device.user.response.message == 0) EncodeParameters(); EncodeCRC(); break; default: EncodeFail(); } } } void Encode8(uint8_t param){ device.user.response.buffer.data[device.user.response.buffer.count] = param; device.user.response.buffer.count += 1; sprintf(device.service.buffer," %2x\r\n", param); WriteConcole(); //Development message } void Encode16(uint16_t param) { Encode8((param >> 8) & 0xff); Encode8(param & 0xff); } void EncodeStart(void) { device.user.response.ready = 0; //Disable transmission device.user.response.buffer.count = 0; //Clear buffer Encode8(0xdd); //Write response header code } void EncodeEnd(void) { device.user.response.enabled = 0; //Disable response overwrite device.user.response.ready = 1; //Enable transmission device.user.response.buffer.position = 0; //Reset transmitter } void EncodeFail(void) { device.user.response.buffer.count = 0; //Clear buffer device.user.response.enabled = 0; //Disable response overwrite } void EncodeAddress(void) { Encode8(device.user.address); } void EncodeMessage(void) { Encode16(device.user.response.message); } void EncodeParameters(void) { for (uint8_t i = 0; i < device.user.response.parametersCount; i++){ uint8_t * b = (uint8_t *)device.user.response.parameters[i].ref; for (uint8_t j = 0; j < device.user.response.parameters[i].size; j++){ Encode8(*b); b++; } } } void EncodeCRC(void) { int16_t crc = 0; for (int i = 2; i < device.user.response.buffer.count; i++) crc += device.user.response.buffer.data[i]; Encode16(crc); EncodeEnd(); } void EncodeDeviceMode(void) { uint8_t mode; if (device.latch.mode == DeviceLatch10kHz) mode = 1; else if (device.latch.mode == DeviceLatchMeander) mode = 2; else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaPS)) mode = 3; else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaPS)) mode = 4; else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaBINS)) mode = 5; else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaBINS)) mode = 6; else mode = 0; Encode8(mode); } void EncodeSysRgR(void) { uint16_t u16; //TODO Encode16(u16); } void EncodeBINSDiff(void) { //TODO } void EncodeValidBINS(void) { //TODO }