123

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Diletant
Date:
Sun May 15 19:12:12 2016 +0000
Revision:
161:efd949e8d536
Child:
167:bedc0a9d559a
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 161:efd949e8d536 7 void InitUserProtocolEncoder(void) {
Diletant 161:efd949e8d536 8 device.user.encoder.error = 0;
Diletant 161:efd949e8d536 9 device.user.encoder.count = 0;
Diletant 161:efd949e8d536 10 device.user.encoder.CRC = 0;
Diletant 161:efd949e8d536 11 }
Diletant 161:efd949e8d536 12
Diletant 161:efd949e8d536 13 //Next to LineDecode(), PinDecode()
Diletant 161:efd949e8d536 14 void DeviceEncodeUserResponse(void) {
Diletant 161:efd949e8d536 15 if (device.user.response.enabled) {
Diletant 161:efd949e8d536 16 if ((device.user.response.type == RESPONSE_PERIODIC) && (!device.user.response.triggered)) return;
Diletant 161:efd949e8d536 17
Diletant 161:efd949e8d536 18 switch(device.user.response.code){
Diletant 161:efd949e8d536 19 case DEV_MODE:
Diletant 161:efd949e8d536 20 EncodeStart(); EncodeAddress(); EncodeDeviceMode(); EncodeSysRgR(); EncodeCRC();
Diletant 161:efd949e8d536 21 break;
Diletant 161:efd949e8d536 22 case DELTA_BINS:
Diletant 161:efd949e8d536 23 EncodeStart(); EncodeAddress(); EncodeBINSDiff(); EncodeValidBINS(); EncodeCRC();
Diletant 161:efd949e8d536 24 break;
Diletant 161:efd949e8d536 25 //case DELTA_PS: break;
Diletant 161:efd949e8d536 26 //case DELTA_SF: break;
Diletant 161:efd949e8d536 27 //case DEV_MODE: break;
Diletant 161:efd949e8d536 28 //case BIT_MODE: break;
Diletant 161:efd949e8d536 29 //case RATE: break;
Diletant 161:efd949e8d536 30 //case D_PERIOD_W: break;
Diletant 161:efd949e8d536 31 case MAINTENANCE: EncodeStart(); EncodeAddress(); Encode8(0); Encode8(0); EncodeMessage(); EncodeCRC(); break;
Diletant 161:efd949e8d536 32 //case M0_BASIC: break;
Diletant 161:efd949e8d536 33 //case M0_RATE: break;
Diletant 161:efd949e8d536 34 case M0_GPH_W: EncodeStart(); EncodeAddress(); Encode8(M0_GPH_W >> 8); Encode8(0); EncodeCRC(); break;
Diletant 161:efd949e8d536 35 case H_PARAM8_W:
Diletant 161:efd949e8d536 36 case H_PARAM8_R:
Diletant 161:efd949e8d536 37 case H_PARAM16_W:
Diletant 161:efd949e8d536 38 case H_PARAM16_R:
Diletant 161:efd949e8d536 39 case H_PARAM32_W:
Diletant 161:efd949e8d536 40 case H_PARAM32_R:
Diletant 161:efd949e8d536 41 case H_BYTES_W:
Diletant 161:efd949e8d536 42 case H_BYTES_R:
Diletant 161:efd949e8d536 43 case FLASH_READ_ALL:
Diletant 161:efd949e8d536 44 case FLASH_WRITE_ALL:
Diletant 161:efd949e8d536 45 EncodeStart(); EncodeAddress(); Encode16(device.user.response.code); EncodeMessage(); if (device.user.response.message == 0) EncodeParameters(); EncodeCRC();
Diletant 161:efd949e8d536 46 break;
Diletant 161:efd949e8d536 47 default: EncodeFail();
Diletant 161:efd949e8d536 48 }
Diletant 161:efd949e8d536 49 }
Diletant 161:efd949e8d536 50 }
Diletant 161:efd949e8d536 51
Diletant 161:efd949e8d536 52 void Encode8(uint8_t param){
Diletant 161:efd949e8d536 53 device.user.response.buffer.data[device.user.response.buffer.count] = param;
Diletant 161:efd949e8d536 54 device.user.response.buffer.count += 1;
Diletant 161:efd949e8d536 55
Diletant 161:efd949e8d536 56 sprintf(device.service.buffer," %2x\r\n", param); WriteConcole(); //Development message
Diletant 161:efd949e8d536 57 }
Diletant 161:efd949e8d536 58
Diletant 161:efd949e8d536 59 void Encode16(uint16_t param) {
Diletant 161:efd949e8d536 60 Encode8((param >> 8) & 0xff);
Diletant 161:efd949e8d536 61 Encode8(param & 0xff);
Diletant 161:efd949e8d536 62 }
Diletant 161:efd949e8d536 63
Diletant 161:efd949e8d536 64 void EncodeStart(void) {
Diletant 161:efd949e8d536 65 device.user.response.ready = 0; //Disable transmission
Diletant 161:efd949e8d536 66 device.user.response.buffer.count = 0; //Clear buffer
Diletant 161:efd949e8d536 67 Encode8(0xdd); //Write response header code
Diletant 161:efd949e8d536 68 }
Diletant 161:efd949e8d536 69
Diletant 161:efd949e8d536 70 void EncodeEnd(void) {
Diletant 161:efd949e8d536 71 device.user.response.enabled = 0; //Disable response overwrite
Diletant 161:efd949e8d536 72 device.user.response.ready = 1; //Enable transmission
Diletant 161:efd949e8d536 73 device.user.response.buffer.position = 0; //Reset transmitter
Diletant 161:efd949e8d536 74 }
Diletant 161:efd949e8d536 75
Diletant 161:efd949e8d536 76 void EncodeFail(void) {
Diletant 161:efd949e8d536 77 device.user.response.buffer.count = 0; //Clear buffer
Diletant 161:efd949e8d536 78 device.user.response.enabled = 0; //Disable response overwrite
Diletant 161:efd949e8d536 79 }
Diletant 161:efd949e8d536 80
Diletant 161:efd949e8d536 81 void EncodeAddress(void) {
Diletant 161:efd949e8d536 82 Encode8(device.user.address);
Diletant 161:efd949e8d536 83 }
Diletant 161:efd949e8d536 84
Diletant 161:efd949e8d536 85 void EncodeMessage(void) {
Diletant 161:efd949e8d536 86 Encode16(device.user.response.message);
Diletant 161:efd949e8d536 87 }
Diletant 161:efd949e8d536 88
Diletant 161:efd949e8d536 89 void EncodeParameters(void) {
Diletant 161:efd949e8d536 90 for (uint8_t i = 0; i < device.user.response.parametersCount; i++){
Diletant 161:efd949e8d536 91 uint8_t * b = (uint8_t *)device.user.response.parameters[i].ref;
Diletant 161:efd949e8d536 92 for (uint8_t j = 0; j < device.user.response.parameters[i].size; j++){
Diletant 161:efd949e8d536 93 Encode8(*b); b++;
Diletant 161:efd949e8d536 94 }
Diletant 161:efd949e8d536 95 }
Diletant 161:efd949e8d536 96 }
Diletant 161:efd949e8d536 97
Diletant 161:efd949e8d536 98 void EncodeCRC(void) {
Diletant 161:efd949e8d536 99 int16_t crc = 0;
Diletant 161:efd949e8d536 100 for (int i = 2; i < device.user.response.buffer.count; i++) crc += device.user.response.buffer.data[i];
Diletant 161:efd949e8d536 101 Encode16(crc);
Diletant 161:efd949e8d536 102 EncodeEnd();
Diletant 161:efd949e8d536 103 }
Diletant 161:efd949e8d536 104
Diletant 161:efd949e8d536 105 void EncodeDeviceMode(void) {
Diletant 161:efd949e8d536 106 uint8_t mode;
Diletant 161:efd949e8d536 107 if (device.latch.mode == DeviceLatch10kHz)
Diletant 161:efd949e8d536 108 mode = 1;
Diletant 161:efd949e8d536 109 else if (device.latch.mode == DeviceLatchMeander)
Diletant 161:efd949e8d536 110 mode = 2;
Diletant 161:efd949e8d536 111 else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaPS))
Diletant 161:efd949e8d536 112 mode = 3;
Diletant 161:efd949e8d536 113 else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaPS))
Diletant 161:efd949e8d536 114 mode = 4;
Diletant 161:efd949e8d536 115 else if ((device.latch.mode == DeviceLatchRS422) && (device.latch.format == DeviceLatchFormatDeltaBINS))
Diletant 161:efd949e8d536 116 mode = 5;
Diletant 161:efd949e8d536 117 else if ((device.latch.mode == DeviceLatchPin) && (device.latch.format == DeviceLatchFormatDeltaBINS))
Diletant 161:efd949e8d536 118 mode = 6;
Diletant 161:efd949e8d536 119 else
Diletant 161:efd949e8d536 120 mode = 0;
Diletant 161:efd949e8d536 121 Encode8(mode);
Diletant 161:efd949e8d536 122 }
Diletant 161:efd949e8d536 123
Diletant 161:efd949e8d536 124 void EncodeSysRgR(void) {
Diletant 161:efd949e8d536 125 uint16_t u16;
Diletant 161:efd949e8d536 126 //TODO
Diletant 161:efd949e8d536 127
Diletant 161:efd949e8d536 128 Encode16(u16);
Diletant 161:efd949e8d536 129 }
Diletant 161:efd949e8d536 130
Diletant 161:efd949e8d536 131 void EncodeBINSDiff(void) {
Diletant 161:efd949e8d536 132 //TODO
Diletant 161:efd949e8d536 133 }
Diletant 161:efd949e8d536 134
Diletant 161:efd949e8d536 135 void EncodeValidBINS(void) {
Diletant 161:efd949e8d536 136 //TODO
Diletant 161:efd949e8d536 137 }