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@167:bedc0a9d559a, 2016-06-05 (annotated)
- Committer:
- Diletant
- Date:
- Sun Jun 05 11:03:33 2016 +0000
- Revision:
- 167:bedc0a9d559a
- Parent:
- 161:efd949e8d536
- Child:
- 175:0f86eedd511c
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 | 161:efd949e8d536 | 39 | //case M0_RATE: 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 | 161:efd949e8d536 | 143 | } |
