Commit 78610e3d30b86c2c91a85ed0c285eb58581f9832
0 parents
Initial Commit
Showing
106 changed files
with
6179 additions
and
0 deletions
Too many changes to show.
To preserve performance only 78 of 106 files are displayed.
Blinker/.classpath
0 → 100644
1 | +++ a/Blinker/.classpath | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<classpath> | |
3 | + <classpathentry kind="src" path="src"/> | |
4 | + <classpathentry kind="src" path="gen"/> | |
5 | + <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> | |
6 | + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> | |
7 | + <classpathentry kind="lib" path="libs/EmmocoFramework.jar"/> | |
8 | + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> | |
9 | + <classpathentry kind="output" path="bin/classes"/> | |
10 | +</classpath> | ... | ... |
Blinker/.project
0 → 100644
1 | +++ a/Blinker/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>Blinker</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + </projects> | |
7 | + <buildSpec> | |
8 | + <buildCommand> | |
9 | + <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> | |
10 | + <arguments> | |
11 | + </arguments> | |
12 | + </buildCommand> | |
13 | + <buildCommand> | |
14 | + <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> | |
15 | + <arguments> | |
16 | + </arguments> | |
17 | + </buildCommand> | |
18 | + <buildCommand> | |
19 | + <name>org.eclipse.jdt.core.javabuilder</name> | |
20 | + <arguments> | |
21 | + </arguments> | |
22 | + </buildCommand> | |
23 | + <buildCommand> | |
24 | + <name>com.android.ide.eclipse.adt.ApkBuilder</name> | |
25 | + <arguments> | |
26 | + </arguments> | |
27 | + </buildCommand> | |
28 | + </buildSpec> | |
29 | + <natures> | |
30 | + <nature>com.android.ide.eclipse.adt.AndroidNature</nature> | |
31 | + <nature>org.eclipse.jdt.core.javanature</nature> | |
32 | + </natures> | |
33 | +</projectDescription> | ... | ... |
Blinker/.settings/org.eclipse.jdt.core.prefs
0 → 100644
Blinker/AndroidManifest.xml
0 → 100644
1 | +++ a/Blinker/AndroidManifest.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + package="com.emmoco.example.blinker" | |
4 | + android:versionCode="1" | |
5 | + android:versionName="0.8"> | |
6 | + <uses-sdk android:minSdkVersion="8" | |
7 | + android:targetSdkVersion="8" | |
8 | + android:maxSdkVersion="8" /> | |
9 | + | |
10 | + <supports-screens android:largeScreens="false" android:xlargeScreens="false" /> | |
11 | + | |
12 | + | |
13 | + <!-- Application --> | |
14 | + <application | |
15 | + android:label="@string/app_name" | |
16 | + android:debuggable="false" | |
17 | + android:icon="@drawable/icon" | |
18 | + android:theme="@style/AppTheme"> | |
19 | + | |
20 | + <activity android:name="com.emmoco.example.blinker.MainActivity" | |
21 | + android:screenOrientation="portrait" | |
22 | + android:alwaysRetainTaskState="true" | |
23 | + android:launchMode="singleTop" | |
24 | + android:clearTaskOnLaunch="false" | |
25 | + android:label="@string/app_name" | |
26 | + android:configChanges="keyboardHidden|orientation"> | |
27 | + <intent-filter> | |
28 | + <action android:name="android.intent.action.MAIN" /> | |
29 | + <category android:name="android.intent.category.LAUNCHER" /> | |
30 | + </intent-filter> | |
31 | + </activity> | |
32 | + <activity android:name="com.emmoco.example.blinker.SetDeviceActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity> | |
33 | + </application> | |
34 | + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | |
35 | + <uses-permission android:name="android.permission.BLUETOOTH" /> | |
36 | + <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> | |
37 | + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> | |
38 | + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> | |
39 | + <uses-permission android:name="android.permission.INTERNET" /> | |
40 | +</manifest> | ... | ... |
Blinker/ant.properties
0 → 100644
1 | +++ a/Blinker/ant.properties | |
1 | +# This file is used to override default values used by the Ant build system. | |
2 | +# | |
3 | +# This file must be checked in Version Control Systems, as it is | |
4 | +# integral to the build system of your project. | |
5 | + | |
6 | +# This file is only used by the Ant script. | |
7 | + | |
8 | +# You can use this to override default values such as | |
9 | +# 'source.dir' for the location of your java source folder and | |
10 | +# 'out.dir' for the location of your output folder. | |
11 | + | |
12 | +# You can also use it define how the release builds are signed by declaring | |
13 | +# the following properties: | |
14 | +# 'key.store' for the location of your keystore and | |
15 | +# 'key.alias' for the name of the key to use. | |
16 | +# The password will be asked during the build when you use the 'release' target. | |
17 | + | ... | ... |
Blinker/build.xml
0 → 100644
1 | +++ a/Blinker/build.xml | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project name="Blinker" default="help"> | |
3 | + | |
4 | + <!-- The local.properties file is created and updated by the 'android' tool. | |
5 | + It contains the path to the SDK. It should *NOT* be checked into | |
6 | + Version Control Systems. --> | |
7 | + <loadproperties srcFile="local.properties" /> | |
8 | + | |
9 | + <!-- The ant.properties file can be created by you. It is only edited by the | |
10 | + 'android' tool to add properties to it. | |
11 | + This is the place to change some Ant specific build properties. | |
12 | + Here are some properties you may want to change/update: | |
13 | + | |
14 | + source.dir | |
15 | + The name of the source directory. Default is 'src'. | |
16 | + out.dir | |
17 | + The name of the output directory. Default is 'bin'. | |
18 | + | |
19 | + For other overridable properties, look at the beginning of the rules | |
20 | + files in the SDK, at tools/ant/build.xml | |
21 | + | |
22 | + Properties related to the SDK location or the project target should | |
23 | + be updated using the 'android' tool with the 'update' action. | |
24 | + | |
25 | + This file is an integral part of the build system for your | |
26 | + application and should be checked into Version Control Systems. | |
27 | + | |
28 | + --> | |
29 | + <property file="ant.properties" /> | |
30 | + | |
31 | + <!-- The project.properties file is created and updated by the 'android' | |
32 | + tool, as well as ADT. | |
33 | + | |
34 | + This contains project specific properties such as project target, and library | |
35 | + dependencies. Lower level build properties are stored in ant.properties | |
36 | + (or in .classpath for Eclipse projects). | |
37 | + | |
38 | + This file is an integral part of the build system for your | |
39 | + application and should be checked into Version Control Systems. --> | |
40 | + <loadproperties srcFile="project.properties" /> | |
41 | + | |
42 | + <!-- quick check on sdk.dir --> | |
43 | + <fail | |
44 | + message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'" | |
45 | + unless="sdk.dir" | |
46 | + /> | |
47 | + | |
48 | + | |
49 | +<!-- extension targets. Uncomment the ones where you want to do custom work | |
50 | + in between standard targets --> | |
51 | +<!-- | |
52 | + <target name="-pre-build"> | |
53 | + </target> | |
54 | + <target name="-pre-compile"> | |
55 | + </target> | |
56 | + | |
57 | + /* This is typically used for code obfuscation. | |
58 | + Compiled code location: ${out.classes.absolute.dir} | |
59 | + If this is not done in place, override ${out.dex.input.absolute.dir} */ | |
60 | + <target name="-post-compile"> | |
61 | + </target> | |
62 | +--> | |
63 | + | |
64 | + <!-- Import the actual build file. | |
65 | + | |
66 | + To customize existing targets, there are two options: | |
67 | + - Customize only one target: | |
68 | + - copy/paste the target into this file, *before* the | |
69 | + <import> task. | |
70 | + - customize it to your needs. | |
71 | + - Customize the whole content of build.xml | |
72 | + - copy/paste the content of the rules files (minus the top node) | |
73 | + into this file, replacing the <import> task. | |
74 | + - customize to your needs. | |
75 | + | |
76 | + *********************** | |
77 | + ****** IMPORTANT ****** | |
78 | + *********************** | |
79 | + In all cases you must update the value of version-tag below to read 'custom' instead of an integer, | |
80 | + in order to avoid having your file be overridden by tools such as "android update project" | |
81 | + --> | |
82 | + <!-- version-tag: custom --> | |
83 | + <import file="../../../tools/Android/version.xml" optional="true"/> | |
84 | + <import file="${sdk.dir}/tools/ant/build.xml" /> | |
85 | + | |
86 | +</project> | ... | ... |
Blinker/default.properties
0 → 100644
1 | +++ a/Blinker/default.properties | |
1 | +# This file is automatically generated by Android Tools. | |
2 | +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! | |
3 | +# | |
4 | +# This file must be checked in Version Control Systems. | |
5 | +# | |
6 | +# To customize properties used by the Ant build system use, | |
7 | +# "build.properties", and override values to adapt the script to your | |
8 | +# project structure. | |
9 | + | |
10 | +# Project target. | |
11 | +target=android-8 | ... | ... |
Blinker/proguard.cfg
0 → 100644
1 | +++ a/Blinker/proguard.cfg | |
1 | +-optimizationpasses 5 | |
2 | +-dontusemixedcaseclassnames | |
3 | +-dontskipnonpubliclibraryclasses | |
4 | +-dontpreverify | |
5 | +-verbose | |
6 | +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* | |
7 | + | |
8 | +-keep public class * extends android.app.Activity | |
9 | +-keep public class * extends android.app.Application | |
10 | +-keep public class * extends android.app.Service | |
11 | +-keep public class * extends android.content.BroadcastReceiver | |
12 | +-keep public class * extends android.content.ContentProvider | |
13 | +-keep public class * extends android.app.backup.BackupAgentHelper | |
14 | +-keep public class * extends android.preference.Preference | |
15 | +-keep public class com.android.vending.licensing.ILicensingService | |
16 | + | |
17 | +-keepclasseswithmembernames class * { | |
18 | + native <methods>; | |
19 | +} | |
20 | + | |
21 | +-keepclasseswithmembers class * { | |
22 | + public <init>(android.content.Context, android.util.AttributeSet); | |
23 | +} | |
24 | + | |
25 | +-keepclasseswithmembers class * { | |
26 | + public <init>(android.content.Context, android.util.AttributeSet, int); | |
27 | +} | |
28 | + | |
29 | +-keepclassmembers class * extends android.app.Activity { | |
30 | + public void *(android.view.View); | |
31 | +} | |
32 | + | |
33 | +-keepclassmembers enum * { | |
34 | + public static **[] values(); | |
35 | + public static ** valueOf(java.lang.String); | |
36 | +} | |
37 | + | |
38 | +-keep class * implements android.os.Parcelable { | |
39 | + public static final android.os.Parcelable$Creator *; | |
40 | +} | ... | ... |
Blinker/project.properties
0 → 100644
1 | +++ a/Blinker/project.properties | |
1 | +# This file is automatically generated by Android Tools. | |
2 | +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! | |
3 | +# | |
4 | +# This file must be checked in Version Control Systems. | |
5 | +# | |
6 | +# To customize properties used by the Ant build system use, | |
7 | +# "ant.properties", and override values to adapt the script to your | |
8 | +# project structure. | |
9 | + | |
10 | +# Project target. | |
11 | +target=android-9 | ... | ... |
Blinker/res/drawable-hdpi/blinker_connection_connected.png
0 → 100644
1.14 KB
Blinker/res/drawable-hdpi/blinker_connection_disconnected.png
0 → 100644
1.15 KB
Blinker/res/drawable-hdpi/blinker_light_off.png
0 → 100644
14.8 KB
Blinker/res/drawable-hdpi/blinker_light_on.png
0 → 100644
13.6 KB
Blinker/res/drawable-hdpi/icon.png
0 → 100644
2.06 KB
Blinker/res/drawable-ldpi/icon.png
0 → 100644
1.68 KB
Blinker/res/drawable-mdpi/icon.png
0 → 100644
2.06 KB
Blinker/res/drawable/connected_indicator.xml
0 → 100644
1 | +++ a/Blinker/res/drawable/connected_indicator.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<selector xmlns:android="http://schemas.android.com/apk/res/android"> | |
3 | + | |
4 | + <item android:state_enabled="false" android:drawable="@drawable/blinker_connection_disconnected"/> | |
5 | + | |
6 | + <item android:drawable="@drawable/blinker_connection_connected"/> | |
7 | + | |
8 | +</selector> | |
0 | 9 | \ No newline at end of file | ... | ... |
Blinker/res/drawable/gradient.xml
0 → 100644
1 | +++ a/Blinker/res/drawable/gradient.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | +<shape xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + android:shape="rectangle"> | |
5 | + <gradient | |
6 | + android:startColor="#66000000" | |
7 | + android:endColor="#DD000000" | |
8 | + android:angle="270"/> | |
9 | +</shape> | |
0 | 10 | \ No newline at end of file | ... | ... |
Blinker/res/drawable/led.xml
0 → 100644
1 | +++ a/Blinker/res/drawable/led.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | +<selector xmlns:android="http://schemas.android.com/apk/res/android"> | |
4 | + <item | |
5 | + android:state_selected="true" | |
6 | + android:drawable="@drawable/blinker_light_on" /> | |
7 | + <item | |
8 | + android:state_selected="false" | |
9 | + android:drawable="@drawable/blinker_light_off" /> | |
10 | +</selector> | |
11 | + | |
12 | + | ... | ... |
Blinker/res/layout/list_item.xml
0 → 100644
1 | +++ a/Blinker/res/layout/list_item.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + android:layout_width="fill_parent" | |
5 | + android:layout_height="wrap_content"> | |
6 | + <TextView | |
7 | + android:id="@+id/item_label" | |
8 | + android:layout_alignParentLeft="true" | |
9 | + android:layout_gravity="left" | |
10 | + android:layout_width="wrap_content" | |
11 | + android:layout_height="fill_parent" | |
12 | + android:layout_centerVertical="true" | |
13 | + android:textSize="20px" | |
14 | + android:text="test" | |
15 | + android:paddingBottom="10dp" | |
16 | + android:paddingTop="10dp" | |
17 | + android:layout_marginLeft="10dp" | |
18 | + android:textColor="@color/labels" | |
19 | + /> | |
20 | + <ImageView | |
21 | + android:id="@+id/checkmark" | |
22 | + android:src="@android:drawable/checkbox_on_background" | |
23 | + android:layout_alignParentRight="true" | |
24 | + android:layout_centerVertical="true" | |
25 | + android:layout_width="wrap_content" | |
26 | + android:layout_height="wrap_content" | |
27 | + android:layout_marginRight="10dp" | |
28 | + /> | |
29 | + | |
30 | +</RelativeLayout> | |
0 | 31 | \ No newline at end of file | ... | ... |
Blinker/res/layout/main_activity.xml
0 → 100644
1 | +++ a/Blinker/res/layout/main_activity.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + android:layout_width="fill_parent" | |
4 | + android:layout_height="fill_parent" | |
5 | + android:background="@color/background"> | |
6 | + | |
7 | + | |
8 | + <!--Connected and disconnected graphic in upper right corner--> | |
9 | + <ImageView | |
10 | + android:contentDescription="connected indicator" | |
11 | + android:id="@+id/connected_indicator" | |
12 | + android:layout_alignParentRight="true" | |
13 | + android:layout_alignParentTop="true" | |
14 | + android:layout_height="wrap_content" | |
15 | + android:layout_width="wrap_content" | |
16 | + android:layout_marginRight="5dp" | |
17 | + android:layout_marginTop="5dp" | |
18 | + android:src="@drawable/connected_indicator" | |
19 | + /> | |
20 | + | |
21 | + /> | |
22 | + | |
23 | + <!--The LED image--> | |
24 | + <ImageView | |
25 | + android:contentDescription="led image" | |
26 | + android:id="@+id/led_image" | |
27 | + android:layout_marginTop="10dp" | |
28 | + android:layout_marginBottom="45dp" | |
29 | + android:layout_below="@id/connected_indicator" | |
30 | + android:layout_height="wrap_content" | |
31 | + android:layout_width="wrap_content" | |
32 | + android:layout_centerHorizontal="true" | |
33 | + android:src="@drawable/led" /> | |
34 | + | |
35 | + | |
36 | + | |
37 | + | |
38 | + <!--The on/off control line--> | |
39 | + <RelativeLayout | |
40 | + android:id="@+id/blink_control" | |
41 | + android:layout_below="@id/led_image" | |
42 | + android:layout_width="fill_parent" | |
43 | + android:layout_height="wrap_content" | |
44 | + android:layout_marginBottom="@dimen/control_bottom"> | |
45 | + | |
46 | + <TextView android:layout_height="wrap_content" | |
47 | + android:layout_width="wrap_content" | |
48 | + android:text="@string/label_blink" | |
49 | + android:textColor="@color/labels" | |
50 | + android:textStyle="bold" | |
51 | + android:layout_marginLeft="@dimen/label_left_margin" | |
52 | + android:layout_alignParentLeft="true" | |
53 | + android:layout_centerVertical="true" | |
54 | + /> | |
55 | + | |
56 | + <ToggleButton | |
57 | + android:id="@+id/on_off_button" | |
58 | + android:layout_height="wrap_content" | |
59 | + android:layout_width="wrap_content" | |
60 | + android:layout_centerHorizontal="true" | |
61 | + android:layout_centerVertical="true" | |
62 | + android:textOff="@string/toggle_text_off" | |
63 | + android:textOn="@string/toggle_text_on" | |
64 | + android:gravity="center_horizontal" | |
65 | + android:onClick="onToggleOnOff" | |
66 | + /> | |
67 | + | |
68 | + <TextView | |
69 | + android:id="@+id/indicator_count" | |
70 | + android:layout_height="wrap_content" | |
71 | + android:layout_width="wrap_content" | |
72 | + android:layout_marginRight="@dimen/label_right_margin" | |
73 | + android:layout_alignParentRight="true" | |
74 | + android:layout_centerVertical="true" | |
75 | + android:text="0" | |
76 | + android:textStyle="bold" | |
77 | + android:textColor="@color/numbers" | |
78 | + /> | |
79 | + | |
80 | + </RelativeLayout> | |
81 | + | |
82 | + | |
83 | + | |
84 | + <!--The Delay Slider Control and Display Line--> | |
85 | + <RelativeLayout | |
86 | + android:id="@+id/delay_control" | |
87 | + android:layout_below="@id/blink_control" | |
88 | + android:layout_width="fill_parent" | |
89 | + android:layout_height="wrap_content" | |
90 | + android:layout_marginBottom="@dimen/control_bottom"> | |
91 | + | |
92 | + | |
93 | + <TextView android:layout_height="wrap_content" | |
94 | + android:layout_width="wrap_content" | |
95 | + android:text="@string/label_delay" | |
96 | + android:textColor="@color/labels" | |
97 | + android:textStyle="bold" | |
98 | + android:layout_marginLeft="@dimen/label_left_margin" | |
99 | + android:layout_alignParentLeft="true" | |
100 | + android:layout_centerVertical="true" | |
101 | + /> | |
102 | + <SeekBar | |
103 | + android:id="@+id/slider" | |
104 | + android:layout_width="150dp" | |
105 | + android:layout_height="wrap_content" | |
106 | + android:layout_centerVertical="true" | |
107 | + android:layout_centerHorizontal="true" | |
108 | + /> | |
109 | + | |
110 | + <TextView | |
111 | + android:id="@+id/delay" | |
112 | + android:layout_height="wrap_content" | |
113 | + android:layout_width="wrap_content" | |
114 | + android:layout_marginRight="@dimen/label_right_margin" | |
115 | + android:layout_alignParentRight="true" | |
116 | + android:layout_centerVertical="true" | |
117 | + android:text="0" | |
118 | + android:textStyle="bold" | |
119 | + android:textColor="@color/numbers" | |
120 | + /> | |
121 | + | |
122 | + </RelativeLayout> | |
123 | + | |
124 | + | |
125 | + <!--The Repeat Control and Display Line--> | |
126 | + <RelativeLayout | |
127 | + android:id="@+id/repeat_control" | |
128 | + android:layout_below="@id/delay_control" | |
129 | + android:layout_width="fill_parent" | |
130 | + android:layout_height="wrap_content" | |
131 | + android:layout_marginBottom="@dimen/control_bottom"> | |
132 | + | |
133 | + | |
134 | + <TextView android:layout_height="wrap_content" | |
135 | + android:layout_width="wrap_content" | |
136 | + android:text="@string/label_repeat" | |
137 | + android:textColor="@color/labels" | |
138 | + android:textStyle="bold" | |
139 | + android:layout_marginLeft="@dimen/label_left_margin" | |
140 | + android:layout_alignParentLeft="true" | |
141 | + android:layout_centerVertical="true" | |
142 | + /> | |
143 | + | |
144 | + <LinearLayout | |
145 | + android:layout_width="wrap_content" | |
146 | + android:layout_height="wrap_content" | |
147 | + android:orientation="horizontal" | |
148 | + android:layout_centerVertical="true" | |
149 | + android:layout_centerHorizontal="true" | |
150 | + > | |
151 | + <Button | |
152 | + android:id="@+id/minus_button" | |
153 | + android:layout_height="wrap_content" | |
154 | + android:layout_width="wrap_content" | |
155 | + android:text="-" | |
156 | + android:textSize="30dp" | |
157 | + android:typeface="monospace" | |
158 | + android:paddingLeft="22dp" | |
159 | + android:paddingRight="22dp" | |
160 | + | |
161 | + android:gravity="center" | |
162 | + android:layout_marginRight="0dp" | |
163 | + android:onClick="onMinusButtonClick" | |
164 | + /> | |
165 | + | |
166 | + <Button | |
167 | + android:id="@+id/plus_button" | |
168 | + android:layout_height="wrap_content" | |
169 | + android:layout_width="wrap_content" | |
170 | + android:text="+" | |
171 | + android:textSize="30dp" | |
172 | + android:typeface="monospace" | |
173 | + android:paddingLeft="22dp" | |
174 | + android:paddingRight="22dp" | |
175 | + | |
176 | + android:gravity="center" | |
177 | + android:layout_marginLeft="0dp" | |
178 | + android:onClick="onPlusButtonClick" | |
179 | + /> | |
180 | + | |
181 | + </LinearLayout> | |
182 | + | |
183 | + | |
184 | + <TextView | |
185 | + android:id="@+id/repeat_count" | |
186 | + android:layout_height="wrap_content" | |
187 | + android:layout_width="wrap_content" | |
188 | + android:layout_marginRight="@dimen/label_right_margin" | |
189 | + android:layout_alignParentRight="true" | |
190 | + android:layout_centerVertical="true" | |
191 | + android:text="0" | |
192 | + android:textStyle="bold" | |
193 | + android:textColor="@color/numbers" | |
194 | + /> | |
195 | + | |
196 | + </RelativeLayout> | |
197 | + | |
198 | + | |
199 | + <!--Container for Footer buttons, SetDevice and Connect/Disconnect --> | |
200 | + <RelativeLayout | |
201 | + android:layout_width="fill_parent" | |
202 | + android:layout_height="wrap_content" | |
203 | + android:layout_alignParentBottom="true" | |
204 | + android:paddingBottom="8dp" | |
205 | + android:paddingTop="8dp" | |
206 | + android:background="@drawable/gradient" | |
207 | + > | |
208 | + | |
209 | + <Button | |
210 | + android:id="@+id/connect_button" | |
211 | + android:text="@string/label_connect" | |
212 | + android:gravity="center" | |
213 | + android:layout_centerVertical="true" | |
214 | + android:layout_alignParentRight="true" | |
215 | + android:layout_height="wrap_content" | |
216 | + android:layout_width="wrap_content" | |
217 | + android:onClick="onConnectToggleClick" | |
218 | + | |
219 | + /> | |
220 | + <Button | |
221 | + android:id="@+id/setdevice_button" | |
222 | + android:text="@string/label_set_device" | |
223 | + android:gravity="center" | |
224 | + android:layout_centerVertical="true" | |
225 | + android:layout_alignParentLeft="true" | |
226 | + android:layout_height="wrap_content" | |
227 | + android:layout_width="wrap_content" | |
228 | + android:onClick="onSetDeviceClick" | |
229 | + /> | |
230 | + | |
231 | + | |
232 | + | |
233 | + </RelativeLayout> | |
234 | + | |
235 | +</RelativeLayout> | |
236 | + | ... | ... |
Blinker/res/layout/set_device_activity.xml
0 → 100644
1 | +++ a/Blinker/res/layout/set_device_activity.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + android:layout_width="fill_parent" | |
5 | + android:layout_height="fill_parent" | |
6 | + android:orientation="vertical" | |
7 | + android:background="@color/background" | |
8 | + > | |
9 | + | |
10 | + <!--Simple header for our list--> | |
11 | + <RelativeLayout | |
12 | + android:layout_width="fill_parent" | |
13 | + android:layout_height="wrap_content" | |
14 | + android:background="@color/background_header" | |
15 | + > | |
16 | + <TextView | |
17 | + android:layout_width="fill_parent" | |
18 | + android:layout_height="wrap_content" | |
19 | + android:paddingBottom="10dp" | |
20 | + android:layout_centerInParent="true" | |
21 | + android:gravity="center" | |
22 | + android:text="@string/heading_set_device" | |
23 | + android:textStyle="bold" | |
24 | + /> | |
25 | + <Button | |
26 | + android:layout_alignParentRight="true" | |
27 | + android:layout_width="wrap_content" | |
28 | + android:layout_height="wrap_content" | |
29 | + android:text="@string/label_scan" | |
30 | + android:onClick="onScanDeviceClick"/> | |
31 | + | |
32 | + </RelativeLayout> | |
33 | + | |
34 | + <!--The actual device list--> | |
35 | + <ListView | |
36 | + android:id="@+id/device_list_view" | |
37 | + android:layout_width="fill_parent" | |
38 | + android:layout_height="fill_parent" | |
39 | + /> | |
40 | + | |
41 | + | |
42 | +</LinearLayout> | |
0 | 43 | \ No newline at end of file | ... | ... |
Blinker/res/raw/blinker.json
0 → 100644
1 | +++ a/Blinker/res/raw/blinker.json | |
1 | +{"resources":{"$schemaHash":{"id":-6,"align":1,"attributes":{"readonly":true},"type":"A16:u1","access":"r","size":16},"$eapProtocolLevel":{"id":-3,"align":2,"attributes":{"readonly":true},"type":"u2","access":"r","size":2},"cmd":{"id":1,"align":1,"attributes":{"writeonly":true},"type":"E:demos@emmoco.com.Blinker/Cmd","access":"w","size":1},"$mcmProtocolLevel":{"id":-2,"align":2,"attributes":{"readonly":true},"type":"u2","access":"r","size":2},"count":{"id":2,"align":2,"attributes":{"readwrite":true},"type":"i2","access":"rw","size":2},"$schemaUuid":{"id":-1,"align":1,"attributes":{"readonly":true},"type":"A16:u1","access":"r","size":16},"delay":{"id":3,"align":2,"attributes":{"readwrite":true},"type":"N:0.500000,2.000000,0.100000,3/u2","access":"rw","size":2},"$eapBuildDate":{"id":-4,"align":1,"attributes":{"readonly":true},"type":"A8:u1","access":"r","size":8},"$resourceCount":{"id":-7,"align":1,"attributes":{"readonly":true},"type":"S:system@emmoco.com.System/ResourceCount","access":"r","size":2},"ledState":{"id":4,"align":1,"attributes":{"indicator":true,"readonly":true},"type":"E:demos@emmoco.com.Blinker/LedState","access":"ir","size":1},"$fileIndexReset":{"id":-5,"align":2,"attributes":{"writeonly":true},"type":"i2","access":"w","size":2}},"resourceNamesSys":["$eapBuildDate","$eapProtocolLevel","$fileIndexReset","$mcmProtocolLevel","$resourceCount","$schemaHash","$schemaUuid"],"manifest":{"protocolLevel":7,"hash":[193,64,14,198,222,65,254,73,231,195,236,98,124,34,224,251],"name":"Blinker","uuid":[243,78,78,150,58,146,163,180,255,66,64,107,112,96,163,80],"build":[228,142,35,113,54,1,0,0],"date":"2012-04-01T22:40:17","maxAlign":2,"maxSize":16,"version":"1.0.0"},"resourceNames":["cmd","count","delay","ledState","$schemaUuid","$mcmProtocolLevel","$eapProtocolLevel","$eapBuildDate","$fileIndexReset","$schemaHash","$resourceCount"],"attributes":{"description":"Blinker, the hello world program for mobile control","owner":"demos@emmoco.com","uuid":"50a36070-6b40-42ff-b4a3-923a964e4ef3","version":"1.0.0"},"types":{"system@emmoco.com.System/ResourceCount":{"align":1,"type":"S:system@emmoco.com.System/ResourceCount","size":2,"fields":[{"align":1,"name":"app","type":"u1","size":1},{"align":1,"name":"sys","type":"u1","size":1}]},"std:i2":{"align":2,"size":2},"demos@emmoco.com.Blinker/LedState":{"values":["LED_OFF","LED_ON"],"align":1,"type":"E:demos@emmoco.com.Blinker/LedState","size":1},"std:u1":{"align":1,"size":1},"std:u2":{"align":2,"size":2},"demos@emmoco.com.Blinker/Cmd":{"values":["START_CMD","STOP_CMD"],"align":1,"type":"E:demos@emmoco.com.Blinker/Cmd","size":1}},"resourceNamesApp":["cmd","count","delay","ledState"],"imports":{"demos@emmoco.com.Blinker":true}} | |
0 | 2 | \ No newline at end of file | ... | ... |
Blinker/res/values/colors.xml
0 → 100644
Blinker/res/values/dimensions.xml
0 → 100644
Blinker/res/values/strings.xml
0 → 100644
1 | +++ a/Blinker/res/values/strings.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<resources> | |
3 | + <string name="app_name">Blinker Demo</string> | |
4 | + | |
5 | + | |
6 | + <!--Label and heading strings--> | |
7 | + <string name="label_set_device">Device</string> | |
8 | + <string name="label_delay">Delay</string> | |
9 | + <string name="label_repeat">Repeat</string> | |
10 | + <string name="label_blink">Blink</string> | |
11 | + <string name="heading_set_device">Choose Target Device"</string> | |
12 | + <string name="label_connect">Connect</string> | |
13 | + <string name="label_disconnect">Disconnect</string> | |
14 | + <string name="label_cancel">Cancel</string> | |
15 | + <string name="label_scan">Scan</string> | |
16 | + | |
17 | + <string name="toggle_text_on">ON</string> | |
18 | + <string name="toggle_text_off">OFF</string> | |
19 | + | |
20 | + | |
21 | + | |
22 | + <!--Toast messages--> | |
23 | + <string name="notice_connected">Emmoco Target Device Connected</string> | |
24 | + <string name="notice_disconnected">Emmoco Target Device Disconnected</string> | |
25 | + <string name="notice_timeout">Emmoco Target Device Connection Timeout</string> | |
26 | + <string name="notice_cancelled">Emmoco Target Device Connection Cancelled</string> | |
27 | + <string name="notice_failure">Emmoco Target Device Connection Failure</string> | |
28 | + <string name="notice_uuid_mismatch">Connection Failure. The Target Device Is Not Using The Blinker Schema</string> | |
29 | + <string name="notice_connecting">Connecting</string> | |
30 | + <string name="notice_cancelling">Cancelling connection...</string> | |
31 | + | |
32 | + | |
33 | + <!--Dialog text when the schema does not match--> | |
34 | + <string name="mismatch_title">Incompatible Schema</string> | |
35 | + <string name="mismatch_uuid">The schema that is on the device you\'re connecting to isn\'t the same | |
36 | + as the one you\'re viewing currently. Attempting to read or write resources will probably fail.</string> | |
37 | + | |
38 | + | |
39 | + | |
40 | +</resources> | ... | ... |
Blinker/res/values/styles.xml
0 → 100644
1 | +++ a/Blinker/res/values/styles.xml | |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | +<resources> | |
4 | + <style name="AppTheme" parent="@android:style/Theme"> | |
5 | + <item name="android:windowNoTitle">true</item> | |
6 | + <item name="android:windowBackground">@color/background</item> | |
7 | + </style> | |
8 | + | |
9 | +</resources> | |
10 | + | ... | ... |
Blinker/src/com/emmoco/example/blinker/MainActivity.java
0 → 100644
1 | +++ a/Blinker/src/com/emmoco/example/blinker/MainActivity.java | |
1 | +package com.emmoco.example.blinker; | |
2 | + | |
3 | +import android.app.Activity; | |
4 | +import android.app.ProgressDialog; | |
5 | +import android.content.Context; | |
6 | +import android.content.DialogInterface; | |
7 | +import android.content.Intent; | |
8 | +import android.content.SharedPreferences; | |
9 | +import android.os.Bundle; | |
10 | +import android.preference.PreferenceManager; | |
11 | +import android.text.InputType; | |
12 | +import android.view.View; | |
13 | +import android.widget.*; | |
14 | +import com.emmoco.android.*; | |
15 | + | |
16 | + | |
17 | +/** | |
18 | + * This example application uses the Emmoco Framework to connect to a target running the Blinker schema | |
19 | + * It allows the users to control the target by setting the blink counter, the blink delay and start the LED blinker | |
20 | + * application running on the target. | |
21 | + * | |
22 | + * This application will receive indicators from the target when the LED changes state (on or off) and the app will | |
23 | + * update an on-screen LED to match the state of the target's LED | |
24 | + * | |
25 | + * | |
26 | + */ | |
27 | +public class MainActivity extends Activity { | |
28 | + | |
29 | + // The connection states track the app's connection to the target device | |
30 | + public enum ConnectionState { | |
31 | + CONNECTED, DISCONNECTED | |
32 | + }; | |
33 | + | |
34 | + private final static String TAG = "Blinker"; | |
35 | + | |
36 | + private String mCurrentDevice; | |
37 | + private ResourceSchema mServiceSchema; | |
38 | + private TargetConnection mTargetConnection; | |
39 | + | |
40 | + private ResourceValue mCmdResourceValue; | |
41 | + private ResourceValue mLedStateResourceValue; | |
42 | + private ResourceValue mCountResourceValue; | |
43 | + private ResourceValue mDelayResourceValue; | |
44 | + | |
45 | + private ImageView mLedImage; | |
46 | + private ImageView mIndicator; | |
47 | + private TextView mCountTextView; | |
48 | + private TextView mDelayTextView; | |
49 | + private TextView mIndTextView; | |
50 | + private Button mConnectButton; | |
51 | + private ToggleButton mOnOffButton; | |
52 | + private Button mPlusButton; | |
53 | + private Button mMinusButton; | |
54 | + private Button mSetDevice; | |
55 | + | |
56 | + private ConnectionState mConnectionState = ConnectionState.DISCONNECTED; | |
57 | + private long mScaledStep; | |
58 | + private String mDelayFormat; | |
59 | + private SeekBar mSlider; | |
60 | + private StickyProgressDialog mProgress; | |
61 | + private int mLocalCount; | |
62 | + | |
63 | + | |
64 | + /** | |
65 | + * Standard Android onCreate method. This will setup all the layout and save references to the UI elements | |
66 | + * that will be modified during the course of the program | |
67 | + * | |
68 | + * @param savedInstanceState | |
69 | + */ | |
70 | + @Override | |
71 | + public void onCreate(Bundle savedInstanceState) { | |
72 | + | |
73 | + super.onCreate(savedInstanceState); | |
74 | + | |
75 | + // Setup and retrieve view references | |
76 | + setContentView(R.layout.main_activity); | |
77 | + mLedImage = (ImageView) findViewById(R.id.led_image); | |
78 | + mIndicator = (ImageView) findViewById(R.id.connected_indicator); | |
79 | + mCountTextView = (TextView) findViewById(R.id.repeat_count); | |
80 | + mIndTextView = (TextView) findViewById(R.id.indicator_count); | |
81 | + mConnectButton = (Button) findViewById(R.id.connect_button); | |
82 | + mOnOffButton = (ToggleButton) findViewById(R.id.on_off_button); | |
83 | + mPlusButton = (Button) findViewById(R.id.plus_button); | |
84 | + mMinusButton = (Button) findViewById(R.id.minus_button); | |
85 | + mSetDevice = (Button) findViewById(R.id.setdevice_button); | |
86 | + | |
87 | + // Create a ProgressDialog spinner to use during connection | |
88 | + mProgress = new StickyProgressDialog(this); | |
89 | + mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER); | |
90 | + mProgress.setButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() { | |
91 | + public void onClick(DialogInterface dialog, int which) { | |
92 | + // Cancel the connect attempt by closing it | |
93 | + mTargetConnection.closeSync(); | |
94 | + mProgress.setMessage(getResources().getString(R.string.notice_cancelling)); | |
95 | + mProgress.show(); | |
96 | + return; | |
97 | + } | |
98 | + }); | |
99 | + | |
100 | + // Setup Emmoco specific items | |
101 | + initializeEmmoco(); | |
102 | + | |
103 | + // set the slider for entering the delay value | |
104 | + setup_slider(); | |
105 | + | |
106 | + // Update the UI elements to show that the we are not connected to the target | |
107 | + updateUiState(false); | |
108 | + | |
109 | + | |
110 | + } | |
111 | + | |
112 | + | |
113 | + | |
114 | + /** | |
115 | + * Standard Android onDestroy. Here we will make sure that we are disconnected from the target on Activity | |
116 | + * destruction. | |
117 | + */ | |
118 | + @Override | |
119 | + protected void onDestroy() { | |
120 | + super.onDestroy(); | |
121 | + if (mTargetConnection != null) | |
122 | + mTargetConnection.closeSync(); | |
123 | + } | |
124 | + | |
125 | + | |
126 | + /** | |
127 | + * Do all the work loading the schema and setting up the references to the Emmoco Target's Resources | |
128 | + */ | |
129 | + private void initializeEmmoco() { | |
130 | + | |
131 | + // load the schema that was downloaded from em-hub. We include the schema as part of the app resources | |
132 | + mServiceSchema = Framework.current().createSchemaFromRaw(this, R.raw.blinker); | |
133 | + | |
134 | + // get the device to connect to from the users preferences | |
135 | + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | |
136 | + mCurrentDevice = prefs.getString(SetDeviceActivity.PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE); | |
137 | + | |
138 | + // initialize the Emmoco the resources | |
139 | + mCmdResourceValue = mServiceSchema.newValue("cmd"); | |
140 | + mLedStateResourceValue = mServiceSchema.newValue("ledState"); | |
141 | + mCountResourceValue = mServiceSchema.newValue("count"); | |
142 | + mDelayResourceValue = mServiceSchema.newValue("delay"); | |
143 | + | |
144 | + | |
145 | + } | |
146 | + | |
147 | + /** | |
148 | + * Update the UI elements based on whether we are connected or disconnected from the target | |
149 | + * | |
150 | + * If we are connected, we enable all the UI controls. | |
151 | + * If we are disconnected, we disable all the UI controls that require talking to the target to operate | |
152 | + * | |
153 | + * @param connected | |
154 | + */ | |
155 | + private void updateUiState(boolean connected){ | |
156 | + | |
157 | + // indicator light | |
158 | + mIndicator.setEnabled(connected); | |
159 | + | |
160 | + // delay slider | |
161 | + mSlider.setEnabled(connected); | |
162 | + | |
163 | + // on/off toggle | |
164 | + mOnOffButton.setEnabled(connected); | |
165 | + | |
166 | + if (mConnectionState == ConnectionState.DISCONNECTED){ | |
167 | + // Change text on connect button | |
168 | + mConnectButton.setText(R.string.label_connect); | |
169 | + }else{ | |
170 | + mConnectButton.setText(R.string.label_disconnect); | |
171 | + } | |
172 | + | |
173 | + // Repeat section buttons | |
174 | + mMinusButton.setEnabled(connected); | |
175 | + mPlusButton.setEnabled(connected); | |
176 | + mCountTextView.setEnabled(connected); | |
177 | + | |
178 | + // The device button is only active when not connected | |
179 | + mSetDevice.setEnabled(!connected); | |
180 | + | |
181 | + // When connect or disconnect happens, the toggle button is not checked | |
182 | + mOnOffButton.setChecked(false); | |
183 | + | |
184 | + // Clear the local counter | |
185 | + mIndTextView.setText(""); | |
186 | + | |
187 | + | |
188 | + } | |
189 | + | |
190 | + | |
191 | + /** | |
192 | + * Emmoco Reactor used to handle the connection requests to the target | |
193 | + * | |
194 | + * Reactors are listeners that are called when the target device state changes, read/writes complete, or the target | |
195 | + * sends an indicator. | |
196 | + * | |
197 | + * Reactors are called from the context of the UI thread. | |
198 | + * | |
199 | + * This reactor will be called back during the connection and disconnection phases of the example. | |
200 | + * | |
201 | + * This will set the UI elements to certain values based on connection and disconnection states | |
202 | + * | |
203 | + */ | |
204 | + enum Connection { CONNECT_DONE, DISCONNECT_DONE }; | |
205 | + private Reactor<Connection> mConnectionReactor = new Reactor<Connection>() { | |
206 | + public void exec(Connection action, int status, Bundle data) { | |
207 | + Toast msg; | |
208 | + int notice; | |
209 | + | |
210 | + switch (action) { | |
211 | + case CONNECT_DONE: | |
212 | + | |
213 | + if (status == TargetConnection.STATUS_OK) { | |
214 | + // | |
215 | + // Connection completed successfully | |
216 | + // | |
217 | + mConnectionState = ConnectionState.CONNECTED; | |
218 | + notice = R.string.notice_connected; | |
219 | + | |
220 | + // bind to catch if the far end disconnects | |
221 | + mTargetConnection.bindHangupEvent(mConnectionReactor.event(Connection.DISCONNECT_DONE)); | |
222 | + | |
223 | + // read and display the current value of count | |
224 | + mTargetConnection.read(mCountResourceValue, mCountReactor.event(CountAction.READ_COMPLETE)); | |
225 | + | |
226 | + // read and display the current value of delay | |
227 | + mTargetConnection.read(mDelayResourceValue, mDelayReactor.event(DelayAction.READ_COMPLETE)); | |
228 | + | |
229 | + // Now update all the UI elements | |
230 | + updateUiState(true); | |
231 | + } else if (status == TargetConnection.STATUS_UUID_MISMATCH) { | |
232 | + mConnectionState = ConnectionState.DISCONNECTED; | |
233 | + notice = R.string.notice_uuid_mismatch; | |
234 | + } else if (status == TargetConnection.STATUS_CONNECTION_TIMEOUT) { | |
235 | + mConnectionState = ConnectionState.DISCONNECTED; | |
236 | + notice = R.string.notice_timeout; | |
237 | + } else if (status == TargetConnection.STATUS_CONNECTION_CANCELLED) { | |
238 | + mConnectionState = ConnectionState.DISCONNECTED; | |
239 | + notice = R.string.notice_cancelled; | |
240 | + } else { | |
241 | + // Connection attempt failed. Display a message | |
242 | + notice = R.string.notice_failure; | |
243 | + mConnectionState = ConnectionState.DISCONNECTED; | |
244 | + } | |
245 | + | |
246 | + // Show a quick toast with the status of the connection | |
247 | + msg = Toast.makeText(getApplicationContext(), notice, Toast.LENGTH_LONG); | |
248 | + msg.show(); | |
249 | + | |
250 | + // Dismiss the dialog only when connect result comes back | |
251 | + mProgress.dismissManually(); | |
252 | + | |
253 | + break; | |
254 | + | |
255 | + case DISCONNECT_DONE: | |
256 | + // no need to check the status, disconnect always completes by leaving us | |
257 | + // in the disconnected state | |
258 | + mConnectionState = ConnectionState.DISCONNECTED; | |
259 | + msg = Toast.makeText(getApplicationContext(), R.string.notice_disconnected, Toast.LENGTH_SHORT); | |
260 | + msg.show(); | |
261 | + | |
262 | + updateUiState(false); | |
263 | + | |
264 | + break; | |
265 | + } | |
266 | + } | |
267 | + }; | |
268 | + | |
269 | + | |
270 | + /** | |
271 | + * Reactor used to handle the writes and indicators for the blinker schema. This reactor will be called back | |
272 | + * after each write (where we do not need to do anything at all) and the firing of the indicator. When the | |
273 | + * indicator is fired, it signals when the LED changes, so we can use that indicator to trigger our UI LED and | |
274 | + * countdown value to change | |
275 | + */ | |
276 | + enum Action { WRITE_CMD_COMPLETE, INDICATOR }; | |
277 | + private Reactor<Action> mLedReactor = new Reactor<Action>() { | |
278 | + public void exec(Action action, int status, Bundle data) { | |
279 | + switch (action) { | |
280 | + case WRITE_CMD_COMPLETE: | |
281 | + // nothing to do | |
282 | + break; | |
283 | + case INDICATOR: | |
284 | + // update the virtual led display based on the value that gets updated when the indicator is fired. | |
285 | + // We registered this value after connection occurred with bindIndicatorValue() | |
286 | + if (mLedStateResourceValue.toString().equals("LED_OFF")) { | |
287 | + mLedImage.setSelected(false); | |
288 | + if (mLocalCount == 0){ | |
289 | + // Reached the end, we disable some UI elements | |
290 | + mIndTextView.setText(""); | |
291 | + mOnOffButton.setChecked(false); | |
292 | + } | |
293 | + } else { | |
294 | + mLedImage.setSelected(true); | |
295 | + mLocalCount--; | |
296 | + mIndTextView.setText(String.valueOf(mLocalCount)); | |
297 | + } | |
298 | + break; | |
299 | + } | |
300 | + } | |
301 | + }; | |
302 | + | |
303 | + | |
304 | + /** | |
305 | + * Reactor used for count value. When the count value is read back from the target, the UI value is updated with | |
306 | + * the new value that is read back | |
307 | + */ | |
308 | + enum CountAction { READ_COMPLETE, WRITE_COMPLETE }; | |
309 | + private Reactor<CountAction> mCountReactor = new Reactor<CountAction>() { | |
310 | + public void exec(CountAction action, int status, Bundle data) { | |
311 | + Long count; | |
312 | + switch (action) { | |
313 | + case READ_COMPLETE: | |
314 | + count = new Long(mCountResourceValue.toLong()); | |
315 | + mCountTextView.setText(count.toString()); | |
316 | + break; | |
317 | + case WRITE_COMPLETE: | |
318 | + mTargetConnection.read(mCountResourceValue,mCountReactor.event(CountAction.READ_COMPLETE)); | |
319 | + break; | |
320 | + } | |
321 | + } | |
322 | + }; | |
323 | + | |
324 | + | |
325 | + /** | |
326 | + * Reactor used for delay resource. When the delay resource is read or written, the seek bar value is moved (on | |
327 | + * read) and the display value is updated | |
328 | + */ | |
329 | + enum DelayAction { READ_COMPLETE, WRITE_COMPLETE }; | |
330 | + private Reactor<DelayAction> mDelayReactor = new Reactor<DelayAction>() { | |
331 | + public void exec(DelayAction action, int status, Bundle data) { | |
332 | + double delay; | |
333 | + long delayOrd; | |
334 | + switch (action) { | |
335 | + case READ_COMPLETE: | |
336 | + delay = mDelayResourceValue.toDouble(); | |
337 | + delayOrd = mDelayResourceValue.toLong(); | |
338 | + mDelayTextView.setText(String.format(mDelayFormat, delay)); | |
339 | + | |
340 | + // set the progress bar position based on the ordinal value. We use the ordinal value | |
341 | + // to determine where to position the seek on the 0 to 100 scale of the seekbar. | |
342 | + int progress; | |
343 | + if (delayOrd == mDelayResourceValue.numMaxOrdinal()) { | |
344 | + progress = 100; | |
345 | + } else { | |
346 | + progress = (int) (delayOrd * mScaledStep); | |
347 | + } | |
348 | + mSlider.setProgress(progress); | |
349 | + break; | |
350 | + case WRITE_COMPLETE: | |
351 | + // Nothing to do | |
352 | + break; | |
353 | + } | |
354 | + } | |
355 | + }; | |
356 | + | |
357 | + | |
358 | + | |
359 | + | |
360 | + | |
361 | + | |
362 | + /** | |
363 | + * The set-device button has been pressed, start the sub-activity which will change the device preference | |
364 | + */ | |
365 | + final private int DEVICE_SELECT = 1; | |
366 | + public void onSetDeviceClick(View v) { | |
367 | + Intent i = new Intent(this, SetDeviceActivity.class); | |
368 | + startActivityForResult(i, DEVICE_SELECT); | |
369 | + } | |
370 | + | |
371 | + /** | |
372 | + * Process the result from the set-device sub activity | |
373 | + * | |
374 | + * @param requestCode | |
375 | + * @param resultCode | |
376 | + * @param data | |
377 | + */ | |
378 | + @Override | |
379 | + protected void onActivityResult(int requestCode, int resultCode, Intent data) { | |
380 | + switch (requestCode){ | |
381 | + case DEVICE_SELECT: | |
382 | + // If the device value string has changed, update our local copy | |
383 | + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | |
384 | + String device = prefs.getString(SetDeviceActivity.PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE); | |
385 | + | |
386 | + // If device has changed we need to disconnect if connected, then the user can reconnect | |
387 | + // manually to the new device | |
388 | + if (!mCurrentDevice.contentEquals(device)){ | |
389 | + mCurrentDevice = device; | |
390 | + | |
391 | + if ((mTargetConnection != null) &&(mTargetConnection.isConnected())){ | |
392 | + onConnectToggleClick(null); | |
393 | + } | |
394 | + } | |
395 | + break; | |
396 | + } | |
397 | + } | |
398 | + | |
399 | + /** | |
400 | + * Handler function for when the on/off button is press. In this handler, depending on the current state, | |
401 | + * the command is sent to start or stop the blinker on the target | |
402 | + * | |
403 | + * @param v unused | |
404 | + */ | |
405 | + public void onToggleOnOff(View v) { | |
406 | + | |
407 | + String command; | |
408 | + | |
409 | + ToggleButton b = (ToggleButton)v; | |
410 | + | |
411 | + // Determine which command to send | |
412 | + if (b.isChecked()){ | |
413 | + // We have been turned on | |
414 | + command = "START_CMD"; | |
415 | + | |
416 | + // Set up the local count value so we can count down | |
417 | + mLocalCount = mCountResourceValue.toInt(); | |
418 | + ((TextView)findViewById(R.id.indicator_count)).setText(String.valueOf(mLocalCount)); | |
419 | + | |
420 | + }else{ | |
421 | + // We have been turned off | |
422 | + command = "STOP_CMD"; | |
423 | + } | |
424 | + | |
425 | + // Send command | |
426 | + mCmdResourceValue.assignEnum(command); | |
427 | + mTargetConnection.write(mCmdResourceValue, mLedReactor.event(Action.WRITE_CMD_COMPLETE)); | |
428 | + | |
429 | + } | |
430 | + | |
431 | + | |
432 | + /** | |
433 | + * Handler for the connect toggle button | |
434 | + * | |
435 | + * Normally in an app the user doesn't worry about connecting or disconnecting, we | |
436 | + * simply connect when the main activity becomes visible and disconnect | |
437 | + * when another activity comes to the front, but this handler is used to | |
438 | + * give the user the ability to toggle the connect state by touching the | |
439 | + * connect/disconnect button | |
440 | + * | |
441 | + * @param v unused | |
442 | + */ | |
443 | + public void onConnectToggleClick(View v) { | |
444 | + | |
445 | + // toggle connect or disconnect | |
446 | + switch (mConnectionState) { | |
447 | + case DISCONNECTED: | |
448 | + | |
449 | + // Show Connection spinner | |
450 | + mProgress.setMessage(getResources().getString(R.string.notice_connecting)); | |
451 | + mProgress.setCancelable(false); | |
452 | + mProgress.show(); | |
453 | + | |
454 | + // configure the generic mock device if it is being used with some default values | |
455 | + if (mCurrentDevice.equals(TargetConnection.MOCK_PRE)) { | |
456 | + MockTargetDevice.reset(); | |
457 | + MockTargetDevice.current().setTickRate(500); | |
458 | + MockTargetDevice.current().setAccessDelay(2); | |
459 | + } | |
460 | + | |
461 | + // connect to the device using the schema | |
462 | + mTargetConnection = new TargetConnection(mCurrentDevice, getApplicationContext()); | |
463 | + mTargetConnection.bindSchema(mServiceSchema); | |
464 | + mTargetConnection.bindIndicatorValue("ledState", mLedReactor.event(Action.INDICATOR),mLedStateResourceValue); | |
465 | + | |
466 | + mTargetConnection.open(mConnectionReactor.event(Connection.CONNECT_DONE)); | |
467 | + | |
468 | + break; | |
469 | + case CONNECTED: | |
470 | + mTargetConnection.close(mConnectionReactor.event(Connection.DISCONNECT_DONE)); | |
471 | + break; | |
472 | + } | |
473 | + } | |
474 | + | |
475 | + /** | |
476 | + * handler for the minus Button | |
477 | + * the minus button decrements the count resource and writes it to blinker | |
478 | + * | |
479 | + * @param v | |
480 | + */ | |
481 | + public void onMinusButtonClick(View v) { | |
482 | + long count = Long.parseLong(mCountTextView.getText().toString()); | |
483 | + if (count > 0) { | |
484 | + count--; | |
485 | + } | |
486 | + mCountResourceValue.assignInt(count); | |
487 | + mTargetConnection.write(mCountResourceValue, mCountReactor.event(CountAction.WRITE_COMPLETE)); | |
488 | + } | |
489 | + | |
490 | + /** | |
491 | + * Handler for the plus Button | |
492 | + * The plus button increments the count resource and writes it to blinker | |
493 | + * | |
494 | + * @param v | |
495 | + */ | |
496 | + public void onPlusButtonClick(View v) { | |
497 | + long count = Long.parseLong(mCountTextView.getText().toString()); | |
498 | + if (count < mCountResourceValue.intMax()){ | |
499 | + count++; | |
500 | + } | |
501 | + mCountResourceValue.assignInt(count); | |
502 | + mTargetConnection.write(mCountResourceValue, mCountReactor.event(CountAction.WRITE_COMPLETE)); | |
503 | + } | |
504 | + | |
505 | + | |
506 | + | |
507 | + | |
508 | + | |
509 | + /** | |
510 | + * Sets up the seekbar to be used as the input for changing the target's delay values. This must be called | |
511 | + * after the schema and resource values are set up, We need to do some math here to split the 0 to 100 range of the | |
512 | + * seekbar into the number of distinct values we can set the delay resource, and map those parts of the seekbar | |
513 | + * into values that are set. | |
514 | + * | |
515 | + */ | |
516 | + private void setup_slider() { | |
517 | + // calculate scaled step | |
518 | + mScaledStep = 100 / mDelayResourceValue.numMaxOrdinal(); | |
519 | + mDelayFormat = "%.1f"; | |
520 | + | |
521 | + mDelayTextView = (TextView) findViewById(R.id.delay); | |
522 | + mDelayTextView.setRawInputType(InputType.TYPE_CLASS_NUMBER); | |
523 | + mSlider = (SeekBar) findViewById(R.id.slider); | |
524 | + | |
525 | + // initializeEmmoco slider listener | |
526 | + mSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | |
527 | + | |
528 | + public void onStopTrackingTouch(SeekBar seekBar) { | |
529 | + // they took their finger off the bar, so write to the device | |
530 | + Double delay = Double.parseDouble(mDelayTextView.getText().toString()); | |
531 | + mDelayResourceValue.assignNum(delay); | |
532 | + mTargetConnection.write(mDelayResourceValue, mDelayReactor.event(DelayAction.WRITE_COMPLETE)); | |
533 | + } | |
534 | + | |
535 | + public void onStartTrackingTouch(SeekBar seekBar) { | |
536 | + } | |
537 | + | |
538 | + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { | |
539 | + long ord = progress / mScaledStep; | |
540 | + mDelayResourceValue.assignNum(ord); | |
541 | + mDelayTextView.setText(String.format(mDelayFormat, mDelayResourceValue.toDouble())); | |
542 | + } | |
543 | + }); | |
544 | + } | |
545 | + | |
546 | + | |
547 | + /** | |
548 | + * Android UI tweak. | |
549 | + * Normally a progress dialog disappears when you hit a button (like cancel), but we want our dialog to stick around | |
550 | + * until our background task has completed the cancellation phase. The easiest way is to override the dismiss() so | |
551 | + * the dialog does not automatically close | |
552 | + */ | |
553 | + private class StickyProgressDialog extends ProgressDialog { | |
554 | + private StickyProgressDialog(Context context) { | |
555 | + super(context); | |
556 | + } | |
557 | + | |
558 | + @Override | |
559 | + public void dismiss() { | |
560 | + // do nothing | |
561 | + } | |
562 | + public void dismissManually() { | |
563 | + super.dismiss(); | |
564 | + } | |
565 | + } | |
566 | +} | |
567 | + | ... | ... |
Blinker/src/com/emmoco/example/blinker/SetDeviceActivity.java
0 → 100644
1 | +++ a/Blinker/src/com/emmoco/example/blinker/SetDeviceActivity.java | |
1 | +package com.emmoco.example.blinker; | |
2 | + | |
3 | +import android.app.Activity; | |
4 | +import android.content.Intent; | |
5 | +import android.content.SharedPreferences; | |
6 | +import android.os.Bundle; | |
7 | +import android.preference.PreferenceManager; | |
8 | +import android.view.LayoutInflater; | |
9 | +import android.view.View; | |
10 | +import android.view.ViewGroup; | |
11 | +import android.widget.AdapterView; | |
12 | +import android.widget.BaseAdapter; | |
13 | +import android.widget.ListView; | |
14 | +import android.widget.TextView; | |
15 | +import com.emmoco.android.TargetConnection; | |
16 | + | |
17 | +import java.util.ArrayList; | |
18 | + | |
19 | +/** | |
20 | + * This activity manages a screen where the user can choose from a list of target devices. These devices include | |
21 | + * the Bluetooth paired devices and the Emmoco mock devices used for testing. | |
22 | + * | |
23 | + * This activity maintains a simple listview. There is an option to jump to the Settings->Bluetooth-Scan activity | |
24 | + * When this activity returns, it refreshes the paired bluetooth device list in case it has changed | |
25 | + * | |
26 | + * This uses a custom Listview Adapter to show a checkmark next to the currently saved device | |
27 | + * | |
28 | + * The devices is stored using standard Android SharedPreferences | |
29 | + * | |
30 | + */ | |
31 | +public class SetDeviceActivity extends Activity{ | |
32 | + final static private String TAG="SetDeviceActivity"; | |
33 | + | |
34 | + private String mCurrentDevice; | |
35 | + private ListView mDeviceList; | |
36 | + private DeviceArrayAdapter mAdapter; | |
37 | + | |
38 | + final public static String PREF_DEVICE_NAME = "DEVICE"; | |
39 | + final public static String MOCK_DEVICE_LABEL = "Mock Blinker Device"; | |
40 | + | |
41 | + | |
42 | + /** | |
43 | + * Internal class that adapts our array of device strings to a listview. Current choice is highlighted with | |
44 | + * a checkmark | |
45 | + */ | |
46 | + private class DeviceArrayAdapter extends BaseAdapter { | |
47 | + | |
48 | + ArrayList<String> mList; | |
49 | + Activity mContext; | |
50 | + | |
51 | + DeviceArrayAdapter(Activity context, ArrayList<String> arrayList) { | |
52 | + mList = arrayList; | |
53 | + mContext = context; | |
54 | + } | |
55 | + | |
56 | + public int getCount() { | |
57 | + return mList.size(); | |
58 | + } | |
59 | + | |
60 | + public Object getItem(int i) { | |
61 | + return mList.get(i); | |
62 | + } | |
63 | + | |
64 | + public long getItemId(int i) { | |
65 | + return i; | |
66 | + } | |
67 | + | |
68 | + /** | |
69 | + * Returns a new view constructed from a simple layout. The layout has a textview for the name of the device | |
70 | + * and a checkmark graphic that is visible or not. | |
71 | + * | |
72 | + * @param i | |
73 | + * @param view | |
74 | + * @param viewGroup | |
75 | + * @return | |
76 | + */ | |
77 | + public View getView(int i, View view, ViewGroup viewGroup) { | |
78 | + LayoutInflater inflator = mContext.getLayoutInflater(); | |
79 | + view = inflator.inflate(R.layout.list_item, null); | |
80 | + | |
81 | + String name = (String)getItem(i); | |
82 | + String label = name; | |
83 | + | |
84 | + // Translate the URI for the device into a pretty label for display in the listview | |
85 | + | |
86 | + // If Mock device, use mock label | |
87 | + if (name.contentEquals(TargetConnection.MOCK_BLINKER_PRE)){ | |
88 | + label = MOCK_DEVICE_LABEL; | |
89 | + } | |
90 | + if (name.startsWith(TargetConnection.BT_PRE)) { | |
91 | + // If Bluetooth, remove prefix | |
92 | + label = name.substring(TargetConnection.BT_PRE.length()); | |
93 | + } | |
94 | + | |
95 | + | |
96 | + // Set the label in the view | |
97 | + ((TextView)view.findViewById(R.id.item_label)).setText(label); | |
98 | + | |
99 | + // If the current one, show the checkbox | |
100 | + if (mList.get(i).contentEquals(mCurrentDevice)){ | |
101 | + view.findViewById(R.id.checkmark).setVisibility(View.VISIBLE); | |
102 | + }else{ | |
103 | + view.findViewById(R.id.checkmark).setVisibility(View.INVISIBLE); | |
104 | + } | |
105 | + return view; | |
106 | + } | |
107 | + | |
108 | + // Replace the list with a new one and trigger a redraw on the screen | |
109 | + public void updateList(ArrayList<String> list){ | |
110 | + mList = list; | |
111 | + notifyDataSetInvalidated(); | |
112 | + } | |
113 | + } | |
114 | + | |
115 | + /** | |
116 | + * Standard Android method called at start of activity. | |
117 | + * | |
118 | + * Save the | |
119 | + * @param savedInstanceState | |
120 | + */ | |
121 | + @Override | |
122 | + protected void onCreate(Bundle savedInstanceState) { | |
123 | + | |
124 | + super.onCreate(savedInstanceState); | |
125 | + setContentView(R.layout.set_device_activity); | |
126 | + | |
127 | + | |
128 | + mDeviceList = (ListView)findViewById(R.id.device_list_view); | |
129 | + | |
130 | + mAdapter = new DeviceArrayAdapter(this,TargetConnection.deviceList(true,false)); | |
131 | + mDeviceList.setAdapter(mAdapter); | |
132 | + | |
133 | + // get the device to connect to from the users preferences | |
134 | + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | |
135 | + mCurrentDevice = prefs.getString(PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE); | |
136 | + | |
137 | + | |
138 | + // Register a handler when one of the list items is clicked. This handler will set the | |
139 | + // preference to use the new device, and finish this activity so we go back to the main activity | |
140 | + mDeviceList.setOnItemClickListener(new AdapterView.OnItemClickListener() { | |
141 | + public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { | |
142 | + | |
143 | + String newDeviceName = (String)mAdapter.getItem(i); | |
144 | + | |
145 | + // Save changed name to preferences | |
146 | + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SetDeviceActivity.this); | |
147 | + SharedPreferences.Editor edit = prefs.edit(); | |
148 | + edit.putString(PREF_DEVICE_NAME, newDeviceName); | |
149 | + edit.commit(); | |
150 | + | |
151 | + // Set the result so the calling activity know we have changed the device | |
152 | + setResult(RESULT_OK); | |
153 | + finish(); | |
154 | + } | |
155 | + } ); | |
156 | + | |
157 | + } | |
158 | + | |
159 | + @Override | |
160 | + protected void onResume() { | |
161 | + // If we are resuming after going to Settings-->Bluetooth, the device list may have changed so update | |
162 | + mAdapter.updateList(TargetConnection.deviceList(true,false)); | |
163 | + | |
164 | + super.onResume(); | |
165 | + } | |
166 | + | |
167 | + | |
168 | + | |
169 | + /** | |
170 | + * Use an intent to call the Android bluetooth settings for scanning bluetooth devices | |
171 | + * @param v | |
172 | + */ | |
173 | + public void onScanDeviceClick(View v) { | |
174 | + Intent i = new Intent(); | |
175 | + i.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); | |
176 | + startActivity(i); | |
177 | + } | |
178 | + | |
179 | +} | ... | ... |
BlinkerLaunchPad/.externalToolBuilders/Blinker LaunchPad Builder.launch
0 → 100644
1 | +++ a/BlinkerLaunchPad/.externalToolBuilders/Blinker LaunchPad Builder.launch | |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> | |
3 | +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> | |
4 | +<mapAttribute key="org.eclipse.debug.core.environmentVariables"> | |
5 | +<mapEntry key="PATH" value="${eclipse_home}/msptools/bin${system_property:path.separator}${env_var:PATH}"/> | |
6 | +</mapAttribute> | |
7 | +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> | |
8 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?><resources><item path="/BlinkerLaunchPad/main.c" type="1"/><item path="/BlinkerLaunchPad/main.out" type="1"/><item path="/BlinkerLaunchPad/makefile" type="1"/><item path="/BlinkerSchema/out/Blinker.h" type="1"/><item path="/BlinkerSchema/schema.ems" type="1"/><item path="/CommonLaunchPad" type="4"/></resources>}"/> | |
9 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${eclipse_home}/msptools/bin/gmake${exe_ext}"/> | |
10 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> | |
11 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="all COMMON=${project_loc:/CommonLaunchPad} SCHEMA=${project_loc:/BlinkerSchema}"/> | |
12 | +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> | |
13 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/> | |
14 | +</launchConfiguration> | ... | ... |
BlinkerLaunchPad/.externalToolBuilders/Blinker LaunchPad Cleaner.launch
0 → 100644
1 | +++ a/BlinkerLaunchPad/.externalToolBuilders/Blinker LaunchPad Cleaner.launch | |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> | |
3 | +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> | |
4 | +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> | |
5 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${eclipse_home}/msptools/bin/gmake${exe_ext}"/> | |
6 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="clean"/> | |
7 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="local-clean COMMON=${project_loc:/CommonLaunchPad}"/> | |
8 | +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> | |
9 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/> | |
10 | +</launchConfiguration> | ... | ... |
BlinkerLaunchPad/.project
0 → 100644
1 | +++ a/BlinkerLaunchPad/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>BlinkerLaunchPad</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + <project>BlinkerSchema</project> | |
7 | + </projects> | |
8 | + <buildSpec> | |
9 | + <buildCommand> | |
10 | + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> | |
11 | + <triggers>full,incremental,</triggers> | |
12 | + <arguments> | |
13 | + <dictionary> | |
14 | + <key>LaunchConfigHandle</key> | |
15 | + <value><project>/.externalToolBuilders/Blinker LaunchPad Builder.launch</value> | |
16 | + </dictionary> | |
17 | + </arguments> | |
18 | + </buildCommand> | |
19 | + <buildCommand> | |
20 | + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> | |
21 | + <triggers>clean,</triggers> | |
22 | + <arguments> | |
23 | + <dictionary> | |
24 | + <key>LaunchConfigHandle</key> | |
25 | + <value><project>/.externalToolBuilders/Blinker LaunchPad Cleaner.launch</value> | |
26 | + </dictionary> | |
27 | + </arguments> | |
28 | + </buildCommand> | |
29 | + </buildSpec> | |
30 | + <natures> | |
31 | + <nature>com.emmoco.mcmtooling.example.mcmToolingExampleNature</nature> | |
32 | + </natures> | |
33 | +</projectDescription> | ... | ... |
BlinkerLaunchPad/Blinker.obj
0 → 100644
No preview for this file type
BlinkerLaunchPad/Log/log.txt
0 → 100644
1 | +++ a/BlinkerLaunchPad/Log/log.txt | ... | ... |
BlinkerLaunchPad/main.c
0 → 100644
1 | +++ a/BlinkerLaunchPad/main.c | |
1 | +/* | |
2 | + * ============ Platform Configuration ============ | |
3 | + */ | |
4 | + | |
5 | +#include <msp430.h> | |
6 | + | |
7 | +#define LED_ON() (P1OUT |= BIT6) | |
8 | +#define LED_OFF() (P1OUT &= ~BIT6) | |
9 | +#define LED_READ() (P1OUT & BIT6) | |
10 | +#define LED_TOGGLE() (P1OUT ^= BIT6) | |
11 | + | |
12 | +#define CONNECTED_LED_ON() (P1OUT |= BIT0) | |
13 | +#define CONNECTED_LED_OFF() (P1OUT &= ~BIT0) | |
14 | + | |
15 | +#define EAP_RX_BUF UCA0RXBUF | |
16 | +#define EAP_TX_BUF UCA0TXBUF | |
17 | + | |
18 | +#define EAP_RX_VECTOR USCIAB0RX_VECTOR | |
19 | +#define EAP_TX_VECTOR PORT2_VECTOR | |
20 | + | |
21 | +#define EAP_RX_ACK_CONFIG() (P2DIR |= BIT0) | |
22 | +#define EAP_RX_ACK_SET() (P2OUT |= BIT0) | |
23 | +#define EAP_RX_ACK_CLR() (P2OUT &= ~BIT0) | |
24 | + | |
25 | +#define EAP_TX_INT_CONFIG() (P2DIR &= ~BIT1, P2IES |= BIT1, P2IFG &= BIT1, P2IE |= BIT1) | |
26 | +#define EAP_TX_INT_TST() (P2IFG & BIT1) | |
27 | +#define EAP_TX_INT_CLR() (P2IFG &= ~BIT1) | |
28 | + | |
29 | +void init(void) { | |
30 | + | |
31 | + WDTCTL = WDTPW + WDTHOLD; | |
32 | + BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0; | |
33 | + if (CALBC1_1MHZ != 0xFF) { | |
34 | + DCOCTL = 0x00; | |
35 | + BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */ | |
36 | + DCOCTL = CALDCO_1MHZ; | |
37 | + } | |
38 | + BCSCTL1 |= XT2OFF + DIVA_0; | |
39 | + BCSCTL3 = XT2S_0 + LFXT1S_2 + XCAP_1; | |
40 | + | |
41 | + P1DIR |= BIT0; /* LED */ | |
42 | + LED_OFF(); | |
43 | + P1DIR |= BIT6; /* CONNECTED_LED */ | |
44 | + CONNECTED_LED_OFF(); | |
45 | + | |
46 | + UCA0CTL1 |= UCSWRST; | |
47 | + | |
48 | + P1SEL |= BIT1 + BIT2; | |
49 | + P1SEL2 |= BIT1 + BIT2; | |
50 | + | |
51 | + EAP_RX_ACK_CONFIG(); | |
52 | + EAP_RX_ACK_SET(); | |
53 | + | |
54 | + EAP_TX_INT_CONFIG(); | |
55 | + | |
56 | + UCA0CTL1 = UCSSEL_2 + UCSWRST; | |
57 | + UCA0MCTL = UCBRF_0 + UCBRS_6; | |
58 | + UCA0BR0 = 8; | |
59 | + UCA0CTL1 &= ~UCSWRST; | |
60 | + | |
61 | + IFG2 &= ~(UCA0RXIFG); | |
62 | + IE2 |= UCA0RXIE; | |
63 | + | |
64 | + TA1CCTL0 = CM_0 + CCIS_0 + OUTMOD_0 + CCIE; | |
65 | + TA1CCR0 = 1200; | |
66 | + TA1CTL = TASSEL_1 + ID_0 + MC_1; | |
67 | + | |
68 | + __enable_interrupt(); | |
69 | +} | |
70 | + | |
71 | +/* | |
72 | + * ============ Serial Driver ============ | |
73 | + */ | |
74 | + | |
75 | +#include <Em_Message.h> | |
76 | + | |
77 | +__attribute__((interrupt(EAP_RX_VECTOR))) | |
78 | +static void rxHandler(void) { | |
79 | + uint8_t b = EAP_RX_BUF; | |
80 | + if (Em_Message_addByte(b)) { | |
81 | + Em_Message_dispatch(); | |
82 | + } | |
83 | + EAP_RX_ACK_CLR(); | |
84 | + EAP_RX_ACK_SET(); | |
85 | +} | |
86 | + | |
87 | +__attribute__((interrupt(EAP_TX_VECTOR))) | |
88 | +static void txHandler(void) { | |
89 | + if (EAP_TX_INT_TST()) { | |
90 | + uint8_t b; | |
91 | + if (Em_Message_getByte(&b)) { | |
92 | + EAP_TX_BUF = b; | |
93 | + } | |
94 | + EAP_TX_INT_CLR(); | |
95 | + } | |
96 | +} | |
97 | + | |
98 | +void Em_Message_startSend() { | |
99 | + uint8_t b; | |
100 | + if (Em_Message_getByte(&b)) { | |
101 | + UCA0TXBUF = b; | |
102 | + } | |
103 | +} | |
104 | + | |
105 | +uint8_t Em_Message_lock() { | |
106 | + uint8_t key; | |
107 | + asm ("MOV r2, %0": "=r" (key)); | |
108 | + key &= 0x8; | |
109 | + asm ("DINT"); | |
110 | + return key; | |
111 | +} | |
112 | + | |
113 | +void Em_Message_unlock(uint8_t key) { | |
114 | + if (key) { | |
115 | + asm ("EINT"); | |
116 | + } | |
117 | + else { | |
118 | + asm ("DINT"); | |
119 | + } | |
120 | +} | |
121 | + | |
122 | +/* | |
123 | + * ============ Application Program ============ | |
124 | + */ | |
125 | + | |
126 | +#include <Blinker.h> | |
127 | + | |
128 | +#define COUNT_DEFAULT 5 | |
129 | + | |
130 | +volatile Blinker_cmd_t cmdRes = Blinker_STOP_CMD; | |
131 | +volatile Blinker_count_t countRes = COUNT_DEFAULT; | |
132 | +volatile Blinker_delay_t delayRes = Blinker_delay_min; | |
133 | + | |
134 | +volatile Blinker_count_t curCount; | |
135 | +volatile Blinker_delay_t curTime; | |
136 | + | |
137 | +__attribute__((interrupt(TIMER1_A0_VECTOR))) | |
138 | +void tickHandler(void) { | |
139 | + if (cmdRes == Blinker_STOP_CMD) { | |
140 | + return; | |
141 | + } | |
142 | + if (curTime < delayRes) { | |
143 | + curTime += Blinker_delay_step; | |
144 | + return; | |
145 | + } | |
146 | + else { | |
147 | + curTime = 0; | |
148 | + } | |
149 | + if (curCount-- > 0) { | |
150 | + LED_TOGGLE(); | |
151 | + } | |
152 | + else { | |
153 | + cmdRes = Blinker_STOP_CMD; | |
154 | + LED_OFF(); | |
155 | + } | |
156 | + Blinker_ledState_indicate(); | |
157 | +} | |
158 | + | |
159 | +int main(int argc, char *argv[]) { | |
160 | + volatile int dummy = 0; | |
161 | + init(); | |
162 | + Blinker_run(); | |
163 | + while (dummy == 0) { | |
164 | + /* idle */ | |
165 | + } | |
166 | + return 0; | |
167 | +} | |
168 | + | |
169 | +void Blinker_connectHandler(void) { | |
170 | + CONNECTED_LED_ON(); | |
171 | +} | |
172 | + | |
173 | +void Blinker_disconnectHandler(void) { | |
174 | + CONNECTED_LED_OFF(); | |
175 | +} | |
176 | + | |
177 | +void Blinker_cmd_store(Blinker_cmd_t* input) { | |
178 | + cmdRes = *input; | |
179 | + switch (cmdRes) { | |
180 | + case Blinker_START_CMD: | |
181 | + curCount = countRes * 2; | |
182 | + curTime = 0; | |
183 | + break; | |
184 | + case Blinker_STOP_CMD: | |
185 | + LED_OFF(); | |
186 | + break; | |
187 | + } | |
188 | +} | |
189 | + | |
190 | +void Blinker_count_fetch(Blinker_count_t* output) { | |
191 | + *output = countRes; | |
192 | +} | |
193 | + | |
194 | +void Blinker_count_store(Blinker_count_t* input) { | |
195 | + countRes = *input; | |
196 | +} | |
197 | + | |
198 | +void Blinker_delay_fetch(Blinker_delay_t* output) { | |
199 | + *output = delayRes; | |
200 | +} | |
201 | + | |
202 | +void Blinker_delay_store(Blinker_delay_t* input) { | |
203 | + delayRes = *input; | |
204 | +} | |
205 | + | |
206 | +void Blinker_ledState_fetch(Blinker_ledState_t* output) { | |
207 | + *output = LED_READ() ? Blinker_LED_ON : Blinker_LED_OFF; | |
208 | +} | ... | ... |
BlinkerLaunchPad/main.map
0 → 100644
1 | +++ a/BlinkerLaunchPad/main.map | |
1 | +Archive member included because of file (symbol) | |
2 | + | |
3 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) | |
4 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o (_reset_vector__) | |
5 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
6 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__watchdog_support) | |
7 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
8 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__init_stack) | |
9 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__low_level_init.o) | |
10 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__low_level_init) | |
11 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
12 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__do_copy_data) | |
13 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
14 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__do_clear_bss) | |
15 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__stop_progExec__.o) | |
16 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (__stop_progExec__) | |
17 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
18 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) (_endless_loop__) | |
19 | +/Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
20 | + /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o (_unexpected_) | |
21 | + | |
22 | +Allocating common symbols | |
23 | +Common symbol size file | |
24 | + | |
25 | +Em_App_recvIdx 0x1 Blinker.obj | |
26 | +Em_App_xmitSize 0x1 Blinker.obj | |
27 | +Em_App_outBuf 0x2 Blinker.obj | |
28 | +curTime 0x2 main.obj | |
29 | +Em_App_ind 0xa Blinker.obj | |
30 | +Em_App_xmitMask 0x4 Blinker.obj | |
31 | +Em_App_msg 0x1a Blinker.obj | |
32 | +Em_App_recvSize 0x1 Blinker.obj | |
33 | +Em_App_fileIndex 0x4 Blinker.obj | |
34 | +Em_App_pdHdlr 0x2 Blinker.obj | |
35 | +Em_App_xmitIdx 0x1 Blinker.obj | |
36 | +curCount 0x2 main.obj | |
37 | + | |
38 | +Memory Configuration | |
39 | + | |
40 | +Name Origin Length Attributes | |
41 | +sfr 0x0000000000000000 0x0000000000000010 | |
42 | +peripheral_8bit 0x0000000000000010 0x00000000000000f0 | |
43 | +peripheral_16bit 0x0000000000000100 0x0000000000000100 | |
44 | +ram 0x0000000000000200 0x0000000000000200 xw | |
45 | +infomem 0x0000000000001000 0x0000000000000100 | |
46 | +infod 0x0000000000001000 0x0000000000000040 | |
47 | +infoc 0x0000000000001040 0x0000000000000040 | |
48 | +infob 0x0000000000001080 0x0000000000000040 | |
49 | +infoa 0x00000000000010c0 0x0000000000000040 | |
50 | +rom 0x000000000000c000 0x0000000000003fe0 xr | |
51 | +vectors 0x000000000000ffe0 0x0000000000000020 | |
52 | +bsl 0x0000000000000000 0x0000000000000000 | |
53 | +far_rom 0x0000000000000000 0x0000000000000000 | |
54 | +*default* 0x0000000000000000 0xffffffffffffffff | |
55 | + | |
56 | +Linker script and memory map | |
57 | + | |
58 | +LOAD /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
59 | +LOAD main.obj | |
60 | +LOAD Blinker.obj | |
61 | +LOAD /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libgcc.a | |
62 | +LOAD /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/../../../../msp430/lib/libc.a | |
63 | +LOAD /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libgcc.a | |
64 | +LOAD /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a | |
65 | + 0x0000000000000040 PROVIDE (__info_segment_size, 0x40) | |
66 | + 0x0000000000001000 PROVIDE (__infod, 0x1000) | |
67 | + 0x0000000000001040 PROVIDE (__infoc, 0x1040) | |
68 | + 0x0000000000001080 PROVIDE (__infob, 0x1080) | |
69 | + 0x00000000000010c0 PROVIDE (__infoa, 0x10c0) | |
70 | + 0x0000000000000000 __IE1 = 0x0 | |
71 | + 0x0000000000000002 __IFG1 = 0x2 | |
72 | + 0x0000000000000001 __IE2 = 0x1 | |
73 | + 0x0000000000000003 __IFG2 = 0x3 | |
74 | + 0x0000000000000048 __ADC10DTC0 = 0x48 | |
75 | + 0x0000000000000049 __ADC10DTC1 = 0x49 | |
76 | + 0x000000000000004a __ADC10AE0 = 0x4a | |
77 | + 0x00000000000001b0 __ADC10CTL0 = 0x1b0 | |
78 | + 0x00000000000001b2 __ADC10CTL1 = 0x1b2 | |
79 | + 0x00000000000001b4 __ADC10MEM = 0x1b4 | |
80 | + 0x00000000000001bc __ADC10SA = 0x1bc | |
81 | + 0x0000000000000056 __DCOCTL = 0x56 | |
82 | + 0x0000000000000057 __BCSCTL1 = 0x57 | |
83 | + 0x0000000000000058 __BCSCTL2 = 0x58 | |
84 | + 0x0000000000000053 __BCSCTL3 = 0x53 | |
85 | + 0x0000000000000059 __CACTL1 = 0x59 | |
86 | + 0x000000000000005a __CACTL2 = 0x5a | |
87 | + 0x000000000000005b __CAPD = 0x5b | |
88 | + 0x0000000000000128 __FCTL1 = 0x128 | |
89 | + 0x000000000000012a __FCTL2 = 0x12a | |
90 | + 0x000000000000012c __FCTL3 = 0x12c | |
91 | + 0x0000000000000020 __P1IN = 0x20 | |
92 | + 0x0000000000000021 __P1OUT = 0x21 | |
93 | + 0x0000000000000022 __P1DIR = 0x22 | |
94 | + 0x0000000000000023 __P1IFG = 0x23 | |
95 | + 0x0000000000000024 __P1IES = 0x24 | |
96 | + 0x0000000000000025 __P1IE = 0x25 | |
97 | + 0x0000000000000026 __P1SEL = 0x26 | |
98 | + 0x0000000000000041 __P1SEL2 = 0x41 | |
99 | + 0x0000000000000027 __P1REN = 0x27 | |
100 | + 0x0000000000000028 __P2IN = 0x28 | |
101 | + 0x0000000000000029 __P2OUT = 0x29 | |
102 | + 0x000000000000002a __P2DIR = 0x2a | |
103 | + 0x000000000000002b __P2IFG = 0x2b | |
104 | + 0x000000000000002c __P2IES = 0x2c | |
105 | + 0x000000000000002d __P2IE = 0x2d | |
106 | + 0x000000000000002e __P2SEL = 0x2e | |
107 | + 0x0000000000000042 __P2SEL2 = 0x42 | |
108 | + 0x000000000000002f __P2REN = 0x2f | |
109 | + 0x0000000000000018 __P3IN = 0x18 | |
110 | + 0x0000000000000019 __P3OUT = 0x19 | |
111 | + 0x000000000000001a __P3DIR = 0x1a | |
112 | + 0x000000000000001b __P3SEL = 0x1b | |
113 | + 0x0000000000000043 __P3SEL2 = 0x43 | |
114 | + 0x0000000000000010 __P3REN = 0x10 | |
115 | + 0x000000000000012e __TA0IV = 0x12e | |
116 | + 0x0000000000000160 __TA0CTL = 0x160 | |
117 | + 0x0000000000000162 __TA0CCTL0 = 0x162 | |
118 | + 0x0000000000000164 __TA0CCTL1 = 0x164 | |
119 | + 0x0000000000000166 __TA0CCTL2 = 0x166 | |
120 | + 0x0000000000000170 __TA0R = 0x170 | |
121 | + 0x0000000000000172 __TA0CCR0 = 0x172 | |
122 | + 0x0000000000000174 __TA0CCR1 = 0x174 | |
123 | + 0x0000000000000176 __TA0CCR2 = 0x176 | |
124 | + 0x000000000000011e __TA1IV = 0x11e | |
125 | + 0x0000000000000180 __TA1CTL = 0x180 | |
126 | + 0x0000000000000182 __TA1CCTL0 = 0x182 | |
127 | + 0x0000000000000184 __TA1CCTL1 = 0x184 | |
128 | + 0x0000000000000186 __TA1CCTL2 = 0x186 | |
129 | + 0x0000000000000190 __TA1R = 0x190 | |
130 | + 0x0000000000000192 __TA1CCR0 = 0x192 | |
131 | + 0x0000000000000194 __TA1CCR1 = 0x194 | |
132 | + 0x0000000000000196 __TA1CCR2 = 0x196 | |
133 | + 0x0000000000000060 __UCA0CTL0 = 0x60 | |
134 | + 0x0000000000000061 __UCA0CTL1 = 0x61 | |
135 | + 0x0000000000000062 __UCA0BR0 = 0x62 | |
136 | + 0x0000000000000063 __UCA0BR1 = 0x63 | |
137 | + 0x0000000000000064 __UCA0MCTL = 0x64 | |
138 | + 0x0000000000000065 __UCA0STAT = 0x65 | |
139 | + 0x0000000000000066 __UCA0RXBUF = 0x66 | |
140 | + 0x0000000000000067 __UCA0TXBUF = 0x67 | |
141 | + 0x000000000000005d __UCA0ABCTL = 0x5d | |
142 | + 0x000000000000005e __UCA0IRTCTL = 0x5e | |
143 | + 0x000000000000005f __UCA0IRRCTL = 0x5f | |
144 | + 0x0000000000000068 __UCB0CTL0 = 0x68 | |
145 | + 0x0000000000000069 __UCB0CTL1 = 0x69 | |
146 | + 0x000000000000006a __UCB0BR0 = 0x6a | |
147 | + 0x000000000000006b __UCB0BR1 = 0x6b | |
148 | + 0x000000000000006c __UCB0I2CIE = 0x6c | |
149 | + 0x000000000000006d __UCB0STAT = 0x6d | |
150 | + 0x000000000000006e __UCB0RXBUF = 0x6e | |
151 | + 0x000000000000006f __UCB0TXBUF = 0x6f | |
152 | + 0x0000000000000118 __UCB0I2COA = 0x118 | |
153 | + 0x000000000000011a __UCB0I2CSA = 0x11a | |
154 | + 0x0000000000000120 __WDTCTL = 0x120 | |
155 | + 0x00000000000010f8 __CALDCO_16MHZ = 0x10f8 | |
156 | + 0x00000000000010f9 __CALBC1_16MHZ = 0x10f9 | |
157 | + 0x00000000000010fa __CALDCO_12MHZ = 0x10fa | |
158 | + 0x00000000000010fb __CALBC1_12MHZ = 0x10fb | |
159 | + 0x00000000000010fc __CALDCO_8MHZ = 0x10fc | |
160 | + 0x00000000000010fd __CALBC1_8MHZ = 0x10fd | |
161 | + 0x00000000000010fe __CALDCO_1MHZ = 0x10fe | |
162 | + 0x00000000000010ff __CALBC1_1MHZ = 0x10ff | |
163 | + | |
164 | +.hash | |
165 | + *(.hash) | |
166 | + | |
167 | +.dynsym | |
168 | + *(.dynsym) | |
169 | + | |
170 | +.dynstr | |
171 | + *(.dynstr) | |
172 | + | |
173 | +.gnu.version | |
174 | + *(.gnu.version) | |
175 | + | |
176 | +.gnu.version_d | |
177 | + *(.gnu.version_d) | |
178 | + | |
179 | +.gnu.version_r | |
180 | + *(.gnu.version_r) | |
181 | + | |
182 | +.rel.init | |
183 | + *(.rel.init) | |
184 | + | |
185 | +.rela.init | |
186 | + *(.rela.init) | |
187 | + | |
188 | +.rel.fini | |
189 | + *(.rel.fini) | |
190 | + | |
191 | +.rela.fini | |
192 | + *(.rela.fini) | |
193 | + | |
194 | +.rel.text | |
195 | + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) | |
196 | + | |
197 | +.rela.text | |
198 | + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) | |
199 | + | |
200 | +.rel.rodata | |
201 | + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) | |
202 | + | |
203 | +.rela.rodata | |
204 | + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) | |
205 | + | |
206 | +.rel.data | |
207 | + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) | |
208 | + | |
209 | +.rela.data | |
210 | + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) | |
211 | + | |
212 | +.rel.bss | |
213 | + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) | |
214 | + | |
215 | +.rela.bss | |
216 | + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) | |
217 | + | |
218 | +.rel.ctors | |
219 | + *(.rel.ctors) | |
220 | + | |
221 | +.rela.ctors | |
222 | + *(.rela.ctors) | |
223 | + | |
224 | +.rel.dtors | |
225 | + *(.rel.dtors) | |
226 | + | |
227 | +.rela.dtors | |
228 | + *(.rela.dtors) | |
229 | + | |
230 | +.rel.got | |
231 | + *(.rel.got) | |
232 | + | |
233 | +.rela.got | |
234 | + *(.rela.got) | |
235 | + | |
236 | +.rel.plt | |
237 | + *(.rel.plt) | |
238 | + | |
239 | +.rela.plt | |
240 | + *(.rela.plt) | |
241 | + | |
242 | +.text 0x000000000000c000 0x656 | |
243 | + 0x000000000000c000 . = ALIGN (0x2) | |
244 | + *(.init .init.*) | |
245 | + *(.init0) | |
246 | + .init0 0x000000000000c000 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) | |
247 | + 0x000000000000c000 _reset_vector__ | |
248 | + *(.init1) | |
249 | + .init1 0x000000000000c000 0xc /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
250 | + 0x000000000000c000 __watchdog_support | |
251 | + *(.init2) | |
252 | + .init2 0x000000000000c00c 0x4 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
253 | + 0x000000000000c00c __init_stack | |
254 | + *(.init3) | |
255 | + .init3 0x000000000000c010 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__low_level_init.o) | |
256 | + 0x000000000000c010 __low_level_init | |
257 | + *(.init4) | |
258 | + .init4 0x000000000000c010 0x18 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
259 | + 0x000000000000c010 __do_copy_data | |
260 | + .init4 0x000000000000c028 0x16 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
261 | + 0x000000000000c028 __do_clear_bss | |
262 | + *(.init5) | |
263 | + *(.init6) | |
264 | + *(.init7) | |
265 | + *(.init8) | |
266 | + *(.init9) | |
267 | + .init9 0x000000000000c03e 0x18 main.obj | |
268 | + 0x000000000000c03e main | |
269 | + *(.fini9) | |
270 | + .fini9 0x000000000000c056 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__stop_progExec__.o) | |
271 | + 0x000000000000c056 __stop_progExec__ | |
272 | + *(.fini8) | |
273 | + *(.fini7) | |
274 | + *(.fini6) | |
275 | + *(.fini5) | |
276 | + *(.fini4) | |
277 | + *(.fini3) | |
278 | + *(.fini2) | |
279 | + *(.fini1) | |
280 | + *(.fini0) | |
281 | + .fini0 0x000000000000c056 0x6 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
282 | + 0x000000000000c056 _endless_loop__ | |
283 | + *(.fini .fini.*) | |
284 | + 0x000000000000c05c . = ALIGN (0x2) | |
285 | + 0x000000000000c05c __ctors_start = . | |
286 | + *(.ctors) | |
287 | + 0x000000000000c05c __ctors_end = . | |
288 | + 0x000000000000c05c __dtors_start = . | |
289 | + *(.dtors) | |
290 | + 0x000000000000c05c __dtors_end = . | |
291 | + 0x000000000000c05c . = ALIGN (0x2) | |
292 | + *(.text .text.* .gnu.linkonce.t.*) | |
293 | + .text 0x000000000000c05c 0x4 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
294 | + 0x000000000000c05c __isr_1 | |
295 | + 0x000000000000c05c __isr_4 | |
296 | + 0x000000000000c05c __isr_11 | |
297 | + 0x000000000000c05c __isr_5 | |
298 | + 0x000000000000c05c __isr_2 | |
299 | + 0x000000000000c05c __isr_10 | |
300 | + 0x000000000000c05c __isr_0 | |
301 | + 0x000000000000c05c __isr_8 | |
302 | + 0x000000000000c05c __isr_12 | |
303 | + 0x000000000000c05c __isr_9 | |
304 | + 0x000000000000c05c __isr_6 | |
305 | + 0x000000000000c05c __isr_14 | |
306 | + .text.crt0 0x000000000000c060 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
307 | + .text 0x000000000000c060 0x1f4 main.obj | |
308 | + 0x000000000000c060 init | |
309 | + 0x000000000000c104 __isr_7 | |
310 | + 0x000000000000c130 __isr_3 | |
311 | + 0x000000000000c162 Em_Message_startSend | |
312 | + 0x000000000000c176 Em_Message_lock | |
313 | + 0x000000000000c17e Em_Message_unlock | |
314 | + 0x000000000000c18a tickHandler | |
315 | + 0x000000000000c18a __isr_13 | |
316 | + 0x000000000000c1ea Blinker_connectHandler | |
317 | + 0x000000000000c1f0 Blinker_disconnectHandler | |
318 | + 0x000000000000c1f8 Blinker_cmd_store | |
319 | + 0x000000000000c222 Blinker_count_fetch | |
320 | + 0x000000000000c22a Blinker_count_store | |
321 | + 0x000000000000c230 Blinker_delay_fetch | |
322 | + 0x000000000000c238 Blinker_delay_store | |
323 | + 0x000000000000c23e Blinker_ledState_fetch | |
324 | + .text 0x000000000000c254 0x400 Blinker.obj | |
325 | + 0x000000000000c254 Em_Message_addByte | |
326 | + 0x000000000000c29c Blinker_reset | |
327 | + 0x000000000000c2ca Blinker_run | |
328 | + 0x000000000000c2d0 Em_App_startIndSend | |
329 | + 0x000000000000c2ea Blinker_pairingOn | |
330 | + 0x000000000000c30c Blinker_pairingOff | |
331 | + 0x000000000000c316 Blinker_disconnect | |
332 | + 0x000000000000c338 Blinker_accept | |
333 | + 0x000000000000c356 Em_App_startResSend | |
334 | + 0x000000000000c370 Em_App_xmitReady | |
335 | + 0x000000000000c3c4 Em_App_sendResponse | |
336 | + 0x000000000000c3e8 Em_App_sysStoreDispatch | |
337 | + 0x000000000000c402 Em_App_sysFetchDispatch | |
338 | + 0x000000000000c482 Em_App_fetchDispatch | |
339 | + 0x000000000000c4c0 Em_App_storeDispatch | |
340 | + 0x000000000000c4f8 Em_Message_dispatch | |
341 | + 0x000000000000c556 Em_App_sendIndicator | |
342 | + 0x000000000000c586 Em_Message_getByte | |
343 | + 0x000000000000c63c Blinker_ledState_indicate | |
344 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) | |
345 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
346 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
347 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__low_level_init.o) | |
348 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
349 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
350 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__stop_progExec__.o) | |
351 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
352 | + .text 0x000000000000c654 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
353 | + .text.crt0 0x000000000000c654 0x2 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
354 | + 0x000000000000c654 _unexpected_ | |
355 | + 0x000000000000c656 . = ALIGN (0x2) | |
356 | + | |
357 | +.rodata 0x000000000000c656 0x32 | |
358 | + 0x000000000000c656 . = ALIGN (0x2) | |
359 | + *(.rodata .rodata.* .gnu.linkonce.r.*) | |
360 | + .rodata 0x000000000000c656 0x32 Blinker.obj | |
361 | + 0x000000000000c66a Em_App_endian | |
362 | + 0x000000000000c66c Em_App_build | |
363 | + 0x000000000000c674 Em_App_hash | |
364 | + 0x000000000000c688 . = ALIGN (0x2) | |
365 | + 0x000000000000c688 _etext = . | |
366 | + | |
367 | +.data 0x0000000000000200 0xa load address 0x000000000000c688 | |
368 | + 0x0000000000000200 . = ALIGN (0x2) | |
369 | + 0x0000000000000200 PROVIDE (__data_start, .) | |
370 | + *(.data .data.* .gnu.linkonce.d.*) | |
371 | + .data 0x0000000000000200 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
372 | + .data 0x0000000000000200 0x6 main.obj | |
373 | + 0x0000000000000200 delayRes | |
374 | + 0x0000000000000202 countRes | |
375 | + 0x0000000000000204 cmdRes | |
376 | + .data 0x0000000000000206 0x4 Blinker.obj | |
377 | + 0x0000000000000206 Em_App_inBuf | |
378 | + 0x0000000000000208 Em_App_readIdle | |
379 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) | |
380 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
381 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
382 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__low_level_init.o) | |
383 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
384 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
385 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__stop_progExec__.o) | |
386 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
387 | + .data 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
388 | + 0x000000000000020a . = ALIGN (0x2) | |
389 | + 0x000000000000020a _edata = . | |
390 | + 0x000000000000c688 PROVIDE (__data_load_start, LOADADDR (.data)) | |
391 | + 0x000000000000000a PROVIDE (__data_size, SIZEOF (.data)) | |
392 | + | |
393 | +.bss 0x000000000000020a 0x3e load address 0x000000000000c692 | |
394 | + 0x000000000000020a PROVIDE (__bss_start, .) | |
395 | + *(.bss .bss.*) | |
396 | + .bss 0x000000000000020a 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
397 | + .bss 0x000000000000020a 0x0 main.obj | |
398 | + .bss 0x000000000000020a 0x4 Blinker.obj | |
399 | + 0x000000000000020a Em_App_moreData | |
400 | + 0x000000000000020c Em_App_state | |
401 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_reset_vector__.o) | |
402 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
403 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
404 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__low_level_init.o) | |
405 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
406 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
407 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__stop_progExec__.o) | |
408 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
409 | + .bss 0x000000000000020e 0x0 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
410 | + *(COMMON) | |
411 | + COMMON 0x000000000000020e 0x4 main.obj | |
412 | + 0x000000000000020e curTime | |
413 | + 0x0000000000000210 curCount | |
414 | + COMMON 0x0000000000000212 0x35 Blinker.obj | |
415 | + 0x0000000000000212 Em_App_recvIdx | |
416 | + 0x0000000000000213 Em_App_xmitSize | |
417 | + 0x0000000000000214 Em_App_outBuf | |
418 | + 0x0000000000000216 Em_App_ind | |
419 | + 0x0000000000000220 Em_App_xmitMask | |
420 | + 0x0000000000000224 Em_App_msg | |
421 | + 0x000000000000023e Em_App_recvSize | |
422 | + 0x0000000000000240 Em_App_fileIndex | |
423 | + 0x0000000000000244 Em_App_pdHdlr | |
424 | + 0x0000000000000246 Em_App_xmitIdx | |
425 | + 0x0000000000000248 . = ALIGN (0x2) | |
426 | + *fill* 0x0000000000000247 0x1 00 | |
427 | + 0x0000000000000248 PROVIDE (__bss_end, .) | |
428 | + 0x000000000000003e PROVIDE (__bss_size, SIZEOF (.bss)) | |
429 | + | |
430 | +.noinit 0x0000000000000248 0x2 load address 0x000000000000c692 | |
431 | + 0x0000000000000248 PROVIDE (__noinit_start, .) | |
432 | + *(.noinit .noinit.*) | |
433 | + .noinit.crt0 0x0000000000000248 0x2 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
434 | + 0x0000000000000248 __wdt_clear_value | |
435 | + 0x000000000000024a . = ALIGN (0x2) | |
436 | + 0x000000000000024a PROVIDE (__noinit_end, .) | |
437 | + 0x000000000000024a . = ALIGN (0x2) | |
438 | + 0x000000000000024a _end = . | |
439 | + | |
440 | +.infomem 0x0000000000001000 0x0 | |
441 | + *(.infomem) | |
442 | + 0x0000000000001000 . = ALIGN (0x2) | |
443 | + *(.infomem.*) | |
444 | + | |
445 | +.infomemnobits 0x0000000000001000 0x0 | |
446 | + *(.infomemnobits) | |
447 | + 0x0000000000001000 . = ALIGN (0x2) | |
448 | + *(.infomemnobits.*) | |
449 | + | |
450 | +.infoa | |
451 | + *(.infoa .infoa.*) | |
452 | + | |
453 | +.infob | |
454 | + *(.infob .infob.*) | |
455 | + | |
456 | +.infoc | |
457 | + *(.infoc .infoc.*) | |
458 | + | |
459 | +.infod | |
460 | + *(.infod .infod.*) | |
461 | + | |
462 | +.vectors 0x000000000000ffe0 0x20 | |
463 | + 0x000000000000ffe0 PROVIDE (__vectors_start, .) | |
464 | + *(.vectors*) | |
465 | + .vectors 0x000000000000ffe0 0x20 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/crt0ivtbl16.o | |
466 | + 0x000000000000ffe0 __ivtbl_16 | |
467 | + 0x0000000000010000 _vectors_end = . | |
468 | + | |
469 | +.fartext 0x0000000000000000 0x0 | |
470 | + 0x0000000000000000 . = ALIGN (0x2) | |
471 | + *(.fartext) | |
472 | + 0x0000000000000000 . = ALIGN (0x2) | |
473 | + *(.fartext.*) | |
474 | + 0x0000000000000000 _efartext = . | |
475 | + | |
476 | +.profiler | |
477 | + *(.profiler) | |
478 | + | |
479 | +.stab | |
480 | + *(.stab) | |
481 | + | |
482 | +.stabstr | |
483 | + *(.stabstr) | |
484 | + | |
485 | +.stab.excl | |
486 | + *(.stab.excl) | |
487 | + | |
488 | +.stab.exclstr | |
489 | + *(.stab.exclstr) | |
490 | + | |
491 | +.stab.index | |
492 | + *(.stab.index) | |
493 | + | |
494 | +.stab.indexstr | |
495 | + *(.stab.indexstr) | |
496 | + | |
497 | +.comment | |
498 | + *(.comment) | |
499 | + | |
500 | +.debug | |
501 | + *(.debug) | |
502 | + | |
503 | +.line | |
504 | + *(.line) | |
505 | + | |
506 | +.debug_srcinfo | |
507 | + *(.debug_srcinfo) | |
508 | + | |
509 | +.debug_sfnames | |
510 | + *(.debug_sfnames) | |
511 | + | |
512 | +.debug_aranges 0x0000000000000000 0xa4 | |
513 | + *(.debug_aranges) | |
514 | + .debug_aranges | |
515 | + 0x0000000000000000 0x18 main.obj | |
516 | + .debug_aranges | |
517 | + 0x0000000000000018 0x14 Blinker.obj | |
518 | + .debug_aranges | |
519 | + 0x000000000000002c 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
520 | + .debug_aranges | |
521 | + 0x0000000000000040 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
522 | + .debug_aranges | |
523 | + 0x0000000000000054 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
524 | + .debug_aranges | |
525 | + 0x0000000000000068 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
526 | + .debug_aranges | |
527 | + 0x000000000000007c 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
528 | + .debug_aranges | |
529 | + 0x0000000000000090 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
530 | + | |
531 | +.debug_pubnames | |
532 | + *(.debug_pubnames) | |
533 | + | |
534 | +.debug_info 0x0000000000000000 0x11f6 | |
535 | + *(.debug_info) | |
536 | + .debug_info 0x0000000000000000 0x74e main.obj | |
537 | + .debug_info 0x000000000000074e 0x74e Blinker.obj | |
538 | + .debug_info 0x0000000000000e9c 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
539 | + .debug_info 0x0000000000000f2b 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
540 | + .debug_info 0x0000000000000fba 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
541 | + .debug_info 0x0000000000001049 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
542 | + .debug_info 0x00000000000010d8 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
543 | + .debug_info 0x0000000000001167 0x8f /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
544 | + *(.gnu.linkonce.wi.*) | |
545 | + | |
546 | +.debug_abbrev 0x0000000000000000 0x456 | |
547 | + *(.debug_abbrev) | |
548 | + .debug_abbrev 0x0000000000000000 0x1b0 main.obj | |
549 | + .debug_abbrev 0x00000000000001b0 0x22e Blinker.obj | |
550 | + .debug_abbrev 0x00000000000003de 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
551 | + .debug_abbrev 0x00000000000003f2 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
552 | + .debug_abbrev 0x0000000000000406 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
553 | + .debug_abbrev 0x000000000000041a 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
554 | + .debug_abbrev 0x000000000000042e 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
555 | + .debug_abbrev 0x0000000000000442 0x14 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
556 | + | |
557 | +.debug_line 0x0000000000000000 0x61e | |
558 | + *(.debug_line) | |
559 | + .debug_line 0x0000000000000000 0x16a main.obj | |
560 | + .debug_line 0x000000000000016a 0x205 Blinker.obj | |
561 | + .debug_line 0x000000000000036f 0x72 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__watchdog_support.o) | |
562 | + .debug_line 0x00000000000003e1 0x70 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(__init_stack.o) | |
563 | + .debug_line 0x0000000000000451 0x76 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_copy_data.o) | |
564 | + .debug_line 0x00000000000004c7 0x76 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_clear_bss.o) | |
565 | + .debug_line 0x000000000000053d 0x71 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_endless_loop__.o) | |
566 | + .debug_line 0x00000000000005ae 0x70 /Applications/Development/eclipse/msptools/bin/../lib/gcc/msp430/4.6.1/libcrt0.a(_unexpected_.o) | |
567 | + | |
568 | +.debug_frame 0x0000000000000000 0x22e | |
569 | + *(.debug_frame) | |
570 | + .debug_frame 0x0000000000000000 0x11a main.obj | |
571 | + .debug_frame 0x000000000000011a 0x114 Blinker.obj | |
572 | + | |
573 | +.debug_str 0x0000000000000000 0x6c6 | |
574 | + *(.debug_str) | |
575 | + .debug_str 0x0000000000000000 0x32a main.obj | |
576 | + 0x42a (size before relaxing) | |
577 | + .debug_str 0x000000000000032a 0x39c Blinker.obj | |
578 | + 0x49b (size before relaxing) | |
579 | + | |
580 | +.debug_loc 0x0000000000000000 0x381 | |
581 | + *(.debug_loc) | |
582 | + .debug_loc 0x0000000000000000 0xf6 main.obj | |
583 | + .debug_loc 0x00000000000000f6 0x28b Blinker.obj | |
584 | + | |
585 | +.debug_macinfo | |
586 | + *(.debug_macinfo) | |
587 | + | |
588 | +.debug_pubtypes | |
589 | + *(.debug_pubtypes) | |
590 | + | |
591 | +.debug_ranges 0x0000000000000000 0xc | |
592 | + *(.debug_ranges) | |
593 | + .debug_ranges 0x0000000000000000 0xc main.obj | |
594 | + 0x0000000000000400 PROVIDE (__stack, (ORIGIN (ram) + 0x200)) | |
595 | + 0x000000000000c688 PROVIDE (__data_start_rom, _etext) | |
596 | + 0x000000000000c692 PROVIDE (__data_end_rom, (_etext + SIZEOF (.data))) | |
597 | +OUTPUT(main.out elf32-msp430) | ... | ... |
BlinkerLaunchPad/main.obj
0 → 100644
No preview for this file type
BlinkerLaunchPad/main.out
0 → 100755
No preview for this file type
BlinkerLaunchPad/makefile
0 → 100644
BlinkerSchema/.gitignore
0 → 100644
BlinkerSchema/.project
0 → 100644
1 | +++ a/BlinkerSchema/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>BlinkerSchema</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + </projects> | |
7 | + <buildSpec> | |
8 | + <buildCommand> | |
9 | + <name>com.emmoco.mcmtooling.core.mcmToolingBuilder</name> | |
10 | + <arguments> | |
11 | + </arguments> | |
12 | + </buildCommand> | |
13 | + </buildSpec> | |
14 | + <natures> | |
15 | + <nature>com.emmoco.mcmtooling.core.mcmToolingNature</nature> | |
16 | + </natures> | |
17 | +</projectDescription> | ... | ... |
BlinkerSchema/bundle.properties
0 → 100644
1 | +++ a/BlinkerSchema/bundle.properties | |
1 | +# generated file - do not edit | |
2 | + | |
3 | +bundle.requires = com.emmoco.schema.translator | |
4 | +com.emmoco.framework.Properties.applicationDirectory = out | |
5 | +com.emmoco.framework.Properties.schemaDestinationDirectory = out | |
6 | +com.emmoco.framework.Properties.serverAPIToken = | |
7 | +com.emmoco.framework.Properties.align16 = 2 | |
8 | +com.emmoco.framework.Properties.align32 = 4 | |
9 | +com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/emmoco/BlinkerSchema/schema.ems | |
10 | +com.emmoco.framework.Properties.toolVersion = 12.0.0.201211010336 | ... | ... |
BlinkerSchema/imports/system@emmoco.com/System.ems
0 → 100644
1 | +++ a/BlinkerSchema/imports/system@emmoco.com/System.ems | |
1 | +owner = "system@emmoco.com" | |
2 | + | |
3 | +schema System { | |
4 | + | |
5 | + // protocolLevel #1 | |
6 | + | |
7 | + uint8 $schemaUuid[16] { // protocolLevel #10 -- invisible to applications | |
8 | + readonly | |
9 | + } | |
10 | + | |
11 | + uint16 $mcmProtocolLevel { | |
12 | + readonly | |
13 | + } | |
14 | + | |
15 | + uint16 $eapProtocolLevel { | |
16 | + readonly | |
17 | + } | |
18 | + | |
19 | + uint8 $eapBuildDate[8] { // protocolLevel #5 -- rename from $eapBuildNumber | |
20 | + readonly | |
21 | + } | |
22 | + | |
23 | + // protocolLevel #2 | |
24 | + | |
25 | + int16 $fileIndexReset { | |
26 | + writeonly | |
27 | + } | |
28 | + | |
29 | + // protocolLevel #5 | |
30 | + | |
31 | + // protocolLevel #12 -- increase size to 20 | |
32 | + | |
33 | + uint8 $schemaHash[20] { | |
34 | + readonly | |
35 | + } | |
36 | + | |
37 | + // protocolLevel #7 | |
38 | + | |
39 | + struct ResourceCount { | |
40 | + uint8 app | |
41 | + uint8 sys | |
42 | + } | |
43 | + | |
44 | + ResourceCount $resourceCount { | |
45 | + readonly | |
46 | + } | |
47 | + | |
48 | + // protocolLevel #9 | |
49 | + | |
50 | + int8 $mobileRssi { | |
51 | + readonly | |
52 | + } | |
53 | + | |
54 | + // protocolLevel #11 | |
55 | + | |
56 | + uint8 $mcmDisconnect { | |
57 | + writeonly | |
58 | + } | |
59 | + | |
60 | +} | ... | ... |
BlinkerSchema/out/Blinker-TODO.c
0 → 100644
1 | +++ a/BlinkerSchema/out/Blinker-TODO.c | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.Blinker on 2014-05-09T14:33:35T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#include "Blinker.h" | |
5 | + | |
6 | +#ifdef Em_Blinker_TODO /* enables optional inclusion of empty functions */ | |
7 | + | |
8 | +/* Copy the function skeletons below into your own Blinker.c source file */ | |
9 | + | |
10 | +void Blinker_connectHandler(void) { | |
11 | + /* TODO: application is now connected */ | |
12 | +} | |
13 | + | |
14 | +void Blinker_disconnectHandler(void) { | |
15 | + /* TODO: application is now disconnected */ | |
16 | +} | |
17 | + | |
18 | +void Blinker_cmd_store(Blinker_cmd_t* const input) { | |
19 | + /* TODO: read resource 'cmd' from 'input' */ | |
20 | +} | |
21 | + | |
22 | +void Blinker_count_fetch(Blinker_count_t* const output) { | |
23 | + /* TODO: write resource 'count' into 'output' */ | |
24 | +} | |
25 | + | |
26 | +void Blinker_count_store(Blinker_count_t* const input) { | |
27 | + /* TODO: read resource 'count' from 'input' */ | |
28 | +} | |
29 | + | |
30 | +void Blinker_delay_fetch(Blinker_delay_t* const output) { | |
31 | + /* TODO: write resource 'delay' into 'output' */ | |
32 | +} | |
33 | + | |
34 | +void Blinker_delay_store(Blinker_delay_t* const input) { | |
35 | + /* TODO: read resource 'delay' from 'input' */ | |
36 | +} | |
37 | + | |
38 | +void Blinker_ledState_fetch(Blinker_ledState_t* const output) { | |
39 | + /* TODO: write resource 'ledState' into 'output' */ | |
40 | +} | |
41 | + | |
42 | +#endif /* dummy file */ | ... | ... |
BlinkerSchema/out/Blinker.c
0 → 100644
1 | +++ a/BlinkerSchema/out/Blinker.c | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.Blinker on 2014-05-09T14:33:35T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#include "Em_Message.h" | |
5 | +#include "Blinker.h" | |
6 | + | |
7 | +#ifdef __cplusplus | |
8 | +extern "C" { | |
9 | +#endif | |
10 | + | |
11 | +#define Em_Message_protocolLevel 12 | |
12 | + | |
13 | +typedef struct Em_App_Message { | |
14 | + uint8_t dummy; | |
15 | + uint8_t sot; | |
16 | + Em_Message_Header hdr; | |
17 | + uint8_t data[20]; | |
18 | +} Em_App_Message; | |
19 | + | |
20 | +const uint8_t Em_App_hash[] = {194, 8, 191, 173, 237, 198, 193, 165, 88, 202, 74, 246, 70, 59, 102, 128, 12, 0, ((sizeof(struct{uint8_t f1; uint16_t f2;}) - sizeof(uint16_t)) << 4) | (sizeof(struct{uint8_t f1; uint32_t f2;}) - sizeof(uint32_t))}; | |
21 | + | |
22 | +const uint8_t Em_App_build[] = {20, 116, 249, 224, 69, 1, 0, 0}; | |
23 | + | |
24 | +#define Em_App_APP_RESOURCE_COUNT 4 | |
25 | +#define Em_App_SYS_RESOURCE_COUNT 8 | |
26 | + | |
27 | +#define Em_App_ACCEPT Blinker_accept | |
28 | +#define Em_App_DISCONNECT Blinker_disconnect | |
29 | +#define Em_App_PAIRINGON Blinker_pairingOn | |
30 | +#define Em_App_PAIRINGOFF Blinker_pairingOff | |
31 | +#define Em_App_RESET Blinker_reset | |
32 | +#define Em_App_RUN Blinker_run | |
33 | + | |
34 | +#define Em_App_CONNECTHANDLER Blinker_connectHandler | |
35 | +#define Em_App_DISCONNECTHANDLER Blinker_disconnectHandler | |
36 | + | |
37 | +#define Em_App_MAX_INDICATOR 2 | |
38 | + | |
39 | +enum {Em_App_IDLE, Em_App_DISCONNECTED, Em_App_CONNECTED}; | |
40 | + | |
41 | +typedef struct Em_App_Indicator { | |
42 | + uint8_t dummy; | |
43 | + uint8_t sot; | |
44 | + Em_Message_Header hdr; | |
45 | + uint8_t data[Em_Message_INDSIZE]; | |
46 | +} Em_App_Indicator; | |
47 | + | |
48 | +void (*Em_App_pdHdlr)(void); | |
49 | + | |
50 | +const uint16_t Em_App_endian = 0x0100; | |
51 | + | |
52 | +Em_Message_Size Em_App_recvIdx; | |
53 | +Em_Message_Size Em_App_recvSize; | |
54 | +Em_Message_Size Em_App_xmitIdx; | |
55 | +Em_Message_Size Em_App_xmitSize; | |
56 | + | |
57 | +uint8_t Em_App_state = Em_App_IDLE; | |
58 | +Em_App_Message Em_App_msg; | |
59 | +Em_App_Indicator Em_App_ind; | |
60 | +bool Em_App_moreData = false; | |
61 | +bool Em_App_readIdle = true; | |
62 | +int32_t Em_App_fileIndex; | |
63 | +uint32_t Em_App_xmitMask; | |
64 | + | |
65 | +uint8_t* Em_App_inBuf = (uint8_t*)&Em_App_msg.hdr; | |
66 | +uint8_t* Em_App_outBuf; | |
67 | + | |
68 | +void Em_App_fetchDispatch(void); | |
69 | +void Em_App_storeDispatch(void); | |
70 | +void Em_App_sendIndicator(Em_Message_ResId indId); | |
71 | +void Em_App_sendResponse(Em_Message_Kind kind, Em_Message_Size size); | |
72 | +void Em_App_startIndSend(void); | |
73 | +void Em_App_startResSend(void); | |
74 | +void Em_App_sysFetchDispatch(void); | |
75 | +void Em_App_sysStoreDispatch(void); | |
76 | +bool Em_App_xmitReady(Em_Message_ResId indId); | |
77 | + | |
78 | +bool Em_Message_addByte(uint8_t b) { | |
79 | + if (Em_App_readIdle && b) { | |
80 | + Em_App_recvSize = Em_App_inBuf[0] = b; | |
81 | + Em_App_recvIdx = 1; | |
82 | + Em_App_readIdle = false; | |
83 | + return false; | |
84 | + } | |
85 | + Em_App_inBuf[Em_App_recvIdx++] = b; | |
86 | + if (Em_App_recvIdx < Em_App_recvSize) { | |
87 | + return false; | |
88 | + } | |
89 | + Em_App_readIdle = true; | |
90 | + return true; | |
91 | +} | |
92 | + | |
93 | +bool Em_Message_getByte(uint8_t* bp) { | |
94 | + uint8_t key = Em_Message_lock(); | |
95 | + Em_App_moreData = (Em_App_xmitSize != 0); | |
96 | + if (!Em_App_moreData && (Em_App_xmitMask != 0)) { | |
97 | + uint8_t i; | |
98 | + uint32_t m; | |
99 | + for (i = 0, m = 0x1; i < Em_App_MAX_INDICATOR; i++, m <<= 1) { | |
100 | + if (Em_App_xmitMask & m) { | |
101 | + Em_App_xmitMask &= ~m; | |
102 | + if (i == 0) { | |
103 | + Em_App_startResSend(); | |
104 | + } | |
105 | + else { | |
106 | + Em_App_sendIndicator(i); | |
107 | + } | |
108 | + break; | |
109 | + } | |
110 | + } | |
111 | + Em_Message_unlock(key); | |
112 | + return false; | |
113 | + } | |
114 | + else if (Em_App_moreData) { | |
115 | + *bp = Em_App_outBuf[Em_App_xmitIdx++]; | |
116 | + Em_App_xmitSize -= 1; | |
117 | + } | |
118 | + Em_Message_unlock(key); | |
119 | + return Em_App_moreData; | |
120 | +} | |
121 | + | |
122 | +void Em_App_ACCEPT(bool enable) { | |
123 | + if (Em_App_state == Em_App_CONNECTED) { | |
124 | + return; | |
125 | + } | |
126 | + Em_App_ind.sot = 0; | |
127 | + Em_App_ind.hdr.kind = Em_Message_ACCEPT; | |
128 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
129 | + Em_App_ind.hdr.resId = enable; | |
130 | + Em_App_startIndSend(); | |
131 | +} | |
132 | + | |
133 | +void Em_App_DISCONNECT(void) { | |
134 | + if (Em_App_state != Em_App_CONNECTED) { | |
135 | + return; | |
136 | + } | |
137 | + Em_App_state = Em_App_DISCONNECTED; | |
138 | + Em_App_ind.sot = 0; | |
139 | + Em_App_ind.hdr.kind = Em_Message_DISCONNECT; | |
140 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
141 | + Em_App_ind.hdr.resId = 0; | |
142 | + Em_App_startIndSend(); | |
143 | +} | |
144 | + | |
145 | +void Em_Message_dispatch(void) { | |
146 | + if (Em_App_state == Em_App_IDLE) { | |
147 | + return; | |
148 | + } | |
149 | + switch (Em_App_msg.hdr.kind) { | |
150 | + case Em_Message_CONNECT: | |
151 | + Em_App_state = Em_App_CONNECTED; | |
152 | + Em_App_CONNECTHANDLER(); | |
153 | + break; | |
154 | + case Em_Message_DISCONNECT: | |
155 | + Em_App_state = Em_App_DISCONNECTED; | |
156 | + Em_App_DISCONNECTHANDLER(); | |
157 | + break; | |
158 | + case Em_Message_PAIRING_DONE: | |
159 | + if (Em_App_pdHdlr) { | |
160 | + (*Em_App_pdHdlr)(); | |
161 | + } | |
162 | + break; | |
163 | + case Em_Message_FETCH: | |
164 | + if (Em_App_msg.hdr.resId > 0) { | |
165 | + Em_App_fetchDispatch(); | |
166 | + } | |
167 | + else { | |
168 | + Em_App_sysFetchDispatch(); | |
169 | + } | |
170 | + break; | |
171 | + case Em_Message_STORE: | |
172 | + if (Em_App_msg.hdr.resId > 0) { | |
173 | + Em_App_storeDispatch(); | |
174 | + } | |
175 | + else { | |
176 | + Em_App_sysStoreDispatch(); | |
177 | + } | |
178 | + break; | |
179 | + } | |
180 | +} | |
181 | + | |
182 | +void Em_App_PAIRINGOFF(void(*handler)(void)) { | |
183 | + Em_App_PAIRINGON(0, handler); | |
184 | +} | |
185 | + | |
186 | +void Em_App_PAIRINGON(uint8_t secs, void(*handler)(void)) { | |
187 | + if (Em_App_state != Em_App_DISCONNECTED) { | |
188 | + return; | |
189 | + } | |
190 | + Em_App_pdHdlr = handler; | |
191 | + Em_App_ind.sot = 0; | |
192 | + Em_App_ind.hdr.kind = Em_Message_PAIRING; | |
193 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
194 | + Em_App_ind.hdr.resId = secs; | |
195 | + Em_App_startIndSend(); | |
196 | +} | |
197 | + | |
198 | +void Em_App_RESET(void) { | |
199 | + Em_App_recvIdx = Em_App_recvSize = Em_App_xmitIdx = Em_App_xmitSize = 0; | |
200 | + Em_App_state = Em_App_IDLE; | |
201 | + Em_App_moreData = false; | |
202 | + Em_App_readIdle = true; | |
203 | + Em_App_fileIndex = 0; | |
204 | + Em_App_xmitMask = 0; | |
205 | +} | |
206 | + | |
207 | +void Em_App_RUN(void) { | |
208 | + Em_App_state = Em_App_DISCONNECTED; | |
209 | +} | |
210 | + | |
211 | +void Em_App_sendResponse(Em_Message_Kind kind, Em_Message_Size size) { | |
212 | + if (Em_App_state != Em_App_CONNECTED) { | |
213 | + return; | |
214 | + } | |
215 | + Em_App_msg.sot = 0; | |
216 | + Em_App_msg.hdr.kind = kind; | |
217 | + Em_App_msg.hdr.size = size + sizeof (Em_Message_Header); | |
218 | + if (Em_App_xmitReady(0)) { | |
219 | + Em_App_startResSend(); | |
220 | + } | |
221 | +} | |
222 | + | |
223 | +void Em_App_startIndSend(void) { | |
224 | + Em_App_outBuf = (uint8_t*)&Em_App_ind.sot; | |
225 | + Em_App_xmitSize = Em_App_ind.hdr.size + 1; | |
226 | + Em_App_xmitIdx = 0; | |
227 | + Em_Message_startSend(); | |
228 | +} | |
229 | + | |
230 | +void Em_App_startResSend(void) { | |
231 | + Em_App_outBuf = (uint8_t*)&Em_App_msg.sot; | |
232 | + Em_App_xmitSize = Em_App_msg.hdr.size + 1; | |
233 | + Em_App_xmitIdx = 0; | |
234 | + Em_Message_startSend(); | |
235 | +} | |
236 | + | |
237 | +void Em_App_sysFetchDispatch(void) { | |
238 | + uint8_t size = 0; | |
239 | + int i; | |
240 | + switch (Em_App_msg.hdr.resId) { | |
241 | + case Em_Message_SYS_SCHEMA_HASH: | |
242 | + for (i = 0; i < sizeof (Em_App_hash); i++) { | |
243 | + Em_App_msg.data[i] = Em_App_hash[i]; | |
244 | + } | |
245 | + Em_App_msg.data[sizeof (Em_App_hash)] = *((uint8_t*)&Em_App_endian); | |
246 | + size = sizeof (Em_App_hash) + 1; | |
247 | + break; | |
248 | + case Em_Message_SYS_EAP_PROTOCOL_LEVEL: | |
249 | + *((Em_Message_protocolLevel_t*)Em_App_msg.data) = Em_Message_protocolLevel; | |
250 | + size = sizeof (Em_Message_protocolLevel_t); | |
251 | + break; | |
252 | + case Em_Message_SYS_EAP_BUILD_DATE: | |
253 | + for (i = 0; i < sizeof (Em_App_build); i++) { | |
254 | + Em_App_msg.data[i] = Em_App_build[i]; | |
255 | + } | |
256 | + size = sizeof (Em_App_build); | |
257 | + break; | |
258 | + case Em_Message_SYS_RESOURCE_COUNT: | |
259 | + Em_App_msg.data[0] = Em_App_APP_RESOURCE_COUNT; | |
260 | + Em_App_msg.data[1] = Em_App_SYS_RESOURCE_COUNT; | |
261 | + size = 2; | |
262 | + break; | |
263 | + } | |
264 | + Em_App_sendResponse(Em_Message_FETCH_DONE, size); | |
265 | +} | |
266 | + | |
267 | +void Em_App_sysStoreDispatch(void) { | |
268 | + switch (Em_App_msg.hdr.resId) { | |
269 | + case Em_Message_SYS_FILE_INDEX_RESET: | |
270 | + Em_App_fileIndex = 0; | |
271 | + break; | |
272 | + } | |
273 | + Em_App_sendResponse(Em_Message_STORE_DONE, 0); | |
274 | +} | |
275 | + | |
276 | +bool Em_App_xmitReady(Em_Message_ResId indId) { | |
277 | + uint8_t key = Em_Message_lock(); | |
278 | + bool res = !Em_App_moreData && Em_App_xmitMask == 0; | |
279 | + if (!res) { | |
280 | + Em_App_xmitMask |= (1 << indId); | |
281 | + } | |
282 | + Em_Message_unlock(key); | |
283 | + return res; | |
284 | +} | |
285 | + | |
286 | +void Em_App_fetchDispatch(void) { | |
287 | + uint8_t size = 0; | |
288 | + switch (Em_App_msg.hdr.resId) { | |
289 | + case 0: | |
290 | + break; | |
291 | + case 2: | |
292 | + Blinker_count_fetch((Blinker_count_t*)Em_App_msg.data); | |
293 | + size = 2; | |
294 | + break; | |
295 | + case 3: | |
296 | + Blinker_delay_fetch((Blinker_delay_t*)Em_App_msg.data); | |
297 | + size = 2; | |
298 | + break; | |
299 | + case 4: | |
300 | + Blinker_ledState_fetch((Blinker_ledState_t*)Em_App_msg.data); | |
301 | + size = 1; | |
302 | + break; | |
303 | + } | |
304 | + Em_App_sendResponse(Em_Message_FETCH_DONE, size); | |
305 | +} | |
306 | + | |
307 | +void Em_App_storeDispatch(void) { | |
308 | + switch (Em_App_msg.hdr.resId) { | |
309 | + case 0: | |
310 | + break; | |
311 | + case 1: | |
312 | + Blinker_cmd_store((Blinker_cmd_t*)Em_App_msg.data); | |
313 | + break; | |
314 | + case 2: | |
315 | + Blinker_count_store((Blinker_count_t*)Em_App_msg.data); | |
316 | + break; | |
317 | + case 3: | |
318 | + Blinker_delay_store((Blinker_delay_t*)Em_App_msg.data); | |
319 | + break; | |
320 | + } | |
321 | + Em_App_sendResponse(Em_Message_STORE_DONE, 0); | |
322 | +} | |
323 | + | |
324 | +void Em_App_sendIndicator(Em_Message_ResId indId) { | |
325 | + Em_Message_Size resId = 0; | |
326 | + Em_Message_Size size = 0; | |
327 | + switch (indId) { | |
328 | + case 1: | |
329 | + Blinker_ledState_fetch((Blinker_ledState_t*)&Em_App_ind.data); | |
330 | + resId = 4; | |
331 | + size = 1; | |
332 | + break; | |
333 | +} | |
334 | + Em_App_ind.sot = 0; | |
335 | + Em_App_ind.hdr.kind = Em_Message_INDICATOR; | |
336 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header) + size; | |
337 | + Em_App_ind.hdr.resId = resId; | |
338 | + Em_App_startIndSend(); | |
339 | +} | |
340 | + | |
341 | +void Blinker_ledState_indicate(void) { | |
342 | + if (Em_App_state != Em_App_IDLE && Em_App_xmitReady(1)) Em_App_sendIndicator(1); | |
343 | +} | |
344 | + | |
345 | +#ifdef __cplusplus | |
346 | +} | |
347 | +#endif | |
348 | + | ... | ... |
BlinkerSchema/out/Blinker.h
0 → 100644
1 | +++ a/BlinkerSchema/out/Blinker.h | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.Blinker on 2014-05-09T14:33:35T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#ifndef Blinker__H | |
5 | +#define Blinker__H | |
6 | + | |
7 | +#include "Em_Types.h" | |
8 | +#include "Em_Message.h" | |
9 | + | |
10 | +#ifdef __cplusplus | |
11 | +extern "C" { | |
12 | +#endif | |
13 | + | |
14 | +/* enum Cmd */ | |
15 | +typedef uint8_t Blinker_Cmd; | |
16 | +#define Blinker_START_CMD 0 | |
17 | +#define Blinker_STOP_CMD 1 | |
18 | + | |
19 | +/* enum LedState */ | |
20 | +typedef uint8_t Blinker_LedState; | |
21 | +#define Blinker_LED_OFF 0 | |
22 | +#define Blinker_LED_ON 1 | |
23 | + | |
24 | +/* resource cmd */ | |
25 | +typedef Blinker_Cmd Blinker_cmd_t; | |
26 | +extern void Blinker_cmd_store(Blinker_cmd_t* const input); | |
27 | + | |
28 | +/* resource count */ | |
29 | +typedef int16_t Blinker_count_t; | |
30 | +extern void Blinker_count_fetch(Blinker_count_t* const output); | |
31 | +extern void Blinker_count_store(Blinker_count_t* const input); | |
32 | + | |
33 | +/* resource delay */ | |
34 | +typedef uint16_t Blinker_delay_t; | |
35 | +#define Blinker_delay_min 500 | |
36 | +#define Blinker_delay_max 2000 | |
37 | +#define Blinker_delay_step 100 | |
38 | +extern void Blinker_delay_fetch(Blinker_delay_t* const output); | |
39 | +extern void Blinker_delay_store(Blinker_delay_t* const input); | |
40 | + | |
41 | +/* resource ledState */ | |
42 | +typedef Blinker_LedState Blinker_ledState_t; | |
43 | +extern void Blinker_ledState_fetch(Blinker_ledState_t* const output); | |
44 | +extern void Blinker_ledState_indicate(void); | |
45 | + | |
46 | +void Blinker_reset(void); | |
47 | +void Blinker_run(void); | |
48 | + | |
49 | +void Blinker_accept(bool enable); | |
50 | +void Blinker_disconnect(void); | |
51 | +void Blinker_pairingOn(uint8_t secs, void(*handler)(void)); | |
52 | +void Blinker_pairingOff(void(*handler)(void)); | |
53 | + | |
54 | +void Blinker_connectHandler(void); | |
55 | +void Blinker_disconnectHandler(void); | |
56 | + | |
57 | +#ifdef __cplusplus | |
58 | +} | |
59 | +#endif | |
60 | + | |
61 | +#endif /* Blinker__H */ | ... | ... |
BlinkerSchema/out/Blinker.zip
0 → 100644
No preview for this file type
BlinkerSchema/out/Em_Message.h
0 → 100644
1 | +++ a/BlinkerSchema/out/Em_Message.h | |
1 | +#ifndef Em_Message_H_ | |
2 | +#define Em_Message_H_ | |
3 | + | |
4 | +#include "Em_Types.h" | |
5 | + | |
6 | +#ifdef __cplusplus | |
7 | +extern "C" { | |
8 | +#endif | |
9 | + | |
10 | +/* protocolLevel #4 */ | |
11 | +#define Em_Message_INDSIZE 4 | |
12 | + | |
13 | +typedef uint8_t Em_Message_Size; | |
14 | +typedef uint8_t Em_Message_Kind; | |
15 | +/* protocolLevel #12 -- split 16-bit resId into <resId, chan> */ | |
16 | +typedef int8_t Em_Message_ResId; | |
17 | +typedef uint8_t Em_Message_Chan; | |
18 | + | |
19 | +#define Em_Message_NOP 0 | |
20 | +#define Em_Message_FETCH 1 | |
21 | +#define Em_Message_FETCH_DONE 2 | |
22 | +#define Em_Message_STORE 3 | |
23 | +#define Em_Message_STORE_DONE 4 | |
24 | +#define Em_Message_INDICATOR 5 | |
25 | +#define Em_Message_CONNECT 6 | |
26 | +#define Em_Message_DISCONNECT 7 | |
27 | +#define Em_Message_ECHO 8 | |
28 | +/* protocolLevel #3 */ | |
29 | +/* protocolLevel #6 -- rename from BROADCAST to PAIRING */ | |
30 | +#define Em_Message_PAIRING 9 | |
31 | +#define Em_Message_PAIRING_DONE 10 | |
32 | +/* protocolLevel #7 */ | |
33 | +#define Em_Message_OFFLINE 11 | |
34 | +/* protocolLevel #8 */ | |
35 | +#define Em_Message_ACCEPT 12 | |
36 | + | |
37 | +typedef struct Em_Message_Header { | |
38 | + Em_Message_Size size; | |
39 | + Em_Message_Kind kind; | |
40 | + Em_Message_ResId resId; | |
41 | + Em_Message_Chan chan; | |
42 | +} Em_Message_Header; | |
43 | + | |
44 | +typedef uint16_t Em_Message_protocolLevel_t; | |
45 | + | |
46 | +/* protocolLevel #1 */ | |
47 | + | |
48 | +/* protocolLevel #10 */ | |
49 | +/* #define Em_Message_SYS_SCHEMA_UUID -1 */ | |
50 | + | |
51 | +#define Em_Message_SYS_MCM_PROTOCOL_LEVEL -2 | |
52 | +#define Em_Message_SYS_EAP_PROTOCOL_LEVEL -3 | |
53 | +#define Em_Message_SYS_EAP_BUILD_DATE -4 | |
54 | + | |
55 | +/* protocolLevel #2 */ | |
56 | +#define Em_Message_SYS_FILE_INDEX_RESET -5 | |
57 | + | |
58 | +/* protocolLevel #5 */ | |
59 | +#define Em_Message_SYS_SCHEMA_HASH -6 | |
60 | + | |
61 | +/* protocolLevel #7 */ | |
62 | +#define Em_Message_SYS_RESOURCE_COUNT -7 | |
63 | + | |
64 | +/* protocolLevel #9 */ | |
65 | +#define Em_Message_SYS_MOBILE_RSSI -8 | |
66 | + | |
67 | +/* protocolLevel #11 */ | |
68 | +#define Em_Message_SYS_MCM_DISCONNECT -9 | |
69 | + | |
70 | +extern void Em_Message_init(void); | |
71 | + | |
72 | +extern bool Em_Message_addByte(uint8_t b); | |
73 | +extern void Em_Message_dispatch(void); | |
74 | +extern bool Em_Message_getByte(uint8_t *bp); | |
75 | +extern uint8_t Em_Message_lock(void); | |
76 | +extern void Em_Message_startSend(void); | |
77 | +extern void Em_Message_unlock(uint8_t key); | |
78 | + | |
79 | +#ifdef __cplusplus | |
80 | +} | |
81 | +#endif | |
82 | + | |
83 | +#endif /*Em_Message_H_*/ | ... | ... |
BlinkerSchema/out/Em_Types.h
0 → 100644
BlinkerSchema/out/blinker.json
0 → 100644
1 | +++ a/BlinkerSchema/out/blinker.json | |
1 | +{ | |
2 | + "resources": { | |
3 | + "$schemaHash": { | |
4 | + "id": -6, | |
5 | + "align": 1, | |
6 | + "attributes": {"readonly": true}, | |
7 | + "type": "A20:u1", | |
8 | + "access": "r", | |
9 | + "size": 20 | |
10 | + }, | |
11 | + "$eapProtocolLevel": { | |
12 | + "id": -3, | |
13 | + "align": 2, | |
14 | + "attributes": {"readonly": true}, | |
15 | + "type": "u2", | |
16 | + "access": "r", | |
17 | + "size": 2 | |
18 | + }, | |
19 | + "cmd": { | |
20 | + "id": 1, | |
21 | + "align": 1, | |
22 | + "attributes": {"writeonly": true}, | |
23 | + "type": "E:@emmoco.com.Blinker/Cmd", | |
24 | + "access": "w", | |
25 | + "size": 1 | |
26 | + }, | |
27 | + "$mcmProtocolLevel": { | |
28 | + "id": -2, | |
29 | + "align": 2, | |
30 | + "attributes": {"readonly": true}, | |
31 | + "type": "u2", | |
32 | + "access": "r", | |
33 | + "size": 2 | |
34 | + }, | |
35 | + "count": { | |
36 | + "id": 2, | |
37 | + "align": 2, | |
38 | + "attributes": {"readwrite": true}, | |
39 | + "type": "i2", | |
40 | + "access": "rw", | |
41 | + "size": 2 | |
42 | + }, | |
43 | + "$mobileRssi": { | |
44 | + "id": -8, | |
45 | + "align": 1, | |
46 | + "attributes": {"readonly": true}, | |
47 | + "type": "i1", | |
48 | + "access": "r", | |
49 | + "size": 1 | |
50 | + }, | |
51 | + "$mcmDisconnect": { | |
52 | + "id": -9, | |
53 | + "align": 1, | |
54 | + "attributes": {"writeonly": true}, | |
55 | + "type": "u1", | |
56 | + "access": "w", | |
57 | + "size": 1 | |
58 | + }, | |
59 | + "delay": { | |
60 | + "id": 3, | |
61 | + "align": 2, | |
62 | + "attributes": {"readwrite": true}, | |
63 | + "type": "N:0.500000,2.000000,0.100000,3/u2", | |
64 | + "access": "rw", | |
65 | + "size": 2 | |
66 | + }, | |
67 | + "$eapBuildDate": { | |
68 | + "id": -4, | |
69 | + "align": 1, | |
70 | + "attributes": {"readonly": true}, | |
71 | + "type": "A8:u1", | |
72 | + "access": "r", | |
73 | + "size": 8 | |
74 | + }, | |
75 | + "$resourceCount": { | |
76 | + "id": -7, | |
77 | + "align": 1, | |
78 | + "attributes": {"readonly": true}, | |
79 | + "type": "S:system@emmoco.com.System/ResourceCount", | |
80 | + "access": "r", | |
81 | + "size": 2 | |
82 | + }, | |
83 | + "ledState": { | |
84 | + "id": 4, | |
85 | + "align": 1, | |
86 | + "attributes": { | |
87 | + "indicator": true, | |
88 | + "readonly": true | |
89 | + }, | |
90 | + "type": "E:@emmoco.com.Blinker/LedState", | |
91 | + "access": "ir", | |
92 | + "size": 1 | |
93 | + }, | |
94 | + "$fileIndexReset": { | |
95 | + "id": -5, | |
96 | + "align": 2, | |
97 | + "attributes": {"writeonly": true}, | |
98 | + "type": "i2", | |
99 | + "access": "w", | |
100 | + "size": 2 | |
101 | + } | |
102 | + }, | |
103 | + "resourceNamesSys": [ | |
104 | + "$eapBuildDate", | |
105 | + "$eapProtocolLevel", | |
106 | + "$fileIndexReset", | |
107 | + "$mcmDisconnect", | |
108 | + "$mcmProtocolLevel", | |
109 | + "$mobileRssi", | |
110 | + "$resourceCount", | |
111 | + "$schemaHash" | |
112 | + ], | |
113 | + "manifest": { | |
114 | + "protocolLevel": 12, | |
115 | + "hash": [ | |
116 | + 194, | |
117 | + 8, | |
118 | + 191, | |
119 | + 173, | |
120 | + 237, | |
121 | + 198, | |
122 | + 193, | |
123 | + 165, | |
124 | + 88, | |
125 | + 202, | |
126 | + 74, | |
127 | + 246, | |
128 | + 70, | |
129 | + 59, | |
130 | + 102, | |
131 | + 128 | |
132 | + ], | |
133 | + "toolVersion": "12.0.0.201211010336", | |
134 | + "name": "Blinker", | |
135 | + "$$md5": "73d98dc6eb4c17eea377d5969c0e49d2", | |
136 | + "build": [ | |
137 | + 20, | |
138 | + 116, | |
139 | + 249, | |
140 | + 224, | |
141 | + 69, | |
142 | + 1, | |
143 | + 0, | |
144 | + 0 | |
145 | + ], | |
146 | + "date": "2014-05-09T14:33:35T", | |
147 | + "maxAlign": 2, | |
148 | + "maxSize": 20, | |
149 | + "version": "1.0.0" | |
150 | + }, | |
151 | + "resourceNames": [ | |
152 | + "cmd", | |
153 | + "count", | |
154 | + "delay", | |
155 | + "ledState", | |
156 | + "$mcmProtocolLevel", | |
157 | + "$eapProtocolLevel", | |
158 | + "$eapBuildDate", | |
159 | + "$fileIndexReset", | |
160 | + "$schemaHash", | |
161 | + "$resourceCount", | |
162 | + "$mobileRssi", | |
163 | + "$mcmDisconnect" | |
164 | + ], | |
165 | + "attributes": { | |
166 | + "description": "Blinker, the hello world program for mobile control", | |
167 | + "version": "1.0.0" | |
168 | + }, | |
169 | + "types": { | |
170 | + "@emmoco.com.Blinker/LedState": { | |
171 | + "values": [ | |
172 | + "LED_OFF", | |
173 | + "LED_ON" | |
174 | + ], | |
175 | + "align": 1, | |
176 | + "type": "E:@emmoco.com.Blinker/LedState", | |
177 | + "size": 1 | |
178 | + }, | |
179 | + "system@emmoco.com.System/ResourceCount": { | |
180 | + "align": 1, | |
181 | + "type": "S:system@emmoco.com.System/ResourceCount", | |
182 | + "size": 2, | |
183 | + "fields": [ | |
184 | + { | |
185 | + "pad": 0, | |
186 | + "align": 1, | |
187 | + "name": "app", | |
188 | + "type": "u1", | |
189 | + "size": 1 | |
190 | + }, | |
191 | + { | |
192 | + "pad": 0, | |
193 | + "align": 1, | |
194 | + "name": "sys", | |
195 | + "type": "u1", | |
196 | + "size": 1 | |
197 | + } | |
198 | + ] | |
199 | + }, | |
200 | + "std:i2": { | |
201 | + "align": 2, | |
202 | + "size": 2 | |
203 | + }, | |
204 | + "std:i1": { | |
205 | + "align": 1, | |
206 | + "size": 1 | |
207 | + }, | |
208 | + "std:u1": { | |
209 | + "align": 1, | |
210 | + "size": 1 | |
211 | + }, | |
212 | + "@emmoco.com.Blinker/Cmd": { | |
213 | + "values": [ | |
214 | + "START_CMD", | |
215 | + "STOP_CMD" | |
216 | + ], | |
217 | + "align": 1, | |
218 | + "type": "E:@emmoco.com.Blinker/Cmd", | |
219 | + "size": 1 | |
220 | + }, | |
221 | + "std:u2": { | |
222 | + "align": 2, | |
223 | + "size": 2 | |
224 | + } | |
225 | + }, | |
226 | + "resourceNamesApp": [ | |
227 | + "cmd", | |
228 | + "count", | |
229 | + "delay", | |
230 | + "ledState" | |
231 | + ], | |
232 | + "imports": {"@emmoco.com.Blinker": true} | |
233 | +} | |
0 | 234 | \ No newline at end of file | ... | ... |
BlinkerSchema/schema.ems
0 → 100644
1 | +++ a/BlinkerSchema/schema.ems | |
1 | +version = "1.0.0" | |
2 | +description = "Blinker, the hello world program for mobile control" | |
3 | + | |
4 | +schema Blinker { | |
5 | + | |
6 | + /* -------- resource cmd -------- */ | |
7 | + enum Cmd { | |
8 | + START_CMD, STOP_CMD | |
9 | + } | |
10 | + Cmd cmd { | |
11 | + writeonly | |
12 | + } | |
13 | + | |
14 | + /* -------- resource count -------- */ | |
15 | + int16 count { | |
16 | + readwrite | |
17 | + } | |
18 | + | |
19 | + /* -------- resource delay -------- */ | |
20 | + num <0.5, 2.0, 0.100> delay { | |
21 | + readwrite | |
22 | + } | |
23 | + | |
24 | + /* -------- resource ledState -------- */ | |
25 | + enum LedState { | |
26 | + LED_OFF, LED_ON | |
27 | + } | |
28 | + LedState ledState { | |
29 | + readonly | |
30 | + indicator | |
31 | + } | |
32 | +} | ... | ... |
CommonLaunchPad/.externalToolConfigurations/LaunchPad Application.launch
0 → 100644
1 | +++ a/CommonLaunchPad/.externalToolConfigurations/LaunchPad Application.launch | |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType"> | |
3 | +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> | |
4 | +<mapAttribute key="org.eclipse.debug.core.environmentVariables"> | |
5 | +<mapEntry key="PATH" value="${eclipse_home}/msptools/bin${system_property:path.separator}${env_var:PATH}"/> | |
6 | +</mapAttribute> | |
7 | +<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> | |
8 | +<listEntry value="org.eclipse.ui.externaltools.launchGroup"/> | |
9 | +</listAttribute> | |
10 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${project}"/> | |
11 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${eclipse_home}/msptools/bin/gmake${exe_ext}"/> | |
12 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="load COMMON=${project_loc:/CommonLaunchPad}"/> | |
13 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/> | |
14 | +</launchConfiguration> | ... | ... |
CommonLaunchPad/.project
0 → 100644
CommonLaunchPad/rules.mk
0 → 100644
1 | +++ a/CommonLaunchPad/rules.mk | |
1 | +MCU = msp430g2553 | |
2 | + | |
3 | +CC = msp430-gcc | |
4 | +OBJCOPY = msp430-objcopy | |
5 | +SIZE = msp430-size | |
6 | +MSPDEBUG = mspdebug | |
7 | +MSP430FLASHER = MSP430Flasher | |
8 | +EMBUILDER = em-builder | |
9 | +COPTS = -Os -Wall -fno-strict-aliasing -c -g -mmcu=$(MCU) | |
10 | +LDOPTS = -mmcu=$(MCU) -Wl,-Map=main.map | |
11 | + | |
12 | +EMSOUT = $(SCHEMA)/out | |
13 | +RMFILES = *.out *.map *.hex *.obj | |
14 | +CFLAGS = -I$(COMMON) -I$(EMSOUT) $(COPTS) | |
15 | +LDFLAGS = $(LDOPTS) | |
16 | +VPATH = $(COMMON) | |
17 | +OUTFILE = main.out | |
18 | + | |
19 | +all: $(OUTFILE) | |
20 | + | |
21 | +ifeq (,$(findstring Windows,$(OS))) | |
22 | +load: out-check | |
23 | + $(MSPDEBUG) rf2500 "prog $(OUTFILE)" 2>&1 | |
24 | +else | |
25 | +load: $(OUTFILE:.out=.hex) | |
26 | + $(MSP430FLASHER) -i USB -m AUTO -e ERASE_MAIN -n $(MCU) -w $< -v -z [VCC] -g | |
27 | +endif | |
28 | + | |
29 | +$(OUTFILE): $(OBJECTS) | |
30 | + $(CC) $(LDFLAGS) -o $@ $^ | |
31 | + $(SIZE) $@ | |
32 | + | |
33 | +%.hex: out-check | |
34 | + $(OBJCOPY) -O ihex $(@:.hex=.out) $@ | |
35 | + | |
36 | +%.obj: %.c $(EMSOUT)/$(EMSNAME).h | |
37 | + $(CC) $(CFLAGS) -o $@ $< | |
38 | + | |
39 | +$(EMSNAME).obj: $(EMSOUT)/$(EMSNAME).c $(EMSOUT)/$(EMSNAME).h | |
40 | + $(CC) $(CFLAGS) -o $@ $< | |
41 | + | |
42 | +$(EMSOUT)/$(EMSNAME).h: $(SCHEMA)/schema.ems | |
43 | + $(EMBUILDER) -v --root=$(<D) $< | |
44 | + | |
45 | +local-clean: | |
46 | +ifeq (,$(findstring Windows,$(OS))) | |
47 | + rm -f $(RMFILES) | |
48 | +else | |
49 | +ifneq (,$(wildcard $(RMFILES))) | |
50 | + cmd /c del /q $(wildcard $(RMFILES)) | |
51 | +endif | |
52 | +endif | |
53 | + | |
54 | +clean: local-clean | |
55 | +ifeq (,$(findstring Windows,$(OS))) | |
56 | + rm -rf $(EMSOUT) | |
57 | +else | |
58 | +ifneq (,$(wildcard $(EMSOUT))) | |
59 | + cmd /c rmdir /q /s $(subst /,\,$(EMSOUT)) | |
60 | +endif | |
61 | +endif | |
62 | + | |
63 | +out-check: | |
64 | +ifeq (,$(wildcard $(OUTFILE))) | |
65 | + @echo error: $(OUTFILE): No such file or directory 1>&2 | |
66 | + @exit 1 | |
67 | +endif | |
68 | + | |
69 | +.PHONY: all load clean local-clean out-check | ... | ... |
DUREX/.project
0 → 100644
1 | +++ a/DUREX/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>DUREX</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + </projects> | |
7 | + <buildSpec> | |
8 | + <buildCommand> | |
9 | + <name>com.emmoco.mcmtooling.core.mcmToolingBuilder</name> | |
10 | + <arguments> | |
11 | + </arguments> | |
12 | + </buildCommand> | |
13 | + </buildSpec> | |
14 | + <natures> | |
15 | + <nature>com.emmoco.mcmtooling.core.mcmToolingNature</nature> | |
16 | + </natures> | |
17 | +</projectDescription> | ... | ... |
DUREX/bundle.properties
0 → 100644
1 | +++ a/DUREX/bundle.properties | |
1 | +# generated file - do not edit | |
2 | + | |
3 | +bundle.requires = com.emmoco.schema.translator | |
4 | +com.emmoco.framework.Properties.applicationDirectory = out | |
5 | +com.emmoco.framework.Properties.schemaDestinationDirectory = out | |
6 | +com.emmoco.framework.Properties.serverAPIToken = | |
7 | +com.emmoco.framework.Properties.align16 = 2 | |
8 | +com.emmoco.framework.Properties.align32 = 4 | |
9 | +com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/emmoco/DUREX/schema.ems | |
10 | +com.emmoco.framework.Properties.toolVersion = 12.0.0.201211010336 | ... | ... |
DUREX/imports/system@emmoco.com/System.ems
0 → 100644
1 | +++ a/DUREX/imports/system@emmoco.com/System.ems | |
1 | +owner = "system@emmoco.com" | |
2 | + | |
3 | +schema System { | |
4 | + | |
5 | + // protocolLevel #1 | |
6 | + | |
7 | + uint8 $schemaUuid[16] { // protocolLevel #10 -- invisible to applications | |
8 | + readonly | |
9 | + } | |
10 | + | |
11 | + uint16 $mcmProtocolLevel { | |
12 | + readonly | |
13 | + } | |
14 | + | |
15 | + uint16 $eapProtocolLevel { | |
16 | + readonly | |
17 | + } | |
18 | + | |
19 | + uint8 $eapBuildDate[8] { // protocolLevel #5 -- rename from $eapBuildNumber | |
20 | + readonly | |
21 | + } | |
22 | + | |
23 | + // protocolLevel #2 | |
24 | + | |
25 | + int16 $fileIndexReset { | |
26 | + writeonly | |
27 | + } | |
28 | + | |
29 | + // protocolLevel #5 | |
30 | + | |
31 | + // protocolLevel #12 -- increase size to 20 | |
32 | + | |
33 | + uint8 $schemaHash[20] { | |
34 | + readonly | |
35 | + } | |
36 | + | |
37 | + // protocolLevel #7 | |
38 | + | |
39 | + struct ResourceCount { | |
40 | + uint8 app | |
41 | + uint8 sys | |
42 | + } | |
43 | + | |
44 | + ResourceCount $resourceCount { | |
45 | + readonly | |
46 | + } | |
47 | + | |
48 | + // protocolLevel #9 | |
49 | + | |
50 | + int8 $mobileRssi { | |
51 | + readonly | |
52 | + } | |
53 | + | |
54 | + // protocolLevel #11 | |
55 | + | |
56 | + uint8 $mcmDisconnect { | |
57 | + writeonly | |
58 | + } | |
59 | + | |
60 | +} | ... | ... |
DUREX/out/DUREX-TODO.c
0 → 100644
1 | +++ a/DUREX/out/DUREX-TODO.c | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.DUREX on 2014-05-09T15:19:51T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#include "DUREX.h" | |
5 | + | |
6 | +#ifdef Em_DUREX_TODO /* enables optional inclusion of empty functions */ | |
7 | + | |
8 | +/* Copy the function skeletons below into your own DUREX.c source file */ | |
9 | + | |
10 | +void DUREX_connectHandler(void) { | |
11 | + /* TODO: application is now connected */ | |
12 | +} | |
13 | + | |
14 | +void DUREX_disconnectHandler(void) { | |
15 | + /* TODO: application is now disconnected */ | |
16 | +} | |
17 | + | |
18 | +void DUREX_serverBytesAvailable_fetch(DUREX_serverBytesAvailable_t* const output) { | |
19 | + /* TODO: write resource 'serverBytesAvailable' into 'output' */ | |
20 | +} | |
21 | + | |
22 | +void DUREX_serverBytesAvailable_store(DUREX_serverBytesAvailable_t* const input) { | |
23 | + /* TODO: read resource 'serverBytesAvailable' from 'input' */ | |
24 | +} | |
25 | + | |
26 | +void DUREX_clientBytesAvailable_fetch(DUREX_clientBytesAvailable_t* const output) { | |
27 | + /* TODO: write resource 'clientBytesAvailable' into 'output' */ | |
28 | +} | |
29 | + | |
30 | +void DUREX_clientBytesAvailable_store(DUREX_clientBytesAvailable_t* const input) { | |
31 | + /* TODO: read resource 'clientBytesAvailable' from 'input' */ | |
32 | +} | |
33 | + | |
34 | +void DUREX_serverData_fetch(DUREX_serverData_t* const output) { | |
35 | + /* TODO: write resource 'serverData' into 'output' */ | |
36 | +} | |
37 | + | |
38 | +void DUREX_serverData_store(DUREX_serverData_t* const input) { | |
39 | + /* TODO: read resource 'serverData' from 'input' */ | |
40 | +} | |
41 | + | |
42 | +void DUREX_clientData_fetch(DUREX_clientData_t* const output) { | |
43 | + /* TODO: write resource 'clientData' into 'output' */ | |
44 | +} | |
45 | + | |
46 | +void DUREX_clientData_store(DUREX_clientData_t* const input) { | |
47 | + /* TODO: read resource 'clientData' from 'input' */ | |
48 | +} | |
49 | + | |
50 | +void DUREX_serverMoreData_fetch(DUREX_serverMoreData_t* const output) { | |
51 | + /* TODO: write resource 'serverMoreData' into 'output' */ | |
52 | +} | |
53 | + | |
54 | +void DUREX_serverMoreData_store(DUREX_serverMoreData_t* const input) { | |
55 | + /* TODO: read resource 'serverMoreData' from 'input' */ | |
56 | +} | |
57 | + | |
58 | +void DUREX_clientMoreData_fetch(DUREX_clientMoreData_t* const output) { | |
59 | + /* TODO: write resource 'clientMoreData' into 'output' */ | |
60 | +} | |
61 | + | |
62 | +void DUREX_clientMoreData_store(DUREX_clientMoreData_t* const input) { | |
63 | + /* TODO: read resource 'clientMoreData' from 'input' */ | |
64 | +} | |
65 | + | |
66 | +#endif /* dummy file */ | ... | ... |
DUREX/out/DUREX.c
0 → 100644
1 | +++ a/DUREX/out/DUREX.c | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.DUREX on 2014-05-09T15:19:51T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#include "Em_Message.h" | |
5 | +#include "DUREX.h" | |
6 | + | |
7 | +#ifdef __cplusplus | |
8 | +extern "C" { | |
9 | +#endif | |
10 | + | |
11 | +#define Em_Message_protocolLevel 12 | |
12 | + | |
13 | +typedef struct Em_App_Message { | |
14 | + uint8_t dummy; | |
15 | + uint8_t sot; | |
16 | + Em_Message_Header hdr; | |
17 | + uint8_t data[240]; | |
18 | +} Em_App_Message; | |
19 | + | |
20 | +const uint8_t Em_App_hash[] = {218, 74, 41, 73, 107, 164, 154, 232, 180, 185, 128, 44, 30, 56, 49, 63, 12, 0, ((sizeof(struct{uint8_t f1; uint16_t f2;}) - sizeof(uint16_t)) << 4) | (sizeof(struct{uint8_t f1; uint32_t f2;}) - sizeof(uint32_t))}; | |
21 | + | |
22 | +const uint8_t Em_App_build[] = {221, 204, 35, 225, 69, 1, 0, 0}; | |
23 | + | |
24 | +#define Em_App_APP_RESOURCE_COUNT 6 | |
25 | +#define Em_App_SYS_RESOURCE_COUNT 8 | |
26 | + | |
27 | +#define Em_App_ACCEPT DUREX_accept | |
28 | +#define Em_App_DISCONNECT DUREX_disconnect | |
29 | +#define Em_App_PAIRINGON DUREX_pairingOn | |
30 | +#define Em_App_PAIRINGOFF DUREX_pairingOff | |
31 | +#define Em_App_RESET DUREX_reset | |
32 | +#define Em_App_RUN DUREX_run | |
33 | + | |
34 | +#define Em_App_CONNECTHANDLER DUREX_connectHandler | |
35 | +#define Em_App_DISCONNECTHANDLER DUREX_disconnectHandler | |
36 | + | |
37 | +#define Em_App_MAX_INDICATOR 1 | |
38 | + | |
39 | +enum {Em_App_IDLE, Em_App_DISCONNECTED, Em_App_CONNECTED}; | |
40 | + | |
41 | +typedef struct Em_App_Indicator { | |
42 | + uint8_t dummy; | |
43 | + uint8_t sot; | |
44 | + Em_Message_Header hdr; | |
45 | + uint8_t data[Em_Message_INDSIZE]; | |
46 | +} Em_App_Indicator; | |
47 | + | |
48 | +void (*Em_App_pdHdlr)(void); | |
49 | + | |
50 | +const uint16_t Em_App_endian = 0x0100; | |
51 | + | |
52 | +Em_Message_Size Em_App_recvIdx; | |
53 | +Em_Message_Size Em_App_recvSize; | |
54 | +Em_Message_Size Em_App_xmitIdx; | |
55 | +Em_Message_Size Em_App_xmitSize; | |
56 | + | |
57 | +uint8_t Em_App_state = Em_App_IDLE; | |
58 | +Em_App_Message Em_App_msg; | |
59 | +Em_App_Indicator Em_App_ind; | |
60 | +bool Em_App_moreData = false; | |
61 | +bool Em_App_readIdle = true; | |
62 | +int32_t Em_App_fileIndex; | |
63 | +uint32_t Em_App_xmitMask; | |
64 | + | |
65 | +uint8_t* Em_App_inBuf = (uint8_t*)&Em_App_msg.hdr; | |
66 | +uint8_t* Em_App_outBuf; | |
67 | + | |
68 | +void Em_App_fetchDispatch(void); | |
69 | +void Em_App_storeDispatch(void); | |
70 | +void Em_App_sendIndicator(Em_Message_ResId indId); | |
71 | +void Em_App_sendResponse(Em_Message_Kind kind, Em_Message_Size size); | |
72 | +void Em_App_startIndSend(void); | |
73 | +void Em_App_startResSend(void); | |
74 | +void Em_App_sysFetchDispatch(void); | |
75 | +void Em_App_sysStoreDispatch(void); | |
76 | +bool Em_App_xmitReady(Em_Message_ResId indId); | |
77 | + | |
78 | +bool Em_Message_addByte(uint8_t b) { | |
79 | + if (Em_App_readIdle && b) { | |
80 | + Em_App_recvSize = Em_App_inBuf[0] = b; | |
81 | + Em_App_recvIdx = 1; | |
82 | + Em_App_readIdle = false; | |
83 | + return false; | |
84 | + } | |
85 | + Em_App_inBuf[Em_App_recvIdx++] = b; | |
86 | + if (Em_App_recvIdx < Em_App_recvSize) { | |
87 | + return false; | |
88 | + } | |
89 | + Em_App_readIdle = true; | |
90 | + return true; | |
91 | +} | |
92 | + | |
93 | +bool Em_Message_getByte(uint8_t* bp) { | |
94 | + uint8_t key = Em_Message_lock(); | |
95 | + Em_App_moreData = (Em_App_xmitSize != 0); | |
96 | + if (!Em_App_moreData && (Em_App_xmitMask != 0)) { | |
97 | + uint8_t i; | |
98 | + uint32_t m; | |
99 | + for (i = 0, m = 0x1; i < Em_App_MAX_INDICATOR; i++, m <<= 1) { | |
100 | + if (Em_App_xmitMask & m) { | |
101 | + Em_App_xmitMask &= ~m; | |
102 | + if (i == 0) { | |
103 | + Em_App_startResSend(); | |
104 | + } | |
105 | + else { | |
106 | + Em_App_sendIndicator(i); | |
107 | + } | |
108 | + break; | |
109 | + } | |
110 | + } | |
111 | + Em_Message_unlock(key); | |
112 | + return false; | |
113 | + } | |
114 | + else if (Em_App_moreData) { | |
115 | + *bp = Em_App_outBuf[Em_App_xmitIdx++]; | |
116 | + Em_App_xmitSize -= 1; | |
117 | + } | |
118 | + Em_Message_unlock(key); | |
119 | + return Em_App_moreData; | |
120 | +} | |
121 | + | |
122 | +void Em_App_ACCEPT(bool enable) { | |
123 | + if (Em_App_state == Em_App_CONNECTED) { | |
124 | + return; | |
125 | + } | |
126 | + Em_App_ind.sot = 0; | |
127 | + Em_App_ind.hdr.kind = Em_Message_ACCEPT; | |
128 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
129 | + Em_App_ind.hdr.resId = enable; | |
130 | + Em_App_startIndSend(); | |
131 | +} | |
132 | + | |
133 | +void Em_App_DISCONNECT(void) { | |
134 | + if (Em_App_state != Em_App_CONNECTED) { | |
135 | + return; | |
136 | + } | |
137 | + Em_App_state = Em_App_DISCONNECTED; | |
138 | + Em_App_ind.sot = 0; | |
139 | + Em_App_ind.hdr.kind = Em_Message_DISCONNECT; | |
140 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
141 | + Em_App_ind.hdr.resId = 0; | |
142 | + Em_App_startIndSend(); | |
143 | +} | |
144 | + | |
145 | +void Em_Message_dispatch(void) { | |
146 | + if (Em_App_state == Em_App_IDLE) { | |
147 | + return; | |
148 | + } | |
149 | + switch (Em_App_msg.hdr.kind) { | |
150 | + case Em_Message_CONNECT: | |
151 | + Em_App_state = Em_App_CONNECTED; | |
152 | + Em_App_CONNECTHANDLER(); | |
153 | + break; | |
154 | + case Em_Message_DISCONNECT: | |
155 | + Em_App_state = Em_App_DISCONNECTED; | |
156 | + Em_App_DISCONNECTHANDLER(); | |
157 | + break; | |
158 | + case Em_Message_PAIRING_DONE: | |
159 | + if (Em_App_pdHdlr) { | |
160 | + (*Em_App_pdHdlr)(); | |
161 | + } | |
162 | + break; | |
163 | + case Em_Message_FETCH: | |
164 | + if (Em_App_msg.hdr.resId > 0) { | |
165 | + Em_App_fetchDispatch(); | |
166 | + } | |
167 | + else { | |
168 | + Em_App_sysFetchDispatch(); | |
169 | + } | |
170 | + break; | |
171 | + case Em_Message_STORE: | |
172 | + if (Em_App_msg.hdr.resId > 0) { | |
173 | + Em_App_storeDispatch(); | |
174 | + } | |
175 | + else { | |
176 | + Em_App_sysStoreDispatch(); | |
177 | + } | |
178 | + break; | |
179 | + } | |
180 | +} | |
181 | + | |
182 | +void Em_App_PAIRINGOFF(void(*handler)(void)) { | |
183 | + Em_App_PAIRINGON(0, handler); | |
184 | +} | |
185 | + | |
186 | +void Em_App_PAIRINGON(uint8_t secs, void(*handler)(void)) { | |
187 | + if (Em_App_state != Em_App_DISCONNECTED) { | |
188 | + return; | |
189 | + } | |
190 | + Em_App_pdHdlr = handler; | |
191 | + Em_App_ind.sot = 0; | |
192 | + Em_App_ind.hdr.kind = Em_Message_PAIRING; | |
193 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header); | |
194 | + Em_App_ind.hdr.resId = secs; | |
195 | + Em_App_startIndSend(); | |
196 | +} | |
197 | + | |
198 | +void Em_App_RESET(void) { | |
199 | + Em_App_recvIdx = Em_App_recvSize = Em_App_xmitIdx = Em_App_xmitSize = 0; | |
200 | + Em_App_state = Em_App_IDLE; | |
201 | + Em_App_moreData = false; | |
202 | + Em_App_readIdle = true; | |
203 | + Em_App_fileIndex = 0; | |
204 | + Em_App_xmitMask = 0; | |
205 | +} | |
206 | + | |
207 | +void Em_App_RUN(void) { | |
208 | + Em_App_state = Em_App_DISCONNECTED; | |
209 | +} | |
210 | + | |
211 | +void Em_App_sendResponse(Em_Message_Kind kind, Em_Message_Size size) { | |
212 | + if (Em_App_state != Em_App_CONNECTED) { | |
213 | + return; | |
214 | + } | |
215 | + Em_App_msg.sot = 0; | |
216 | + Em_App_msg.hdr.kind = kind; | |
217 | + Em_App_msg.hdr.size = size + sizeof (Em_Message_Header); | |
218 | + if (Em_App_xmitReady(0)) { | |
219 | + Em_App_startResSend(); | |
220 | + } | |
221 | +} | |
222 | + | |
223 | +void Em_App_startIndSend(void) { | |
224 | + Em_App_outBuf = (uint8_t*)&Em_App_ind.sot; | |
225 | + Em_App_xmitSize = Em_App_ind.hdr.size + 1; | |
226 | + Em_App_xmitIdx = 0; | |
227 | + Em_Message_startSend(); | |
228 | +} | |
229 | + | |
230 | +void Em_App_startResSend(void) { | |
231 | + Em_App_outBuf = (uint8_t*)&Em_App_msg.sot; | |
232 | + Em_App_xmitSize = Em_App_msg.hdr.size + 1; | |
233 | + Em_App_xmitIdx = 0; | |
234 | + Em_Message_startSend(); | |
235 | +} | |
236 | + | |
237 | +void Em_App_sysFetchDispatch(void) { | |
238 | + uint8_t size = 0; | |
239 | + int i; | |
240 | + switch (Em_App_msg.hdr.resId) { | |
241 | + case Em_Message_SYS_SCHEMA_HASH: | |
242 | + for (i = 0; i < sizeof (Em_App_hash); i++) { | |
243 | + Em_App_msg.data[i] = Em_App_hash[i]; | |
244 | + } | |
245 | + Em_App_msg.data[sizeof (Em_App_hash)] = *((uint8_t*)&Em_App_endian); | |
246 | + size = sizeof (Em_App_hash) + 1; | |
247 | + break; | |
248 | + case Em_Message_SYS_EAP_PROTOCOL_LEVEL: | |
249 | + *((Em_Message_protocolLevel_t*)Em_App_msg.data) = Em_Message_protocolLevel; | |
250 | + size = sizeof (Em_Message_protocolLevel_t); | |
251 | + break; | |
252 | + case Em_Message_SYS_EAP_BUILD_DATE: | |
253 | + for (i = 0; i < sizeof (Em_App_build); i++) { | |
254 | + Em_App_msg.data[i] = Em_App_build[i]; | |
255 | + } | |
256 | + size = sizeof (Em_App_build); | |
257 | + break; | |
258 | + case Em_Message_SYS_RESOURCE_COUNT: | |
259 | + Em_App_msg.data[0] = Em_App_APP_RESOURCE_COUNT; | |
260 | + Em_App_msg.data[1] = Em_App_SYS_RESOURCE_COUNT; | |
261 | + size = 2; | |
262 | + break; | |
263 | + } | |
264 | + Em_App_sendResponse(Em_Message_FETCH_DONE, size); | |
265 | +} | |
266 | + | |
267 | +void Em_App_sysStoreDispatch(void) { | |
268 | + switch (Em_App_msg.hdr.resId) { | |
269 | + case Em_Message_SYS_FILE_INDEX_RESET: | |
270 | + Em_App_fileIndex = 0; | |
271 | + break; | |
272 | + } | |
273 | + Em_App_sendResponse(Em_Message_STORE_DONE, 0); | |
274 | +} | |
275 | + | |
276 | +bool Em_App_xmitReady(Em_Message_ResId indId) { | |
277 | + uint8_t key = Em_Message_lock(); | |
278 | + bool res = !Em_App_moreData && Em_App_xmitMask == 0; | |
279 | + if (!res) { | |
280 | + Em_App_xmitMask |= (1 << indId); | |
281 | + } | |
282 | + Em_Message_unlock(key); | |
283 | + return res; | |
284 | +} | |
285 | + | |
286 | +void Em_App_fetchDispatch(void) { | |
287 | + uint8_t size = 0; | |
288 | + switch (Em_App_msg.hdr.resId) { | |
289 | + case 0: | |
290 | + break; | |
291 | + case 1: | |
292 | + DUREX_serverBytesAvailable_fetch((DUREX_serverBytesAvailable_t*)Em_App_msg.data); | |
293 | + size = 1; | |
294 | + break; | |
295 | + case 2: | |
296 | + DUREX_clientBytesAvailable_fetch((DUREX_clientBytesAvailable_t*)Em_App_msg.data); | |
297 | + size = 1; | |
298 | + break; | |
299 | + case 3: | |
300 | + DUREX_serverData_fetch((DUREX_serverData_t*)Em_App_msg.data); | |
301 | + size = 240; | |
302 | + break; | |
303 | + case 4: | |
304 | + DUREX_clientData_fetch((DUREX_clientData_t*)Em_App_msg.data); | |
305 | + size = 240; | |
306 | + break; | |
307 | + case 5: | |
308 | + DUREX_serverMoreData_fetch((DUREX_serverMoreData_t*)Em_App_msg.data); | |
309 | + size = 1; | |
310 | + break; | |
311 | + case 6: | |
312 | + DUREX_clientMoreData_fetch((DUREX_clientMoreData_t*)Em_App_msg.data); | |
313 | + size = 1; | |
314 | + break; | |
315 | + } | |
316 | + Em_App_sendResponse(Em_Message_FETCH_DONE, size); | |
317 | +} | |
318 | + | |
319 | +void Em_App_storeDispatch(void) { | |
320 | + switch (Em_App_msg.hdr.resId) { | |
321 | + case 0: | |
322 | + break; | |
323 | + case 1: | |
324 | + DUREX_serverBytesAvailable_store((DUREX_serverBytesAvailable_t*)Em_App_msg.data); | |
325 | + break; | |
326 | + case 2: | |
327 | + DUREX_clientBytesAvailable_store((DUREX_clientBytesAvailable_t*)Em_App_msg.data); | |
328 | + break; | |
329 | + case 3: | |
330 | + DUREX_serverData_store((DUREX_serverData_t*)Em_App_msg.data); | |
331 | + break; | |
332 | + case 4: | |
333 | + DUREX_clientData_store((DUREX_clientData_t*)Em_App_msg.data); | |
334 | + break; | |
335 | + case 5: | |
336 | + DUREX_serverMoreData_store((DUREX_serverMoreData_t*)Em_App_msg.data); | |
337 | + break; | |
338 | + case 6: | |
339 | + DUREX_clientMoreData_store((DUREX_clientMoreData_t*)Em_App_msg.data); | |
340 | + break; | |
341 | + } | |
342 | + Em_App_sendResponse(Em_Message_STORE_DONE, 0); | |
343 | +} | |
344 | + | |
345 | +void Em_App_sendIndicator(Em_Message_ResId indId) { | |
346 | + Em_Message_Size resId = 0; | |
347 | + Em_Message_Size size = 0; | |
348 | + Em_App_ind.sot = 0; | |
349 | + Em_App_ind.hdr.kind = Em_Message_INDICATOR; | |
350 | + Em_App_ind.hdr.size = sizeof (Em_Message_Header) + size; | |
351 | + Em_App_ind.hdr.resId = resId; | |
352 | + Em_App_startIndSend(); | |
353 | +} | |
354 | + | |
355 | +#ifdef __cplusplus | |
356 | +} | |
357 | +#endif | |
358 | + | ... | ... |
DUREX/out/DUREX.h
0 → 100644
1 | +++ a/DUREX/out/DUREX.h | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.DUREX on 2014-05-09T15:19:51T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#ifndef DUREX__H | |
5 | +#define DUREX__H | |
6 | + | |
7 | +#include "Em_Types.h" | |
8 | +#include "Em_Message.h" | |
9 | + | |
10 | +#ifdef __cplusplus | |
11 | +extern "C" { | |
12 | +#endif | |
13 | + | |
14 | +/* typedef String */ | |
15 | +typedef struct DUREX_String_t { char elems[240]; } DUREX_String_t; | |
16 | +#define DUREX_String_length 240 | |
17 | + | |
18 | +/* enum BOOLEAN */ | |
19 | +typedef uint8_t DUREX_BOOLEAN; | |
20 | +#define DUREX_TRUE 0 | |
21 | +#define DUREX_FALSE 1 | |
22 | + | |
23 | +/* resource serverBytesAvailable */ | |
24 | +typedef uint8_t DUREX_serverBytesAvailable_t; | |
25 | +extern void DUREX_serverBytesAvailable_fetch(DUREX_serverBytesAvailable_t* const output); | |
26 | +extern void DUREX_serverBytesAvailable_store(DUREX_serverBytesAvailable_t* const input); | |
27 | + | |
28 | +/* resource clientBytesAvailable */ | |
29 | +typedef uint8_t DUREX_clientBytesAvailable_t; | |
30 | +extern void DUREX_clientBytesAvailable_fetch(DUREX_clientBytesAvailable_t* const output); | |
31 | +extern void DUREX_clientBytesAvailable_store(DUREX_clientBytesAvailable_t* const input); | |
32 | + | |
33 | +/* resource serverData */ | |
34 | +typedef DUREX_String DUREX_serverData_t[240]; | |
35 | +extern void DUREX_serverData_fetch(DUREX_serverData_t* const output); | |
36 | +extern void DUREX_serverData_store(DUREX_serverData_t* const input); | |
37 | + | |
38 | +/* resource clientData */ | |
39 | +typedef DUREX_String DUREX_clientData_t[240]; | |
40 | +extern void DUREX_clientData_fetch(DUREX_clientData_t* const output); | |
41 | +extern void DUREX_clientData_store(DUREX_clientData_t* const input); | |
42 | + | |
43 | +/* resource serverMoreData */ | |
44 | +typedef DUREX_BOOLEAN DUREX_serverMoreData_t; | |
45 | +extern void DUREX_serverMoreData_fetch(DUREX_serverMoreData_t* const output); | |
46 | +extern void DUREX_serverMoreData_store(DUREX_serverMoreData_t* const input); | |
47 | + | |
48 | +/* resource clientMoreData */ | |
49 | +typedef DUREX_BOOLEAN DUREX_clientMoreData_t; | |
50 | +extern void DUREX_clientMoreData_fetch(DUREX_clientMoreData_t* const output); | |
51 | +extern void DUREX_clientMoreData_store(DUREX_clientMoreData_t* const input); | |
52 | + | |
53 | +void DUREX_reset(void); | |
54 | +void DUREX_run(void); | |
55 | + | |
56 | +void DUREX_accept(bool enable); | |
57 | +void DUREX_disconnect(void); | |
58 | +void DUREX_pairingOn(uint8_t secs, void(*handler)(void)); | |
59 | +void DUREX_pairingOff(void(*handler)(void)); | |
60 | + | |
61 | +void DUREX_connectHandler(void); | |
62 | +void DUREX_disconnectHandler(void); | |
63 | + | |
64 | +#ifdef __cplusplus | |
65 | +} | |
66 | +#endif | |
67 | + | |
68 | +#endif /* DUREX__H */ | ... | ... |
DUREX/out/DUREX.zip
0 → 100644
No preview for this file type
DUREX/out/Em_Message.h
0 → 100644
1 | +++ a/DUREX/out/Em_Message.h | |
1 | +#ifndef Em_Message_H_ | |
2 | +#define Em_Message_H_ | |
3 | + | |
4 | +#include "Em_Types.h" | |
5 | + | |
6 | +#ifdef __cplusplus | |
7 | +extern "C" { | |
8 | +#endif | |
9 | + | |
10 | +/* protocolLevel #4 */ | |
11 | +#define Em_Message_INDSIZE 4 | |
12 | + | |
13 | +typedef uint8_t Em_Message_Size; | |
14 | +typedef uint8_t Em_Message_Kind; | |
15 | +/* protocolLevel #12 -- split 16-bit resId into <resId, chan> */ | |
16 | +typedef int8_t Em_Message_ResId; | |
17 | +typedef uint8_t Em_Message_Chan; | |
18 | + | |
19 | +#define Em_Message_NOP 0 | |
20 | +#define Em_Message_FETCH 1 | |
21 | +#define Em_Message_FETCH_DONE 2 | |
22 | +#define Em_Message_STORE 3 | |
23 | +#define Em_Message_STORE_DONE 4 | |
24 | +#define Em_Message_INDICATOR 5 | |
25 | +#define Em_Message_CONNECT 6 | |
26 | +#define Em_Message_DISCONNECT 7 | |
27 | +#define Em_Message_ECHO 8 | |
28 | +/* protocolLevel #3 */ | |
29 | +/* protocolLevel #6 -- rename from BROADCAST to PAIRING */ | |
30 | +#define Em_Message_PAIRING 9 | |
31 | +#define Em_Message_PAIRING_DONE 10 | |
32 | +/* protocolLevel #7 */ | |
33 | +#define Em_Message_OFFLINE 11 | |
34 | +/* protocolLevel #8 */ | |
35 | +#define Em_Message_ACCEPT 12 | |
36 | + | |
37 | +typedef struct Em_Message_Header { | |
38 | + Em_Message_Size size; | |
39 | + Em_Message_Kind kind; | |
40 | + Em_Message_ResId resId; | |
41 | + Em_Message_Chan chan; | |
42 | +} Em_Message_Header; | |
43 | + | |
44 | +typedef uint16_t Em_Message_protocolLevel_t; | |
45 | + | |
46 | +/* protocolLevel #1 */ | |
47 | + | |
48 | +/* protocolLevel #10 */ | |
49 | +/* #define Em_Message_SYS_SCHEMA_UUID -1 */ | |
50 | + | |
51 | +#define Em_Message_SYS_MCM_PROTOCOL_LEVEL -2 | |
52 | +#define Em_Message_SYS_EAP_PROTOCOL_LEVEL -3 | |
53 | +#define Em_Message_SYS_EAP_BUILD_DATE -4 | |
54 | + | |
55 | +/* protocolLevel #2 */ | |
56 | +#define Em_Message_SYS_FILE_INDEX_RESET -5 | |
57 | + | |
58 | +/* protocolLevel #5 */ | |
59 | +#define Em_Message_SYS_SCHEMA_HASH -6 | |
60 | + | |
61 | +/* protocolLevel #7 */ | |
62 | +#define Em_Message_SYS_RESOURCE_COUNT -7 | |
63 | + | |
64 | +/* protocolLevel #9 */ | |
65 | +#define Em_Message_SYS_MOBILE_RSSI -8 | |
66 | + | |
67 | +/* protocolLevel #11 */ | |
68 | +#define Em_Message_SYS_MCM_DISCONNECT -9 | |
69 | + | |
70 | +extern void Em_Message_init(void); | |
71 | + | |
72 | +extern bool Em_Message_addByte(uint8_t b); | |
73 | +extern void Em_Message_dispatch(void); | |
74 | +extern bool Em_Message_getByte(uint8_t *bp); | |
75 | +extern uint8_t Em_Message_lock(void); | |
76 | +extern void Em_Message_startSend(void); | |
77 | +extern void Em_Message_unlock(uint8_t key); | |
78 | + | |
79 | +#ifdef __cplusplus | |
80 | +} | |
81 | +#endif | |
82 | + | |
83 | +#endif /*Em_Message_H_*/ | ... | ... |
DUREX/out/Em_Types.h
0 → 100644
DUREX/out/durex.json
0 → 100644
1 | +++ a/DUREX/out/durex.json | |
1 | +{ | |
2 | + "resources": { | |
3 | + "$schemaHash": { | |
4 | + "id": -6, | |
5 | + "align": 1, | |
6 | + "attributes": {"readonly": true}, | |
7 | + "type": "A20:u1", | |
8 | + "access": "r", | |
9 | + "size": 20 | |
10 | + }, | |
11 | + "$eapProtocolLevel": { | |
12 | + "id": -3, | |
13 | + "align": 2, | |
14 | + "attributes": {"readonly": true}, | |
15 | + "type": "u2", | |
16 | + "access": "r", | |
17 | + "size": 2 | |
18 | + }, | |
19 | + "serverData": { | |
20 | + "id": 3, | |
21 | + "align": 1, | |
22 | + "attributes": {}, | |
23 | + "type": "C:240", | |
24 | + "access": "rw", | |
25 | + "size": 240 | |
26 | + }, | |
27 | + "clientMoreData": { | |
28 | + "id": 6, | |
29 | + "align": 1, | |
30 | + "attributes": {}, | |
31 | + "type": "E:@emmoco.com.DUREX/BOOLEAN", | |
32 | + "access": "rw", | |
33 | + "size": 1 | |
34 | + }, | |
35 | + "serverMoreData": { | |
36 | + "id": 5, | |
37 | + "align": 1, | |
38 | + "attributes": {}, | |
39 | + "type": "E:@emmoco.com.DUREX/BOOLEAN", | |
40 | + "access": "rw", | |
41 | + "size": 1 | |
42 | + }, | |
43 | + "$mcmProtocolLevel": { | |
44 | + "id": -2, | |
45 | + "align": 2, | |
46 | + "attributes": {"readonly": true}, | |
47 | + "type": "u2", | |
48 | + "access": "r", | |
49 | + "size": 2 | |
50 | + }, | |
51 | + "$mobileRssi": { | |
52 | + "id": -8, | |
53 | + "align": 1, | |
54 | + "attributes": {"readonly": true}, | |
55 | + "type": "i1", | |
56 | + "access": "r", | |
57 | + "size": 1 | |
58 | + }, | |
59 | + "serverBytesAvailable": { | |
60 | + "id": 1, | |
61 | + "align": 1, | |
62 | + "attributes": {}, | |
63 | + "type": "u1", | |
64 | + "access": "rw", | |
65 | + "size": 1 | |
66 | + }, | |
67 | + "clientBytesAvailable": { | |
68 | + "id": 2, | |
69 | + "align": 1, | |
70 | + "attributes": {}, | |
71 | + "type": "u1", | |
72 | + "access": "rw", | |
73 | + "size": 1 | |
74 | + }, | |
75 | + "$mcmDisconnect": { | |
76 | + "id": -9, | |
77 | + "align": 1, | |
78 | + "attributes": {"writeonly": true}, | |
79 | + "type": "u1", | |
80 | + "access": "w", | |
81 | + "size": 1 | |
82 | + }, | |
83 | + "$eapBuildDate": { | |
84 | + "id": -4, | |
85 | + "align": 1, | |
86 | + "attributes": {"readonly": true}, | |
87 | + "type": "A8:u1", | |
88 | + "access": "r", | |
89 | + "size": 8 | |
90 | + }, | |
91 | + "$resourceCount": { | |
92 | + "id": -7, | |
93 | + "align": 1, | |
94 | + "attributes": {"readonly": true}, | |
95 | + "type": "S:system@emmoco.com.System/ResourceCount", | |
96 | + "access": "r", | |
97 | + "size": 2 | |
98 | + }, | |
99 | + "$fileIndexReset": { | |
100 | + "id": -5, | |
101 | + "align": 2, | |
102 | + "attributes": {"writeonly": true}, | |
103 | + "type": "i2", | |
104 | + "access": "w", | |
105 | + "size": 2 | |
106 | + }, | |
107 | + "clientData": { | |
108 | + "id": 4, | |
109 | + "align": 1, | |
110 | + "attributes": {}, | |
111 | + "type": "C:240", | |
112 | + "access": "rw", | |
113 | + "size": 240 | |
114 | + } | |
115 | + }, | |
116 | + "resourceNamesSys": [ | |
117 | + "$eapBuildDate", | |
118 | + "$eapProtocolLevel", | |
119 | + "$fileIndexReset", | |
120 | + "$mcmDisconnect", | |
121 | + "$mcmProtocolLevel", | |
122 | + "$mobileRssi", | |
123 | + "$resourceCount", | |
124 | + "$schemaHash" | |
125 | + ], | |
126 | + "manifest": { | |
127 | + "protocolLevel": 12, | |
128 | + "hash": [ | |
129 | + 218, | |
130 | + 74, | |
131 | + 41, | |
132 | + 73, | |
133 | + 107, | |
134 | + 164, | |
135 | + 154, | |
136 | + 232, | |
137 | + 180, | |
138 | + 185, | |
139 | + 128, | |
140 | + 44, | |
141 | + 30, | |
142 | + 56, | |
143 | + 49, | |
144 | + 63 | |
145 | + ], | |
146 | + "toolVersion": "12.0.0.201211010336", | |
147 | + "name": "DUREX", | |
148 | + "$$md5": "275479fd2e9dfc29825d3d8004f33029", | |
149 | + "build": [ | |
150 | + 221, | |
151 | + 204, | |
152 | + 35, | |
153 | + 225, | |
154 | + 69, | |
155 | + 1, | |
156 | + 0, | |
157 | + 0 | |
158 | + ], | |
159 | + "date": "2014-05-09T15:19:51T", | |
160 | + "maxAlign": 2, | |
161 | + "maxSize": 240, | |
162 | + "version": "1.0.0" | |
163 | + }, | |
164 | + "resourceNames": [ | |
165 | + "serverBytesAvailable", | |
166 | + "clientBytesAvailable", | |
167 | + "serverData", | |
168 | + "clientData", | |
169 | + "serverMoreData", | |
170 | + "clientMoreData", | |
171 | + "$mcmProtocolLevel", | |
172 | + "$eapProtocolLevel", | |
173 | + "$eapBuildDate", | |
174 | + "$fileIndexReset", | |
175 | + "$schemaHash", | |
176 | + "$resourceCount", | |
177 | + "$mobileRssi", | |
178 | + "$mcmDisconnect" | |
179 | + ], | |
180 | + "attributes": { | |
181 | + "description": "", | |
182 | + "version": "1.0.0" | |
183 | + }, | |
184 | + "types": { | |
185 | + "system@emmoco.com.System/ResourceCount": { | |
186 | + "align": 1, | |
187 | + "type": "S:system@emmoco.com.System/ResourceCount", | |
188 | + "size": 2, | |
189 | + "fields": [ | |
190 | + { | |
191 | + "pad": 0, | |
192 | + "align": 1, | |
193 | + "name": "app", | |
194 | + "type": "u1", | |
195 | + "size": 1 | |
196 | + }, | |
197 | + { | |
198 | + "pad": 0, | |
199 | + "align": 1, | |
200 | + "name": "sys", | |
201 | + "type": "u1", | |
202 | + "size": 1 | |
203 | + } | |
204 | + ] | |
205 | + }, | |
206 | + "std:i2": { | |
207 | + "align": 2, | |
208 | + "size": 2 | |
209 | + }, | |
210 | + "std:i1": { | |
211 | + "align": 1, | |
212 | + "size": 1 | |
213 | + }, | |
214 | + "@emmoco.com.DUREX/BOOLEAN": { | |
215 | + "values": [ | |
216 | + "TRUE", | |
217 | + "FALSE" | |
218 | + ], | |
219 | + "align": 1, | |
220 | + "type": "E:@emmoco.com.DUREX/BOOLEAN", | |
221 | + "size": 1 | |
222 | + }, | |
223 | + "std:u1": { | |
224 | + "align": 1, | |
225 | + "size": 1 | |
226 | + }, | |
227 | + "std:u2": { | |
228 | + "align": 2, | |
229 | + "size": 2 | |
230 | + } | |
231 | + }, | |
232 | + "resourceNamesApp": [ | |
233 | + "clientBytesAvailable", | |
234 | + "clientData", | |
235 | + "clientMoreData", | |
236 | + "serverBytesAvailable", | |
237 | + "serverData", | |
238 | + "serverMoreData" | |
239 | + ], | |
240 | + "imports": {"@emmoco.com.DUREX": true} | |
241 | +} | |
0 | 242 | \ No newline at end of file | ... | ... |
DUREX/schema.ems
0 → 100644
1 | +++ a/DUREX/schema.ems | |
1 | +version = "1.0.0" | |
2 | +description = "" | |
3 | + | |
4 | +schema DUREX | |
5 | +{ | |
6 | + enum BOOLEAN{ TRUE, FALSE }; | |
7 | + typedef string<239> String; //MAXIMUM SIZE AVAILABLE | |
8 | + | |
9 | + uint8 serverBytesAvailable; | |
10 | + uint8 clientBytesAvailable; | |
11 | + String serverData; | |
12 | + String clientData; | |
13 | + BOOLEAN serverMoreData; | |
14 | + BOOLEAN clientMoreData; | |
15 | +} | ... | ... |
FileTestLaunchPad/.externalToolBuilders/FileApp LaunchPad Cleaner.launch
0 → 100644
1 | +++ a/FileTestLaunchPad/.externalToolBuilders/FileApp LaunchPad Cleaner.launch | |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> | |
3 | +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> | |
4 | +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> | |
5 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${eclipse_home}/msptools/bin/gmake${exe_ext}"/> | |
6 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="clean"/> | |
7 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="local-clean COMMON=${project_loc:/CommonLaunchPad}"/> | |
8 | +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> | |
9 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/> | |
10 | +</launchConfiguration> | ... | ... |
FileTestLaunchPad/.externalToolBuilders/FileTest LaunchPad Builder.launch
0 → 100644
1 | +++ a/FileTestLaunchPad/.externalToolBuilders/FileTest LaunchPad Builder.launch | |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> | |
3 | +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> | |
4 | +<mapAttribute key="org.eclipse.debug.core.environmentVariables"> | |
5 | +<mapEntry key="PATH" value="${eclipse_home}/msptools/bin${system_property:path.separator}${env_var:PATH}"/> | |
6 | +</mapAttribute> | |
7 | +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> | |
8 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <resources> <item path="/TesterLaunchPad/main.c" type="1"/> <item path="/TesterLaunchPad/main.out" type="1"/> <item path="/TesterLaunchPad/makefile" type="1"/> <item path="/TesterSchema/out/Tester.h" type="1"/> <item path="/TesterSchema/schema.ems" type="1"/> <item path="/CommonLaunchPad" type="4"/> </resources>}"/> | |
9 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${eclipse_home}/msptools/bin/gmake${exe_ext}"/> | |
10 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> | |
11 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="all COMMON=${project_loc:/CommonLaunchPad} SCHEMA=${project_loc:/FileTestSchema}"/> | |
12 | +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> | |
13 | +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/> | |
14 | +</launchConfiguration> | ... | ... |
FileTestLaunchPad/.project
0 → 100644
1 | +++ a/FileTestLaunchPad/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>FileTestLaunchPad</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + <project>MyAppSchema</project> | |
7 | + </projects> | |
8 | + <buildSpec> | |
9 | + <buildCommand> | |
10 | + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> | |
11 | + <triggers>full,incremental,</triggers> | |
12 | + <arguments> | |
13 | + <dictionary> | |
14 | + <key>LaunchConfigHandle</key> | |
15 | + <value><project>/.externalToolBuilders/FileTest LaunchPad Builder.launch</value> | |
16 | + </dictionary> | |
17 | + </arguments> | |
18 | + </buildCommand> | |
19 | + <buildCommand> | |
20 | + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> | |
21 | + <triggers>clean,</triggers> | |
22 | + <arguments> | |
23 | + <dictionary> | |
24 | + <key>LaunchConfigHandle</key> | |
25 | + <value><project>/.externalToolBuilders/FileApp LaunchPad Cleaner.launch</value> | |
26 | + </dictionary> | |
27 | + </arguments> | |
28 | + </buildCommand> | |
29 | + </buildSpec> | |
30 | + <natures> | |
31 | + <nature>com.emmoco.mcmtooling.example.mcmToolingExampleNature</nature> | |
32 | + </natures> | |
33 | +</projectDescription> | ... | ... |
FileTestLaunchPad/Log/log.txt
0 → 100644
1 | +++ a/FileTestLaunchPad/Log/log.txt | ... | ... |
FileTestLaunchPad/main.c
0 → 100644
1 | +++ a/FileTestLaunchPad/main.c | |
1 | +/* | |
2 | + * ============ Platform Configuration ============ | |
3 | + */ | |
4 | + | |
5 | +#include <msp430.h> | |
6 | + | |
7 | +#define EAP_RX_BUF UCA0RXBUF | |
8 | +#define EAP_TX_BUF UCA0TXBUF | |
9 | + | |
10 | +#define EAP_RX_VECTOR USCIAB0RX_VECTOR | |
11 | +#define EAP_TX_VECTOR PORT2_VECTOR | |
12 | + | |
13 | +#define EAP_RX_ACK_CONFIG() (P2DIR |= BIT0) | |
14 | +#define EAP_RX_ACK_SET() (P2OUT |= BIT0) | |
15 | +#define EAP_RX_ACK_CLR() (P2OUT &= ~BIT0) | |
16 | + | |
17 | +#define EAP_TX_INT_CONFIG() (P2DIR &= ~BIT1, P2IES |= BIT1, P2IFG &= BIT1, P2IE |= BIT1) | |
18 | +#define EAP_TX_INT_TST() (P2IFG & BIT1) | |
19 | +#define EAP_TX_INT_CLR() (P2IFG &= ~BIT1) | |
20 | + | |
21 | +void init(void) { | |
22 | + | |
23 | + WDTCTL = WDTPW + WDTHOLD; | |
24 | + BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0; | |
25 | + if (CALBC1_1MHZ != 0xFF) { | |
26 | + DCOCTL = 0x00; | |
27 | + BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */ | |
28 | + DCOCTL = CALDCO_1MHZ; | |
29 | + } | |
30 | + BCSCTL1 |= XT2OFF + DIVA_0; | |
31 | + BCSCTL3 = XT2S_0 + LFXT1S_2 + XCAP_1; | |
32 | + | |
33 | + P1DIR |= BIT0; /* LED */ | |
34 | + P1OUT &= ~BIT0; | |
35 | + | |
36 | + UCA0CTL1 |= UCSWRST; | |
37 | + | |
38 | + P1SEL |= BIT1 + BIT2; | |
39 | + P1SEL2 |= BIT1 + BIT2; | |
40 | + | |
41 | + EAP_RX_ACK_CONFIG(); | |
42 | + EAP_RX_ACK_SET(); | |
43 | + | |
44 | + EAP_TX_INT_CONFIG(); | |
45 | + | |
46 | + UCA0CTL1 = UCSSEL_2 + UCSWRST; | |
47 | + UCA0MCTL = UCBRF_0 + UCBRS_6; | |
48 | + UCA0BR0 = 8; | |
49 | + UCA0CTL1 &= ~UCSWRST; | |
50 | + | |
51 | + IFG2 &= ~(UCA0RXIFG); | |
52 | + IE2 |= UCA0RXIE; | |
53 | + | |
54 | + __enable_interrupt(); | |
55 | +} | |
56 | + | |
57 | +/* | |
58 | + * ============ Serial Driver ============ | |
59 | + */ | |
60 | + | |
61 | +#include <Em_Message.h> | |
62 | + | |
63 | +__attribute__((interrupt(EAP_RX_VECTOR))) | |
64 | +static void rxHandler(void) { | |
65 | + uint8_t b = EAP_RX_BUF; | |
66 | + if (Em_Message_addByte(b)) { | |
67 | + Em_Message_dispatch(); | |
68 | + } | |
69 | + EAP_RX_ACK_CLR(); | |
70 | + EAP_RX_ACK_SET(); | |
71 | +} | |
72 | + | |
73 | +__attribute__((interrupt(EAP_TX_VECTOR))) | |
74 | +static void txHandler(void) { | |
75 | + if (EAP_TX_INT_TST()) { | |
76 | + uint8_t b; | |
77 | + if (Em_Message_getByte(&b)) { | |
78 | + EAP_TX_BUF = b; | |
79 | + } | |
80 | + EAP_TX_INT_CLR(); | |
81 | + } | |
82 | +} | |
83 | + | |
84 | +void Em_Message_startSend() { | |
85 | + uint8_t b; | |
86 | + if (Em_Message_getByte(&b)) { | |
87 | + UCA0TXBUF = b; | |
88 | + } | |
89 | +} | |
90 | + | |
91 | +uint8_t Em_Message_lock() { | |
92 | + uint8_t key; | |
93 | + asm ("MOV r2, %0": "=r" (key)); | |
94 | + key &= 0x8; | |
95 | + asm ("DINT"); | |
96 | + return key; | |
97 | +} | |
98 | + | |
99 | +void Em_Message_unlock(uint8_t key) { | |
100 | + if (key) { | |
101 | + asm ("EINT"); | |
102 | + } | |
103 | + else { | |
104 | + asm ("DINT"); | |
105 | + } | |
106 | +} | |
107 | + | |
108 | +/* | |
109 | + * ============ Application Program ============ | |
110 | + */ | |
111 | + | |
112 | +#include <FileTest.h> | |
113 | + | |
114 | +int main(int argc, char *argv[]) { | |
115 | + volatile int dummy = 0; | |
116 | + init(); | |
117 | + FileTest_run(); | |
118 | + while (dummy == 0) { | |
119 | + /* idle */ | |
120 | + } | |
121 | + return 0; | |
122 | +} | |
123 | + | |
124 | +FileTest_fileSize_t fileSizeVal; | |
125 | +int seed; | |
126 | + | |
127 | +void FileTest_connectHandler(void) { | |
128 | + P1OUT |= BIT0; | |
129 | +} | |
130 | + | |
131 | +void FileTest_disconnectHandler(void) { | |
132 | + P1OUT &= ~BIT0; | |
133 | +} | |
134 | + | |
135 | +void FileTest_fileSize_fetch(FileTest_fileSize_t* const output) { | |
136 | + *output = fileSizeVal; | |
137 | +} | |
138 | + | |
139 | +void FileTest_fileSize_store(FileTest_fileSize_t* const input) | |
140 | +{ | |
141 | + fileSizeVal = *input; | |
142 | +} | |
143 | + | |
144 | +uint16_t FileTest_fileData_fetch(FileTest_fileData_t* const output, int32_t offset, uint16_t count) { | |
145 | + int32_t rem = fileSizeVal - offset; | |
146 | + if (rem < count) { | |
147 | + count = (uint16_t)rem; | |
148 | + } | |
149 | + uint16_t i; | |
150 | + for (i = 0; i < count; i++) { | |
151 | + output->elems[i] = (seed + (offset + i)) & 0xFF; | |
152 | + } | |
153 | + return count; | |
154 | +} | |
155 | + | |
156 | +uint16_t FileTest_fileData_store(FileTest_fileData_t* const input, int32_t offset, uint16_t count) { | |
157 | + if (offset == 0 && count) { | |
158 | + seed = input->elems[0]; | |
159 | + } | |
160 | + return count; | |
161 | +} | |
0 | 162 | \ No newline at end of file | ... | ... |
FileTestLaunchPad/makefile
0 → 100644
FileTestSchema/.gitignore
0 → 100644
FileTestSchema/.project
0 → 100644
1 | +++ a/FileTestSchema/.project | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<projectDescription> | |
3 | + <name>FileTestSchema</name> | |
4 | + <comment></comment> | |
5 | + <projects> | |
6 | + </projects> | |
7 | + <buildSpec> | |
8 | + <buildCommand> | |
9 | + <name>com.emmoco.mcmtooling.core.mcmToolingBuilder</name> | |
10 | + <arguments> | |
11 | + </arguments> | |
12 | + </buildCommand> | |
13 | + </buildSpec> | |
14 | + <natures> | |
15 | + <nature>com.emmoco.mcmtooling.core.mcmToolingNature</nature> | |
16 | + </natures> | |
17 | +</projectDescription> | ... | ... |
FileTestSchema/bundle.properties
0 → 100644
1 | +++ a/FileTestSchema/bundle.properties | |
1 | +# generated file - do not edit | |
2 | + | |
3 | +bundle.requires = com.emmoco.schema.translator | |
4 | +com.emmoco.framework.Properties.applicationDirectory = out | |
5 | +com.emmoco.framework.Properties.schemaDestinationDirectory = out | |
6 | +com.emmoco.framework.Properties.serverAPIToken = | |
7 | +com.emmoco.framework.Properties.align16 = 2 | |
8 | +com.emmoco.framework.Properties.align32 = 4 | |
9 | +com.emmoco.framework.Properties.schemaFile = /Users/imanol/devel/emmoco/FileTestSchema/schema.ems | |
10 | +com.emmoco.framework.Properties.toolVersion = 12.0.0.201211010336 | ... | ... |
FileTestSchema/imports/system@emmoco.com/System.ems
0 → 100644
1 | +++ a/FileTestSchema/imports/system@emmoco.com/System.ems | |
1 | +owner = "system@emmoco.com" | |
2 | + | |
3 | +schema System { | |
4 | + | |
5 | + // protocolLevel #1 | |
6 | + | |
7 | + uint8 $schemaUuid[16] { // protocolLevel #10 -- invisible to applications | |
8 | + readonly | |
9 | + } | |
10 | + | |
11 | + uint16 $mcmProtocolLevel { | |
12 | + readonly | |
13 | + } | |
14 | + | |
15 | + uint16 $eapProtocolLevel { | |
16 | + readonly | |
17 | + } | |
18 | + | |
19 | + uint8 $eapBuildDate[8] { // protocolLevel #5 -- rename from $eapBuildNumber | |
20 | + readonly | |
21 | + } | |
22 | + | |
23 | + // protocolLevel #2 | |
24 | + | |
25 | + int16 $fileIndexReset { | |
26 | + writeonly | |
27 | + } | |
28 | + | |
29 | + // protocolLevel #5 | |
30 | + | |
31 | + // protocolLevel #12 -- increase size to 20 | |
32 | + | |
33 | + uint8 $schemaHash[20] { | |
34 | + readonly | |
35 | + } | |
36 | + | |
37 | + // protocolLevel #7 | |
38 | + | |
39 | + struct ResourceCount { | |
40 | + uint8 app | |
41 | + uint8 sys | |
42 | + } | |
43 | + | |
44 | + ResourceCount $resourceCount { | |
45 | + readonly | |
46 | + } | |
47 | + | |
48 | + // protocolLevel #9 | |
49 | + | |
50 | + int8 $mobileRssi { | |
51 | + readonly | |
52 | + } | |
53 | + | |
54 | + // protocolLevel #11 | |
55 | + | |
56 | + uint8 $mcmDisconnect { | |
57 | + writeonly | |
58 | + } | |
59 | + | |
60 | +} | ... | ... |
FileTestSchema/out/Em_Message.h
0 → 100644
1 | +++ a/FileTestSchema/out/Em_Message.h | |
1 | +#ifndef Em_Message_H_ | |
2 | +#define Em_Message_H_ | |
3 | + | |
4 | +#include "Em_Types.h" | |
5 | + | |
6 | +#ifdef __cplusplus | |
7 | +extern "C" { | |
8 | +#endif | |
9 | + | |
10 | +/* protocolLevel #4 */ | |
11 | +#define Em_Message_INDSIZE 4 | |
12 | + | |
13 | +typedef uint8_t Em_Message_Size; | |
14 | +typedef uint8_t Em_Message_Kind; | |
15 | +/* protocolLevel #12 -- split 16-bit resId into <resId, chan> */ | |
16 | +typedef int8_t Em_Message_ResId; | |
17 | +typedef uint8_t Em_Message_Chan; | |
18 | + | |
19 | +#define Em_Message_NOP 0 | |
20 | +#define Em_Message_FETCH 1 | |
21 | +#define Em_Message_FETCH_DONE 2 | |
22 | +#define Em_Message_STORE 3 | |
23 | +#define Em_Message_STORE_DONE 4 | |
24 | +#define Em_Message_INDICATOR 5 | |
25 | +#define Em_Message_CONNECT 6 | |
26 | +#define Em_Message_DISCONNECT 7 | |
27 | +#define Em_Message_ECHO 8 | |
28 | +/* protocolLevel #3 */ | |
29 | +/* protocolLevel #6 -- rename from BROADCAST to PAIRING */ | |
30 | +#define Em_Message_PAIRING 9 | |
31 | +#define Em_Message_PAIRING_DONE 10 | |
32 | +/* protocolLevel #7 */ | |
33 | +#define Em_Message_OFFLINE 11 | |
34 | +/* protocolLevel #8 */ | |
35 | +#define Em_Message_ACCEPT 12 | |
36 | + | |
37 | +typedef struct Em_Message_Header { | |
38 | + Em_Message_Size size; | |
39 | + Em_Message_Kind kind; | |
40 | + Em_Message_ResId resId; | |
41 | + Em_Message_Chan chan; | |
42 | +} Em_Message_Header; | |
43 | + | |
44 | +typedef uint16_t Em_Message_protocolLevel_t; | |
45 | + | |
46 | +/* protocolLevel #1 */ | |
47 | + | |
48 | +/* protocolLevel #10 */ | |
49 | +/* #define Em_Message_SYS_SCHEMA_UUID -1 */ | |
50 | + | |
51 | +#define Em_Message_SYS_MCM_PROTOCOL_LEVEL -2 | |
52 | +#define Em_Message_SYS_EAP_PROTOCOL_LEVEL -3 | |
53 | +#define Em_Message_SYS_EAP_BUILD_DATE -4 | |
54 | + | |
55 | +/* protocolLevel #2 */ | |
56 | +#define Em_Message_SYS_FILE_INDEX_RESET -5 | |
57 | + | |
58 | +/* protocolLevel #5 */ | |
59 | +#define Em_Message_SYS_SCHEMA_HASH -6 | |
60 | + | |
61 | +/* protocolLevel #7 */ | |
62 | +#define Em_Message_SYS_RESOURCE_COUNT -7 | |
63 | + | |
64 | +/* protocolLevel #9 */ | |
65 | +#define Em_Message_SYS_MOBILE_RSSI -8 | |
66 | + | |
67 | +/* protocolLevel #11 */ | |
68 | +#define Em_Message_SYS_MCM_DISCONNECT -9 | |
69 | + | |
70 | +extern void Em_Message_init(void); | |
71 | + | |
72 | +extern bool Em_Message_addByte(uint8_t b); | |
73 | +extern void Em_Message_dispatch(void); | |
74 | +extern bool Em_Message_getByte(uint8_t *bp); | |
75 | +extern uint8_t Em_Message_lock(void); | |
76 | +extern void Em_Message_startSend(void); | |
77 | +extern void Em_Message_unlock(uint8_t key); | |
78 | + | |
79 | +#ifdef __cplusplus | |
80 | +} | |
81 | +#endif | |
82 | + | |
83 | +#endif /*Em_Message_H_*/ | ... | ... |
FileTestSchema/out/Em_Types.h
0 → 100644
FileTestSchema/out/FileTest-TODO.c
0 → 100644
1 | +++ a/FileTestSchema/out/FileTest-TODO.c | |
1 | +/**** DO NOT EDIT -- this file has been automatically generated from @emmoco.com.FileTest on 2014-05-09T14:33:36T ****/ | |
2 | +/**** protocolLevel = 12, toolsVersion = 12.0.0.201211010336 ****/ | |
3 | + | |
4 | +#include "FileTest.h" | |
5 | + | |
6 | +#ifdef Em_FileTest_TODO /* enables optional inclusion of empty functions */ | |
7 | + | |
8 | +/* Copy the function skeletons below into your own FileTest.c source file */ | |
9 | + | |
10 | +void FileTest_connectHandler(void) { | |
11 | + /* TODO: application is now connected */ | |
12 | +} | |
13 | + | |
14 | +void FileTest_disconnectHandler(void) { | |
15 | + /* TODO: application is now disconnected */ | |
16 | +} | |
17 | + | |
18 | +void FileTest_fileSize_fetch(FileTest_fileSize_t* const output) { | |
19 | + /* TODO: write resource 'fileSize' into 'output' */ | |
20 | +} | |
21 | + | |
22 | +void FileTest_fileSize_store(FileTest_fileSize_t* const input) { | |
23 | + /* TODO: read resource 'fileSize' from 'input' */ | |
24 | +} | |
25 | + | |
26 | +uint16_t FileTest_fileData_fetch(FileTest_fileData_t* const output, int32_t offset, uint16_t count) { | |
27 | + /* TODO: write resource 'fileData' into 'output' */ | |
28 | + return 0; | |
29 | +} | |
30 | + | |
31 | +uint16_t FileTest_fileData_store(FileTest_fileData_t* const input, int32_t offset, uint16_t count) { | |
32 | + /* TODO: read resource 'fileData' from 'input' */ | |
33 | + return 0; | |
34 | +} | |
35 | + | |
36 | +#endif /* dummy file */ | ... | ... |