102 delete oldConfig; |
102 delete oldConfig; |
103 } |
103 } |
104 |
104 |
105 void cDriverPICCtl::SignalHandler(int signal) |
105 void cDriverPICCtl::SignalHandler(int signal) |
106 { |
106 { |
107 uint8_t i; |
107 // uint8_t i; |
108 |
108 |
109 // read all available data |
109 // read all available data |
110 while (instance->port->ReadData(&buf[buf_pos])) |
110 while (instance->port->ReadData(&buf[buf_pos]) > 0) |
111 { |
111 { |
112 // search for SYNC byte |
112 // search for SYNC byte |
113 if ((buf[buf_pos] == CMD_SYNC_RECV) && (!buf_flag_escape)) |
113 if ((buf[buf_pos] == CMD_SYNC_RECV) && (!buf_flag_escape)) |
114 { |
114 { |
115 if (buf_cmd_start != 255) |
115 if (buf_cmd_start != 255) |
116 { |
116 { |
117 // bytes = buf_cmd_start - buf_pos |
117 // bytes = buf_cmd_start - buf_pos |
118 syslog(LOG_INFO, "PICCtl received a malformed packet. Scrapped xxx bytes\n"); |
118 syslog(LOG_INFO, "PICCtl received a malformed packet. Scrapped xxx bytes\n"); |
119 buf_cmd_start = 0; |
|
120 buf_pos = 0; |
119 buf_pos = 0; |
121 buf[buf_pos] = CMD_SYNC_RECV; |
120 buf[buf_pos] = CMD_SYNC_RECV; |
122 } |
121 } |
123 buf_cmd_start = buf_pos; |
122 buf_cmd_start = buf_pos; |
124 } |
123 } |
133 buf_flag_escape = false; |
132 buf_flag_escape = false; |
134 |
133 |
135 /* printf("buf: "); |
134 /* printf("buf: "); |
136 for (i=1; i<=buf_pos; i++) { printf("0x%02x ",buf[i]);} |
135 for (i=1; i<=buf_pos; i++) { printf("0x%02x ",buf[i]);} |
137 printf("\n");*/ |
136 printf("\n");*/ |
|
137 |
|
138 buf_pos++; |
138 |
139 |
139 // we need to check for a valid packet... |
140 // we need to check for a valid packet... |
140 if (buf_pos >=CMD_DATA_START) |
141 if (buf_pos >= CMD_DATA_START) |
141 { |
142 { |
142 // if we recieved a valid packet: start decoding |
143 // if we recieved a valid packet: start decoding |
143 if (buf[CMD_HDR_LENGTH+1] == (buf_pos - CMD_DATA_START)) |
144 if (buf[CMD_HDR_LENGTH+1] == (buf_pos - CMD_DATA_START)) |
144 { |
145 { |
145 instance->DecodeCmd(&buf[buf_cmd_start],(buf_pos)); |
146 instance->DecodeCmd(&buf[buf_cmd_start],buf_pos); |
146 buf_pos = 0; |
147 buf_pos = 0; |
147 buf_cmd_start = 0; |
148 buf_cmd_start = 255; |
148 } |
149 } |
149 } |
150 } |
150 |
151 |
151 buf_pos++; |
|
152 printf ("still captured in while-loop\n"); |
|
153 |
|
154 } |
152 } |
155 } |
153 } |
156 |
154 |
157 |
155 |
158 void cDriverPICCtl::DecodeCmd(uint8_t * cmd, uint8_t len) |
156 void cDriverPICCtl::DecodeCmd(uint8_t * cmd, uint8_t len) |
159 { |
157 { |
160 uint8_t i; |
158 /* uint8_t i; |
161 |
|
162 printf("cmd(%2d): ",len); |
159 printf("cmd(%2d): ",len); |
163 for (i=0; i<len; i++) { printf("0x%02x ",cmd[i]);} |
160 for (i=0; i<len; i++) { printf("0x%02x ",cmd[i]);} |
164 printf("\n"); |
161 printf("\n");*/ |
165 |
162 |
166 switch (cmd[CMD_HDR_COMMAND]) |
163 switch (cmd[CMD_HDR_COMMAND]) |
167 { |
164 { |
168 case CMD_SYS_ACK: ack_flag = true; |
165 case CMD_SYS_ACK: ack_flag = true; |
169 printf ("ack_!\n"); |
|
170 break; |
166 break; |
171 |
167 |
172 case CMD_SYS_IR: printf(" Incoming Key-Event 0x%02x (Source 0x%02x)\n",cmd[CMD_DATA_START+1],cmd[CMD_DATA_START]); |
168 case CMD_SYS_IR: printf(" Incoming Key-Event 0x%02x (Source 0x%02x)\n",cmd[CMD_DATA_START+1],cmd[CMD_DATA_START]); |
173 break; |
169 break; |
174 |
170 |