Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG by
DeviceUserProtocolEncoder.c
- Committer:
- Diletant
- Date:
- 2016-05-15
- Revision:
- 161:efd949e8d536
- Child:
- 167:bedc0a9d559a
File content as of revision 161:efd949e8d536:
#include "Device.h"
extern Device device;
extern HashParam hashParamTable[HASH_PARAM_COUNT];
extern HashFunc hashFuncTable[HASH_FUNC_COUNT];
void InitUserProtocolEncoder(void) {
device.user.encoder.error = 0;
device.user.encoder.count = 0;
device.user.encoder.CRC = 0;
}
//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
}
