123
Fork of LG by
DeviceUserProtocolEncoder.c@174:0f86eedd511c, 2016-06-26 (annotated)
- Committer:
- Diletant
- Date:
- Sun Jun 26 10:16:39 2016 +0000
- Revision:
- 174:0f86eedd511c
- Parent:
- 167:bedc0a9d559a
- Child:
- 177:672ef279c8e0
Device&... update. Not final!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Diletant | 161:efd949e8d536 | 1 | #include "Device.h" |
Diletant | 161:efd949e8d536 | 2 | |
Diletant | 161:efd949e8d536 | 3 | extern Device device; |
Diletant | 161:efd949e8d536 | 4 | extern HashParam hashParamTable[HASH_PARAM_COUNT]; |
Diletant | 161:efd949e8d536 | 5 | extern HashFunc hashFuncTable[HASH_FUNC_COUNT]; |
Diletant | 161:efd949e8d536 | 6 | |
Diletant | 167:bedc0a9d559a | 7 | void InitUserProtocolEncoderDefaultSettings(void) { |
Diletant | 167:bedc0a9d559a | 8 | } |
Diletant | 167:bedc0a9d559a | 9 | |
Diletant | 167:bedc0a9d559a | 10 | void InitUserProtocolEncoderState(void) { |
Diletant | 161:efd949e8d536 | 11 | device.user.encoder.error = 0; |
Diletant | 161:efd949e8d536 | 12 | device.user.encoder.count = 0; |
Diletant | 161:efd949e8d536 | 13 | device.user.encoder.CRC = 0; |
Diletant | 161:efd949e8d536 | 14 | } |
Diletant | 161:efd949e8d536 | 15 | |
Diletant | 167:bedc0a9d559a | 16 | void DeviceStartUserProtocolEncoder(void) { |
Diletant | 167:bedc0a9d559a | 17 | } |
Diletant | 167:bedc0a9d559a | 18 | |
Diletant | 161:efd949e8d536 | 19 | //Next to LineDecode(), PinDecode() |
Diletant | 161:efd949e8d536 | 20 | void DeviceEncodeUserResponse(void) { |
Diletant | 161:efd949e8d536 | 21 | if (device.user.response.enabled) { |
Diletant | 161:efd949e8d536 | 22 | if ((device.user.response.type == RESPONSE_PERIODIC) && (!device.user.response.triggered)) return; |
Diletant | 161:efd949e8d536 | 23 | |
Diletant | 161:efd949e8d536 | 24 | switch(device.user.response.code){ |
Diletant | 161:efd949e8d536 | 25 | case DEV_MODE: |
Diletant | 161:efd949e8d536 | 26 | EncodeStart(); EncodeAddress(); EncodeDeviceMode(); EncodeSysRgR(); EncodeCRC(); |
Diletant | 161:efd949e8d536 | 27 | break; |
Diletant | 161:efd949e8d536 | 28 | case DELTA_BINS: |
Diletant | 161:efd949e8d536 | 29 | EncodeStart(); EncodeAddress(); EncodeBINSDiff(); EncodeValidBINS(); EncodeCRC(); |
Diletant | 161:efd949e8d536 | 30 | break; |
Diletant | 161:efd949e8d536 | 31 | //case DELTA_PS: break; |
Diletant | 161:efd949e8d536 | 32 | //case DELTA_SF: break; |
Diletant | 161:efd949e8d536 | 33 | //case DEV_MODE: break; |
Diletant | 161:efd949e8d536 | 34 | //case BIT_MODE: break; |
Diletant | 161:efd949e8d536 | 35 | //case RATE: break; |
Diletant | 161:efd949e8d536 | 36 | //case D_PERIOD_W: break; |
Diletant | 161:efd949e8d536 | 37 | case MAINTENANCE: EncodeStart(); EncodeAddress(); Encode8(0); Encode8(0); EncodeMessage(); EncodeCRC(); break; |
Diletant | 161:efd949e8d536 | 38 | //case M0_BASIC: break; |
Diletant | 174:0f86eedd511c | 39 | case M0_RATE: EncodeMRate(); break; |
Diletant | 161:efd949e8d536 | 40 | case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(M0_GPH_W >> 8); Encode8(0); EncodeCRC(); break; |
Diletant | 161:efd949e8d536 | 41 | case H_PARAM8_W: |
Diletant | 161:efd949e8d536 | 42 | case H_PARAM8_R: |
Diletant | 161:efd949e8d536 | 43 | case H_PARAM16_W: |
Diletant | 161:efd949e8d536 | 44 | case H_PARAM16_R: |
Diletant | 161:efd949e8d536 | 45 | case H_PARAM32_W: |
Diletant | 161:efd949e8d536 | 46 | case H_PARAM32_R: |
Diletant | 161:efd949e8d536 | 47 | case H_BYTES_W: |
Diletant | 161:efd949e8d536 | 48 | case H_BYTES_R: |
Diletant | 161:efd949e8d536 | 49 | case FLASH_READ_ALL: |
Diletant | 161:efd949e8d536 | 50 | case FLASH_WRITE_ALL: |
Diletant | 161:efd949e8d536 | 51 | EncodeStart(); EncodeAddress(); Encode16(device.user.response.code); EncodeMessage(); if (device.user.response.message == 0) EncodeParameters(); EncodeCRC(); |
Diletant | 161:efd949e8d536 | 52 | break; |
Diletant | 161:efd949e8d536 | 53 | default: EncodeFail(); |
Diletant | 161:efd949e8d536 | 54 | } |
Diletant | 161:efd949e8d536 | 55 | } |
Diletant | 161:efd949e8d536 | 56 | } |
Diletant | 161:efd949e8d536 | 57 | |
Diletant | 161:efd949e8d536 | 58 | void Encode8(uint8_t param){ |
Diletant | 161:efd949e8d536 | 59 | device.user.response.buffer.data[device.user.response.buffer.count] = param; |
Diletant | 161:efd949e8d536 | 60 | device.user.response.buffer.count += 1; |
Diletant | 161:efd949e8d536 | 61 | |
Diletant | 161:efd949e8d536 | 62 | sprintf(device.service.buffer," %2x\r\n", param); WriteConcole(); //Development message |
Diletant | 161:efd949e8d536 | 63 | } |
Diletant | 161:efd949e8d536 | 64 | |
Diletant | 161:efd949e8d536 | 65 | void Encode16(uint16_t param) { |
Diletant | 161:efd949e8d536 | 66 | Encode8((param >> 8) & 0xff); |
Diletant | 161:efd949e8d536 | 67 | Encode8(param & 0xff); |
Diletant | 161:efd949e8d536 | 68 | } |
Diletant | 161:efd949e8d536 | 69 | |
Diletant | 161:efd949e8d536 | 70 | void EncodeStart(void) { |
Diletant | 161:efd949e8d536 | 71 | device.user.response.ready = 0; //Disable transmission |
Diletant | 161:efd949e8d536 | 72 | device.user.response.buffer.count = 0; //Clear buffer |
Diletant | 161:efd949e8d536 | 73 | Encode8(0xdd); //Write response header code |
Diletant | 161:efd949e8d536 | 74 | } |
Diletant | 161:efd949e8d536 | 75 | |
Diletant | 161:efd949e8d536 | 76 | void EncodeEnd(void) { |
Diletant | 161:efd949e8d536 | 77 | device.user.response.enabled = 0; //Disable response overwrite |
Diletant | 161:efd949e8d536 | 78 | device.user.response.ready = 1; //Enable transmission |
Diletant | 161:efd949e8d536 | 79 | device.user.response.buffer.position = 0; //Reset transmitter |
Diletant | 161:efd949e8d536 | 80 | } |
Diletant | 161:efd949e8d536 | 81 | |
Diletant | 161:efd949e8d536 | 82 | void EncodeFail(void) { |
Diletant | 161:efd949e8d536 | 83 | device.user.response.buffer.count = 0; //Clear buffer |
Diletant | 161:efd949e8d536 | 84 | device.user.response.enabled = 0; //Disable response overwrite |
Diletant | 161:efd949e8d536 | 85 | } |
Diletant | 161:efd949e8d536 | 86 | |
Diletant | 161:efd949e8d536 | 87 | void EncodeAddress(void) { |
Diletant | 161:efd949e8d536 | 88 | Encode8(device.user.address); |
Diletant | 161:efd949e8d536 | 89 | } |
Diletant | 161:efd949e8d536 | 90 | |
Diletant | 161:efd949e8d536 | 91 | void EncodeMessage(void) { |
Diletant | 161:efd949e8d536 | 92 | Encode16(device.user.response.message); |
Diletant | 161:efd949e8d536 | 93 | } |
Diletant | 161:efd949e8d536 | 94 | |
Diletant | 161:efd949e8d536 | 95 | void EncodeParameters(void) { |
Diletant | 161:efd949e8d536 | 96 | for (uint8_t i = 0; i < device.user.response.parametersCount; i++){ |
Diletant | 161:efd949e8d536 | 97 | uint8_t * b = (uint8_t *)device.user.response.parameters[i].ref; |
Diletant | 161:efd949e8d536 | 98 | for (uint8_t j = 0; j < device.user.response.parameters[i].size; j++){ |
Diletant | 161:efd949e8d536 | 99 | Encode8(*b); b++; |
Diletant | 161:efd949e8d536 | 100 | } |
Diletant | 161:efd949e8d536 | 101 | } |
Diletant | 161:efd949e8d536 | 102 | } |
Diletant | 161:efd949e8d536 | 103 | |
Diletant | 161:efd949e8d536 | 104 | void EncodeCRC(void) { |
Diletant | 161:efd949e8d536 | 105 | int16_t crc = 0; |
Diletant | 161:efd949e8d536 | 106 | for (int i = 2; i < device.user.response.buffer.count; i++) crc += device.user.response.buffer.data[i]; |
Diletant | 161:efd949e8d536 | 107 | Encode16(crc); |
Diletant | 161:efd949e8d536 | 108 | EncodeEnd(); |
Diletant | 161:efd949e8d536 | 109 | } |
Diletant | 161:efd949e8d536 | 110 | |
Diletant | 161:efd949e8d536 | 111 | void EncodeDeviceMode(void) { |
Diletant | 161:efd949e8d536 | 112 | uint8_t mode; |
Diletant | 161:efd949e8d536 | 113 | if (device.latch.mode == DeviceLatch10kHz) |
Diletant | 161:efd949e8d536 | 114 | mode = 1; |
Diletant | 161:efd949e8d536 | 115 | else if (device.latch.mode == DeviceLatchMeander) |
Diletant | 161:efd949e8d536 | 116 | mode = 2; |
Diletant | 161:efd949e8d536 | 117 | else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaPS)) |
Diletant | 161:efd949e8d536 | 118 | mode = 3; |
Diletant | 161:efd949e8d536 | 119 | else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaPS)) |
Diletant | 161:efd949e8d536 | 120 | mode = 4; |
Diletant | 161:efd949e8d536 | 121 | else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaBINS)) |
Diletant | 161:efd949e8d536 | 122 | mode = 5; |
Diletant | 161:efd949e8d536 | 123 | else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaBINS)) |
Diletant | 161:efd949e8d536 | 124 | mode = 6; |
Diletant | 161:efd949e8d536 | 125 | else |
Diletant | 161:efd949e8d536 | 126 | mode = 0; |
Diletant | 161:efd949e8d536 | 127 | Encode8(mode); |
Diletant | 161:efd949e8d536 | 128 | } |
Diletant | 161:efd949e8d536 | 129 | |
Diletant | 161:efd949e8d536 | 130 | void EncodeSysRgR(void) { |
Diletant | 161:efd949e8d536 | 131 | uint16_t u16; |
Diletant | 161:efd949e8d536 | 132 | //TODO |
Diletant | 161:efd949e8d536 | 133 | |
Diletant | 161:efd949e8d536 | 134 | Encode16(u16); |
Diletant | 161:efd949e8d536 | 135 | } |
Diletant | 161:efd949e8d536 | 136 | |
Diletant | 161:efd949e8d536 | 137 | void EncodeBINSDiff(void) { |
Diletant | 161:efd949e8d536 | 138 | //TODO |
Diletant | 161:efd949e8d536 | 139 | } |
Diletant | 161:efd949e8d536 | 140 | |
Diletant | 161:efd949e8d536 | 141 | void EncodeValidBINS(void) { |
Diletant | 161:efd949e8d536 | 142 | //TODO |
Diletant | 174:0f86eedd511c | 143 | } |
Diletant | 174:0f86eedd511c | 144 | |
Diletant | 174:0f86eedd511c | 145 | void EncodeMRate(void) { |
Diletant | 174:0f86eedd511c | 146 | EncodeStart(); |
Diletant | 174:0f86eedd511c | 147 | EncodeAddress(); |
Diletant | 174:0f86eedd511c | 148 | Encode16((int16_t)device.counters.meander.state.a); |
Diletant | 174:0f86eedd511c | 149 | Encode16((int16_t)device.counters.meander.state.b); |
Diletant | 174:0f86eedd511c | 150 | |
Diletant | 174:0f86eedd511c | 151 | //TODO: |
Diletant | 174:0f86eedd511c | 152 | |
Diletant | 174:0f86eedd511c | 153 | EncodeCRC(); |
Diletant | 161:efd949e8d536 | 154 | } |