* Initial release for SX1302 CoreCell Reference Design.
This commit is contained in:
Michael Coracin 2019-07-12 15:40:13 +02:00
commit 4c61c5d48e
79 changed files with 30157 additions and 0 deletions

View file

@ -0,0 +1,124 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "tinymt32.h"
/* -------------------------------------------------------------------------- */
/* --- SUBFUNCTIONS DECLARATION --------------------------------------------- */
static void usage(void);
void remove_spaces(char *str);
/* -------------------------------------------------------------------------- */
/* --- MAIN FUNCTION -------------------------------------------------------- */
int main(int argc, char ** argv)
{
int j;
uint8_t dev_id[4];
uint8_t payload[255];
uint8_t payload_size;
unsigned int packet_cnt;
tinymt32_t tinymt;
char hexstr[32];
if (argc < 4) {
usage();
return -1;
}
/* Get dev_id hex string from command line */
memcpy(hexstr, argv[1], strlen(argv[1]));
hexstr[strlen(argv[1])] = '\0';
/* Remove spaces from the string if any */
remove_spaces(hexstr);
hexstr[strlen(hexstr)] = '\0';
printf("Dev_id: %s\n", hexstr);
/* Convert hex string to byte array */
payload_size = strlen(hexstr) / 2;
for (j = 0; j < 4; j++) {
sscanf(hexstr + 2*j, "%02hhx", &dev_id[j]);
}
/* Get packet count from which generate the random payload */
packet_cnt = atoi(argv[2]);
/* Get packet payload size */
payload_size = (uint8_t)atoi(argv[3]);
/* Initialize the pseudo-random generator */
tinymt.mat1 = 0x8f7011ee;
tinymt.mat2 = 0xfc78ff1f;
tinymt.tmat = 0x3793fdff;
tinymt32_init(&tinymt, packet_cnt);
/* Construct packet */
payload[0] = dev_id[0];
payload[1] = dev_id[1];
payload[2] = dev_id[2];
payload[3] = dev_id[3];
payload[4] = (uint8_t)(packet_cnt >> 24);
payload[5] = (uint8_t)(packet_cnt >> 16);
payload[6] = (uint8_t)(packet_cnt >> 8);
payload[7] = (uint8_t)(packet_cnt >> 0);
for (j = 8; j < payload_size; j++) {
payload[j] = (uint8_t)tinymt32_generate_uint32(&tinymt);
}
for (j = 0; j < payload_size; j++) {
printf("%02X ", payload[j]);
}
printf("\n");
#if 0
for (packet_cnt = 0; packet_cnt < 10; packet_cnt++) {
tinymt32_init(&tinymt, (int)packet_cnt);
payload[0] = 0xCA;
payload[1] = 0xFE;
payload[2] = 0x12;
payload[3] = 0x34;
payload[4] = (uint8_t)(packet_cnt >> 24);
payload[5] = (uint8_t)(packet_cnt >> 16);
payload[6] = (uint8_t)(packet_cnt >> 8);
payload[7] = (uint8_t)(packet_cnt >> 0);
for (j = 8; j < 16; j++) {
payload[j] = (uint8_t)tinymt32_generate_uint32(&tinymt);
}
for (j = 0; j < 16; j++) {
printf("%02X ", payload[j]);
}
printf("\n");
}
#endif
return 0;
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void usage(void) {
printf("Missing parameters: ./payload_gen dev_id pkt_cnt pkt_size\n");
printf(" dev_id: hex string for 4-bytes dev_id\n");
printf(" pkt_cnt: unsigned int used to initialize the pseudo-random generator\n");
printf(" pkt_size: paylaod size in bytes [0..255]\n");
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void remove_spaces(char *str)
{
/* To keep track of non-space character count */
int count = 0;
/* Traverse the given string. If current character
is not space, then place it at index 'count++' */
for (int i = 0; str[i]; i++) {
if (str[i] != ' ') {
str[count++] = str[i]; /* here count is incremented */
}
}
str[count] = '\0';
}