Blame view

DUREX Vendor Control/CommunicationProtocol.m 17.7 KB
Imanol-Mikel Barba Sabariego authored
1
2
3
4
5
6
7
8
9
10
11
12
//
//  CommunicationProtocol.m
//  DUREX Vendor Control
//
//  Created by Imanol Barba on 5/23/14.
//  Copyright (c) 2014 Emmoco. All rights reserved.
//

#import "CommunicationProtocol.h"

@interface CommunicationProtocol ()
Imanol-Mikel Barba Sabariego authored
13
14
@property Boolean messageAvailableMobile;
@property Boolean messageAvailableDevice;
Imanol-Mikel Barba Sabariego authored
15
16
17
18
@property NSMutableString *message;
@property NSUInteger currentIndex;
@property NSUInteger remainingBytes;
@property NSInteger numPackets;
Imanol-Mikel Barba Sabariego authored
19
Imanol-Mikel Barba Sabariego authored
20
21
22
23
@end

@implementation CommunicationProtocol
Imanol-Mikel Barba Sabariego authored
24
25
+ (id)sharedProtocol
{
Imanol-Mikel Barba Sabariego authored
26
27
28
29
    static CommunicationProtocol *shared = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shared = [[self alloc] init];
Imanol-Mikel Barba Sabariego authored
30
31
        [shared setMessageAvailableDevice:FALSE];
        [shared setMessageAvailableMobile:FALSE];
Imanol-Mikel Barba Sabariego authored
32
33
34
35
    });
    return shared;
}
Imanol-Mikel Barba Sabariego authored
36
- (void) reportError : (NSString*) error
Imanol-Mikel Barba Sabariego authored
37
{
Imanol-Mikel Barba Sabariego authored
38
Imanol-Mikel Barba Sabariego authored
39
40
}
Imanol-Mikel Barba Sabariego authored
41
-(void) readMessage
Imanol-Mikel Barba Sabariego authored
42
{
Imanol-Mikel Barba Sabariego authored
43
44
    self.numPackets = -1;
    [self waitForMessage];
Imanol-Mikel Barba Sabariego authored
45
46
}
Imanol-Mikel Barba Sabariego authored
47
- (void) readNextFragment
Imanol-Mikel Barba Sabariego authored
48
{
Imanol-Mikel Barba Sabariego authored
49
50
    __block NSUInteger numBytes;
    if(self.numPackets)
Imanol-Mikel Barba Sabariego authored
51
    {
Imanol-Mikel Barba Sabariego authored
52
        [[EMConnectionManager sharedManager] readResource:@"numBytes" onSuccess:^(id readValue)
Imanol-Mikel Barba Sabariego authored
53
        {
Imanol-Mikel Barba Sabariego authored
54
55
56
            numBytes = [readValue unsignedCharValue];
            NSLog(@"[CommunicationProtocol.m]: numBytes read: %d",numBytes);
            [[EMConnectionManager sharedManager] readResource:@"data" onSuccess:^(id readValue)
Imanol-Mikel Barba Sabariego authored
57
            {
Imanol-Mikel Barba Sabariego authored
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
                NSString *readData = [readValue substringToIndex:numBytes];
                if([readValue length] < numBytes)
                {
                    NSLog(@"[CommunicationProtocol.m]: WARNING: Device issued wrong numBytes, possible truncated message.");
                }
                [self.message appendString:readData];
                NSLog(@"[CommunicationProtocol.m]: data read: %@",readData);
                [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableDevice" onSuccess:^
                {
                    NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice set to FALSE");
                    NSLog(@"[CommunicationProtocol.m]: packet read");
                    [self waitForMessage];
                }onFail:^(NSError *error)
                {
                    NSLog(@"[CommunicationProtocol.m]: On setMessageAvailableDevice to FALSE: %@",error);
                    [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
                }];
            }onFail:^(NSError *error)
            {
                NSLog(@"[CommunicationProtocol.m]: On readData: %@",error);
                [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
            }];
        }onFail:^(NSError *error)
        {
            NSLog(@"[CommunicationProtocol.m]: On readNumBytes: %@",error);
            [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
        }];
    }
    else
    {
        //processMessage
Imanol-Mikel Barba Sabariego authored
89
90
91
    }
}
Imanol-Mikel Barba Sabariego authored
92
- (void) readNumPackets
Imanol-Mikel Barba Sabariego authored
93
{
Imanol-Mikel Barba Sabariego authored
94
    [[EMConnectionManager sharedManager] readResource:@"numPackets" onSuccess:^(id readValue)
Imanol-Mikel Barba Sabariego authored
95
    {
Imanol-Mikel Barba Sabariego authored
96
97
98
99
100
101
102
103
        self.numPackets = [readValue unsignedCharValue];
        NSLog(@"[CommunicationProtocol.m]: numPackets read: %d",self.numPackets);
        [self readNextFragment];
    }onFail:^(NSError *error)
    {
        NSLog(@"[CommunicationProtocol.m]: On readNumPackets: %@",error);
        [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
    }];
Imanol-Mikel Barba Sabariego authored
104
105
}
Imanol-Mikel Barba Sabariego authored
106
- (void) waitForMessage
Imanol-Mikel Barba Sabariego authored
107
{
Imanol-Mikel Barba Sabariego authored
108
109
110
111
112
    NSLog(@"[CommunicationProtocol.m]: Reading messageAvailable from device");
    [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
     {
         [self setMessageAvailableDevice:[readValue intValue]];
         if(![self messageAvailableDevice])
Imanol-Mikel Barba Sabariego authored
113
         {
Imanol-Mikel Barba Sabariego authored
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
             NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
             [NSThread sleepForTimeInterval:SLEEP_MS];
             [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
              {
                  [self setMessageAvailableDevice:[readValue intValue]];
                  if(![self messageAvailableDevice])
                  {
                      NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
                      [NSThread sleepForTimeInterval:SLEEP_MS];
                      [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
                       {
                           [self setMessageAvailableDevice:[readValue intValue]];
                           if(![self messageAvailableDevice])
                           {
                               NSLog(@"[CommunicationProtocol.m]: Device not ready.");
                               NSLog(@"[CommunicationProtocol.m]: Timeout while expecting message");
                           }
                           else
                           {
                               if(self.numPackets == -1)
                               {
                                   [self readNumPackets];
                               }
                               else
                               {
                                   [self readNextFragment];
                               }
                           }
                       }onFail:^(NSError *error)
                       {
                           NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
                           [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
                       }];
                  }
                  else
                  {
                      if(self.numPackets == -1)
                      {
                          [self readNumPackets];
                      }
                      else
                      {
                          [self readNextFragment];
                      }
                  }
              }onFail:^(NSError *error)
              {
                  NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
                  [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
              }];
Imanol-Mikel Barba Sabariego authored
164
         }
Imanol-Mikel Barba Sabariego authored
165
         else
Imanol-Mikel Barba Sabariego authored
166
         {
Imanol-Mikel Barba Sabariego authored
167
168
169
170
171
172
173
174
175
176
177
178
179
180
             if(self.numPackets == -1)
             {
                 [self readNumPackets];
             }
             else
             {
                 [self readNextFragment];
             }
         }
     }onFail:^(NSError *error)
     {
         NSLog(@"[CommunicationProtocol.m]: On waitForMessage: %@",error);
         [self reportError:[NSString stringWithFormat:@"Error occurred while reading answer from device: %@",[error localizedDescription]]];
     }];
Imanol-Mikel Barba Sabariego authored
181
182
}
Imanol-Mikel Barba Sabariego authored
183
-(void) writeMessage: (NSString*) message
Imanol-Mikel Barba Sabariego authored
184
{
Imanol-Mikel Barba Sabariego authored
185
186
187
188
    NSLog(@"[CommunicationProtocol.m]: Sending message: %@",message);
    [self setMessage:[NSMutableString stringWithString:message]];
    [self setRemainingBytes:[message length]];
    [self setCurrentIndex:0];
Imanol-Mikel Barba Sabariego authored
189
190
    [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)([message length]/MAX_STRING_LENGTH)+1] toResource:@"numPackets" onSuccess:^
     {
Imanol-Mikel Barba Sabariego authored
191
         NSLog(@"[CommunicationProtocol.m]: numPackets set to %u",([message length]/MAX_STRING_LENGTH) + 1);
Imanol-Mikel Barba Sabariego authored
192
193
         [self sendNextFragment];
     }onFail:^(NSError *error)
Imanol-Mikel Barba Sabariego authored
194
     {
Imanol-Mikel Barba Sabariego authored
195
196
197
198
199
200
201
202
203
         NSLog(@"[CommunicationProtocol.m]: On setNumPackets: %@",error);
         [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
     }];
}

- (void) sendNextFragment
{
    NSLog(@"[CommunicationProtocol.m]: Sending next fragment");
    [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableMobile" onSuccess:^
Imanol-Mikel Barba Sabariego authored
204
    {
Imanol-Mikel Barba Sabariego authored
205
206
207
        NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to FALSE");
        NSUInteger numBytes;
        if(self.remainingBytes)
Imanol-Mikel Barba Sabariego authored
208
        {
Imanol-Mikel Barba Sabariego authored
209
            if(self.remainingBytes > MAX_STRING_LENGTH)
Imanol-Mikel Barba Sabariego authored
210
211
            {
                numBytes = MAX_STRING_LENGTH;
Imanol-Mikel Barba Sabariego authored
212
                self.remainingBytes -= MAX_STRING_LENGTH;
Imanol-Mikel Barba Sabariego authored
213
214
215
            }
            else
            {
Imanol-Mikel Barba Sabariego authored
216
217
                numBytes = self.remainingBytes;
                self.remainingBytes = 0;
Imanol-Mikel Barba Sabariego authored
218
            }
Imanol-Mikel Barba Sabariego authored
219
            [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)numBytes] toResource:@"numBytes" onSuccess:^
Imanol-Mikel Barba Sabariego authored
220
             {
Imanol-Mikel Barba Sabariego authored
221
                 NSLog(@"[CommunicationProtocol.m]: numBytes set to %d", numBytes);
Imanol-Mikel Barba Sabariego authored
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
                 NSString *data = [self.message substringWithRange:NSMakeRange(self.currentIndex, numBytes)];
                 self.currentIndex += numBytes;
                 [[EMConnectionManager sharedManager] writeValue:data toResource:@"data" onSuccess:^
                  {
                      NSLog(@"[CommunicationProtocol.m]: data set to: %@",data);
                      [[EMConnectionManager sharedManager] writeValue:@"1" toResource:@"messageAvailableMobile" onSuccess:^
                       {
                           NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to TRUE");
                           NSLog(@"[CommunicationProtocol.m]: Packet written");
                           [self readACK];
                       }onFail:^(NSError *error)
                       {
                           NSLog(@"[CommunicationProtocol.m]: On setMessageAvailable to TRUE: %@",error);
                           [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
                       }];
                  }onFail:^(NSError *error)
                  {
                      NSLog(@"[CommunicationProtocol.m]: On setData: %@",error);
                      [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
                  }];
             }onFail:^(NSError *error)
Imanol-Mikel Barba Sabariego authored
243
             {
Imanol-Mikel Barba Sabariego authored
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
                 NSLog(@"[CommunicationProtocol.m]: On setNumBytes: %@",error);
                 [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
             }];
        }
        else
        {
            [self readMessage];
        }

    }onFail:^(NSError *error)
    {
        NSLog(@"[CommunicationProtocol.m]: On setMessageAvailableMobile to FALSE: %@",error);
        [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
    }];
}

- (void) readACK
{
    NSLog(@"[CommunicationProtocol.m]: Reading ACK from device");
    [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
    {
        [self setMessageAvailableMobile:[readValue intValue]];
        if([self messageAvailableMobile])
        {
            NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
            [NSThread sleepForTimeInterval:SLEEP_MS];
            [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
Imanol-Mikel Barba Sabariego authored
271
            {
Imanol-Mikel Barba Sabariego authored
272
273
                [self setMessageAvailableMobile:[readValue intValue]];
                if([self messageAvailableMobile])
Imanol-Mikel Barba Sabariego authored
274
                {
Imanol-Mikel Barba Sabariego authored
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
                    NSLog(@"[CommunicationProtocol.m]: Device not ready. Retrying...");
                    [NSThread sleepForTimeInterval:SLEEP_MS];
                    [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
                    {
                        [self setMessageAvailableMobile:[readValue intValue]];
                        if([self messageAvailableMobile])
                        {
                            NSLog(@"[CommunicationProtocol.m]: Device not ready.");
                            NSLog(@"[CommunicationProtocol.m]: Timeout while expecting ACK");
                        }
                        else
                        {
                            [self sendNextFragment];
                        }
                    }onFail:^(NSError *error)
                    {
                        NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
                        [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
                    }];
Imanol-Mikel Barba Sabariego authored
294
                }
Imanol-Mikel Barba Sabariego authored
295
296
297
298
299
300
301
302
303
                else
                {
                    [self sendNextFragment];
                }
            }onFail:^(NSError *error)
            {
                NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
                [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
            }];
Imanol-Mikel Barba Sabariego authored
304
        }
Imanol-Mikel Barba Sabariego authored
305
306
307
308
309
        else
        {
            [self sendNextFragment];
        }
    }onFail:^(NSError *error)
Imanol-Mikel Barba Sabariego authored
310
    {
Imanol-Mikel Barba Sabariego authored
311
312
313
        NSLog(@"[CommunicationProtocol.m]: On readACK: %@",error);
        [self reportError:[NSString stringWithFormat:@"Error occurred while sending command to device: %@",[error localizedDescription]]];
    }];
Imanol-Mikel Barba Sabariego authored
314
315
316
317
}

-(Boolean) establishConnection
{
Imanol-Mikel Barba Sabariego authored
318
    NSLog(@"[CommunicationProtocol.m]: Establishing connection...");
Imanol-Mikel Barba Sabariego authored
319
320
    if([self writeMessage:@"Hello"])
    {
Imanol-Mikel Barba Sabariego authored
321
        NSLog(@"[CommunicationProtocol.m]: Hello sent");
Imanol-Mikel Barba Sabariego authored
322
        NSString *answer = [self readMessage];
Imanol-Mikel Barba Sabariego authored
323
        NSLog(@"[CommunicationProtocol.m]: Answer received");
Imanol-Mikel Barba Sabariego authored
324
325
        if([answer isEqualToString:@"Hello"])
        {
Imanol-Mikel Barba Sabariego authored
326
            NSLog(@"[CommunicationProtocol.m]: Connection established");
Imanol-Mikel Barba Sabariego authored
327
328
329
            return TRUE;
        }
    }
Imanol-Mikel Barba Sabariego authored
330
    NSLog(@"[CommunicationProtocol.m]: Error while establishing connection");
Imanol-Mikel Barba Sabariego authored
331
    return TRUE; //HACK!
Imanol-Mikel Barba Sabariego authored
332
333
}
Imanol-Mikel Barba Sabariego authored
334
335
336
337
338
-(Boolean) updateTime: (NSDateComponents*) date
{
    NSMutableString *command = [NSMutableString stringWithFormat: @"A5"];
    NSInteger year = [date year];
    year = year - (year/100)*100;
Imanol-Mikel Barba Sabariego authored
339
340
    [command appendString:[NSString stringWithFormat:@"%02ld",(long)year]];
    [command appendString:[NSString stringWithFormat:@"%02ld%02ld%02ld%02ld%02ld",(long)[date month],(long)[date day],(long)[date hour],(long)[date minute],(long)[date second]]];
Imanol-Mikel Barba Sabariego authored
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
    [self writeMessage:command];
    NSString *answer = [self readMessage];
    if([answer isEqualToString:@"P51"])
    {
        return TRUE;
    }
    return FALSE;
}

-(Boolean) updatePrice: (uint8_t) channel : (uint8_t) product : (uint8_t) eur : (uint8_t) cents
{
    NSMutableString *command = [NSMutableString stringWithFormat: @"A6%01d%01d%02d%02d",channel,product,eur,cents];
    [self writeMessage:command];
    NSString *answer = [self readMessage];
    if([answer isEqualToString:@"P61"])
    {
        return TRUE;
    }
    return FALSE;
}

-(Boolean) updateProductName: (uint8_t) channel : (uint8_t) product : (NSString*) name
{
    if([name length] > MAX_PRODUCT_NAME_LENGTH)
    {
        name = [name substringToIndex:MAX_PRODUCT_NAME_LENGTH-1];
    }
    NSMutableString *command = [NSMutableString stringWithFormat: @"A7%01d%01d%@",channel,product,name];
    [self writeMessage:command];
    NSString *answer = [self readMessage];
    if([answer isEqualToString:@"P71"])
    {
        return TRUE;
    }
    return FALSE;
}
Imanol-Mikel Barba Sabariego authored
378
379
380
381
-(NSString*) readSensorData
{
    NSString *command = @"A4";
    [self writeMessage:command];
Imanol-Mikel Barba Sabariego authored
382
    //NSString *answer = [self readMessage];
Imanol-Mikel Barba Sabariego authored
383
Imanol-Mikel Barba Sabariego authored
384
385
    NSMutableString *answer = [[NSMutableString alloc]initWithString:@"P400015000150001500000001001003005002000001002"];
    for(int i = 0; i < 4; i++)
Imanol-Mikel Barba Sabariego authored
386
387
    {
        [answer appendString:@"0"];
Imanol-Mikel Barba Sabariego authored
388
        [answer appendString:@"1"];
Imanol-Mikel Barba Sabariego authored
389
    }
Imanol-Mikel Barba Sabariego authored
390
    for(int i = 0; i < 12; i++)
Imanol-Mikel Barba Sabariego authored
391
    {
Imanol-Mikel Barba Sabariego authored
392
393
        [answer appendString:@"0"];
        [answer appendString:@"0"];
Imanol-Mikel Barba Sabariego authored
394
    }
Imanol-Mikel Barba Sabariego authored
395
396
397

    [answer appendString:@"0"];
    [answer appendString:@"0"];
Imanol-Mikel Barba Sabariego authored
398
399

    if([answer length] > 1 && [[answer substringToIndex:2]isEqualToString:@"P4"])
Imanol-Mikel Barba Sabariego authored
400
    {
Imanol-Mikel Barba Sabariego authored
401
        NSLog(@"[CommunicationProtocol.m]: sensorStatus returned: %@",answer);
Imanol-Mikel Barba Sabariego authored
402
        return answer;
Imanol-Mikel Barba Sabariego authored
403
    }
Imanol-Mikel Barba Sabariego authored
404
405
406
    return nil;
}
Imanol-Mikel Barba Sabariego authored
407
-(NSString*) readSalesLog : (NSDateComponents*) start : (NSDateComponents*) end
Imanol-Mikel Barba Sabariego authored
408
{
Imanol-Mikel Barba Sabariego authored
409
410
    NSMutableString *startDate = [NSMutableString stringWithString:@""];
    NSMutableString *endDate = [NSMutableString stringWithString:@""];
Imanol-Mikel Barba Sabariego authored
411
412
413
414
415
416
417
    NSMutableString *command = [NSMutableString stringWithString:@"A2"];
    if(start == nil)
    {
        [startDate setString:@""];
    }
    else
    {
Imanol-Mikel Barba Sabariego authored
418
419
420
421
        NSInteger year = [start year];
        year = year - (year/100)*100;
        [startDate appendString:[NSString stringWithFormat:@"%02ld",(long)year]];
        [startDate appendString:[NSString stringWithFormat:@"%02ld%02ld%02ld%02ld",(long)[start month],(long)[start day],(long)[start hour],(long)[start minute]]];
Imanol-Mikel Barba Sabariego authored
422
423
424
425
426
427
428
    }
    if(end == nil)
    {
        [endDate setString:@""];
    }
    else
    {
Imanol-Mikel Barba Sabariego authored
429
430
431
432
        NSInteger year = [end year];
        year = year - (year/100)*100;
        [endDate appendString:[NSString stringWithFormat:@"%02ld",(long)year]];
        [endDate appendString:[NSString stringWithFormat:@"%02ld%02ld%02ld%02ld",(long)[end month],(long)[end day],(long)[end hour],(long)[end minute]]];
Imanol-Mikel Barba Sabariego authored
433
434
435
436
437
438
    }
    [command appendString:startDate];
    [command appendString:@"-"];
    [command appendString:endDate];
    [self writeMessage:command];
    //NSString *answer = [self readMessage];
Imanol-Mikel Barba Sabariego authored
439
Imanol-Mikel Barba Sabariego authored
440
    NSMutableString *answer = [[NSMutableString alloc]initWithString:@"P21408161036000001000000110450000001P21409012216000100000000220900000100P21409032307000000010502330800000000P21409070540000000020000440350000001P2P2"];
Imanol-Mikel Barba Sabariego authored
441
    if([answer length] > 1 && [[answer substringToIndex:2]isEqualToString:@"P2"])
Imanol-Mikel Barba Sabariego authored
442
    {
Imanol-Mikel Barba Sabariego authored
443
        NSLog(@"[CommunicationProtocol.m]: saleLog returned: %@",answer);
Imanol-Mikel Barba Sabariego authored
444
445
446
447
448
        return answer;
    }
    return nil;
}
Imanol-Mikel Barba Sabariego authored
449
@end