#ifndef RMAPSTRUCTS_H_ #define RMAPSTRUCTS_H_ #include <stdint.h> //SHOULDDO: having the defines within a namespace would be nice. Problem are the defines referencing the previous define, eg RMAP_COMMAND_WRITE ////////////////////////////////////////////////////////////////////////////////// // RMAP command bits //#define RMAP_COMMAND_BIT_INCREMENT 2 //#define RMAP_COMMAND_BIT_REPLY 3 //#define RMAP_COMMAND_BIT_WRITE 5 //#define RMAP_COMMAND_BIT_VERIFY 4 //#define RMAP_COMMAND_BIT 6 namespace RMAPIds{ static const uint8_t RMAP_COMMAND_BIT_INCREMENT = 2; static const uint8_t RMAP_COMMAND_BIT_REPLY = 3; static const uint8_t RMAP_COMMAND_BIT_WRITE = 5; static const uint8_t RMAP_COMMAND_BIT_VERIFY = 4; static const uint8_t RMAP_COMMAND_BIT = 6; ////////////////////////////////////////////////////////////////////////////////// // RMAP commands static const uint8_t RMAP_COMMAND_WRITE = ((1<<RMAP_COMMAND_BIT) | (1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY)); static const uint8_t RMAP_COMMAND_READ = ((1<<RMAP_COMMAND_BIT) | (1<<RMAP_COMMAND_BIT_REPLY)); static const uint8_t RMAP_REPLY_WRITE = ((1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY)); static const uint8_t RMAP_REPLY_READ = ((1<<RMAP_COMMAND_BIT_REPLY)); //#define RMAP_COMMAND_WRITE ((1<<RMAP_COMMAND_BIT) | (1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY)) //#define RMAP_COMMAND_WRITE_VERIFY ((1<<RMAP_COMMAND_BIT) | (1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY) | (1<<RMAP_COMMAND_BIT_VERIFY)) //#define RMAP_COMMAND_READ ((1<<RMAP_COMMAND_BIT) | (1<<RMAP_COMMAND_BIT_REPLY)) //#define RMAP_REPLY_WRITE ((1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY)) //#define RMAP_REPLY_WRITE_VERIFY ((1<<RMAP_COMMAND_BIT_WRITE) | (1<<RMAP_COMMAND_BIT_REPLY) | (1<<RMAP_COMMAND_BIT_VERIFY)) //#define RMAP_REPLY_READ ((1<<RMAP_COMMAND_BIT_REPLY)) ////////////////////////////////////////////////////////////////////////////////// // useful info static const uint8_t RMAP_COMMAND_HEADER_LEN = 16; static const uint8_t RMAP_WRITE_REPLY_HEADER_LEN = 8; static const uint8_t RMAP_READ_REPLY_HEADER_LEN = 12; static const uint8_t RMAP_DATA_FOOTER_SIZE = 1; //SIZE OF CRC //#define RMAP_COMMAND_HEADER_LEN 16 //#define RMAP_WRITE_REPLY_HEADER_LEN 8 //#define RMAP_READ_REPLY_HEADER_LEN 12 } namespace RMAPStructs { struct rmap_cmd_header { uint8_t dest_address; uint8_t protocol; uint8_t instruction; uint8_t dest_key; uint8_t source_address; uint8_t tid_h; uint8_t tid_l; uint8_t extended_address; uint8_t address_hh; uint8_t address_h; uint8_t address_l; uint8_t address_ll; uint8_t datalen_h; uint8_t datalen_m; uint8_t datalen_l; uint8_t header_crc; }; struct rmap_read_reply_header { uint8_t dest_address; uint8_t protocol; uint8_t instruction; uint8_t status; uint8_t source_address; uint8_t tid_h; uint8_t tid_l; uint8_t reserved; uint8_t datalen_h; uint8_t datalen_m; uint8_t datalen_l; uint8_t header_crc; }; struct rmap_write_reply_header { uint8_t dest_address; uint8_t protocol; uint8_t instruction; uint8_t status; uint8_t source_address; uint8_t tid_h; uint8_t tid_l; uint8_t header_crc; }; } #endif /* RMAPSTRUCTS_H_ */