123

Dependencies:   mbed

Fork of LG by igor Apu

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?

UserRevisionLine numberNew 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 }