• Aucun résultat trouvé

Free your iPod Touch

N/A
N/A
Protected

Academic year: 2022

Partager "Free your iPod Touch"

Copied!
19
0
0

Texte intégral

(1)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Developing for Apple iPod under GNU/Linux

Gwenhaël Goavec-Merou1,2 and Jean-Michel Friedt1

1 Association Projet Aurore

2ARMadeus Project

slides available at http://www.trabucayre.com

July 6 2010

1 / 19

(2)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Objectives

• Becoming familiar with embedded devices around us, especially as development platform for educational purposes

• Developing on proprietary platforms using exclusively opensource tools

⇒selection of the iPod Touch for its widespread availability, its computational performances, and an operating system supporting a POSIX layer

⇒challenge of developing on this closed, proprietary platform (Apple) using free tools.

2 / 19

(3)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Outline

1 free your iPod Touch

2 the cross-compilation toolchain and linking with proprietary libraries

3 POSIX example

4 COCOA example

5 application to the use of an opensource Bluetooth stack

6 practical demonstrations

3 / 19

(4)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Free your iPod Touch

The default conguration is to only allow the execution of programs downloaded from iTunes (requiring a fee from developers).

• Opensource tool running under GNU/Linux: spirit1,

• requires a clean iPod under iOS≤3.1.3 (warning: current iTune update installs iOS 4),

• reinitializes the iPod (possible data loss) to provide a limitation-free iOS 3.1.3, mainly removing the requirement to only execute programs provided by iTunes,

• provides a Debian-like package manager (Cydia), installed during the upgrade.

Need to start usbmuxd with root rights.

→availability of a ssh server for connecting over the wi link, program transfer and execution either from a text-mode console or a graphical interface (Springboard).

1http://spiritjb.com

4 / 19

(5)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Opensource cross-compilation toolchain

• iPod Touch is based on a Cortex A8 ARM processor, supported by gcc

• the project code.google.com/p/iphonedevonlinux provides an installation script for the cross-compilation toolchain, using the proprietary but free Apple libraries,

• requires a registration at developer.apple.com to download the XCode archive (includes the libraries)

• consider the script as a guide towards the toolchain generation, but might require some minor modication depending on your particular GNU/Linux installation and the latest XCode version.

• Beware of disk usage (>8.5 GB) !

5 / 19

(6)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Toolchain validation: POSIX application

POSIX program example:

#i n c l u d e < s t d i o . h>

i n t main (v o i d) {

p r i n t f ("Ipod : Hello World\n") ; r e t u r n 0 ;

}

Compilation:

arma p p l ed a r w i n 9g c cco h e l l o W o r l d . o h e l l o W o r l d . c arm−a p p l e−d a r w i n 9−g c c−bind_a t_lo ad−w−o h e l l o h e l l o W o r l d . c

Installation:

@scpr p h e l l o r o o t @ $ ( IP_IPOD ) : / u s r / l o c a l / b i n

@ssh r o o t @ $ ( IP_IPOD ) "cd / usr / l o c a l / bin ; l d i d -S h e l l o ; k i l l a l l SpringBoard"

6 / 19

(7)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Objective C

• Main language on NeXTSTEP OS,

• imposed by Apple to use the graphical interface

• Object oriented language using a C-like syntax

• supported by GCC: llvm-gcc compiled with objc support The header le (.h):

#i m p o r t <o b j c / o b j c . h>

#i m p o r t <o b j c / O b j e c t . h>

#i m p o r t " protoDelegate . h"

@ i n t e r f a c e my_class : O b j e c t {

i d <p r o t o D e l e g a t e > d e l e g a t e ; i n t nb ;

}

(v o i d) s a y H e l l o ;

@ p r o p e r t y ( nonatomic , a s s i g n ) i n t nb ;

@end

Implementation le (.m):

#i m p o r t "my_class . h"

@ i m p l e m e n t a t i o n my_class : O b j e c t

@ s y n t h e s i z e nb ;

(v o i d) s a y H e l l o {

p r i n t f (" Hello , %d ! \ n", nb ) ; }

@end

7 / 19

(8)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Objective C

Object instanciation and method use:

#i m p o r t <o b j c / o b j c . h>

#i m p o r t <o b j c / O b j e c t . h>

#i m p o r t "my_class . h"

i n t main (v o i d) {

my_class mc = [ [ my_class a l l o c ] i n i t ] ; [ mc setNb : 1 ] ;

[ mc s a y H e l l o ] ; mc . nb =2;

[ mc s a y H e l l o ] ; r e t u r n 0 ; }

Compilation:

l l v m−g c c−o o b j c _ e x e m p l e main .m my_class .m−l o b j c

Result (running on a GNU/Linux computer):

g w e @ l i n u x o bj c _ ex a mp l e $ . / o b j c _e x am p l e H e l l o , 1 !

H e l l o , 2 !

8 / 19

(9)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Graphical (COCOA) example

@ i m p l e m e n t a t i o n H e l l o C o c o a

(v o i d) a p p l i c a t i o n D i d F i n i s h L a u n c h i n g : ( U I A p p l i c a t i o n ) a p p l i c a t i o n {

window = [ [ [ UIWindow a l l o c ] i n i t W i t h F r a m e : [ [ U I S c r e e n m a i n S c r e e n ] bounds ] ]→

,→ a u t o r e l e a s e ] ;

CGRect windowRect = [ [ U I S c r e e n m a i n S c r e e n ] a p p l i c a t i o n F r a m e ] ; windowRect . o r i g i n . x = windowRect . o r i g i n . y = 0 . 0 f ;

window = [ [ UIWindow a l l o c ] i n i t W i t h F r a m e : [ [ U I S c r e e n m a i n S c r e e n ] bounds ] ] ; window . b a c k g r o u n d C o l o r = [ U I C o l o r w h i t e C o l o r ] ;

CGRect t x t F r a m e = CGRectMake ( 5 0 , 1 5 0 , 1 5 0 , 1 5 0 ) ;

UITextView ∗t x t V i e w = [ [ UITextView a l l o c ] i n i t W i t h F r a m e : t x t F r a m e ] ; t x t V i e w . t e x t = @" Hello Cocoa";

UIFont ∗f o n t = [ UIFont b o l d S y s t e m F o n t O f S i z e : 1 8 . 0 ] ; t x t V i e w . f o n t = f o n t ;

[ window addSubview : t x t V i e w ] ; [ t x t V i e w r e l e a s e ] ;

[ window m a k e K e y A n d V i s i b l e ] ; }

@end

9 / 19

(10)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Bluetooth communication stack

• The default API is only compatible with Apple Compliant peripherals

• Alternate opensource implementation: BTstack, available at http://code.google.com/p/btstack2.

BTstack is compliant with Cocoa and POSIX applications.

Our contribution:

• extending this library to handle at best a RFCOMM (virtual serial port) communication link

• compilation of BTstack using the opensource cross-compilation toolchain

2owner: Matthias Ringwald

10 / 19

(11)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

BTstack structure

loop event Socket

rfcomm l2cap hci

Bluetooth Module

Cocoa

App1

POSIX

App2 App3

Cocoa

BTDaemon

bluetooth stack

Structure:

• Use the low-level stack, provided by Apple, in charge of fetching the packets at the hardware level

• BTstack provides a daemon, BTDaemon, linking with both low-level stack and applications

• Bluetooth stack handling is performed through the

BTStackManager library (for Cocoa) or by direct implementation (for POSIX)

11 / 19

(12)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

First example: RFCOMM link with a PC

On the iPod Touch side:

• bind the Bluetooth socket: rfcomm MAC_EEEPC

• cat</tmp/rfcomm0

• or launch a dedicated application (in this example, graphical display of transmitted values)

• On the PC side: an USB-Bluetooth adapter

• No authentication

• on the PC:

rfcomm listen 4

puis

echo "val:0.15" > /dev/rfcomm4

12 / 19

(13)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Details concerning the use of Bluetooth

Bluetooth link initialization:

b t = [ BTstackManager s h a r e d I n s t a n c e ] ; [ b t s e t D e l e g a t e :s e l f] ;

[ b t a d d L i s t e n e r :s e l f] ; [ b t a c t i v a t e ] ;

Sentence reception:

−(v o i d) r f c o m m D a t a R e c e i v e d F o r C o n n e c t i o n I D : ( u i n t 1 6 _ t ) c o n n e c t i o n I D w i t h D a t a : (→

,→u i n t 8 _ t ) p a c k e t o f L e n : ( u i n t 1 6 _ t ) s i z e { memcpy ( tmp+nb , p a c k e t , s i z e ) ;

nb+=s i z e ;

i f ( p a c k e t [ s i z e1] == ' \0 ') {

N S S t r i n g ∗s t r 2 = [ [ N S S t r i n g a l l o c ] i n i t W i t h C S t r i n g : (c h a r∗) tmp+4 e n c o d i n g : ,1 ] ;

CGFloat v a l = [ s t r 2 d o u b l e V a l u e ] ; [ a f f S i n a d d P o i n t : v a l ] ;

nb = 0 ; } }

13 / 19

(14)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Second example: RFCOMM link with a Free2Move adapter

• Any embedded system

providing an asynchronous link (RS232) can communicate through a Bluetooth link (microcontroler)

• In this example, the iPod provides data display and storage.

RS232−BT Free2Move converter

USB−

RS232 curve of the transmitted values transmitted value

USB power supply: 5V

14 / 19

(15)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Third example: controling a LEGO NXT brick

• Authentication issue: the NXT brick requires the pin 1234 bluetooth-agent "1234" under GNU/Linux

• Simple and well documented protocol3 4

Addition of commands to the BTstackManager on the iPod Touch:

1 creation of the l2cap channel:

bt_send_cmd(&hci_write_authentication_enable, 1);

2 when receiving request for Pin Code:

bt_send_cmd(&hci_pin_code_request_reply, &event_addr, 4,"1234");

3LEGO Mindstorms NXT Direct Commands v1.00 (2006), available at http://www.microframeworkprojects.com/images/d/df/LEGO_

MINDSTORMS_NXT_Direct_commands.pdf

4LEGO Mindstorms NXT Ultrasonic Sensor I2C Communication Protocol v1.00 (2006), available at http://www3.wooster.edu/physics/jacobs/220/Appendix_7_

Ultrasonic_Sensor_I2C_communication_protocol.pdf, or for a more readable version in C: http://stackoverow.com/questions/1967978/

lego-mindstorm-nxt-cocoa-and-hitechnic-sensors

15 / 19

(16)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Accessing the iPod accelerometers

Two step approach:

1 Initialisation:

/ I n i t i a l i s a t i o n /

U I A c c e l e r o m e t e r ∗a c c e l = [ U I A c c e l e r o m e t e r s h a r e d A c c e l e r o m e t e r ] ; / f o r c a l l b a c k f u n c t i o n /

a c c e l . d e l e g a t e = s e l f; /∗ t i m e r f o r e v e n t ∗/

a c c e l . u p d a t e I n t e r v a l = 0 . 0 3 f ;

2 Information retrieval:

(v o i d) a c c e l e r o m e t e r : ( U I A c c e l e r o m e t e r ∗) a c e l d i d A c c e l e r a t e : (→

,→U I A c c e l e r a t i o n

∗) a c e l e r {

vx = a c e l e r . x ; vy = a c e l e r . y ; v z = a c e l e r . z ; [ . . . ]

}

withacceler.{x,y,z} oating type values providing tilt angle informations, in radians

16 / 19

(17)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Sending commands from the iPod to NXT

Sentences to be sent:

c h a r msg_fwd_v [30]={0 x0d , 0 x00 , 0 x80 , 0 x04 , 0 x00 , 0 x00 , 1 + 4 , 1 , 0 x00 , 0 x20 , 0 , 0 , 0 , 0 , 0 , 0 x0d , 0 x00 , 0 x80 , 0 x04 , 0 x02 , 0 x00 , 1 + 4 , 1 , 0 x00 , 0 x20 , 0 , 0 , 0 , 0 , 0 } ;

Controling the motors from a PC:

msg_fwd_v [5]= d r o i t e ; msg_fwd_v [20]= gauche ;

// n x t _ s e n d r e c v ( msg_fwd_v , s i z e o f ( msg_fwd_v ) ) ;

s t a t u s f = w r i t e ( bt_socket , msg_fwd_v , s i z e o f( msg_fwd_v ) ) ;

Controling the motors from the iPod:

(v o i d) a c c e l e r o m e t e r : ( U I A c c e l e r o m e t e r ∗) a c e l d i d A c c e l e r a t e : ( U I A c c e l e r a t i o n ,→ ∗) a c e l e r

{

c h a r vx = (c h a r) ( a c e l e r . x∗100) ; c h a r vy = (c h a r) ( a c e l e r . y∗100) ; msg_fwd_v [ 5 ] = msg_fwd_v [ 2 0 ] = vx ;

i f ( vy <−0) msg_fwd_v [ 5 ] = vx+vy ; e l s e i f ( vy > 0 ) msg_fwd_v [ 2 0 ] = vxvy ; [ b t sendRFCOMMPacketForChannelID : 1

p a c k e t : ( u i n t 8 _ t ∗) msg_fwd_v l e n :s i z e o f( msg_fwd_v ) ] ; }

17 / 19

(18)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Demonstration

Control of the LEGO NXT brick from the iPod accelerometer through a Bluetooth wireless link

18 / 19

(19)

Goavec-MerouG.

& al.

Objectives Prérequis Cocoa Bluetooth Conclusion

Conclusion and perspectives

• we have demonstrated the ability to develop on the iPod Touch using opensource tools

• demonstration of applications running in text mode (POSIX) and using the graphical interface (COCOA),

• ssh over wi and Bluetooth wireless communication links,

• representative of some of the aspects of embedded system development (cross-compilation, hardware data access through an operating system)

but, unless the platform is already available, is the eort worth the time spent with respect to developing under Android ?

19 / 19

Références

Documents relatifs

After the initial pilot period of EuDML, it is envisioned that publishers should contribute to EuDML in this way: selecting a EuDML member that would host a copy of their content,

For the particular case of the problem when p=0, Alt, Caffarelli and Friedman introduced in [1] a monotonicity formula and showed the optimal Lipschitz regular- ity of minimizers and

a Unité de Recherche en Génie Enzymatique et Alimentaire, Laboratoire d’Étude et de Recherche en Chimie Appliquée, École Polytechnique d’Abomey-Calavi,

LONGO, Modular Structure of the Local Observables Associated with the Free Massless Scalar Field Theory, Comm. SIMON, Methods of Modern Mathematical Physics,

L’accès aux archives de la revue « Cahiers de topologie et géométrie différentielle catégoriques » implique l’accord avec les conditions générales d’utilisation

A word-level n-gram based approach is used to classify code mixed cross script question records (comprising of words belonging to both English and Bengali languages), into

Shared Task is focused on Indian regional languages, wherein we worked on Bengali- English code mixed cross script questions classification.. As scripting used

Problem Statement: Building a question answering system which takes cross- script (non-native) code-mixed questions as information request, processes a cross-script code-mixed