timex_datalink_client 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/timex_datalink_client/helpers/char_encoders.rb +2 -2
  3. data/lib/timex_datalink_client/protocol_1/eeprom/anniversary.rb +44 -0
  4. data/lib/timex_datalink_client/protocol_1/eeprom/appointment.rb +49 -0
  5. data/lib/timex_datalink_client/protocol_1/eeprom/list.rb +43 -0
  6. data/lib/timex_datalink_client/protocol_1/eeprom/phone_number.rb +56 -0
  7. data/lib/timex_datalink_client/protocol_1/end.rb +12 -2
  8. data/lib/timex_datalink_client/protocol_1/sync.rb +33 -3
  9. data/lib/timex_datalink_client/protocol_3/eeprom/anniversary.rb +44 -0
  10. data/lib/timex_datalink_client/protocol_3/eeprom/appointment.rb +49 -0
  11. data/lib/timex_datalink_client/protocol_3/eeprom/list.rb +43 -0
  12. data/lib/timex_datalink_client/protocol_3/eeprom/phone_number.rb +56 -0
  13. data/lib/timex_datalink_client/protocol_3/end.rb +12 -2
  14. data/lib/timex_datalink_client/protocol_3/sync.rb +33 -3
  15. data/lib/timex_datalink_client/protocol_4/alarm.rb +59 -0
  16. data/lib/timex_datalink_client/protocol_4/eeprom/anniversary.rb +44 -0
  17. data/lib/timex_datalink_client/protocol_4/eeprom/appointment.rb +49 -0
  18. data/lib/timex_datalink_client/protocol_4/eeprom/list.rb +43 -0
  19. data/lib/timex_datalink_client/protocol_4/eeprom/phone_number.rb +56 -0
  20. data/lib/timex_datalink_client/protocol_4/eeprom.rb +95 -0
  21. data/lib/timex_datalink_client/protocol_4/end.rb +20 -0
  22. data/lib/timex_datalink_client/protocol_4/sound_options.rb +42 -0
  23. data/lib/timex_datalink_client/protocol_4/sound_theme.rb +65 -0
  24. data/lib/timex_datalink_client/protocol_4/start.rb +20 -0
  25. data/lib/timex_datalink_client/protocol_4/sync.rb +40 -0
  26. data/lib/timex_datalink_client/protocol_4/time.rb +77 -0
  27. data/lib/timex_datalink_client/protocol_4/wrist_app.rb +67 -0
  28. data/lib/timex_datalink_client/protocol_9/alarm.rb +63 -0
  29. data/lib/timex_datalink_client/protocol_9/eeprom/chrono.rb +47 -0
  30. data/lib/timex_datalink_client/protocol_9/eeprom/phone_number.rb +74 -0
  31. data/lib/timex_datalink_client/protocol_9/eeprom.rb +85 -0
  32. data/lib/timex_datalink_client/protocol_9/end.rb +20 -0
  33. data/lib/timex_datalink_client/protocol_9/sound_options.rb +42 -0
  34. data/lib/timex_datalink_client/protocol_9/start.rb +20 -0
  35. data/lib/timex_datalink_client/protocol_9/sync.rb +40 -0
  36. data/lib/timex_datalink_client/protocol_9/time.rb +61 -0
  37. data/lib/timex_datalink_client/protocol_9/time_name.rb +46 -0
  38. data/lib/timex_datalink_client/protocol_9/timer.rb +54 -0
  39. data/lib/timex_datalink_client/version.rb +1 -1
  40. data/lib/timex_datalink_client.rb +42 -9
  41. metadata +35 -9
  42. data/lib/timex_datalink_client/eeprom/anniversary.rb +0 -42
  43. data/lib/timex_datalink_client/eeprom/appointment.rb +0 -47
  44. data/lib/timex_datalink_client/eeprom/list.rb +0 -41
  45. data/lib/timex_datalink_client/eeprom/phone_number.rb +0 -56
  46. data/lib/timex_datalink_client/end.rb +0 -18
  47. data/lib/timex_datalink_client/sync.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 061a85e62bc26614e71a4fa43dc9c17cc6092a516a417d5545d7ecd029a34af6
4
- data.tar.gz: 4e3fc39203b45c38599c6980c72c42e6e05efdc87e7c7d5c9f4cc099e995d39e
3
+ metadata.gz: f9e485933a8ebd16d37042e129d57ad2aef2814fc6b7c52c5a4a35230b7a2313
4
+ data.tar.gz: 393b34c750c6861cffcba17050089f6afcf55f40ce7dae8613fbcd5500c22c16
5
5
  SHA512:
6
- metadata.gz: 40b7dbbfd0af7b4600b5d94623584615b193b2011b976ed229ee7ba084892ba05d31002150dd9decfafcaecb301d2fa44d1c9a5a03ecace2a20441edda50b6ca
7
- data.tar.gz: b902ecee9de6ebf920e86a08c57e9651730335492c1e05ccfe55d0169fbf7c714ac5ba02f8640983ea69bc5d34ae1269e8f1d97b9e36f4d3921e07cdea0f039c
6
+ metadata.gz: 2175e0d2ef370e68ed0a89d9d76d28b2c17503e13ddcd155f070ceac5e4cfab4f5d20850878f6ba95e981865584cf44d9ba3e42dd4e431a48b06ebc9ddfbf35d
7
+ data.tar.gz: 28452c2ad771e7649870efff7136340f6699ee38877d8ff9085d5d26f1c4d5d19db96f4cfdeddd33c152fefd5a9474025a147f59d07ba0c012168b3b1f4744e1
@@ -19,8 +19,8 @@ class TimexDatalinkClient
19
19
  end
20
20
  end
21
21
 
22
- def eeprom_chars_for(string_chars)
23
- chars = chars_for(string_chars, char_map: EEPROM_CHARS, length: 31).append(EEPROM_TERMINATOR)
22
+ def eeprom_chars_for(string_chars, length: 31)
23
+ chars = chars_for(string_chars, char_map: EEPROM_CHARS, length: length).append(EEPROM_TERMINATOR)
24
24
 
25
25
  packed_int = chars.each_with_index.sum do |char, index|
26
26
  char << (6 * index)
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol1
8
+ class Eeprom
9
+ class Anniversary
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :time, :anniversary
14
+
15
+ # Create an Anniversary instance.
16
+ #
17
+ # @param time [::Time] Time of anniversary.
18
+ # @param anniversary [String] Anniversary text.
19
+ # @return [Anniversary] Anniversary instance.
20
+ def initialize(time:, anniversary:)
21
+ @time = time
22
+ @anniversary = anniversary
23
+ end
24
+
25
+ # Compile a packet for an anniversary.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ time.month,
31
+ time.day,
32
+ anniversary_characters
33
+ ].flatten
34
+ end
35
+
36
+ private
37
+
38
+ def anniversary_characters
39
+ eeprom_chars_for(anniversary)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol1
8
+ class Eeprom
9
+ class Appointment
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :time, :message
14
+
15
+ # Create an Appointment instance.
16
+ #
17
+ # @param time [::Time] Time of appointment.
18
+ # @param message [String] Appointment text.
19
+ # @return [Appointment] Appointment instance.
20
+ def initialize(time:, message:)
21
+ @time = time
22
+ @message = message
23
+ end
24
+
25
+ # Compile a packet for an appointment.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ time.month,
31
+ time.day,
32
+ time_15m,
33
+ message_characters
34
+ ].flatten
35
+ end
36
+
37
+ private
38
+
39
+ def time_15m
40
+ time.hour * 4 + time.min / 15
41
+ end
42
+
43
+ def message_characters
44
+ eeprom_chars_for(message)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol1
8
+ class Eeprom
9
+ class List
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :list_entry, :priority
14
+
15
+ # Create a List instance.
16
+ #
17
+ # @param list_entry [String] List entry text.
18
+ # @param priority [Integer] List priority.
19
+ # @return [List] List instance.
20
+ def initialize(list_entry:, priority:)
21
+ @list_entry = list_entry
22
+ @priority = priority
23
+ end
24
+
25
+ # Compile a packet for a list.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ priority,
31
+ list_entry_characters
32
+ ].flatten
33
+ end
34
+
35
+ private
36
+
37
+ def list_entry_characters
38
+ eeprom_chars_for(list_entry)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol1
8
+ class Eeprom
9
+ class PhoneNumber
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ PHONE_DIGITS = 12
14
+
15
+ attr_accessor :name, :number, :type
16
+
17
+ # Create a PhoneNumber instance.
18
+ #
19
+ # @param name [String] Name associated to phone number.
20
+ # @param number [String] Phone number text.
21
+ # @param type [String] Phone number type.
22
+ # @return [PhoneNumber] PhoneNumber instance.
23
+ def initialize(name:, number:, type: " ")
24
+ @name = name
25
+ @number = number
26
+ @type = type
27
+ end
28
+
29
+ # Compile a packet for a phone number.
30
+ #
31
+ # @return [Array<Integer>] Array of integers that represent bytes.
32
+ def packet
33
+ [
34
+ number_with_type_characters,
35
+ name_characters
36
+ ].flatten
37
+ end
38
+
39
+ private
40
+
41
+ def number_with_type_padded
42
+ number_with_type = "#{number} #{type}"
43
+ number_with_type.rjust(PHONE_DIGITS)
44
+ end
45
+
46
+ def number_with_type_characters
47
+ phone_chars_for(number_with_type_padded)
48
+ end
49
+
50
+ def name_characters
51
+ eeprom_chars_for(name)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,10 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "timex_datalink_client/end"
3
+ require "timex_datalink_client/helpers/crc_packets_wrapper"
4
4
 
5
5
  class TimexDatalinkClient
6
6
  class Protocol1
7
- class End < End
7
+ class End
8
+ prepend Helpers::CrcPacketsWrapper
9
+
10
+ CPACKET_SKIP = [0x21]
11
+
12
+ # Compile packets for data end command.
13
+ #
14
+ # @return [Array<Array<Integer>>] Two-dimensional array of integers that represent bytes.
15
+ def packets
16
+ [CPACKET_SKIP]
17
+ end
8
18
  end
9
19
  end
10
20
  end
@@ -1,10 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "timex_datalink_client/sync"
4
-
5
3
  class TimexDatalinkClient
6
4
  class Protocol1
7
- class Sync < Sync
5
+ class Sync
6
+ PING_BYTE = [0x78]
7
+ SYNC_1_BYTE = [0x55]
8
+ SYNC_2_BYTE = [0xaa]
9
+
10
+ SYNC_2_LENGTH = 40
11
+
12
+ attr_accessor :length
13
+
14
+ # Create a Sync instance.
15
+ #
16
+ # @param length [Integer] Number of 0x55 sync bytes to use.
17
+ # @return [Sync] Sync instance.
18
+ def initialize(length: 300)
19
+ @length = length
20
+ end
21
+
22
+ # Compile packets for syncronization data.
23
+ #
24
+ # @return [Array<Array<Integer>>] Two-dimensional array of integers that represent bytes.
25
+ def packets
26
+ [PING_BYTE + render_sync_1 + render_sync_2]
27
+ end
28
+
29
+ private
30
+
31
+ def render_sync_1
32
+ SYNC_1_BYTE * length
33
+ end
34
+
35
+ def render_sync_2
36
+ SYNC_2_BYTE * SYNC_2_LENGTH
37
+ end
8
38
  end
9
39
  end
10
40
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol3
8
+ class Eeprom
9
+ class Anniversary
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :time, :anniversary
14
+
15
+ # Create an Anniversary instance.
16
+ #
17
+ # @param time [::Time] Time of anniversary.
18
+ # @param anniversary [String] Anniversary text.
19
+ # @return [Anniversary] Anniversary instance.
20
+ def initialize(time:, anniversary:)
21
+ @time = time
22
+ @anniversary = anniversary
23
+ end
24
+
25
+ # Compile a packet for an anniversary.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ time.month,
31
+ time.day,
32
+ anniversary_characters
33
+ ].flatten
34
+ end
35
+
36
+ private
37
+
38
+ def anniversary_characters
39
+ eeprom_chars_for(anniversary)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol3
8
+ class Eeprom
9
+ class Appointment
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :time, :message
14
+
15
+ # Create an Appointment instance.
16
+ #
17
+ # @param time [::Time] Time of appointment.
18
+ # @param message [String] Appointment text.
19
+ # @return [Appointment] Appointment instance.
20
+ def initialize(time:, message:)
21
+ @time = time
22
+ @message = message
23
+ end
24
+
25
+ # Compile a packet for an appointment.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ time.month,
31
+ time.day,
32
+ time_15m,
33
+ message_characters
34
+ ].flatten
35
+ end
36
+
37
+ private
38
+
39
+ def time_15m
40
+ time.hour * 4 + time.min / 15
41
+ end
42
+
43
+ def message_characters
44
+ eeprom_chars_for(message)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol3
8
+ class Eeprom
9
+ class List
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :list_entry, :priority
14
+
15
+ # Create a List instance.
16
+ #
17
+ # @param list_entry [String] List entry text.
18
+ # @param priority [Integer] List priority.
19
+ # @return [List] List instance.
20
+ def initialize(list_entry:, priority:)
21
+ @list_entry = list_entry
22
+ @priority = priority
23
+ end
24
+
25
+ # Compile a packet for a list.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ priority,
31
+ list_entry_characters
32
+ ].flatten
33
+ end
34
+
35
+ private
36
+
37
+ def list_entry_characters
38
+ eeprom_chars_for(list_entry)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol3
8
+ class Eeprom
9
+ class PhoneNumber
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ PHONE_DIGITS = 12
14
+
15
+ attr_accessor :name, :number, :type
16
+
17
+ # Create a PhoneNumber instance.
18
+ #
19
+ # @param name [String] Name associated to phone number.
20
+ # @param number [String] Phone number text.
21
+ # @param type [String] Phone number type.
22
+ # @return [PhoneNumber] PhoneNumber instance.
23
+ def initialize(name:, number:, type: " ")
24
+ @name = name
25
+ @number = number
26
+ @type = type
27
+ end
28
+
29
+ # Compile a packet for a phone number.
30
+ #
31
+ # @return [Array<Integer>] Array of integers that represent bytes.
32
+ def packet
33
+ [
34
+ number_with_type_characters,
35
+ name_characters
36
+ ].flatten
37
+ end
38
+
39
+ private
40
+
41
+ def number_with_type_padded
42
+ number_with_type = "#{number} #{type}"
43
+ number_with_type.rjust(PHONE_DIGITS)
44
+ end
45
+
46
+ def number_with_type_characters
47
+ phone_chars_for(number_with_type_padded)
48
+ end
49
+
50
+ def name_characters
51
+ eeprom_chars_for(name)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,10 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "timex_datalink_client/end"
3
+ require "timex_datalink_client/helpers/crc_packets_wrapper"
4
4
 
5
5
  class TimexDatalinkClient
6
6
  class Protocol3
7
- class End < End
7
+ class End
8
+ prepend Helpers::CrcPacketsWrapper
9
+
10
+ CPACKET_SKIP = [0x21]
11
+
12
+ # Compile packets for data end command.
13
+ #
14
+ # @return [Array<Array<Integer>>] Two-dimensional array of integers that represent bytes.
15
+ def packets
16
+ [CPACKET_SKIP]
17
+ end
8
18
  end
9
19
  end
10
20
  end
@@ -1,10 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "timex_datalink_client/sync"
4
-
5
3
  class TimexDatalinkClient
6
4
  class Protocol3
7
- class Sync < Sync
5
+ class Sync
6
+ PING_BYTE = [0x78]
7
+ SYNC_1_BYTE = [0x55]
8
+ SYNC_2_BYTE = [0xaa]
9
+
10
+ SYNC_2_LENGTH = 40
11
+
12
+ attr_accessor :length
13
+
14
+ # Create a Sync instance.
15
+ #
16
+ # @param length [Integer] Number of 0x55 sync bytes to use.
17
+ # @return [Sync] Sync instance.
18
+ def initialize(length: 300)
19
+ @length = length
20
+ end
21
+
22
+ # Compile packets for syncronization data.
23
+ #
24
+ # @return [Array<Array<Integer>>] Two-dimensional array of integers that represent bytes.
25
+ def packets
26
+ [PING_BYTE + render_sync_1 + render_sync_2]
27
+ end
28
+
29
+ private
30
+
31
+ def render_sync_1
32
+ SYNC_1_BYTE * length
33
+ end
34
+
35
+ def render_sync_2
36
+ SYNC_2_BYTE * SYNC_2_LENGTH
37
+ end
8
38
  end
9
39
  end
10
40
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/crc_packets_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol4
8
+ class Alarm
9
+ include Helpers::CharEncoders
10
+ prepend Helpers::CrcPacketsWrapper
11
+
12
+ CPACKET_ALARM = [0x50]
13
+
14
+ attr_accessor :number, :audible, :time, :message
15
+
16
+ # Create an Alarm instance.
17
+ #
18
+ # @param number [Integer] Alarm number (from 1 to 5).
19
+ # @param audible [Boolean] Toggle alarm sounds.
20
+ # @param time [::Time] Time of alarm.
21
+ # @param message [String] Alarm message text.
22
+ # @return [Alarm] Alarm instance.
23
+ def initialize(number:, audible:, time:, message:)
24
+ @number = number
25
+ @audible = audible
26
+ @time = time
27
+ @message = message
28
+ end
29
+
30
+ # Compile packets for an alarm.
31
+ #
32
+ # @return [Array<Array<Integer>>] Two-dimensional array of integers that represent bytes.
33
+ def packets
34
+ [
35
+ [
36
+ CPACKET_ALARM,
37
+ number,
38
+ time.hour,
39
+ time.min,
40
+ 0,
41
+ 0,
42
+ message_characters,
43
+ audible_integer
44
+ ].flatten
45
+ ]
46
+ end
47
+
48
+ private
49
+
50
+ def message_characters
51
+ chars_for(message, length: 8, pad: true)
52
+ end
53
+
54
+ def audible_integer
55
+ audible ? 1 : 0
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timex_datalink_client/helpers/char_encoders"
4
+ require "timex_datalink_client/helpers/length_packet_wrapper"
5
+
6
+ class TimexDatalinkClient
7
+ class Protocol4
8
+ class Eeprom
9
+ class Anniversary
10
+ include Helpers::CharEncoders
11
+ prepend Helpers::LengthPacketWrapper
12
+
13
+ attr_accessor :time, :anniversary
14
+
15
+ # Create an Anniversary instance.
16
+ #
17
+ # @param time [::Time] Time of anniversary.
18
+ # @param anniversary [String] Anniversary text.
19
+ # @return [Anniversary] Anniversary instance.
20
+ def initialize(time:, anniversary:)
21
+ @time = time
22
+ @anniversary = anniversary
23
+ end
24
+
25
+ # Compile a packet for an anniversary.
26
+ #
27
+ # @return [Array<Integer>] Array of integers that represent bytes.
28
+ def packet
29
+ [
30
+ time.month,
31
+ time.day,
32
+ anniversary_characters
33
+ ].flatten
34
+ end
35
+
36
+ private
37
+
38
+ def anniversary_characters
39
+ eeprom_chars_for(anniversary)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end