Commit 43f91fb6411537add6b28aeae2f325edc95c5fbf

Authored by Imanol-Mikel Barba Sabariego
1 parent 20a8711d

--no commit message

DUREX Vendor Control/CommunicationProtocol.h
... ... @@ -9,6 +9,7 @@
9 9 #import <Foundation/Foundation.h>
10 10 #import "EMFramework.h"
11 11  
  12 +#define SLEEP_MS ((int)100)
12 13 #define MAX_STRING_LENGTH ((int)200)
13 14 #define MAX_RETRIES ((int)3)
14 15 #define MAX_PRODUCT_NAME_LENGTH ((int)64)
... ... @@ -22,10 +23,8 @@
22 23  
23 24 @interface CommunicationProtocol : NSObject
24 25  
25   --(Boolean) waitForMessageAvailableMobile: (Boolean) status;
26   --(Boolean) waitForMessageAvailableDevice: (Boolean) status;
27   --(Boolean) writeMessage: (NSString*) message;
28   --(NSString*) readMessage;
  26 +-(void) writeMessage: (NSString*) message;
  27 +-(void) readMessage;
29 28 -(Boolean) establishConnection;
30 29 -(Boolean) updateTime: (NSDateComponents*) date;
31 30 -(Boolean) updatePrice: (uint8_t) channel : (uint8_t) product : (uint8_t) eur : (uint8_t) cents;
... ...
DUREX Vendor Control/CommunicationProtocol.m
... ... @@ -12,6 +12,10 @@
12 12  
13 13 @property Boolean messageAvailableMobile;
14 14 @property Boolean messageAvailableDevice;
  15 +@property NSMutableString *message;
  16 +@property NSUInteger currentIndex;
  17 +@property NSUInteger remainingBytes;
  18 +@property NSInteger numPackets;
15 19  
16 20 @end
17 21  
... ... @@ -29,269 +33,284 @@
29 33 return shared;
30 34 }
31 35  
32   --(void) readMessageAvailableMobile
  36 +- (void) reportError : (NSString*) error
33 37 {
34   - [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
35   - {
36   - [self setMessageAvailableMobile:[readValue intValue]];
37   - if([self messageAvailableMobile])
38   - {
39   - NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile read: TRUE");
40   - }
41   - else
42   - {
43   - NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile read: FALSE");
44   - }
45   - }
46   - onFail:^(NSError *error)
47   - {
48   - NSLog(@"[CommunicationProtocol.m]: %@",error);
49   - }];
  38 +
50 39 }
51 40  
52   --(void) readMessageAvailableDevice
  41 +-(void) readMessage
53 42 {
54   - [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
55   - {
56   - [self setMessageAvailableDevice:[readValue intValue]];
57   - if([self messageAvailableDevice])
58   - {
59   - NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice read: TRUE");
60   - }
61   - else
62   - {
63   - NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice read: FALSE");
64   - }
65   - }
66   - onFail:^(NSError *error)
67   - {
68   - NSLog(@"[CommunicationProtocol.m]: %@",error);
69   - }];
  43 + self.numPackets = -1;
  44 + [self waitForMessage];
70 45 }
71 46  
72   --(Boolean) waitForMessageAvailableMobile: (Boolean) status
  47 +- (void) readNextFragment
73 48 {
74   - uint8_t retries = 0;
75   - [self readMessageAvailableMobile];
76   - while([self messageAvailableMobile] != status)
  49 + __block NSUInteger numBytes;
  50 + if(self.numPackets)
77 51 {
78   - [NSThread sleepForTimeInterval:5];
79   - [self readMessageAvailableMobile];
80   - if([self messageAvailableMobile] != status)
  52 + [[EMConnectionManager sharedManager] readResource:@"numBytes" onSuccess:^(id readValue)
81 53 {
82   - if(retries++ == MAX_RETRIES)
  54 + numBytes = [readValue unsignedCharValue];
  55 + NSLog(@"[CommunicationProtocol.m]: numBytes read: %d",numBytes);
  56 + [[EMConnectionManager sharedManager] readResource:@"data" onSuccess:^(id readValue)
83 57 {
84   - NSLog(@"[CommunicationProtocol.m]: Timeout while waiting for answer");
85   - return FALSE;
86   - }
87   - }
  58 + NSString *readData = [readValue substringToIndex:numBytes];
  59 + if([readValue length] < numBytes)
  60 + {
  61 + NSLog(@"[CommunicationProtocol.m]: WARNING: Device issued wrong numBytes, possible truncated message.");
  62 + }
  63 + [self.message appendString:readData];
  64 + NSLog(@"[CommunicationProtocol.m]: data read: %@",readData);
  65 + [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableDevice" onSuccess:^
  66 + {
  67 + NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice set to FALSE");
  68 + NSLog(@"[CommunicationProtocol.m]: packet read");
  69 + [self waitForMessage];
  70 + }onFail:^(NSError *error)
  71 + {
  72 + NSLog(@"[CommunicationProtocol.m]: On setMessageAvailableDevice to FALSE: %@",error);
  73 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  74 + }];
  75 + }onFail:^(NSError *error)
  76 + {
  77 + NSLog(@"[CommunicationProtocol.m]: On readData: %@",error);
  78 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  79 + }];
  80 + }onFail:^(NSError *error)
  81 + {
  82 + NSLog(@"[CommunicationProtocol.m]: On readNumBytes: %@",error);
  83 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  84 + }];
  85 + }
  86 + else
  87 + {
  88 + //processMessage
88 89 }
89   - return TRUE;
90 90 }
91 91  
92   --(Boolean) waitForMessageAvailableDevice: (Boolean) status
  92 +- (void) readNumPackets
93 93 {
94   - uint8_t retries = 0;
95   - [self readMessageAvailableDevice];
96   - while([self messageAvailableDevice] != status)
  94 + [[EMConnectionManager sharedManager] readResource:@"numPackets" onSuccess:^(id readValue)
97 95 {
98   - [NSThread sleepForTimeInterval:5];
99   - [self readMessageAvailableDevice];
100   - if([self messageAvailableDevice] != status)
101   - {
102   - if(retries++ == MAX_RETRIES)
103   - {
104   - NSLog(@"[CommunicationProtocol.m]: Timeout while waiting for answer");
105   - return FALSE;
106   - }
107   - }
108   - }
109   - return TRUE;
  96 + self.numPackets = [readValue unsignedCharValue];
  97 + NSLog(@"[CommunicationProtocol.m]: numPackets read: %d",self.numPackets);
  98 + [self readNextFragment];
  99 + }onFail:^(NSError *error)
  100 + {
  101 + NSLog(@"[CommunicationProtocol.m]: On readNumPackets: %@",error);
  102 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  103 + }];
110 104 }
111 105  
112   --(NSString*) readMessage
  106 +- (void) waitForMessage
113 107 {
114   - __block uint8_t numPackets = 1, numBytes; //HACK!
115   - __block NSMutableString *message = [[NSMutableString alloc] init];
116   - [message setString:@""];
117   - //if([self waitForMessageAvailableDevice:TRUE])
118   - if(1) //HACK!
119   - {
120   - [[EMConnectionManager sharedManager] readResource:@"numPackets" onSuccess:^(id readValue)
  108 + NSLog(@"[CommunicationProtocol.m]: Reading messageAvailable from device");
  109 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
  110 + {
  111 + [self setMessageAvailableDevice:[readValue intValue]];
  112 + if(![self messageAvailableDevice])
121 113 {
122   - numPackets = (uint8_t) [readValue unsignedCharValue];
123   - NSLog(@"[CommunicationProtocol.m]: numPackets read: %d",numPackets);
  114 + NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
  115 + [NSThread sleepForTimeInterval:SLEEP_MS];
  116 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
  117 + {
  118 + [self setMessageAvailableDevice:[readValue intValue]];
  119 + if(![self messageAvailableDevice])
  120 + {
  121 + NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
  122 + [NSThread sleepForTimeInterval:SLEEP_MS];
  123 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
  124 + {
  125 + [self setMessageAvailableDevice:[readValue intValue]];
  126 + if(![self messageAvailableDevice])
  127 + {
  128 + NSLog(@"[CommunicationProtocol.m]: Device not ready.");
  129 + NSLog(@"[CommunicationProtocol.m]: Timeout while expecting message");
  130 + }
  131 + else
  132 + {
  133 + if(self.numPackets == -1)
  134 + {
  135 + [self readNumPackets];
  136 + }
  137 + else
  138 + {
  139 + [self readNextFragment];
  140 + }
  141 + }
  142 + }onFail:^(NSError *error)
  143 + {
  144 + NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
  145 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  146 + }];
  147 + }
  148 + else
  149 + {
  150 + if(self.numPackets == -1)
  151 + {
  152 + [self readNumPackets];
  153 + }
  154 + else
  155 + {
  156 + [self readNextFragment];
  157 + }
  158 + }
  159 + }onFail:^(NSError *error)
  160 + {
  161 + NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
  162 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  163 + }];
124 164 }
125   - onFail:^(NSError *error)
  165 + else
126 166 {
127   - NSLog(@"[CommunicationProtocol.m]: %@",error);
128   - numPackets = 0;
129   - }];
130   - if(numPackets)
131   - {
132   - for(int i = 0; i < numPackets; i++)
133   - {
134   - //if([self waitForMessageAvailableDevice:TRUE])
135   - if(1)//HACK!
136   - {
137   - [[EMConnectionManager sharedManager] readResource:@"numBytes" onSuccess:^(id readValue)
138   - {
139   - numBytes = (uint8_t) [readValue unsignedCharValue];
140   - NSLog(@"[CommunicationProtocol.m]: numBytes read: %d",numBytes);
141   - }
142   - onFail:^(NSError *error)
143   - {
144   - NSLog(@"[CommunicationProtocol.m]: %@",error);
145   - numBytes = 0;
146   - }];
147   - if(numBytes)
148   - {
149   - [[EMConnectionManager sharedManager] readResource:@"data" onSuccess:^(id readValue)
150   - {
151   - if([readValue length] < numBytes)
152   - {
153   - NSLog(@"[CommunicationProtocol.m]: WARNING: Device issued wrong numBytes, possible truncated message.");
154   - }
155   - [message appendString:[readValue substringToIndex:numBytes]];
156   - NSLog(@"[CommunicationProtocol.m]: data read: %@",message);
157   - }
158   - onFail:^(NSError *error)
159   - {
160   - NSLog(@"[CommunicationProtocol.m]: %@",error);
161   - }];
162   - }
163   - [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableDevice" onSuccess:^
164   - {
165   - NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice set to FALSE");
166   - NSLog(@"[CommunicationProtocol.m]: packet read");
167   - }
168   - onFail:^(NSError *error)
169   - {
170   - NSLog(@"[CommunicationProtocol.m]: %@",error);
171   - }
172   - ];
173   - }
174   - else
175   - {
176   - NSLog(@"[CommunicationProtocol.m]: Error, resetting message");
177   - [message setString:@""];
178   - }
179   - }
180   - }
181   - }
182   - NSLog(@"[CommunicationProtocol.m]: Message received: %@",message);
183   - return message;
  167 + if(self.numPackets == -1)
  168 + {
  169 + [self readNumPackets];
  170 + }
  171 + else
  172 + {
  173 + [self readNextFragment];
  174 + }
  175 + }
  176 + }onFail:^(NSError *error)
  177 + {
  178 + NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
  179 + [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
  180 + }];
184 181 }
185 182  
186   --(Boolean) writeMessage: (NSString*) message
  183 +-(void) writeMessage: (NSString*) message
187 184 {
188   - unsigned long remainingBytes = [message length];
189   - uint8_t numBytes, current_index = 0;
190   - __block Boolean status = TRUE; //HACK
191   - __block Boolean blockCompleted = TRUE; //HACK!
192   - [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableMobile" onSuccess:^
193   - {
194   - status = TRUE;
195   - NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to FALSE");
196   - blockCompleted = TRUE;
197   - }
198   - onFail:^(NSError *error)
199   - {
200   - NSLog(@"[CommunicationProtocol.m]: %@",error);
201   - status = FALSE;
202   - blockCompleted = TRUE;
203   - }];
204   - while(blockCompleted != TRUE)
205   - {
206   - [NSThread sleepForTimeInterval:1];
207   - }
208   - NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile write block completed");
209   - blockCompleted = FALSE;
  185 + NSLog(@"[CommunicationProtocol.m]: Sending message: %@",message);
  186 + [self setMessage:[NSMutableString stringWithString:message]];
  187 + [self setRemainingBytes:[message length]];
  188 + [self setCurrentIndex:0];
210 189 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)([message length]/MAX_STRING_LENGTH)+1] toResource:@"numPackets" onSuccess:^
211 190 {
212   - status = TRUE;
213 191 NSLog(@"[CommunicationProtocol.m]: numPackets set to %u",([message length]/MAX_STRING_LENGTH) + 1);
214   - }
215   - onFail:^(NSError *error)
  192 + [self sendNextFragment];
  193 + }onFail:^(NSError *error)
216 194 {
217   - NSLog(@"[CommunicationProtocol.m]: %@",error);
218   - status = FALSE;
219   - }
220   - ];
221   - NSLog(@"[CommunicationProtocol.m]: status is: %d",status);
222   - if(status != FALSE)
  195 + NSLog(@"[CommunicationProtocol.m]: On setNumPackets: %@",error);
  196 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  197 + }];
  198 +}
  199 +
  200 +- (void) sendNextFragment
  201 +{
  202 + NSLog(@"[CommunicationProtocol.m]: Sending next fragment");
  203 + [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableMobile" onSuccess:^
223 204 {
224   - NSLog(@"[CommunicationProtocol.m]: Carrying on after numPackets...");
225   - while(remainingBytes)
  205 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to FALSE");
  206 + NSUInteger numBytes;
  207 + if(self.remainingBytes)
226 208 {
227   - if(![self waitForMessageAvailableMobile:FALSE])
228   - {
229   - status = FALSE;
230   - break;
231   - }
232   - NSLog(@"[CommunicationProtocol.m]: Device is ready for next packet");
233   - if(remainingBytes > MAX_STRING_LENGTH)
  209 + if(self.remainingBytes > MAX_STRING_LENGTH)
234 210 {
235 211 numBytes = MAX_STRING_LENGTH;
236   - remainingBytes -= MAX_STRING_LENGTH;
  212 + self.remainingBytes -= MAX_STRING_LENGTH;
237 213 }
238 214 else
239 215 {
240   - numBytes = remainingBytes;
241   - remainingBytes = 0;
  216 + numBytes = self.remainingBytes;
  217 + self.remainingBytes = 0;
242 218 }
243 219 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)numBytes] toResource:@"numBytes" onSuccess:^
244 220 {
245 221 NSLog(@"[CommunicationProtocol.m]: numBytes set to %d", numBytes);
246   - status = TRUE;
247   - }
248   - onFail:^(NSError *error)
  222 + NSString *data = [self.message substringWithRange:NSMakeRange(self.currentIndex, numBytes)];
  223 + self.currentIndex += numBytes;
  224 + [[EMConnectionManager sharedManager] writeValue:data toResource:@"data" onSuccess:^
  225 + {
  226 + NSLog(@"[CommunicationProtocol.m]: data set to: %@",data);
  227 + [[EMConnectionManager sharedManager] writeValue:@"1" toResource:@"messageAvailableMobile" onSuccess:^
  228 + {
  229 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to TRUE");
  230 + NSLog(@"[CommunicationProtocol.m]: Packet written");
  231 + [self readACK];
  232 + }onFail:^(NSError *error)
  233 + {
  234 + NSLog(@"[CommunicationProtocol.m]: On setMessageAvailable to TRUE: %@",error);
  235 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  236 + }];
  237 + }onFail:^(NSError *error)
  238 + {
  239 + NSLog(@"[CommunicationProtocol.m]: On setData: %@",error);
  240 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  241 + }];
  242 + }onFail:^(NSError *error)
249 243 {
250   - NSLog(@"[CommunicationProtocol.m]: %@",error);
251   - status = FALSE;
252   - }
253   - ];
254   - if(status != FALSE)
  244 + NSLog(@"[CommunicationProtocol.m]: On setNumBytes: %@",error);
  245 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  246 + }];
  247 + }
  248 + else
  249 + {
  250 + [self readMessage];
  251 + }
  252 +
  253 + }onFail:^(NSError *error)
  254 + {
  255 + NSLog(@"[CommunicationProtocol.m]: On setMessageAvailableMobile to FALSE: %@",error);
  256 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  257 + }];
  258 +}
  259 +
  260 +- (void) readACK
  261 +{
  262 + NSLog(@"[CommunicationProtocol.m]: Reading ACK from device");
  263 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
  264 + {
  265 + [self setMessageAvailableMobile:[readValue intValue]];
  266 + if([self messageAvailableMobile])
  267 + {
  268 + NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
  269 + [NSThread sleepForTimeInterval:SLEEP_MS];
  270 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
255 271 {
256   - NSLog(@"[CommunicationProtocol.m]: Carrying on after numBytes...");
257   - NSString *data = [message substringWithRange:NSMakeRange(current_index, numBytes)];
258   - current_index += numBytes;
259   - [[EMConnectionManager sharedManager] writeValue:data toResource:@"data" onSuccess:^
260   - {
261   - NSLog(@"[CommunicationProtocol.m]: data set to: %@",data);
262   - status = TRUE;
263   - }
264   - onFail:^(NSError *error)
265   - {
266   - NSLog(@"[CommunicationProtocol.m]: %@",error);
267   - status = FALSE;
268   - }
269   - ];
270   - if(status != FALSE)
  272 + [self setMessageAvailableMobile:[readValue intValue]];
  273 + if([self messageAvailableMobile])
271 274 {
272   - NSLog(@"[CommunicationProtocol.m]: Carrying on after data...");
273   - [[EMConnectionManager sharedManager] writeValue:@"1" toResource:@"messageAvailableMobile" onSuccess:^
274   - {
275   - status = TRUE;
276   - NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to TRUE");
277   - NSLog(@"[CommunicationProtocol.m]: Packet written");
278   - }
279   - onFail:^(NSError *error)
280   - {
281   - NSLog(@"[CommunicationProtocol.m]: %@",error);
282   - status = FALSE;
283   - }
284   - ];
285   - NSLog(@"[CommunicationProtocol.m]: Carrying on after messageAvailableMobile...");
  275 + NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
  276 + [NSThread sleepForTimeInterval:SLEEP_MS];
  277 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
  278 + {
  279 + [self setMessageAvailableMobile:[readValue intValue]];
  280 + if([self messageAvailableMobile])
  281 + {
  282 + NSLog(@"[CommunicationProtocol.m]: Device not ready.");
  283 + NSLog(@"[CommunicationProtocol.m]: Timeout while expecting ACK");
  284 + }
  285 + else
  286 + {
  287 + [self sendNextFragment];
  288 + }
  289 + }onFail:^(NSError *error)
  290 + {
  291 + NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
  292 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  293 + }];
286 294 }
287   - }
  295 + else
  296 + {
  297 + [self sendNextFragment];
  298 + }
  299 + }onFail:^(NSError *error)
  300 + {
  301 + NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
  302 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  303 + }];
288 304 }
289   - }
290   - if(![self waitForMessageAvailableMobile:FALSE])
  305 + else
  306 + {
  307 + [self sendNextFragment];
  308 + }
  309 + }onFail:^(NSError *error)
291 310 {
292   - NSLog(@"[CommunicationProtocol.m]: Device has processed the message");
293   - }
294   - return status;
  311 + NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
  312 + [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
  313 + }];
295 314 }
296 315  
297 316 -(Boolean) establishConnection
... ...
DUREX Vendor Control/DUREX Vendor Control.xcodeproj/project.xcworkspace/xcuserdata/imanol.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type
DUREX Vendor Control/DUREX Vendor Control.xcodeproj/xcuserdata/imanol.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
... ... @@ -74,12 +74,12 @@
74 74 ignoreCount = "0"
75 75 continueAfterRunningActions = "No"
76 76 filePath = "CommunicationProtocol.m"
77   - timestampString = "432263020.427289"
  77 + timestampString = "433360607.314289"
78 78 startingColumnNumber = "9223372036854775807"
79 79 endingColumnNumber = "9223372036854775807"
80   - startingLineNumber = "362"
81   - endingLineNumber = "362"
82   - landmarkName = "-readSensorData"
  80 + startingLineNumber = "363"
  81 + endingLineNumber = "363"
  82 + landmarkName = "-readNextFragment"
83 83 landmarkType = "5">
84 84 </BreakpointContent>
85 85 </BreakpointProxy>
... ... @@ -90,12 +90,12 @@
90 90 ignoreCount = "0"
91 91 continueAfterRunningActions = "No"
92 92 filePath = "CommunicationProtocol.m"
93   - timestampString = "432263020.427289"
  93 + timestampString = "433360607.314289"
94 94 startingColumnNumber = "9223372036854775807"
95 95 endingColumnNumber = "9223372036854775807"
96   - startingLineNumber = "361"
97   - endingLineNumber = "361"
98   - landmarkName = "-readSensorData"
  96 + startingLineNumber = "362"
  97 + endingLineNumber = "362"
  98 + landmarkName = "-readNextFragment"
99 99 landmarkType = "5">
100 100 </BreakpointContent>
101 101 </BreakpointProxy>
... ... @@ -106,12 +106,12 @@
106 106 ignoreCount = "0"
107 107 continueAfterRunningActions = "No"
108 108 filePath = "CommunicationProtocol.m"
109   - timestampString = "432263020.427289"
  109 + timestampString = "433360607.314289"
110 110 startingColumnNumber = "9223372036854775807"
111 111 endingColumnNumber = "9223372036854775807"
112   - startingLineNumber = "380"
113   - endingLineNumber = "380"
114   - landmarkName = "-readSensorData"
  112 + startingLineNumber = "381"
  113 + endingLineNumber = "381"
  114 + landmarkName = "-readNextFragment"
115 115 landmarkType = "5">
116 116 </BreakpointContent>
117 117 </BreakpointProxy>
... ... @@ -201,22 +201,6 @@
201 201 shouldBeEnabled = "No"
202 202 ignoreCount = "0"
203 203 continueAfterRunningActions = "No"
204   - filePath = "CommunicationProtocol.m"
205   - timestampString = "432263020.427289"
206   - startingColumnNumber = "9223372036854775807"
207   - endingColumnNumber = "9223372036854775807"
208   - startingLineNumber = "213"
209   - endingLineNumber = "213"
210   - landmarkName = "-writeMessage:"
211   - landmarkType = "5">
212   - </BreakpointContent>
213   - </BreakpointProxy>
214   - <BreakpointProxy
215   - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
216   - <BreakpointContent
217   - shouldBeEnabled = "No"
218   - ignoreCount = "0"
219   - continueAfterRunningActions = "No"
220 204 filePath = "MenuTableViewController.m"
221 205 timestampString = "432263020.427289"
222 206 startingColumnNumber = "9223372036854775807"
... ... @@ -522,11 +506,11 @@
522 506 ignoreCount = "0"
523 507 continueAfterRunningActions = "No"
524 508 filePath = "DateRangePickerViewController.m"
525   - timestampString = "432833512.682389"
  509 + timestampString = "433360688.202825"
526 510 startingColumnNumber = "9223372036854775807"
527 511 endingColumnNumber = "9223372036854775807"
528   - startingLineNumber = "131"
529   - endingLineNumber = "131"
  512 + startingLineNumber = "133"
  513 + endingLineNumber = "133"
530 514 landmarkName = "-toggleFromDate:"
531 515 landmarkType = "5">
532 516 </BreakpointContent>
... ... @@ -538,11 +522,11 @@
538 522 ignoreCount = "0"
539 523 continueAfterRunningActions = "No"
540 524 filePath = "DateRangePickerViewController.m"
541   - timestampString = "432833512.682389"
  525 + timestampString = "433360688.202825"
542 526 startingColumnNumber = "9223372036854775807"
543 527 endingColumnNumber = "9223372036854775807"
544   - startingLineNumber = "155"
545   - endingLineNumber = "155"
  528 + startingLineNumber = "159"
  529 + endingLineNumber = "159"
546 530 landmarkName = "-toggleToDate:"
547 531 landmarkType = "5">
548 532 </BreakpointContent>
... ... @@ -554,11 +538,11 @@
554 538 ignoreCount = "0"
555 539 continueAfterRunningActions = "No"
556 540 filePath = "DateRangePickerViewController.m"
557   - timestampString = "432833512.682389"
  541 + timestampString = "433360688.202825"
558 542 startingColumnNumber = "9223372036854775807"
559 543 endingColumnNumber = "9223372036854775807"
560   - startingLineNumber = "154"
561   - endingLineNumber = "154"
  544 + startingLineNumber = "158"
  545 + endingLineNumber = "158"
562 546 landmarkName = "-toggleToDate:"
563 547 landmarkType = "5">
564 548 </BreakpointContent>
... ... @@ -602,14 +586,28 @@
602 586 ignoreCount = "0"
603 587 continueAfterRunningActions = "No"
604 588 filePath = "DateRangePickerViewController.m"
605   - timestampString = "432833363.738094"
  589 + timestampString = "433360688.202825"
606 590 startingColumnNumber = "9223372036854775807"
607 591 endingColumnNumber = "9223372036854775807"
608   - startingLineNumber = "102"
609   - endingLineNumber = "102"
610   - landmarkName = "-resizeViewHeight::"
  592 + startingLineNumber = "141"
  593 + endingLineNumber = "141"
  594 + landmarkName = "-toggleFromDate:"
611 595 landmarkType = "5">
612 596 </BreakpointContent>
613 597 </BreakpointProxy>
  598 + <BreakpointProxy
  599 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  600 + <BreakpointContent
  601 + shouldBeEnabled = "No"
  602 + ignoreCount = "0"
  603 + continueAfterRunningActions = "No"
  604 + filePath = "CommunicationProtocol.m"
  605 + timestampString = "433434179.370975"
  606 + startingColumnNumber = "9223372036854775807"
  607 + endingColumnNumber = "9223372036854775807"
  608 + startingLineNumber = "21"
  609 + endingLineNumber = "21">
  610 + </BreakpointContent>
  611 + </BreakpointProxy>
614 612 </Breakpoints>
615 613 </Bucket>
... ...
DUREX Vendor Control/DateRangePickerViewController.m
... ... @@ -11,6 +11,7 @@
11 11 @interface DateRangePickerViewController ()
12 12  
13 13 @property uint8_t isExtended;
  14 +@property NSUInteger currentHeight;
14 15  
15 16 @end
16 17  
... ... @@ -40,6 +41,8 @@
40 41  
41 42 [self setIsExtended:0];
42 43  
  44 + [self setCurrentHeight:[self scrollView].frame.size.height];
  45 +
43 46 [super viewDidLoad];
44 47 // Do any additional setup after loading the view from its nib.
45 48 }
... ... @@ -97,19 +100,19 @@
97 100 [UIView commitAnimations];
98 101 }
99 102  
100   -- (void) resizeViewHeight : (UIView*) view : (NSInteger) height
  103 +- (void) resizeViewHeight : (UIView*) view : (NSInteger) height : (Boolean) ignoreHeight
101 104 {
102 105 CGRect screenRect = [[UIScreen mainScreen] bounds];
103 106 CGFloat screenHeight = screenRect.size.height;
104   - if((view.frame.size.height + height > screenHeight) && (height > 0))
  107 + if((height > screenHeight) && !ignoreHeight)
105 108 {
106 109 NSLog(@"[DateRangePickerViewController.m]: Screen height limit reached");
107 110 }
108   - else if(((height < 0) && ([self isExtended] != 0)) || ((height > 0) && ([self isExtended] != 2)))
  111 + else
109 112 {
110 113 [UIView beginAnimations:nil context:NULL];
111 114 [UIView setAnimationDuration:0.5];
112   - view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width,view.frame.size.height + height);
  115 + view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width,height);
113 116 [UIView commitAnimations];
114 117 }
115 118 if(height < 0)
... ... @@ -120,8 +123,7 @@
120 123 {
121 124 [self setIsExtended: [self isExtended] + 1];
122 125 }
123   - [self.scrollView setContentSize:CGSizeMake([self scrolledView].frame.size.width,[self scrolledView].frame.size.height)];
124   - NSLog(@"ScrollView height: %f",[self scrollView].frame.size.height);
  126 + [self.scrollView setContentSize:CGSizeMake([self scrolledView].frame.size.width,[self currentHeight])];
125 127 }
126 128  
127 129 - (IBAction)toggleFromDate:(id)sender
... ... @@ -135,7 +137,8 @@
135 137 [self moveDown:[self toDate] :height];
136 138 [self moveDown:[self doneButton] :height];
137 139 [self moveDown:[self toLabel] :height];
138   - [self resizeViewHeight : [self scrollView] : height + 20];
  140 + [self setCurrentHeight:[self currentHeight] + height + 20];
  141 + [self resizeViewHeight : [self scrollView] : [self currentHeight] : FALSE];
139 142 }
140 143 else
141 144 {
... ... @@ -145,7 +148,8 @@
145 148 [self moveUp:[self toDate] :height];
146 149 [self moveUp:[self doneButton] :height];
147 150 [self moveUp:[self toLabel] :height];
148   - [self resizeViewHeight : [self scrollView] : - height - 20];
  151 + [self setCurrentHeight:[self currentHeight] - height - 20];
  152 + [self resizeViewHeight : [self scrollView] : [self currentHeight] : FALSE];
149 153 }
150 154 }
151 155 - (IBAction)toggleToDate:(id)sender
... ... @@ -156,14 +160,16 @@
156 160 [[self toDate] setEnabled:TRUE];
157 161 [[self toDate] setHidden:FALSE];
158 162 [self moveDown:[self doneButton] :height];
159   - [self resizeViewHeight : [self scrollView] : height + 20];
  163 + [self setCurrentHeight:[self currentHeight] + height + 20];
  164 + [self resizeViewHeight : [self scrollView] : [self currentHeight] : FALSE];
160 165 }
161 166 else
162 167 {
163 168 [[self toDate] setEnabled:FALSE];
164 169 [[self toDate] setHidden:TRUE];
165 170 [self moveUp:[self doneButton] :height];
166   - [self resizeViewHeight : [self scrollView] : - height - 20];
  171 + [self setCurrentHeight:[self currentHeight] - height - 20];
  172 + [self resizeViewHeight : [self scrollView] : [self currentHeight] : FALSE];
167 173 }
168 174 }
169 175  
... ...
DUREX Vendor Control/MenuTableViewController.m
... ... @@ -333,7 +333,8 @@
333 333 {
334 334 if ([[EMConnectionManager sharedManager] connectionState] == EMConnectionStateDisrupted)
335 335 {
336   - [[self navigationController] popToRootViewControllerAnimated:YES];
  336 + UIViewController *previous = [[[self navigationController] viewControllers] objectAtIndex:[[[self navigationController] viewControllers] count]-2];
  337 + [[self navigationController] popToViewController:previous animated:YES];
337 338 }
338 339 }
339 340 }
... ...
  1 +TESTS:
  2 +- Test disconnection
  3 +
1 4 BUGS:
2 5 - On date change, response is overwritten by previous query, trimming needed according to numBytes
3 6  
4 7 TODO:
5   -
6   -- Reimplement protocol with async pattern
7   -- Handle disconnects properly
  8 +- processMessage with Delegate
  9 +- Error reporting function
8 10 - Incident class
9 11 - Incident parser
10 12 - A3 command
  13 +- BYE command
11 14 - Channels and codes to 2 ciphers
12 15 - Add landscape layout and inverted layout
13 16 - Month/Year headers on sale list
... ...