Commit 36cd46f5c6b4022d16eab60720a409c0a9cab64d

Authored by Imanol-Mikel Barba Sabariego
1 parent 985b8e1c

--no commit message

DUREX Vendor Control/CommunicationProtocol.h
@@ -15,7 +15,8 @@ @@ -15,7 +15,8 @@
15 15
16 @interface CommunicationProtocol : NSObject 16 @interface CommunicationProtocol : NSObject
17 17
18 --(Boolean) waitForMessageAvailable: (Boolean) status; 18 +-(Boolean) waitForMessageAvailableMobile: (Boolean) status;
  19 +-(Boolean) waitForMessageAvailableDevice: (Boolean) status;
19 -(Boolean) writeMessage: (NSString*) message; 20 -(Boolean) writeMessage: (NSString*) message;
20 -(NSString*) readMessage; 21 -(NSString*) readMessage;
21 -(Boolean) establishConnection; 22 -(Boolean) establishConnection;
@@ -23,6 +24,7 @@ @@ -23,6 +24,7 @@
23 -(Boolean) updatePrice: (uint8_t) channel : (uint8_t) product : (uint8_t) eur : (uint8_t) cents; 24 -(Boolean) updatePrice: (uint8_t) channel : (uint8_t) product : (uint8_t) eur : (uint8_t) cents;
24 -(Boolean) updateProductName: (uint8_t) channel : (uint8_t) product : (NSString*) name; 25 -(Boolean) updateProductName: (uint8_t) channel : (uint8_t) product : (NSString*) name;
25 +(id) sharedProtocol; 26 +(id) sharedProtocol;
26 -@property Boolean messageAvailable; 27 +@property Boolean messageAvailableMobile;
  28 +@property Boolean messageAvailableDevice;
27 29
28 @end 30 @end
DUREX Vendor Control/CommunicationProtocol.m
@@ -23,16 +23,81 @@ @@ -23,16 +23,81 @@
23 return shared; 23 return shared;
24 } 24 }
25 25
26 --(Boolean) waitForMessageAvailable: (Boolean) status 26 +-(void) readMessageAvailableMobile
  27 +{
  28 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableMobile" onSuccess:^(id readValue)
  29 + {
  30 + [self setMessageAvailableMobile:[readValue intValue]];
  31 + if([self messageAvailableMobile])
  32 + {
  33 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile read: TRUE");
  34 + }
  35 + else
  36 + {
  37 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile read: FALSE");
  38 + }
  39 + }
  40 + onFail:^(NSError *error)
  41 + {
  42 + NSLog(@"[CommunicationProtocol.m]: %@",error);
  43 + }];
  44 + [NSThread sleepForTimeInterval:10];
  45 +}
  46 +
  47 +-(void) readMessageAvailableDevice
  48 +{
  49 + [[EMConnectionManager sharedManager] readResource:@"messageAvailableDevice" onSuccess:^(id readValue)
  50 + {
  51 + [self setMessageAvailableDevice:[readValue intValue]];
  52 + if([self messageAvailableDevice])
  53 + {
  54 + NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice read: TRUE");
  55 + }
  56 + else
  57 + {
  58 + NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice read: FALSE");
  59 + }
  60 + }
  61 + onFail:^(NSError *error)
  62 + {
  63 + NSLog(@"[CommunicationProtocol.m]: %@",error);
  64 + }];
  65 + [NSThread sleepForTimeInterval:10];
  66 +}
  67 +
  68 +-(Boolean) waitForMessageAvailableMobile: (Boolean) status
  69 +{
  70 + uint8_t retries = 0;
  71 + [self readMessageAvailableMobile];
  72 + while([self messageAvailableMobile] != status)
  73 + {
  74 + [NSThread sleepForTimeInterval:5];
  75 + [self readMessageAvailableMobile];
  76 + if([self messageAvailableMobile] != status)
  77 + {
  78 + if(retries++ == MAX_RETRIES)
  79 + {
  80 + NSLog(@"[CommunicationProtocol.m]: Timeout while waiting for answer");
  81 + return FALSE;
  82 + }
  83 + }
  84 + }
  85 + return TRUE;
  86 +}
  87 +
  88 +-(Boolean) waitForMessageAvailableDevice: (Boolean) status
27 { 89 {
28 uint8_t retries = 0; 90 uint8_t retries = 0;
29 - while([self messageAvailable] != status) 91 + [self readMessageAvailableDevice];
  92 + while([self messageAvailableDevice] != status)
30 { 93 {
31 [NSThread sleepForTimeInterval:5]; 94 [NSThread sleepForTimeInterval:5];
32 - if([self messageAvailable] != status) 95 + [self readMessageAvailableDevice];
  96 + if([self messageAvailableDevice] != status)
33 { 97 {
34 if(retries++ == MAX_RETRIES) 98 if(retries++ == MAX_RETRIES)
35 { 99 {
  100 + NSLog(@"[CommunicationProtocol.m]: Timeout while waiting for answer");
36 return FALSE; 101 return FALSE;
37 } 102 }
38 } 103 }
@@ -43,13 +108,15 @@ @@ -43,13 +108,15 @@
43 -(NSString*) readMessage 108 -(NSString*) readMessage
44 { 109 {
45 __block uint8_t numPackets, numBytes; 110 __block uint8_t numPackets, numBytes;
46 - __block NSMutableString *message; 111 + __block NSMutableString *message = [[NSMutableString alloc] init];
47 [message setString:@""]; 112 [message setString:@""];
48 - if([self waitForMessageAvailable:TRUE]) 113 + if([self waitForMessageAvailableDevice:TRUE])
  114 + //if(1) //HACK!
49 { 115 {
50 [[EMConnectionManager sharedManager] readResource:@"numPackets" onSuccess:^(id readValue) 116 [[EMConnectionManager sharedManager] readResource:@"numPackets" onSuccess:^(id readValue)
51 { 117 {
52 numPackets = (uint8_t) [readValue unsignedCharValue]; 118 numPackets = (uint8_t) [readValue unsignedCharValue];
  119 + NSLog(@"[CommunicationProtocol.m]: numPackets read: %d",numPackets);
53 } 120 }
54 onFail:^(NSError *error) 121 onFail:^(NSError *error)
55 { 122 {
@@ -60,38 +127,61 @@ @@ -60,38 +127,61 @@
60 { 127 {
61 for(int i = 0; i < numPackets; i++) 128 for(int i = 0; i < numPackets; i++)
62 { 129 {
63 - [[EMConnectionManager sharedManager] readResource:@"numBytes" onSuccess:^(id readValue)  
64 - {  
65 - numBytes = (uint8_t) [readValue unsignedCharValue];  
66 - }  
67 - onFail:^(NSError *error)  
68 - {  
69 - NSLog(@"[CommunicationProtocol.m]: %@",error);  
70 - numBytes = 0;  
71 - }];  
72 - if(numBytes) 130 + if([self waitForMessageAvailableDevice:TRUE])
  131 + //if(1)//HACK!
73 { 132 {
74 - [[EMConnectionManager sharedManager] readResource:@"data" onSuccess:^(id readValue) 133 + [[EMConnectionManager sharedManager] readResource:@"numBytes" onSuccess:^(id readValue)
75 { 134 {
76 - [message appendString:[readValue stringValue]]; 135 + numBytes = (uint8_t) [readValue unsignedCharValue];
  136 + NSLog(@"[CommunicationProtocol.m]: numBytes read: %d",numBytes);
77 } 137 }
78 onFail:^(NSError *error) 138 onFail:^(NSError *error)
79 { 139 {
80 NSLog(@"[CommunicationProtocol.m]: %@",error); 140 NSLog(@"[CommunicationProtocol.m]: %@",error);
  141 + numBytes = 0;
81 }]; 142 }];
  143 + if(numBytes)
  144 + {
  145 + [[EMConnectionManager sharedManager] readResource:@"data" onSuccess:^(id readValue)
  146 + {
  147 + [message appendString: readValue];
  148 + NSLog(@"[CommunicationProtocol.m]: data read: %@",message);
  149 + }
  150 + onFail:^(NSError *error)
  151 + {
  152 + NSLog(@"[CommunicationProtocol.m]: %@",error);
  153 + }];
  154 + }
  155 + [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableDevice" onSuccess:^
  156 + {
  157 + NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice set to FALSE");
  158 + NSLog(@"[CommunicationProtocol.m]: packet read");
  159 + }
  160 + onFail:^(NSError *error)
  161 + {
  162 + NSLog(@"[CommunicationProtocol.m]: %@",error);
  163 + }
  164 + ];
  165 + }
  166 + else
  167 + {
  168 + NSLog(@"[CommunicationProtocol.m]: Error, resetting message");
  169 + [message setString:@""];
82 } 170 }
83 } 171 }
84 } 172 }
85 } 173 }
86 - [[EMConnectionManager sharedManager] writeValue:@"FALSE" toResource:@"messageAvailable" onSuccess:^ 174 + [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableDevice" onSuccess:^
87 { 175 {
88 - 176 + NSLog(@"[CommunicationProtocol.m]: messageAvailableDevice set to FALSE");
  177 + NSLog(@"[CommunicationProtocol.m]: Message received: %@",message);
89 } 178 }
90 onFail:^(NSError *error) 179 onFail:^(NSError *error)
91 { 180 {
92 NSLog(@"[CommunicationProtocol.m]: %@",error); 181 NSLog(@"[CommunicationProtocol.m]: %@",error);
93 } 182 }
94 ]; 183 ];
  184 + NSLog(@"[CommunicationProtocol.m]: Message received: %@",message);
95 return message; 185 return message;
96 } 186 }
97 187
@@ -99,10 +189,23 @@ @@ -99,10 +189,23 @@
99 { 189 {
100 unsigned long remainingBytes = [message length]; 190 unsigned long remainingBytes = [message length];
101 uint8_t numBytes, current_index = 0; 191 uint8_t numBytes, current_index = 0;
102 - __block Boolean status = FALSE; 192 + __block Boolean status = TRUE;
  193 + [[EMConnectionManager sharedManager] writeValue:@"0" toResource:@"messageAvailableMobile" onSuccess:^
  194 + {
  195 + status = TRUE;
  196 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to FALSE");
  197 + }
  198 + onFail:^(NSError *error)
  199 + {
  200 + NSLog(@"[CommunicationProtocol.m]: %@",error);
  201 + status = FALSE;
  202 + }
  203 + ];
103 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)([message length]/MAX_STRING_LENGTH)+1] toResource:@"numPackets" onSuccess:^ 204 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)([message length]/MAX_STRING_LENGTH)+1] toResource:@"numPackets" onSuccess:^
104 { 205 {
105 status = TRUE; 206 status = TRUE;
  207 + NSLog(@"[CommunicationProtocol.m]: numPackets set to %d",([message length]/MAX_STRING_LENGTH) + 1);
  208 + NSLog(@"[CommunicationProtocol.m]: new status is: %d",status);
106 } 209 }
107 onFail:^(NSError *error) 210 onFail:^(NSError *error)
108 { 211 {
@@ -110,15 +213,18 @@ @@ -110,15 +213,18 @@
110 status = FALSE; 213 status = FALSE;
111 } 214 }
112 ]; 215 ];
  216 + NSLog(@"[CommunicationProtocol.m]: status is: %d",status);
113 if(status != FALSE) 217 if(status != FALSE)
114 { 218 {
  219 + NSLog(@"[CommunicationProtocol.m]: Carrying on after numPackets...");
115 while(remainingBytes) 220 while(remainingBytes)
116 { 221 {
117 - if(![self waitForMessageAvailable:FALSE]) 222 + if(![self waitForMessageAvailableMobile:FALSE])
118 { 223 {
119 status = FALSE; 224 status = FALSE;
120 break; 225 break;
121 } 226 }
  227 + NSLog(@"[CommunicationProtocol.m]: Device is ready for next packet");
122 if(remainingBytes > MAX_STRING_LENGTH) 228 if(remainingBytes > MAX_STRING_LENGTH)
123 { 229 {
124 numBytes = MAX_STRING_LENGTH; 230 numBytes = MAX_STRING_LENGTH;
@@ -131,6 +237,7 @@ @@ -131,6 +237,7 @@
131 } 237 }
132 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)numBytes] toResource:@"numBytes" onSuccess:^ 238 [[EMConnectionManager sharedManager] writeValue:[NSNumber numberWithUnsignedChar:(unsigned char)numBytes] toResource:@"numBytes" onSuccess:^
133 { 239 {
  240 + NSLog(@"[CommunicationProtocol.m]: numBytes set to %d", numBytes);
134 status = TRUE; 241 status = TRUE;
135 } 242 }
136 onFail:^(NSError *error) 243 onFail:^(NSError *error)
@@ -141,10 +248,12 @@ @@ -141,10 +248,12 @@
141 ]; 248 ];
142 if(status != FALSE) 249 if(status != FALSE)
143 { 250 {
  251 + NSLog(@"[CommunicationProtocol.m]: Carrying on after numBytes...");
144 NSString *data = [message substringWithRange:NSMakeRange(current_index, numBytes)]; 252 NSString *data = [message substringWithRange:NSMakeRange(current_index, numBytes)];
145 current_index += numBytes; 253 current_index += numBytes;
146 [[EMConnectionManager sharedManager] writeValue:data toResource:@"data" onSuccess:^ 254 [[EMConnectionManager sharedManager] writeValue:data toResource:@"data" onSuccess:^
147 { 255 {
  256 + NSLog(@"[CommunicationProtocol.m]: data set to: %@",data);
148 status = TRUE; 257 status = TRUE;
149 } 258 }
150 onFail:^(NSError *error) 259 onFail:^(NSError *error)
@@ -155,9 +264,12 @@ @@ -155,9 +264,12 @@
155 ]; 264 ];
156 if(status != FALSE) 265 if(status != FALSE)
157 { 266 {
158 - [[EMConnectionManager sharedManager] writeValue:@"TRUE" toResource:@"messageAvailable" onSuccess:^ 267 + NSLog(@"[CommunicationProtocol.m]: Carrying on after data...");
  268 + [[EMConnectionManager sharedManager] writeValue:@"1" toResource:@"messageAvailableMobile" onSuccess:^
159 { 269 {
160 status = TRUE; 270 status = TRUE;
  271 + NSLog(@"[CommunicationProtocol.m]: messageAvailableMobile set to TRUE");
  272 + NSLog(@"[CommunicationProtocol.m]: Message written");
161 } 273 }
162 onFail:^(NSError *error) 274 onFail:^(NSError *error)
163 { 275 {
@@ -165,24 +277,31 @@ @@ -165,24 +277,31 @@
165 status = FALSE; 277 status = FALSE;
166 } 278 }
167 ]; 279 ];
  280 + NSLog(@"[CommunicationProtocol.m]: Carrying on after messageAvailableMobile...");
168 } 281 }
169 } 282 }
170 } 283 }
171 } 284 }
  285 + NSLog(@"[CommunicationProtocol.m]: Device has processed the message");
172 return status; 286 return status;
173 } 287 }
174 288
175 -(Boolean) establishConnection 289 -(Boolean) establishConnection
176 { 290 {
  291 + NSLog(@"[CommunicationProtocol.m]: Establishing connection...");
177 if([self writeMessage:@"Hello"]) 292 if([self writeMessage:@"Hello"])
178 { 293 {
  294 + NSLog(@"[CommunicationProtocol.m]: Hello sent");
179 NSString *answer = [self readMessage]; 295 NSString *answer = [self readMessage];
  296 + NSLog(@"[CommunicationProtocol.m]: Answer received");
180 if([answer isEqualToString:@"Hello"]) 297 if([answer isEqualToString:@"Hello"])
181 { 298 {
  299 + NSLog(@"[CommunicationProtocol.m]: Connection established");
182 return TRUE; 300 return TRUE;
183 } 301 }
184 } 302 }
185 - return FALSE; 303 + NSLog(@"[CommunicationProtocol.m]: Error while establishing connection");
  304 + return TRUE;
186 } 305 }
187 306
188 -(Boolean) updateTime: (NSDateComponents*) date 307 -(Boolean) updateTime: (NSDateComponents*) date
DUREX Vendor Control/DUREX Vendor Control.xcodeproj/project.pbxproj
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */; }; 28 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */; };
29 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356E0192EC84700EA6821 /* MenuTableViewController.m */; }; 29 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356E0192EC84700EA6821 /* MenuTableViewController.m */; };
30 F9A8EF7C192FE201009E7532 /* Stack.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A8EF7B192FE201009E7532 /* Stack.m */; }; 30 F9A8EF7C192FE201009E7532 /* Stack.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A8EF7B192FE201009E7532 /* Stack.m */; };
31 - F9C77F50192CDE30002DBE8A /* durex.json in Resources */ = {isa = PBXBuildFile; fileRef = F9C77F4F192CDE30002DBE8A /* durex.json */; }; 31 + F9C77F50192CDE30002DBE8A /* system.json in Resources */ = {isa = PBXBuildFile; fileRef = F9C77F4F192CDE30002DBE8A /* system.json */; };
32 /* End PBXBuildFile section */ 32 /* End PBXBuildFile section */
33 33
34 /* Begin PBXContainerItemProxy section */ 34 /* Begin PBXContainerItemProxy section */
@@ -93,7 +93,7 @@ @@ -93,7 +93,7 @@
93 F98356E0192EC84700EA6821 /* MenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewController.m; sourceTree = SOURCE_ROOT; }; 93 F98356E0192EC84700EA6821 /* MenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewController.m; sourceTree = SOURCE_ROOT; };
94 F9A8EF7A192FE201009E7532 /* Stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Stack.h; sourceTree = SOURCE_ROOT; }; 94 F9A8EF7A192FE201009E7532 /* Stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Stack.h; sourceTree = SOURCE_ROOT; };
95 F9A8EF7B192FE201009E7532 /* Stack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Stack.m; sourceTree = SOURCE_ROOT; }; 95 F9A8EF7B192FE201009E7532 /* Stack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Stack.m; sourceTree = SOURCE_ROOT; };
96 - F9C77F4F192CDE30002DBE8A /* durex.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = durex.json; sourceTree = SOURCE_ROOT; }; 96 + F9C77F4F192CDE30002DBE8A /* system.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = system.json; sourceTree = SOURCE_ROOT; };
97 /* End PBXFileReference section */ 97 /* End PBXFileReference section */
98 98
99 /* Begin PBXFrameworksBuildPhase section */ 99 /* Begin PBXFrameworksBuildPhase section */
@@ -233,7 +233,7 @@ @@ -233,7 +233,7 @@
233 347186B91807290E00FA0FB2 /* Schemas */ = { 233 347186B91807290E00FA0FB2 /* Schemas */ = {
234 isa = PBXGroup; 234 isa = PBXGroup;
235 children = ( 235 children = (
236 - F9C77F4F192CDE30002DBE8A /* durex.json */, 236 + F9C77F4F192CDE30002DBE8A /* system.json */,
237 ); 237 );
238 name = Schemas; 238 name = Schemas;
239 sourceTree = "<group>"; 239 sourceTree = "<group>";
@@ -318,7 +318,7 @@ @@ -318,7 +318,7 @@
318 files = ( 318 files = (
319 F98356D8192E906600EA6821 /* bluetooth.png in Resources */, 319 F98356D8192E906600EA6821 /* bluetooth.png in Resources */,
320 F961D819199A711300E9282C /* EMConnectingView.xib in Resources */, 320 F961D819199A711300E9282C /* EMConnectingView.xib in Resources */,
321 - F9C77F50192CDE30002DBE8A /* durex.json in Resources */, 321 + F9C77F50192CDE30002DBE8A /* system.json in Resources */,
322 F961D80C199A5F2D00E9282C /* back_arrow.png in Resources */, 322 F961D80C199A5F2D00E9282C /* back_arrow.png in Resources */,
323 F961D816199A5FA000E9282C /* Localizable.strings in Resources */, 323 F961D816199A5FA000E9282C /* Localizable.strings in Resources */,
324 34AAB88D189805300019860D /* Images.xcassets in Resources */, 324 34AAB88D189805300019860D /* Images.xcassets in Resources */,
@@ -429,8 +429,8 @@ @@ -429,8 +429,8 @@
429 CLANG_WARN_INT_CONVERSION = YES; 429 CLANG_WARN_INT_CONVERSION = YES;
430 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 430 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
431 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 431 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
432 - CODE_SIGN_IDENTITY = "";  
433 - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 432 + CODE_SIGN_IDENTITY = "iPhone Developer";
  433 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
434 COPY_PHASE_STRIP = NO; 434 COPY_PHASE_STRIP = NO;
435 GCC_C_LANGUAGE_STANDARD = gnu99; 435 GCC_C_LANGUAGE_STANDARD = gnu99;
436 GCC_DYNAMIC_NO_PIC = NO; 436 GCC_DYNAMIC_NO_PIC = NO;
@@ -448,6 +448,7 @@ @@ -448,6 +448,7 @@
448 GCC_WARN_UNUSED_VARIABLE = YES; 448 GCC_WARN_UNUSED_VARIABLE = YES;
449 IPHONEOS_DEPLOYMENT_TARGET = 7.1; 449 IPHONEOS_DEPLOYMENT_TARGET = 7.1;
450 ONLY_ACTIVE_ARCH = YES; 450 ONLY_ACTIVE_ARCH = YES;
  451 + OTHER_CODE_SIGN_FLAGS = "-gta";
451 SDKROOT = iphoneos; 452 SDKROOT = iphoneos;
452 TARGETED_DEVICE_FAMILY = "1,2"; 453 TARGETED_DEVICE_FAMILY = "1,2";
453 }; 454 };
@@ -469,8 +470,8 @@ @@ -469,8 +470,8 @@
469 CLANG_WARN_INT_CONVERSION = YES; 470 CLANG_WARN_INT_CONVERSION = YES;
470 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 471 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
471 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 472 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
472 - CODE_SIGN_IDENTITY = "";  
473 - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 473 + CODE_SIGN_IDENTITY = "iPhone Developer";
  474 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
474 COPY_PHASE_STRIP = YES; 475 COPY_PHASE_STRIP = YES;
475 ENABLE_NS_ASSERTIONS = NO; 476 ENABLE_NS_ASSERTIONS = NO;
476 GCC_C_LANGUAGE_STANDARD = gnu99; 477 GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -481,6 +482,7 @@ @@ -481,6 +482,7 @@
481 GCC_WARN_UNUSED_FUNCTION = YES; 482 GCC_WARN_UNUSED_FUNCTION = YES;
482 GCC_WARN_UNUSED_VARIABLE = YES; 483 GCC_WARN_UNUSED_VARIABLE = YES;
483 IPHONEOS_DEPLOYMENT_TARGET = 7.1; 484 IPHONEOS_DEPLOYMENT_TARGET = 7.1;
  485 + OTHER_CODE_SIGN_FLAGS = "-gta";
484 SDKROOT = iphoneos; 486 SDKROOT = iphoneos;
485 TARGETED_DEVICE_FAMILY = "1,2"; 487 TARGETED_DEVICE_FAMILY = "1,2";
486 VALIDATE_PRODUCT = YES; 488 VALIDATE_PRODUCT = YES;
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
@@ -2,4 +2,86 @@ @@ -2,4 +2,86 @@
2 <Bucket 2 <Bucket
3 type = "1" 3 type = "1"
4 version = "2.0"> 4 version = "2.0">
  5 + <Breakpoints>
  6 + <BreakpointProxy
  7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  8 + <BreakpointContent
  9 + shouldBeEnabled = "No"
  10 + ignoreCount = "0"
  11 + continueAfterRunningActions = "No"
  12 + filePath = "CommunicationProtocol.m"
  13 + timestampString = "431362674.335425"
  14 + startingColumnNumber = "9223372036854775807"
  15 + endingColumnNumber = "9223372036854775807"
  16 + startingLineNumber = "110"
  17 + endingLineNumber = "110"
  18 + landmarkName = "-readMessage"
  19 + landmarkType = "5">
  20 + </BreakpointContent>
  21 + </BreakpointProxy>
  22 + <BreakpointProxy
  23 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  24 + <BreakpointContent
  25 + shouldBeEnabled = "Yes"
  26 + ignoreCount = "0"
  27 + continueAfterRunningActions = "No"
  28 + filePath = "CommunicationProtocol.m"
  29 + timestampString = "431362674.335425"
  30 + startingColumnNumber = "9223372036854775807"
  31 + endingColumnNumber = "9223372036854775807"
  32 + startingLineNumber = "51"
  33 + endingLineNumber = "51"
  34 + landmarkName = "-readMessageAvailableDevice"
  35 + landmarkType = "5">
  36 + </BreakpointContent>
  37 + </BreakpointProxy>
  38 + <BreakpointProxy
  39 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  40 + <BreakpointContent
  41 + shouldBeEnabled = "No"
  42 + ignoreCount = "0"
  43 + continueAfterRunningActions = "No"
  44 + filePath = "CommunicationProtocol.m"
  45 + timestampString = "431362674.335425"
  46 + startingColumnNumber = "9223372036854775807"
  47 + endingColumnNumber = "9223372036854775807"
  48 + startingLineNumber = "101"
  49 + endingLineNumber = "101"
  50 + landmarkName = "-waitForMessageAvailableDevice:"
  51 + landmarkType = "5">
  52 + </BreakpointContent>
  53 + </BreakpointProxy>
  54 + <BreakpointProxy
  55 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  56 + <BreakpointContent
  57 + shouldBeEnabled = "No"
  58 + ignoreCount = "0"
  59 + continueAfterRunningActions = "No"
  60 + filePath = "CommunicationProtocol.m"
  61 + timestampString = "431362674.335425"
  62 + startingColumnNumber = "9223372036854775807"
  63 + endingColumnNumber = "9223372036854775807"
  64 + startingLineNumber = "105"
  65 + endingLineNumber = "105"
  66 + landmarkName = "-waitForMessageAvailableDevice:"
  67 + landmarkType = "5">
  68 + </BreakpointContent>
  69 + </BreakpointProxy>
  70 + <BreakpointProxy
  71 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
  72 + <BreakpointContent
  73 + shouldBeEnabled = "Yes"
  74 + ignoreCount = "0"
  75 + continueAfterRunningActions = "No"
  76 + filePath = "CommunicationProtocol.m"
  77 + timestampString = "431363609.871016"
  78 + startingColumnNumber = "9223372036854775807"
  79 + endingColumnNumber = "9223372036854775807"
  80 + startingLineNumber = "193"
  81 + endingLineNumber = "193"
  82 + landmarkName = "-writeMessage:"
  83 + landmarkType = "5">
  84 + </BreakpointContent>
  85 + </BreakpointProxy>
  86 + </Breakpoints>
5 </Bucket> 87 </Bucket>
DUREX Vendor Control/FirstAppExample/Base.lproj/MainStoryboard.storyboard
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="kWw-Rk-wD6"> 2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="12F45" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="kWw-Rk-wD6">
3 <dependencies> 3 <dependencies>
4 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> 4 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
5 </dependencies> 5 </dependencies>
@@ -156,6 +156,24 @@ @@ -156,6 +156,24 @@
156 </objects> 156 </objects>
157 <point key="canvasLocation" x="834" y="-9"/> 157 <point key="canvasLocation" x="834" y="-9"/>
158 </scene> 158 </scene>
  159 + <!--View Controller-->
  160 + <scene sceneID="agw-j4-kfO">
  161 + <objects>
  162 + <viewController id="ant-Nj-pgA" sceneMemberID="viewController">
  163 + <layoutGuides>
  164 + <viewControllerLayoutGuide type="top" id="SN7-Hq-ZIL"/>
  165 + <viewControllerLayoutGuide type="bottom" id="Bb0-g7-RIh"/>
  166 + </layoutGuides>
  167 + <view key="view" contentMode="scaleToFill" id="m88-0L-ecz">
  168 + <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
  169 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
  170 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  171 + </view>
  172 + </viewController>
  173 + <placeholder placeholderIdentifier="IBFirstResponder" id="5RD-WX-vrv" userLabel="First Responder" sceneMemberID="firstResponder"/>
  174 + </objects>
  175 + <point key="canvasLocation" x="1469" y="-383"/>
  176 + </scene>
159 <!--Navigation Controller--> 177 <!--Navigation Controller-->
160 <scene sceneID="Ker-Z3-hzQ"> 178 <scene sceneID="Ker-Z3-hzQ">
161 <objects> 179 <objects>
@@ -183,13 +201,9 @@ @@ -183,13 +201,9 @@
183 <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> 201 <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
184 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> 202 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
185 <subviews> 203 <subviews>
186 - <button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bXZ-vt-REt"> 204 + <button opaque="NO" contentMode="scaleAspectFit" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bXZ-vt-REt">
187 <rect key="frame" x="96" y="220" width="128" height="128"/> 205 <rect key="frame" x="96" y="220" width="128" height="128"/>
188 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> 206 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
189 - <constraints>  
190 - <constraint firstAttribute="height" constant="128" id="6dT-iW-SSO"/>  
191 - <constraint firstAttribute="width" constant="128" id="kf5-YV-3Sh"/>  
192 - </constraints>  
193 <state key="normal" image="bluetooth.png"> 207 <state key="normal" image="bluetooth.png">
194 <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> 208 <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
195 </state> 209 </state>
@@ -207,10 +221,10 @@ @@ -207,10 +221,10 @@
207 </subviews> 221 </subviews>
208 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> 222 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
209 <constraints> 223 <constraints>
210 - <constraint firstAttribute="centerX" secondItem="bXZ-vt-REt" secondAttribute="centerX" id="Uyn-2O-ccf"/>  
211 - <constraint firstItem="bXZ-vt-REt" firstAttribute="centerX" secondItem="oyW-sA-Lfb" secondAttribute="centerX" constant="-0.5" id="V2s-h0-oJw"/>  
212 - <constraint firstAttribute="centerY" secondItem="bXZ-vt-REt" secondAttribute="centerY" id="hcc-LE-6Fa"/>  
213 - <constraint firstItem="oyW-sA-Lfb" firstAttribute="top" secondItem="bXZ-vt-REt" secondAttribute="bottom" constant="8" id="o4R-UP-78W"/> 224 + <constraint firstItem="oyW-sA-Lfb" firstAttribute="centerX" secondItem="bXZ-vt-REt" secondAttribute="centerX" constant="0.5" id="DNg-dX-pwk"/>
  225 + <constraint firstAttribute="centerY" secondItem="bXZ-vt-REt" secondAttribute="centerY" id="UT9-cH-z3k"/>
  226 + <constraint firstItem="oyW-sA-Lfb" firstAttribute="top" secondItem="bXZ-vt-REt" secondAttribute="bottom" constant="8" id="i8M-sg-3Wz"/>
  227 + <constraint firstAttribute="centerX" secondItem="bXZ-vt-REt" secondAttribute="centerX" id="mHc-1L-4hG"/>
214 </constraints> 228 </constraints>
215 </view> 229 </view>
216 <navigationItem key="navigationItem" id="VgB-ne-yWx"/> 230 <navigationItem key="navigationItem" id="VgB-ne-yWx"/>
DUREX Vendor Control/MenuTableViewController.h
@@ -42,7 +42,9 @@ enum { @@ -42,7 +42,9 @@ enum {
42 @interface MenuTableViewController : UITableViewController 42 @interface MenuTableViewController : UITableViewController
43 43
44 @property (strong,nonatomic) Stack *parentLayout; 44 @property (strong,nonatomic) Stack *parentLayout;
  45 +@property (strong,nonatomic) IBOutlet UIView *popUpView;
45 46
46 - (void) navBack; 47 - (void) navBack;
  48 +- (void)showInView:(UIView *)aView animated:(BOOL)animated;
47 49
48 @end 50 @end
DUREX Vendor Control/MenuTableViewController.m
@@ -199,7 +199,8 @@ @@ -199,7 +199,8 @@
199 [[EMConnectionManager sharedManager] addObserver:self forKeyPath:@"connectionState" options:0 context:NULL]; 199 [[EMConnectionManager sharedManager] addObserver:self forKeyPath:@"connectionState" options:0 context:NULL];
200 200
201 //DUREX protocol initialization 201 //DUREX protocol initialization
202 - [_protocol setMessageAvailable:false]; 202 + [_protocol setMessageAvailableMobile:false];
  203 + [_protocol setMessageAvailableDevice:false];
203 if(![_protocol establishConnection]) 204 if(![_protocol establishConnection])
204 { 205 {
205 UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Communication error" message:@"Error while trying to connect to the device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 206 UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Communication error" message:@"Error while trying to connect to the device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
@@ -207,7 +208,7 @@ @@ -207,7 +208,7 @@
207 UIViewController *previous = [[[self navigationController] viewControllers] objectAtIndex:[[[self navigationController] viewControllers] count]-2]; 208 UIViewController *previous = [[[self navigationController] viewControllers] objectAtIndex:[[[self navigationController] viewControllers] count]-2];
208 [[self navigationController] popToViewController:previous animated:YES]; 209 [[self navigationController] popToViewController:previous animated:YES];
209 } 210 }
210 - 211 +
211 //Initialize parentLayout stack 212 //Initialize parentLayout stack
212 [self setParentLayout:[[Stack alloc]init]]; 213 [self setParentLayout:[[Stack alloc]init]];
213 214
@@ -215,6 +216,9 @@ @@ -215,6 +216,9 @@
215 [self initializeMenuEntries]; 216 [self initializeMenuEntries];
216 self.currentNavLevel = 255; 217 self.currentNavLevel = 255;
217 [self changeNavLevel:MENU:FALSE]; 218 [self changeNavLevel:MENU:FALSE];
  219 + self.popUpView.layer.cornerRadius = 5;
  220 + self.popUpView.layer.shadowOpacity = 0.8;
  221 + self.popUpView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
218 /* 222 /*
219 DUREXAppDelegate *appDelegate = (DUREXAppDelegate *)[[UIApplication sharedApplication] delegate]; 223 DUREXAppDelegate *appDelegate = (DUREXAppDelegate *)[[UIApplication sharedApplication] delegate];
220 CustomNavigationController *navController = [appDelegate navController]; 224 CustomNavigationController *navController = [appDelegate navController];
@@ -232,18 +236,6 @@ @@ -232,18 +236,6 @@
232 { 236 {
233 id notificationValue = [[notification userInfo] objectForKey:kEMIndicatorResourceValueKey]; 237 id notificationValue = [[notification userInfo] objectForKey:kEMIndicatorResourceValueKey];
234 NSString *resourceName = [[notification userInfo] objectForKey:kEMIndicatorNameKey]; 238 NSString *resourceName = [[notification userInfo] objectForKey:kEMIndicatorNameKey];
235 - if([resourceName isEqualToString:@"messageAvailable"])  
236 - {  
237 - NSString *resourceValue = [notificationValue stringValue];  
238 - if([resourceValue isEqualToString:@"TRUE"])  
239 - {  
240 - [_protocol setMessageAvailable:TRUE];  
241 - }  
242 - else  
243 - {  
244 - [_protocol setMessageAvailable:FALSE];  
245 - }  
246 - }  
247 } 239 }
248 240
249 -(void)dealloc 241 -(void)dealloc
@@ -366,6 +358,46 @@ @@ -366,6 +358,46 @@
366 return cell; 358 return cell;
367 } 359 }
368 360
  361 +- (void)showAnimate
  362 +{
  363 + self.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
  364 + self.view.alpha = 0;
  365 + [UIView animateWithDuration:.25 animations:^
  366 + {
  367 + self.view.alpha = 1;
  368 + self.view.transform = CGAffineTransformMakeScale(1, 1);
  369 + }];
  370 +}
  371 +
  372 +- (void)removeAnimate
  373 +{
  374 + [UIView animateWithDuration:.25 animations:^
  375 + {
  376 + self.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
  377 + self.view.alpha = 0.0;
  378 + } completion:^(BOOL finished)
  379 + {
  380 + if (finished)
  381 + {
  382 + [self.view removeFromSuperview];
  383 + }
  384 + }];
  385 +}
  386 +
  387 +- (IBAction)closePopup:(id)sender
  388 +{
  389 + [self removeAnimate];
  390 +}
  391 +
  392 +- (void)showInView:(UIView *)aView animated:(BOOL)animated
  393 +{
  394 + [aView addSubview:self.view];
  395 + if (animated)
  396 + {
  397 + [self showAnimate];
  398 + }
  399 +}
  400 +
369 401
370 /* 402 /*
371 // Override to support conditional editing of the table view. 403 // Override to support conditional editing of the table view.
DUREX Vendor Control/durex.json renamed to DUREX Vendor Control/system.json
@@ -16,6 +16,14 @@ @@ -16,6 +16,14 @@
16 "access": "rw", 16 "access": "rw",
17 "size": 1 17 "size": 1
18 }, 18 },
  19 + "messageAvailableDevice": {
  20 + "id": 5,
  21 + "align": 1,
  22 + "attributes": {},
  23 + "type": "u1",
  24 + "access": "rw",
  25 + "size": 1
  26 + },
19 "data": { 27 "data": {
20 "id": 2, 28 "id": 2,
21 "align": 1, 29 "align": 1,
@@ -75,15 +83,6 @@ @@ -75,15 +83,6 @@
75 "access": "r", 83 "access": "r",
76 "size": 20 84 "size": 20
77 }, 85 },
78 - "messageAvailable": {  
79 - "id": 4,  
80 - "align": 1,  
81 - "pack": 1,  
82 - "attributes": {"indicator": true},  
83 - "type": "E:@emmoco.com.DUREX/BOOLEAN",  
84 - "access": "ir",  
85 - "size": 1  
86 - },  
87 "$mcmProtocolLevel": { 86 "$mcmProtocolLevel": {
88 "id": -2, 87 "id": -2,
89 "align": 2, 88 "align": 2,
@@ -100,6 +99,14 @@ @@ -100,6 +99,14 @@
100 "access": "r", 99 "access": "r",
101 "size": 1 100 "size": 1
102 }, 101 },
  102 + "messageAvailableMobile": {
  103 + "id": 4,
  104 + "align": 1,
  105 + "attributes": {},
  106 + "type": "u1",
  107 + "access": "rw",
  108 + "size": 1
  109 + },
103 "$fileIndexReset": { 110 "$fileIndexReset": {
104 "id": -5, 111 "id": -5,
105 "align": 2, 112 "align": 2,
@@ -123,37 +130,37 @@ @@ -123,37 +130,37 @@
123 "manifest": { 130 "manifest": {
124 "protocolLevel": 13, 131 "protocolLevel": 13,
125 "hash": [ 132 "hash": [
126 - 0,  
127 - 164,  
128 - 192,  
129 - 32,  
130 - 22,  
131 - 163,  
132 - 114,  
133 - 239,  
134 - 91,  
135 - 240,  
136 - 123,  
137 - 128,  
138 - 206,  
139 - 12,  
140 - 50,  
141 - 148 133 + 136,
  134 + 153,
  135 + 100,
  136 + 70,
  137 + 146,
  138 + 253,
  139 + 60,
  140 + 140,
  141 + 136,
  142 + 30,
  143 + 15,
  144 + 57,
  145 + 162,
  146 + 138,
  147 + 48,
  148 + 141
142 ], 149 ],
143 "toolVersion": "13.4.1.201311121909", 150 "toolVersion": "13.4.1.201311121909",
144 "name": "DUREX", 151 "name": "DUREX",
145 - "$$md5": "00a4c02016a372ef5bf07b80ce0c3294", 152 + "$$md5": "8899644692fd3c8c881e0f39a28a308d",
146 "build": [ 153 "build": [
147 - 171,  
148 - 30,  
149 - 204,  
150 - 135,  
151 - 71, 154 + 140,
  155 + 129,
  156 + 134,
  157 + 54,
  158 + 72,
152 1, 159 1,
153 0, 160 0,
154 0 161 0
155 ], 162 ],
156 - "date": "2014-07-30T17:03:27T", 163 + "date": "2014-09-02T15:20:57T",
157 "maxAlign": 2, 164 "maxAlign": 2,
158 "maxSize": 201, 165 "maxSize": 201,
159 "version": "1.0.0" 166 "version": "1.0.0"
@@ -162,7 +169,8 @@ @@ -162,7 +169,8 @@
162 "numBytes", 169 "numBytes",
163 "data", 170 "data",
164 "numPackets", 171 "numPackets",
165 - "messageAvailable", 172 + "messageAvailableMobile",
  173 + "messageAvailableDevice",
166 "$mcmProtocolLevel", 174 "$mcmProtocolLevel",
167 "$eapProtocolLevel", 175 "$eapProtocolLevel",
168 "$eapBuildDate", 176 "$eapBuildDate",
@@ -181,7 +189,8 @@ @@ -181,7 +189,8 @@
181 "numBytes", 189 "numBytes",
182 "data", 190 "data",
183 "numPackets", 191 "numPackets",
184 - "messageAvailable" 192 + "messageAvailableMobile",
  193 + "messageAvailableDevice"
185 ], 194 ],
186 "types": { 195 "types": {
187 "system@emmoco.com.System/ResourceCount": { 196 "system@emmoco.com.System/ResourceCount": {
@@ -218,16 +227,6 @@ @@ -218,16 +227,6 @@
218 "align": 1, 227 "align": 1,
219 "size": 1 228 "size": 1
220 }, 229 },
221 - "@emmoco.com.DUREX/BOOLEAN": {  
222 - "values": [  
223 - "TRUE",  
224 - "FALSE"  
225 - ],  
226 - "align": 1,  
227 - "pack": 1,  
228 - "type": "E:@emmoco.com.DUREX/BOOLEAN",  
229 - "size": 1  
230 - },  
231 "system@emmoco.com.System/ParameterGroup": { 230 "system@emmoco.com.System/ParameterGroup": {
232 "values": [ 231 "values": [
233 "GROUP_A", 232 "GROUP_A",
DUREX tests/Base.lproj/DatePickerViewController.xib 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="12F45" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
  3 + <dependencies>
  4 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
  5 + </dependencies>
  6 + <objects>
  7 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PopupViewController">
  8 + <connections>
  9 + <outlet property="datePicker" destination="Kq0-yG-icP" id="0Sh-9C-xLc"/>
  10 + <outlet property="datePickerView" destination="i5M-Pr-FkT" id="dES-lr-Zb0"/>
  11 + <outlet property="view" destination="i5M-Pr-FkT" id="Pih-UT-VNB"/>
  12 + </connections>
  13 + </placeholder>
  14 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
  15 + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
  16 + <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7QC-Xa-liQ">
  20 + <rect key="frame" x="137" y="336" width="46" height="30"/>
  21 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
  22 + <state key="normal" title="Done">
  23 + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
  24 + </state>
  25 + <connections>
  26 + <action selector="closePopup:" destination="-1" eventType="touchUpInside" id="oX3-hN-sqE"/>
  27 + </connections>
  28 + </button>
  29 + <datePicker contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="dateAndTime" minuteInterval="1" translatesAutoresizingMaskIntoConstraints="NO" id="Kq0-yG-icP">
  30 + <rect key="frame" x="0.0" y="138" width="320" height="162"/>
  31 + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
  32 + <date key="date" timeIntervalSinceReferenceDate="431369786.91497999">
  33 + <!--2014-09-02 16:56:26 +0000-->
  34 + </date>
  35 + <timeZone key="timeZone" name="America/Los_Angeles">
  36 + <mutableData key="data">
  37 +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
  38 +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
  39 +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
  40 +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
  41 +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
  42 +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
  43 +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
  44 +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
  45 +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
  46 +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
  47 +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
  48 +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
  49 +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
  50 +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  51 +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  52 +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  53 +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
  54 +</mutableData>
  55 + </timeZone>
  56 + </datePicker>
  57 + </subviews>
  58 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  59 + <constraints>
  60 + <constraint firstAttribute="centerX" secondItem="Kq0-yG-icP" secondAttribute="centerX" id="0GY-9z-buv"/>
  61 + <constraint firstItem="7QC-Xa-liQ" firstAttribute="centerX" secondItem="Kq0-yG-icP" secondAttribute="centerX" id="kfK-JU-v9W"/>
  62 + <constraint firstItem="7QC-Xa-liQ" firstAttribute="top" secondItem="Kq0-yG-icP" secondAttribute="bottom" constant="36" id="wkh-LB-fLl"/>
  63 + </constraints>
  64 + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
  65 + <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/>
  66 + </view>
  67 + </objects>
  68 +</document>
DUREX tests/Base.lproj/DatePickerViewController_iPad.xib 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="5056" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
  3 + <dependencies>
  4 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
  5 + </dependencies>
  6 + <objects>
  7 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PopupViewController">
  8 + <connections>
  9 + <outlet property="datePicker" destination="Ye8-NM-1gf" id="BK3-lm-uDP"/>
  10 + <outlet property="datePickerView" destination="iN0-l3-epB" id="syx-4N-lWz"/>
  11 + <outlet property="view" destination="iN0-l3-epB" id="ily-fa-aEh"/>
  12 + </connections>
  13 + </placeholder>
  14 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
  15 + <view contentMode="scaleToFill" id="iN0-l3-epB">
  16 + <rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <datePicker contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="dateAndTime" minuteInterval="1" translatesAutoresizingMaskIntoConstraints="NO" id="Ye8-NM-1gf">
  20 + <rect key="frame" x="0.0" y="269" width="768" height="216"/>
  21 + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
  22 + <date key="date" timeIntervalSinceReferenceDate="431372189.40412599">
  23 + <!--2014-09-02 17:36:29 +0000-->
  24 + </date>
  25 + <timeZone key="timeZone" name="America/Los_Angeles">
  26 + <mutableData key="data">
  27 +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
  28 +y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
  29 +5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
  30 +8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
  31 +AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
  32 +DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
  33 +HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
  34 +KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
  35 +OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
  36 +Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
  37 +VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
  38 +Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
  39 +cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
  40 +f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  41 +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  42 +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
  43 +AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
  44 +</mutableData>
  45 + </timeZone>
  46 + </datePicker>
  47 + <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b32-QI-eSJ">
  48 + <rect key="frame" x="361" y="511" width="46" height="30"/>
  49 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
  50 + <state key="normal" title="Done">
  51 + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
  52 + </state>
  53 + <connections>
  54 + <action selector="closePopup:" destination="-1" eventType="touchUpInside" id="zqQ-J8-LT0"/>
  55 + </connections>
  56 + </button>
  57 + </subviews>
  58 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  59 + <constraints>
  60 + <constraint firstItem="b32-QI-eSJ" firstAttribute="centerX" secondItem="Ye8-NM-1gf" secondAttribute="centerX" id="9Og-RH-pFc"/>
  61 + <constraint firstAttribute="centerX" secondItem="Ye8-NM-1gf" secondAttribute="centerX" id="GZr-bO-HrS"/>
  62 + <constraint firstItem="b32-QI-eSJ" firstAttribute="top" secondItem="Ye8-NM-1gf" secondAttribute="bottom" constant="34" id="X3X-ac-hcm"/>
  63 + </constraints>
  64 + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
  65 + </view>
  66 + </objects>
  67 +</document>
DUREX tests/Base.lproj/MainStoryboard.storyboard
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="kWw-Rk-wD6"> 2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="12F45" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="kWw-Rk-wD6">
3 <dependencies> 3 <dependencies>
4 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> 4 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
5 </dependencies> 5 </dependencies>
DUREX tests/DUREX test.xcodeproj/project.pbxproj
@@ -28,6 +28,9 @@ @@ -28,6 +28,9 @@
28 F98356D8192E906600EA6821 /* bluetooth.png in Resources */ = {isa = PBXBuildFile; fileRef = F98356D7192E906600EA6821 /* bluetooth.png */; }; 28 F98356D8192E906600EA6821 /* bluetooth.png in Resources */ = {isa = PBXBuildFile; fileRef = F98356D7192E906600EA6821 /* bluetooth.png */; };
29 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */; }; 29 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */; };
30 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356E0192EC84700EA6821 /* MenuTableViewController.m */; }; 30 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F98356E0192EC84700EA6821 /* MenuTableViewController.m */; };
  31 + F98ACEDC19B6294E00D90AEE /* DatePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F98ACEDA19B6294E00D90AEE /* DatePickerViewController.m */; };
  32 + F9AB5A6F19B63931006785E4 /* DatePickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F9AB5A7119B63931006785E4 /* DatePickerViewController.xib */; };
  33 + F9AB5A7219B63938006785E4 /* DatePickerViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F9AB5A7419B63938006785E4 /* DatePickerViewController_iPad.xib */; };
31 F9C77F50192CDE30002DBE8A /* durex.json in Resources */ = {isa = PBXBuildFile; fileRef = F9C77F4F192CDE30002DBE8A /* durex.json */; }; 34 F9C77F50192CDE30002DBE8A /* durex.json in Resources */ = {isa = PBXBuildFile; fileRef = F9C77F4F192CDE30002DBE8A /* durex.json */; };
32 /* End PBXBuildFile section */ 35 /* End PBXBuildFile section */
33 36
@@ -77,6 +80,14 @@ @@ -77,6 +80,14 @@
77 F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommunicationProtocol.m; sourceTree = SOURCE_ROOT; }; 80 F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommunicationProtocol.m; sourceTree = SOURCE_ROOT; };
78 F98356DF192EC84700EA6821 /* MenuTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuTableViewController.h; sourceTree = SOURCE_ROOT; }; 81 F98356DF192EC84700EA6821 /* MenuTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuTableViewController.h; sourceTree = SOURCE_ROOT; };
79 F98356E0192EC84700EA6821 /* MenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewController.m; sourceTree = SOURCE_ROOT; }; 82 F98356E0192EC84700EA6821 /* MenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewController.m; sourceTree = SOURCE_ROOT; };
  83 + F98ACED919B6294E00D90AEE /* DatePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatePickerViewController.h; sourceTree = SOURCE_ROOT; };
  84 + F98ACEDA19B6294E00D90AEE /* DatePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatePickerViewController.m; sourceTree = SOURCE_ROOT; };
  85 + F9AB5A7019B63931006785E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DatePickerViewController.xib; sourceTree = "<group>"; };
  86 + F9AB5A7319B63938006785E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DatePickerViewController_iPad.xib; sourceTree = "<group>"; };
  87 + F9AB5A7619B6393C006785E4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatePickerViewController.strings; sourceTree = "<group>"; };
  88 + F9AB5A7819B6393D006785E4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/DatePickerViewController.strings; sourceTree = "<group>"; };
  89 + F9AB5A7A19B6393F006785E4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatePickerViewController_iPad.strings; sourceTree = "<group>"; };
  90 + F9AB5A7C19B63940006785E4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/DatePickerViewController_iPad.strings; sourceTree = "<group>"; };
80 F9C77F4F192CDE30002DBE8A /* durex.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = durex.json; sourceTree = SOURCE_ROOT; }; 91 F9C77F4F192CDE30002DBE8A /* durex.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = durex.json; sourceTree = SOURCE_ROOT; };
81 /* End PBXFileReference section */ 92 /* End PBXFileReference section */
82 93
@@ -149,6 +160,10 @@ @@ -149,6 +160,10 @@
149 F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */, 160 F98356DA192EAFD400EA6821 /* CommunicationProtocol.m */,
150 F962A231192FCA8A00E4324A /* Stack.h */, 161 F962A231192FCA8A00E4324A /* Stack.h */,
151 F962A232192FCA8A00E4324A /* Stack.m */, 162 F962A232192FCA8A00E4324A /* Stack.m */,
  163 + F98ACED919B6294E00D90AEE /* DatePickerViewController.h */,
  164 + F98ACEDA19B6294E00D90AEE /* DatePickerViewController.m */,
  165 + F9AB5A7119B63931006785E4 /* DatePickerViewController.xib */,
  166 + F9AB5A7419B63938006785E4 /* DatePickerViewController_iPad.xib */,
152 34AAB88C189805300019860D /* Images.xcassets */, 167 34AAB88C189805300019860D /* Images.xcassets */,
153 347186B91807290E00FA0FB2 /* Schemas */, 168 347186B91807290E00FA0FB2 /* Schemas */,
154 347186A718070F7F00FA0FB2 /* Device Picker */, 169 347186A718070F7F00FA0FB2 /* Device Picker */,
@@ -278,9 +293,11 @@ @@ -278,9 +293,11 @@
278 files = ( 293 files = (
279 F98356D8192E906600EA6821 /* bluetooth.png in Resources */, 294 F98356D8192E906600EA6821 /* bluetooth.png in Resources */,
280 F9C77F50192CDE30002DBE8A /* durex.json in Resources */, 295 F9C77F50192CDE30002DBE8A /* durex.json in Resources */,
  296 + F9AB5A6F19B63931006785E4 /* DatePickerViewController.xib in Resources */,
281 34AAB88D189805300019860D /* Images.xcassets in Resources */, 297 34AAB88D189805300019860D /* Images.xcassets in Resources */,
282 F92B0B6C19993D3F00CAEF3E /* Localizable.strings in Resources */, 298 F92B0B6C19993D3F00CAEF3E /* Localizable.strings in Resources */,
283 F961D7FE199A5B4700E9282C /* back_arrow.png in Resources */, 299 F961D7FE199A5B4700E9282C /* back_arrow.png in Resources */,
  300 + F9AB5A7219B63938006785E4 /* DatePickerViewController_iPad.xib in Resources */,
284 F9469169193015EE006DACD3 /* icon_checkmark.png in Resources */, 301 F9469169193015EE006DACD3 /* icon_checkmark.png in Resources */,
285 F961D7F5199A4A4800E9282C /* MainStoryboard.storyboard in Resources */, 302 F961D7F5199A4A4800E9282C /* MainStoryboard.storyboard in Resources */,
286 F946916A193015EE006DACD3 /* icon_delete.png in Resources */, 303 F946916A193015EE006DACD3 /* icon_delete.png in Resources */,
@@ -304,6 +321,7 @@ @@ -304,6 +321,7 @@
304 F98356D6192E835F00EA6821 /* InitialViewController.m in Sources */, 321 F98356D6192E835F00EA6821 /* InitialViewController.m in Sources */,
305 F962A233192FCA8A00E4324A /* Stack.m in Sources */, 322 F962A233192FCA8A00E4324A /* Stack.m in Sources */,
306 34AAB885189804FF0019860D /* EMDevicePickerViewController.m in Sources */, 323 34AAB885189804FF0019860D /* EMDevicePickerViewController.m in Sources */,
  324 + F98ACEDC19B6294E00D90AEE /* DatePickerViewController.m in Sources */,
307 34AAB883189804FF0019860D /* DUREXAppDelegate.m in Sources */, 325 34AAB883189804FF0019860D /* DUREXAppDelegate.m in Sources */,
308 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */, 326 F98356DB192EAFD400EA6821 /* CommunicationProtocol.m in Sources */,
309 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */, 327 F98356E1192EC84700EA6821 /* MenuTableViewController.m in Sources */,
@@ -359,6 +377,26 @@ @@ -359,6 +377,26 @@
359 name = back_arrow.png; 377 name = back_arrow.png;
360 sourceTree = SOURCE_ROOT; 378 sourceTree = SOURCE_ROOT;
361 }; 379 };
  380 + F9AB5A7119B63931006785E4 /* DatePickerViewController.xib */ = {
  381 + isa = PBXVariantGroup;
  382 + children = (
  383 + F9AB5A7019B63931006785E4 /* Base */,
  384 + F9AB5A7619B6393C006785E4 /* es */,
  385 + F9AB5A7819B6393D006785E4 /* en */,
  386 + );
  387 + name = DatePickerViewController.xib;
  388 + sourceTree = SOURCE_ROOT;
  389 + };
  390 + F9AB5A7419B63938006785E4 /* DatePickerViewController_iPad.xib */ = {
  391 + isa = PBXVariantGroup;
  392 + children = (
  393 + F9AB5A7319B63938006785E4 /* Base */,
  394 + F9AB5A7A19B6393F006785E4 /* es */,
  395 + F9AB5A7C19B63940006785E4 /* en */,
  396 + );
  397 + name = DatePickerViewController_iPad.xib;
  398 + sourceTree = SOURCE_ROOT;
  399 + };
362 /* End PBXVariantGroup section */ 400 /* End PBXVariantGroup section */
363 401
364 /* Begin XCBuildConfiguration section */ 402 /* Begin XCBuildConfiguration section */
@@ -398,6 +436,7 @@ @@ -398,6 +436,7 @@
398 "INFOPLIST_FILE[sdk=*]" = "DUREX test-Info.plist"; 436 "INFOPLIST_FILE[sdk=*]" = "DUREX test-Info.plist";
399 IPHONEOS_DEPLOYMENT_TARGET = 7.1; 437 IPHONEOS_DEPLOYMENT_TARGET = 7.1;
400 ONLY_ACTIVE_ARCH = YES; 438 ONLY_ACTIVE_ARCH = YES;
  439 + OTHER_CODE_SIGN_FLAGS = "-gta";
401 SDKROOT = iphoneos; 440 SDKROOT = iphoneos;
402 TARGETED_DEVICE_FAMILY = "1,2"; 441 TARGETED_DEVICE_FAMILY = "1,2";
403 }; 442 };
@@ -432,6 +471,7 @@ @@ -432,6 +471,7 @@
432 GCC_WARN_UNUSED_VARIABLE = YES; 471 GCC_WARN_UNUSED_VARIABLE = YES;
433 "INFOPLIST_FILE[sdk=*]" = "DUREX test-Info.plist"; 472 "INFOPLIST_FILE[sdk=*]" = "DUREX test-Info.plist";
434 IPHONEOS_DEPLOYMENT_TARGET = 7.1; 473 IPHONEOS_DEPLOYMENT_TARGET = 7.1;
  474 + OTHER_CODE_SIGN_FLAGS = "-gta";
435 SDKROOT = iphoneos; 475 SDKROOT = iphoneos;
436 TARGETED_DEVICE_FAMILY = "1,2"; 476 TARGETED_DEVICE_FAMILY = "1,2";
437 VALIDATE_PRODUCT = YES; 477 VALIDATE_PRODUCT = YES;
DUREX tests/DUREX test.xcodeproj/project.xcworkspace/xcuserdata/imanol.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type
DUREX tests/DatePickerViewController.h 0 → 100644
  1 +//
  2 +// PopupViewController.h
  3 +// DUREX test
  4 +//
  5 +// Created by Imanol Barba on 9/2/14.
  6 +// Copyright (c) 2014 Emmoco. All rights reserved.
  7 +//
  8 +
  9 +@class DatePickerViewController;
  10 +
  11 +#import <UIKit/UIKit.h>
  12 +#import <QuartzCore/QuartzCore.h>
  13 +#import "DUREXAppDelegate.h"
  14 +
  15 +@protocol DatePickerViewControllerDelegate <NSObject>
  16 +- (void)addItemViewController:(DatePickerViewController*)controller didFinishEnteringItem:(NSDate *)date;
  17 +
  18 +@end
  19 +
  20 +@interface DatePickerViewController : UIViewController
  21 +
  22 +@property (strong, nonatomic) IBOutlet UIView *datePickerView;
  23 +@property (strong, nonatomic) IBOutlet UIDatePicker *datePicker;
  24 +@property (nonatomic, strong) id <DatePickerViewControllerDelegate> delegate;
  25 +
  26 +- (void)showInView:(UIView *)aView animated:(BOOL)animated;
  27 +- (IBAction)closePopup:(id)sender;
  28 +
  29 +@end
DUREX tests/DatePickerViewController.m 0 → 100644
  1 +//
  2 +// PopupViewController.m
  3 +// DUREX test
  4 +//
  5 +// Created by Imanol Barba on 9/2/14.
  6 +// Copyright (c) 2014 Emmoco. All rights reserved.
  7 +//
  8 +
  9 +#import "DatePickerViewController.h"
  10 +
  11 +@interface DatePickerViewController ()
  12 +
  13 +@end
  14 +
  15 +@implementation DatePickerViewController
  16 +
  17 +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  18 +{
  19 + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  20 + if (self) {
  21 + // Custom initialization
  22 + }
  23 + return self;
  24 +}
  25 +
  26 +- (void)viewDidLoad
  27 +{
  28 + self.view.backgroundColor=[[UIColor blackColor] colorWithAlphaComponent:.6];
  29 + self.datePickerView.layer.cornerRadius = 5;
  30 + self.datePickerView.layer.shadowOpacity = 0.8;
  31 + self.datePickerView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
  32 + [super viewDidLoad];
  33 + // Do any additional setup after loading the view from its nib.
  34 +}
  35 +
  36 +- (void)didReceiveMemoryWarning
  37 +{
  38 + [super didReceiveMemoryWarning];
  39 + // Dispose of any resources that can be recreated.
  40 +}
  41 +
  42 +- (void)showAnimate
  43 +{
  44 + self.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
  45 + self.view.alpha = 0;
  46 + [UIView animateWithDuration:.25 animations:^{
  47 + self.view.alpha = 1;
  48 + self.view.transform = CGAffineTransformMakeScale(1, 1);
  49 + }];
  50 +}
  51 +
  52 +- (void)removeAnimate
  53 +{
  54 + [UIView animateWithDuration:.25 animations:^{
  55 + self.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
  56 + self.view.alpha = 0.0;
  57 + } completion:^(BOOL finished) {
  58 + if (finished) {
  59 + [self.view removeFromSuperview];
  60 + }
  61 + }];
  62 +}
  63 +
  64 +- (IBAction)closePopup:(id)sender
  65 +{
  66 + [self.delegate addItemViewController:self didFinishEnteringItem:[[self datePicker] date]];
  67 + [self removeAnimate];
  68 +}
  69 +
  70 +- (void)showInView:(UIView *)aView animated:(BOOL)animated
  71 +{
  72 + [aView addSubview:self.view];
  73 + if (animated) {
  74 + [self showAnimate];
  75 + }
  76 +}
  77 +
  78 +@end
DUREX tests/MenuTableViewController.h
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 #import "CommunicationProtocol.h" 10 #import "CommunicationProtocol.h"
11 #import "Stack.h" 11 #import "Stack.h"
  12 +#import "DatePickerViewController.h"
12 13
13 #define num(x) [NSNumber numberWithUnsignedInt:x] 14 #define num(x) [NSNumber numberWithUnsignedInt:x]
14 15
@@ -39,9 +40,10 @@ enum { @@ -39,9 +40,10 @@ enum {
39 REPORT, 40 REPORT,
40 } navigationLevel; 41 } navigationLevel;
41 42
42 -@interface MenuTableViewController : UITableViewController 43 +@interface MenuTableViewController : UITableViewController <DatePickerViewControllerDelegate>
43 44
44 @property (strong,nonatomic) Stack *parentLayout; 45 @property (strong,nonatomic) Stack *parentLayout;
  46 +@property (strong,nonatomic) DatePickerViewController *popupViewController;
45 47
46 - (void) navBack; 48 - (void) navBack;
47 49
DUREX tests/MenuTableViewController.m
@@ -266,6 +266,19 @@ @@ -266,6 +266,19 @@
266 NSLog(@"[MenuTableViewController.m]: Changing to navLevel: BASIC_CONFIGURATION"); 266 NSLog(@"[MenuTableViewController.m]: Changing to navLevel: BASIC_CONFIGURATION");
267 [self changeNavLevel:BASIC_CONFIGURATION:TRUE]; 267 [self changeNavLevel:BASIC_CONFIGURATION:TRUE];
268 } 268 }
  269 + else if([cellName isEqualToString:NSLocalizedString(@"Update Date & Time", nil)] && [self currentNavLevel] == BASIC_CONFIGURATION)
  270 + {
  271 + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
  272 + {
  273 + self.popupViewController = [[DatePickerViewController alloc] initWithNibName:@"DatePickerViewController_iPad" bundle:nil];
  274 + [self.popupViewController showInView:self.navigationController.view animated:YES];
  275 + }
  276 + else
  277 + {
  278 + self.popupViewController = [[DatePickerViewController alloc] initWithNibName:@"DatePickerViewController" bundle:nil];
  279 + [self.popupViewController showInView:self.navigationController.view animated:YES];
  280 + }
  281 + }
269 282
270 } 283 }
271 284
@@ -333,6 +346,14 @@ @@ -333,6 +346,14 @@
333 return cell; 346 return cell;
334 } 347 }
335 348
  349 +- (void)addItemViewController:(DatePickerViewController *)controller didFinishEnteringItem:(NSDate *)date
  350 +{
  351 + NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
  352 + NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
  353 + NSDateComponents *components = [calendar components:units fromDate:date];
  354 + [_protocol updateTime: components];
  355 +}
  356 +
336 357
337 /* 358 /*
338 // Override to support conditional editing of the table view. 359 // Override to support conditional editing of the table view.
DUREX tests/durex.json deleted
1 -{  
2 - "resources": {  
3 - "$eapProtocolLevel": {  
4 - "id": -3,  
5 - "align": 2,  
6 - "attributes": {"readonly": true},  
7 - "type": "u2",  
8 - "access": "r",  
9 - "size": 2  
10 - },  
11 - "numBytes": {  
12 - "id": 1,  
13 - "align": 1,  
14 - "attributes": {},  
15 - "type": "u1",  
16 - "access": "rw",  
17 - "size": 1  
18 - },  
19 - "data": {  
20 - "id": 2,  
21 - "align": 1,  
22 - "attributes": {},  
23 - "type": "C:201",  
24 - "access": "rw",  
25 - "size": 201  
26 - },  
27 - "$activeGroup": {  
28 - "id": -10,  
29 - "align": 1,  
30 - "pack": 1,  
31 - "attributes": {"readwrite": true},  
32 - "type": "E:system@emmoco.com.System/ParameterGroup",  
33 - "access": "rw",  
34 - "size": 1  
35 - },  
36 - "$mcmDisconnect": {  
37 - "id": -9,  
38 - "align": 1,  
39 - "attributes": {"writeonly": true},  
40 - "type": "u1",  
41 - "access": "w",  
42 - "size": 1  
43 - },  
44 - "$eapBuildDate": {  
45 - "dim": 8,  
46 - "id": -4,  
47 - "align": 1,  
48 - "attributes": {"readonly": true},  
49 - "type": "A8:u1",  
50 - "access": "r",  
51 - "size": 8  
52 - },  
53 - "numPackets": {  
54 - "id": 3,  
55 - "align": 1,  
56 - "attributes": {},  
57 - "type": "u1",  
58 - "access": "rw",  
59 - "size": 1  
60 - },  
61 - "$resourceCount": {  
62 - "id": -7,  
63 - "align": 1,  
64 - "attributes": {"readonly": true},  
65 - "type": "S:system@emmoco.com.System/ResourceCount",  
66 - "access": "r",  
67 - "size": 2  
68 - },  
69 - "$schemaHash": {  
70 - "dim": 20,  
71 - "id": -6,  
72 - "align": 1,  
73 - "attributes": {"readonly": true},  
74 - "type": "A20:u1",  
75 - "access": "r",  
76 - "size": 20  
77 - },  
78 - "messageAvailable": {  
79 - "id": 4,  
80 - "align": 1,  
81 - "pack": 1,  
82 - "attributes": {"indicator": true},  
83 - "type": "E:@emmoco.com.DUREX/BOOLEAN",  
84 - "access": "ir",  
85 - "size": 1  
86 - },  
87 - "$mcmProtocolLevel": {  
88 - "id": -2,  
89 - "align": 2,  
90 - "attributes": {"readonly": true},  
91 - "type": "u2",  
92 - "access": "r",  
93 - "size": 2  
94 - },  
95 - "$mobileRssi": {  
96 - "id": -8,  
97 - "align": 1,  
98 - "attributes": {"readonly": true},  
99 - "type": "i1",  
100 - "access": "r",  
101 - "size": 1  
102 - },  
103 - "$fileIndexReset": {  
104 - "id": -5,  
105 - "align": 2,  
106 - "attributes": {"writeonly": true},  
107 - "type": "i2",  
108 - "access": "w",  
109 - "size": 2  
110 - }  
111 - },  
112 - "resourceNamesSys": [  
113 - "$activeGroup",  
114 - "$eapBuildDate",  
115 - "$eapProtocolLevel",  
116 - "$fileIndexReset",  
117 - "$mcmDisconnect",  
118 - "$mcmProtocolLevel",  
119 - "$mobileRssi",  
120 - "$resourceCount",  
121 - "$schemaHash"  
122 - ],  
123 - "manifest": {  
124 - "protocolLevel": 13,  
125 - "hash": [  
126 - 0,  
127 - 164,  
128 - 192,  
129 - 32,  
130 - 22,  
131 - 163,  
132 - 114,  
133 - 239,  
134 - 91,  
135 - 240,  
136 - 123,  
137 - 128,  
138 - 206,  
139 - 12,  
140 - 50,  
141 - 148  
142 - ],  
143 - "toolVersion": "13.4.1.201311121909",  
144 - "name": "DUREX",  
145 - "$$md5": "00a4c02016a372ef5bf07b80ce0c3294",  
146 - "build": [  
147 - 171,  
148 - 30,  
149 - 204,  
150 - 135,  
151 - 71,  
152 - 1,  
153 - 0,  
154 - 0  
155 - ],  
156 - "date": "2014-07-30T17:03:27T",  
157 - "maxAlign": 2,  
158 - "maxSize": 201,  
159 - "version": "1.0.0"  
160 - },  
161 - "resourceNames": [  
162 - "numBytes",  
163 - "data",  
164 - "numPackets",  
165 - "messageAvailable",  
166 - "$mcmProtocolLevel",  
167 - "$eapProtocolLevel",  
168 - "$eapBuildDate",  
169 - "$fileIndexReset",  
170 - "$schemaHash",  
171 - "$resourceCount",  
172 - "$mobileRssi",  
173 - "$mcmDisconnect",  
174 - "$activeGroup"  
175 - ],  
176 - "attributes": {  
177 - "description": "",  
178 - "version": "1.0.0"  
179 - },  
180 - "resourceNamesApp": [  
181 - "numBytes",  
182 - "data",  
183 - "numPackets",  
184 - "messageAvailable"  
185 - ],  
186 - "types": {  
187 - "system@emmoco.com.System/ResourceCount": {  
188 - "packed": false,  
189 - "align": 1,  
190 - "type": "S:system@emmoco.com.System/ResourceCount",  
191 - "size": 2,  
192 - "fields": [  
193 - {  
194 - "pad": 0,  
195 - "align": 1,  
196 - "name": "app",  
197 - "type": "u1",  
198 - "size": 1  
199 - },  
200 - {  
201 - "pad": 0,  
202 - "align": 1,  
203 - "name": "sys",  
204 - "type": "u1",  
205 - "size": 1  
206 - }  
207 - ]  
208 - },  
209 - "std:i2": {  
210 - "align": 2,  
211 - "size": 2  
212 - },  
213 - "std:i1": {  
214 - "align": 1,  
215 - "size": 1  
216 - },  
217 - "std:u1": {  
218 - "align": 1,  
219 - "size": 1  
220 - },  
221 - "@emmoco.com.DUREX/BOOLEAN": {  
222 - "values": [  
223 - "TRUE",  
224 - "FALSE"  
225 - ],  
226 - "align": 1,  
227 - "pack": 1,  
228 - "type": "E:@emmoco.com.DUREX/BOOLEAN",  
229 - "size": 1  
230 - },  
231 - "system@emmoco.com.System/ParameterGroup": {  
232 - "values": [  
233 - "GROUP_A",  
234 - "GROUP_B"  
235 - ],  
236 - "align": 1,  
237 - "pack": 1,  
238 - "type": "E:system@emmoco.com.System/ParameterGroup",  
239 - "size": 1  
240 - },  
241 - "std:u2": {  
242 - "align": 2,  
243 - "size": 2  
244 - }  
245 - },  
246 - "imports": {"@emmoco.com.DUREX": true}  
247 -}  
248 \ No newline at end of file 0 \ No newline at end of file
DUREX tests/en.lproj/DatePickerViewController.strings 0 → 100644
  1 +
  2 +/* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "7QC-Xa-liQ"; */
  3 +"7QC-Xa-liQ.normalTitle" = "Done";
DUREX tests/en.lproj/DatePickerViewController_iPad.strings 0 → 100644
  1 +
  2 +/* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "b32-QI-eSJ"; */
  3 +"b32-QI-eSJ.normalTitle" = "Done";
DUREX tests/es.lproj/DatePickerViewController.strings 0 → 100644
  1 +
  2 +/* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "7QC-Xa-liQ"; */
  3 +"7QC-Xa-liQ.normalTitle" = "Aceptar";
DUREX tests/es.lproj/DatePickerViewController_iPad.strings 0 → 100644
  1 +
  2 +/* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "b32-QI-eSJ"; */
  3 +"b32-QI-eSJ.normalTitle" = "Aceptar";
  1 +- messageAvailable checks and status checks NOT working
  2 +- pop to previous view on connect error NOT working
  3 +
  4 +
  5 +
1 - Incident class 6 - Incident class
2 - Sale class 7 - Sale class
3 - Sale parser 8 - Sale parser