MySensors Library & Examples  2.3.2-62-ge298769
sha204_library.h
1 #include "Arduino.h"
2 
3 #ifndef sha204_library_H
4 #define sha204_library_H
5 
6 /* bitbang_config.h */
7 
8 #define PORT_ACCESS_TIME (630)
9 #define START_PULSE_WIDTH (4340)
10 #define BIT_DELAY (4)
11 #define RX_TX_DELAY (15)
12 #define START_PULSE_TIME_OUT (255)
13 #define ZERO_PULSE_TIME_OUT (26)
14 
15 /* swi_phys.h */
16 
17 #define SWI_FUNCTION_RETCODE_SUCCESS ((uint8_t) 0x00)
18 #define SWI_FUNCTION_RETCODE_TIMEOUT ((uint8_t) 0xF1)
19 #define SWI_FUNCTION_RETCODE_RX_FAIL ((uint8_t) 0xF9)
20 
21 /* sha204_physical.h */
22 
23 #define SHA204_RSP_SIZE_MIN ((uint8_t) 4)
24 #define SHA204_RSP_SIZE_MAX ((uint8_t) 35)
25 #define SHA204_BUFFER_POS_COUNT (0)
26 #define SHA204_BUFFER_POS_DATA (1)
27 #define SHA204_WAKEUP_PULSE_WIDTH (uint8_t) (6.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5)
28 #define SHA204_WAKEUP_DELAY (uint8_t) (3.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5)
29 
30 /* sha204_swi.c */
31 #define SHA204_SWI_FLAG_CMD ((uint8_t) 0x77)
32 #define SHA204_SWI_FLAG_TX ((uint8_t) 0x88)
33 #define SHA204_SWI_FLAG_IDLE ((uint8_t) 0xBB)
34 #define SHA204_SWI_FLAG_SLEEP ((uint8_t) 0xCC)
35 
36 /* sha204_comm_marshaling.h */
37 // command op-code definitions
38 #define SHA204_CHECKMAC ((uint8_t) 0x28)
39 #define SHA204_DERIVE_KEY ((uint8_t) 0x1C)
40 #define SHA204_DEVREV ((uint8_t) 0x30)
41 #define SHA204_GENDIG ((uint8_t) 0x15)
42 #define SHA204_HMAC ((uint8_t) 0x11)
43 #define SHA204_LOCK ((uint8_t) 0x17)
44 #define SHA204_MAC ((uint8_t) 0x08)
45 #define SHA204_NONCE ((uint8_t) 0x16)
46 #define SHA204_PAUSE ((uint8_t) 0x01)
47 #define SHA204_RANDOM ((uint8_t) 0x1B)
48 #define SHA204_READ ((uint8_t) 0x02)
49 #define SHA204_UPDATE_EXTRA ((uint8_t) 0x20)
50 #define SHA204_WRITE ((uint8_t) 0x12)
51 
52 // packet size definitions
53 #define SHA204_RSP_SIZE_VAL ((uint8_t) 7)
54 
55 // parameter range definitions
56 #define SHA204_KEY_ID_MAX ((uint8_t) 15)
57 #define SHA204_OTP_BLOCK_MAX ((uint8_t) 1)
58 
59 // definitions for command packet indexes common to all commands
60 #define SHA204_COUNT_IDX ( 0)
61 #define SHA204_OPCODE_IDX ( 1)
62 #define SHA204_PARAM1_IDX ( 2)
63 #define SHA204_PARAM2_IDX ( 3)
64 #define SHA204_DATA_IDX ( 5)
65 
66 // zone definitions
67 #define SHA204_ZONE_CONFIG ((uint8_t) 0x00)
68 #define SHA204_ZONE_OTP ((uint8_t) 0x01)
69 #define SHA204_ZONE_DATA ((uint8_t) 0x02)
70 #define SHA204_ZONE_MASK ((uint8_t) 0x03)
71 #define SHA204_ZONE_COUNT_FLAG ((uint8_t) 0x80)
72 #define SHA204_ZONE_ACCESS_4 ((uint8_t) 4)
73 #define SHA204_ZONE_ACCESS_32 ((uint8_t) 32)
74 #define SHA204_ADDRESS_MASK_CONFIG ( 0x001F)
75 #define SHA204_ADDRESS_MASK_OTP ( 0x000F)
76 #define SHA204_ADDRESS_MASK ( 0x007F)
77 
78 // CheckMAC command definitions
79 #define CHECKMAC_MODE_IDX SHA204_PARAM1_IDX
80 #define CHECKMAC_KEYID_IDX SHA204_PARAM2_IDX
81 #define CHECKMAC_CLIENT_CHALLENGE_IDX SHA204_DATA_IDX
82 #define CHECKMAC_CLIENT_RESPONSE_IDX (37)
83 #define CHECKMAC_DATA_IDX (69)
84 #define CHECKMAC_COUNT (84)
85 #define CHECKMAC_MODE_MASK ((uint8_t) 0x27)
86 #define CHECKMAC_CLIENT_CHALLENGE_SIZE (32)
87 #define CHECKMAC_CLIENT_RESPONSE_SIZE (32)
88 #define CHECKMAC_OTHER_DATA_SIZE (13)
89 
90 // DeriveKey command definitions
91 #define DERIVE_KEY_RANDOM_IDX SHA204_PARAM1_IDX
92 #define DERIVE_KEY_TARGETKEY_IDX SHA204_PARAM2_IDX
93 #define DERIVE_KEY_MAC_IDX SHA204_DATA_IDX
94 #define DERIVE_KEY_COUNT_SMALL SHA204_CMD_SIZE_MIN
95 #define DERIVE_KEY_COUNT_LARGE (39)
96 #define DERIVE_KEY_RANDOM_FLAG ((uint8_t) 4)
97 #define DERIVE_KEY_MAC_SIZE (32)
98 
99 // DevRev command definitions
100 #define DEVREV_PARAM1_IDX SHA204_PARAM1_IDX
101 #define DEVREV_PARAM2_IDX SHA204_PARAM2_IDX
102 #define DEVREV_COUNT SHA204_CMD_SIZE_MIN
103 
104 // GenDig command definitions
105 #define GENDIG_ZONE_IDX SHA204_PARAM1_IDX
106 #define GENDIG_KEYID_IDX SHA204_PARAM2_IDX
107 #define GENDIG_DATA_IDX SHA204_DATA_IDX
108 #define GENDIG_COUNT SHA204_CMD_SIZE_MIN
109 #define GENDIG_COUNT_DATA (11)
110 #define GENDIG_OTHER_DATA_SIZE (4)
111 #define GENDIG_ZONE_CONFIG ((uint8_t) 0)
112 #define GENDIG_ZONE_OTP ((uint8_t) 1)
113 #define GENDIG_ZONE_DATA ((uint8_t) 2)
114 
115 // HMAC command definitions
116 #define HMAC_MODE_IDX SHA204_PARAM1_IDX
117 #define HMAC_KEYID_IDX SHA204_PARAM2_IDX
118 #define HMAC_COUNT SHA204_CMD_SIZE_MIN
119 #define HMAC_MODE_MASK ((uint8_t) 0x74)
120 
121 // Lock command definitions
122 #define LOCK_ZONE_IDX SHA204_PARAM1_IDX
123 #define LOCK_SUMMARY_IDX SHA204_PARAM2_IDX
124 #define LOCK_COUNT SHA204_CMD_SIZE_MIN
125 #define LOCK_ZONE_NO_CONFIG ((uint8_t) 0x01)
126 #define LOCK_ZONE_NO_CRC ((uint8_t) 0x80)
127 #define LOCK_ZONE_MASK (0x81)
128 
129 // Mac command definitions
130 #define MAC_MODE_IDX SHA204_PARAM1_IDX
131 #define MAC_KEYID_IDX SHA204_PARAM2_IDX
132 #define MAC_CHALLENGE_IDX SHA204_DATA_IDX
133 #define MAC_COUNT_SHORT SHA204_CMD_SIZE_MIN
134 #define MAC_COUNT_LONG (39)
135 #define MAC_MODE_BLOCK2_TEMPKEY ((uint8_t) 0x01)
136 #define MAC_MODE_BLOCK1_TEMPKEY ((uint8_t) 0x02)
137 #define MAC_MODE_SOURCE_FLAG_MATCH ((uint8_t) 0x04)
138 #define MAC_MODE_PASSTHROUGH ((uint8_t) 0x07)
139 #define MAC_MODE_INCLUDE_OTP_88 ((uint8_t) 0x10)
140 #define MAC_MODE_INCLUDE_OTP_64 ((uint8_t) 0x20)
141 #define MAC_MODE_INCLUDE_SN ((uint8_t) 0x40)
142 #define MAC_CHALLENGE_SIZE (32)
143 #define MAC_MODE_MASK ((uint8_t) 0x77)
144 
145 // Nonce command definitions
146 #define NONCE_MODE_IDX SHA204_PARAM1_IDX
147 #define NONCE_PARAM2_IDX SHA204_PARAM2_IDX
148 #define NONCE_INPUT_IDX SHA204_DATA_IDX
149 #define NONCE_COUNT_SHORT (27)
150 #define NONCE_COUNT_LONG (39)
151 #define NONCE_MODE_MASK ((uint8_t) 3)
152 #define NONCE_MODE_SEED_UPDATE ((uint8_t) 0x00)
153 #define NONCE_MODE_NO_SEED_UPDATE ((uint8_t) 0x01)
154 #define NONCE_MODE_INVALID ((uint8_t) 0x02)
155 #define NONCE_MODE_PASSTHROUGH ((uint8_t) 0x03)
156 #define NONCE_NUMIN_SIZE (20)
157 #define NONCE_NUMIN_SIZE_PASSTHROUGH (32)
158 
159 // Pause command definitions
160 #define PAUSE_SELECT_IDX SHA204_PARAM1_IDX
161 #define PAUSE_PARAM2_IDX SHA204_PARAM2_IDX
162 #define PAUSE_COUNT SHA204_CMD_SIZE_MIN
163 
164 // Random command definitions
165 #define RANDOM_MODE_IDX SHA204_PARAM1_IDX
166 #define RANDOM_PARAM2_IDX SHA204_PARAM2_IDX
167 #define RANDOM_COUNT SHA204_CMD_SIZE_MIN
168 #define RANDOM_SEED_UPDATE ((uint8_t) 0x00)
169 #define RANDOM_NO_SEED_UPDATE ((uint8_t) 0x01)
170 
171 // Read command definitions
172 #define READ_ZONE_IDX SHA204_PARAM1_IDX
173 #define READ_ADDR_IDX SHA204_PARAM2_IDX
174 #define READ_COUNT SHA204_CMD_SIZE_MIN
175 #define READ_ZONE_MASK ((uint8_t) 0x83)
176 #define READ_ZONE_MODE_32_BYTES ((uint8_t) 0x80)
177 
178 // UpdateExtra command definitions
179 #define UPDATE_MODE_IDX SHA204_PARAM1_IDX
180 #define UPDATE_VALUE_IDX SHA204_PARAM2_IDX
181 #define UPDATE_COUNT SHA204_CMD_SIZE_MIN
182 #define UPDATE_CONFIG_BYTE_86 ((uint8_t) 0x01)
183 
184 // Write command definitions
185 #define WRITE_ZONE_IDX SHA204_PARAM1_IDX
186 #define WRITE_ADDR_IDX SHA204_PARAM2_IDX
187 #define WRITE_VALUE_IDX SHA204_DATA_IDX
188 #define WRITE_MAC_VS_IDX ( 9)
189 #define WRITE_MAC_VL_IDX (37)
190 #define WRITE_COUNT_SHORT (11)
191 #define WRITE_COUNT_LONG (39)
192 #define WRITE_COUNT_SHORT_MAC (43)
193 #define WRITE_COUNT_LONG_MAC (71)
194 #define WRITE_MAC_SIZE (32)
195 #define WRITE_ZONE_MASK ((uint8_t) 0xC3)
196 #define WRITE_ZONE_WITH_MAC ((uint8_t) 0x40)
197 
198 // Response size definitions
199 #define CHECKMAC_RSP_SIZE SHA204_RSP_SIZE_MIN
200 #define DERIVE_KEY_RSP_SIZE SHA204_RSP_SIZE_MIN
201 #define DEVREV_RSP_SIZE SHA204_RSP_SIZE_VAL
202 #define GENDIG_RSP_SIZE SHA204_RSP_SIZE_MIN
203 #define HMAC_RSP_SIZE SHA204_RSP_SIZE_MAX
204 #define LOCK_RSP_SIZE SHA204_RSP_SIZE_MIN
205 #define MAC_RSP_SIZE SHA204_RSP_SIZE_MAX
206 #define NONCE_RSP_SIZE_SHORT SHA204_RSP_SIZE_MIN
207 #define NONCE_RSP_SIZE_LONG SHA204_RSP_SIZE_MAX
208 #define PAUSE_RSP_SIZE SHA204_RSP_SIZE_MIN
209 #define RANDOM_RSP_SIZE SHA204_RSP_SIZE_MAX
210 #define READ_4_RSP_SIZE SHA204_RSP_SIZE_VAL
211 #define READ_32_RSP_SIZE SHA204_RSP_SIZE_MAX
212 #define TEMP_SENSE_RSP_SIZE SHA204_RSP_SIZE_VAL
213 #define UPDATE_RSP_SIZE SHA204_RSP_SIZE_MIN
214 #define WRITE_RSP_SIZE SHA204_RSP_SIZE_MIN
215 
216 // command timing definitions for minimum execution times (ms)
217 #define CHECKMAC_DELAY ((uint8_t) (12.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
218 #define DERIVE_KEY_DELAY ((uint8_t) (14.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
219 #define DEVREV_DELAY ((uint8_t) ( 0.4 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
220 #define GENDIG_DELAY ((uint8_t) (11.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
221 #define HMAC_DELAY ((uint8_t) (27.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
222 #define LOCK_DELAY ((uint8_t) ( 5.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
223 #define MAC_DELAY ((uint8_t) (12.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
224 #define NONCE_DELAY ((uint8_t) (22.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
225 #define PAUSE_DELAY ((uint8_t) ( 0.4 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
226 #define RANDOM_DELAY ((uint8_t) (11.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
227 #define READ_DELAY ((uint8_t) ( 0.4 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
228 #define TEMP_SENSE_DELAY ((uint8_t) ( 4.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
229 #define UPDATE_DELAY ((uint8_t) ( 4.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
230 #define WRITE_DELAY ((uint8_t) ( 4.0 * CPU_CLOCK_DEVIATION_NEGATIVE - 0.5))
231 
232 // command timing definitions for maximum execution times (ms)
233 #define CHECKMAC_EXEC_MAX ((uint8_t) (38.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
234 #define DERIVE_KEY_EXEC_MAX ((uint8_t) (62.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
235 #define DEVREV_EXEC_MAX ((uint8_t) ( 2.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
236 #define GENDIG_EXEC_MAX ((uint8_t) (43.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
237 #define HMAC_EXEC_MAX ((uint8_t) (69.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
238 #define LOCK_EXEC_MAX ((uint8_t) (24.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
239 #define MAC_EXEC_MAX ((uint8_t) (35.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
240 #define NONCE_EXEC_MAX ((uint8_t) (60.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
241 #define PAUSE_EXEC_MAX ((uint8_t) ( 2.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
242 #define RANDOM_EXEC_MAX ((uint8_t) (50.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
243 #define READ_EXEC_MAX ((uint8_t) ( 4.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
244 #define TEMP_SENSE_EXEC_MAX ((uint8_t) (11.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
245 #define UPDATE_EXEC_MAX ((uint8_t) ( 6.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
246 #define WRITE_EXEC_MAX ((uint8_t) (42.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
247 
248 /* from sha204_config.h */
249 
250 #define CPU_CLOCK_DEVIATION_POSITIVE (1.01)
251 #define CPU_CLOCK_DEVIATION_NEGATIVE (0.99)
252 #define SHA204_RETRY_COUNT (1)
253 #define SWI_RECEIVE_TIME_OUT ((uint16_t) 163)
254 #define SWI_US_PER_BYTE ((uint16_t) 313)
255 #define SHA204_SYNC_TIMEOUT ((uint8_t) 85)
256 #define SHA204_RESPONSE_TIMEOUT ((uint16_t) SWI_RECEIVE_TIME_OUT + SWI_US_PER_BYTE)
257 
258 /* from sha204_comm.h */
259 
260 #define SHA204_COMMAND_EXEC_MAX ((uint8_t) (69.0 * CPU_CLOCK_DEVIATION_POSITIVE + 0.5))
261 #define SHA204_CMD_SIZE_MIN ((uint8_t) 7)
262 #ifndef SHA204_CMD_SIZE_MAX
263 #define SHA204_CMD_SIZE_MAX ((uint8_t) 84)
264 #endif
265 #define SHA204_CRC_SIZE ((uint8_t) 2)
266 #define SHA204_BUFFER_POS_STATUS (1)
267 #define SHA204_BUFFER_POS_DATA (1)
268 #define SHA204_STATUS_BYTE_WAKEUP ((uint8_t) 0x11)
269 #define SHA204_STATUS_BYTE_PARSE ((uint8_t) 0x03)
270 #define SHA204_STATUS_BYTE_EXEC ((uint8_t) 0x0F)
271 #define SHA204_STATUS_BYTE_COMM ((uint8_t) 0xFF)
272 
273 /* EEPROM Addresses */
274 /* Configuration Zone */
275 #define ADDRESS_SN03 0 // SN[0:3] are bytes 0->3 of configuration zone
276 #define ADDRESS_RevNum 4 // bytes 4->7 of config zone are RevNum
277 #define ADDRESS_SN47 8 // SN[4:7] are bytes 8->11 of config zone
278 #define ADDRESS_SN8 12 // SN[8] is byte 12 of config zone, should be 0xEE
279 #define ADDRESS_I2CEN 14 // I2C Enable, bit 0 represents I2C enable status
280 #define ADDRESS_I2CADD 16 // Defines I2C address of SHA204
281 #define ADDRESS_OTPMODE 18 // Sets the One-time-programmable mode
282 #define ADDRESS_SELECTOR 19 // Controls writability of Selector
283 
284 /* Low level HW access macros */
285 /* function calls is not working, as it will have too much overhead */
286 #if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_MEGAAVR) // For everything else than AVR use pinMode / digitalWrite
287 #define SHA204_SET_OUTPUT() pinMode(device_pin, OUTPUT)
288 #define SHA204_SET_INPUT() pinMode(device_pin, INPUT)
289 #define SHA204_POUT_HIGH() digitalWrite(device_pin, HIGH)
290 #define SHA204_POUT_LOW() digitalWrite(device_pin, LOW)
291 #define SHA204_PIN_READ() digitalRead(device_pin)
292 #else
293 #define SHA204_SET_INPUT() *device_port_DDR &= ~device_pin
294 #define SHA204_SET_OUTPUT() *device_port_DDR |= device_pin
295 #define SHA204_POUT_HIGH() *device_port_OUT |= device_pin
296 #define SHA204_POUT_LOW() *device_port_OUT &= ~device_pin
297 #define SHA204_PIN_READ() (*device_port_IN & device_pin)
298 #endif
299 
304 {
305 private:
306  uint8_t device_pin;
307 #if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_MEGAAVR)
308  volatile uint8_t *device_port_DDR, *device_port_OUT, *device_port_IN;
309 #endif
310  void sha204c_calculate_crc(uint8_t length, uint8_t *data, uint8_t *crc);
311  uint8_t sha204c_check_crc(uint8_t *response);
312  void swi_set_signal_pin(uint8_t is_high);
313  uint8_t swi_receive_bytes(uint8_t count, uint8_t *buffer);
314  uint8_t swi_send_bytes(uint8_t count, uint8_t *buffer);
315  uint8_t swi_send_byte(uint8_t value);
316  uint8_t sha204p_receive_response(uint8_t size, uint8_t *response);
317  uint8_t sha204p_wakeup();
318  uint8_t sha204p_send_command(uint8_t count, uint8_t * command);
319  uint8_t sha204p_sleep();
320  uint8_t sha204p_resync(uint8_t size, uint8_t *response);
321 
322 
323 public:
329  explicit atsha204Class(uint8_t pin);
330 
338  uint8_t sha204c_wakeup(uint8_t *response);
339 
351  uint8_t sha204c_send_and_receive(uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer,
352  uint8_t execution_delay, uint8_t execution_timeout);
353 
362  uint8_t sha204c_resync(uint8_t size, uint8_t *response);
363 
373  uint8_t sha204m_random(uint8_t * tx_buffer, uint8_t * rx_buffer, uint8_t mode);
374 
383  uint8_t sha204m_dev_rev(uint8_t *tx_buffer, uint8_t *rx_buffer);
384 
395  uint8_t sha204m_read(uint8_t *tx_buffer, uint8_t *rx_buffer, uint8_t zone, uint16_t address);
396 
416  uint8_t sha204m_execute(uint8_t op_code, uint8_t param1, uint16_t param2,
417  uint8_t datalen1, uint8_t *data1, uint8_t datalen2, uint8_t *data2, uint8_t datalen3,
418  uint8_t *data3,
419  uint8_t tx_size, uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer);
420 
440  uint8_t sha204m_check_parameters(uint8_t op_code, uint8_t param1, uint16_t param2,
441  uint8_t datalen1, uint8_t *data1, uint8_t datalen2, uint8_t *data2, uint8_t datalen3,
442  uint8_t *data3,
443  uint8_t tx_size, uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer);
444 
452  uint8_t getSerialNumber(uint8_t *response);
453 
463  uint16_t calculateAndUpdateCrc(uint8_t length, uint8_t *data, uint16_t current_crc);
464 
465 };
466 
467 #endif
data
char data[MAX_PAYLOAD_SIZE+1]
Buffer for raw payload data.
Definition: MyMessage.h:654
atsha204Class::sha204c_wakeup
uint8_t sha204c_wakeup(uint8_t *response)
Wake up device.
atsha204Class::sha204m_read
uint8_t sha204m_read(uint8_t *tx_buffer, uint8_t *rx_buffer, uint8_t zone, uint16_t address)
Read from device.
atsha204Class::calculateAndUpdateCrc
uint16_t calculateAndUpdateCrc(uint8_t length, uint8_t *data, uint16_t current_crc)
Calculates and update crc.
atsha204Class::sha204c_send_and_receive
uint8_t sha204c_send_and_receive(uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer, uint8_t execution_delay, uint8_t execution_timeout)
Send and receive data.
atsha204Class::sha204c_resync
uint8_t sha204c_resync(uint8_t size, uint8_t *response)
Resyncronize the device.
atsha204Class::sha204m_dev_rev
uint8_t sha204m_dev_rev(uint8_t *tx_buffer, uint8_t *rx_buffer)
Read device revision.
atsha204Class::sha204m_check_parameters
uint8_t sha204m_check_parameters(uint8_t op_code, uint8_t param1, uint16_t param2, uint8_t datalen1, uint8_t *data1, uint8_t datalen2, uint8_t *data2, uint8_t datalen3, uint8_t *data3, uint8_t tx_size, uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer)
Validate parameters.
atsha204Class::sha204m_random
uint8_t sha204m_random(uint8_t *tx_buffer, uint8_t *rx_buffer, uint8_t mode)
Generate random data.
atsha204Class::sha204m_execute
uint8_t sha204m_execute(uint8_t op_code, uint8_t param1, uint16_t param2, uint8_t datalen1, uint8_t *data1, uint8_t datalen2, uint8_t *data2, uint8_t datalen3, uint8_t *data3, uint8_t tx_size, uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer)
Execute command.
atsha204Class::getSerialNumber
uint8_t getSerialNumber(uint8_t *response)
Gets the serial number.
atsha204Class
Definition: sha204_library.h:303
atsha204Class::atsha204Class
atsha204Class(uint8_t pin)
Constructor.