changed NUM_FLAPS handling in multi-splitflap

main
Jonas Arnold 4 years ago
parent f1847cdf6b
commit 44e0df5d51
  1. 6
      ADIS_tinyK22_SplitFlap/source/application.c
  2. 42
      ADIS_tinyK22_SplitFlap/source/multi-splitflap.c
  3. 4
      ADIS_tinyK22_SplitFlap/source/multi-splitflap.h
  4. 6
      ADIS_tinyK22_SplitFlap/source/shell.c
  5. 2
      ADIS_tinyK22_SplitFlap/source/shell.h

@ -48,7 +48,7 @@ void App_Init(void){
LED_blue = McuLED_InitLed(&config);
configureSplitflaps();
MultiSplitFlap_Init(NUM_SF_USED);
MultiSplitFlap_Init();
MultiSplitFlap_AddFlap(splitflap[0]);
#if (NUM_SF_USED > 1)
MultiSplitFlap_AddFlap(splitflap[1]);
@ -271,7 +271,7 @@ void configureSplitflaps(void){
/* create config instance for splitflap 2 */
SF_Config_t sf2Config;
sf2Config.setupIdentifier = 1;
sf2Config.setupIdentifier = 2;
sf2Config.hardwareIdentifier = 20; // default value
sf2Config.magSensorConfig = magSensor2Config;
sf2Config.motorConfig = motor2Config;
@ -310,7 +310,7 @@ void configureSplitflaps(void){
/* create config instance for splitflap 3 */
SF_Config_t sf3Config;
sf3Config.setupIdentifier = 1;
sf3Config.setupIdentifier = 3;
sf3Config.hardwareIdentifier = 20; // default value
sf3Config.magSensorConfig = magSensor3Config;
sf3Config.motorConfig = motor3Config;

@ -15,22 +15,17 @@
/* vars */
static dict_t **flapDict;
static uint8_t addedFlaps = 0;
static const uint8_t BYTES_PER_KEY = 3;
static char* flapKeys[10]; // TODO improve
/* function declarations */
void initFlapKeys(uint8_t numberOfFlaps);
static char flapKeys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'}; // TODO improve
/**********************/
/* INIT / DEINIT */
/**********************/
void MultiSplitFlap_Init(uint8_t numFlaps){
void MultiSplitFlap_Init(){
addedFlaps = 0;
flapDict = dictAlloc();
((dict_t*)flapDict)->key=NULL;
((dict_t*)flapDict)->value=NULL;
((dict_t*)flapDict)->next=NULL;
initFlapKeys(numFlaps);
}
void MultiSplitFlap_Deinit(void){
@ -43,18 +38,19 @@ void MultiSplitFlap_Deinit(void){
/**********************/
void MultiSplitFlap_AddFlap(SF_Handle_t splitflap){
McuLog_info("Adding split flap to multi splitflap combination...");
addItem(flapDict, flapKeys[addedFlaps], (SF_Handle_t*)splitflap);
McuLog_info("Added flap nr. %i/%i.", addedFlaps+1, NUM_FLAPS);
addItem(flapDict, &flapKeys[addedFlaps], (SF_Handle_t*)splitflap);
McuLog_info("Added flap nr. %i/%i.", addedFlaps+1, NUM_MAX_AMOUNT_FLAPS);
addedFlaps++;
}
bool MultiSplitFlap_MoveAllToZeroPosition(void){
uint8_t numCurrentlyAddedSplitflaps = MultiSplitFlap_GetAmountOfAddedSplitFlaps();
McuLog_info("MultiSplitFlap_MoveAllToZeroPosition: Initializing split flap motors.");
// start all inits
for (uint8_t num = 0; num < NUM_FLAPS; ++num) {
for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) {
// get handle
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num]));
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num]));
// start init
SF_MoveMotorToZeroPositionAsync(sfHandle);
}
@ -65,9 +61,9 @@ bool MultiSplitFlap_MoveAllToZeroPosition(void){
initSuccess = true;
vTaskDelay(pdMS_TO_TICKS(50));
// check each splitflap if it is finished with init
for (uint8_t num = 0; num < NUM_FLAPS; ++num) {
for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) {
// get handle
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num]));
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num]));
// check if init done
if(SF_IS_RDY_TO_MOVE(sfHandle) == false){
initSuccess = false;
@ -84,10 +80,11 @@ bool MultiSplitFlap_MoveAllToZeroPosition(void){
}
bool MultiSplitFlap_Display(char sentence[]){
uint8_t numCurrentlyAddedSplitflaps = MultiSplitFlap_GetAmountOfAddedSplitFlaps();
// Start movements
for (uint8_t num = 0; num < NUM_FLAPS; ++num) {
for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) {
// get handle
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num]));
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num]));
char letter = sentence[num];
SF_MoveToFlapAsync(sfHandle, letter);
McuLog_info("Multi splitflap: Commanded Flap nr. %i to letter '%c'.", num+1, letter);
@ -101,8 +98,9 @@ bool MultiSplitFlap_Display(char sentence[]){
done = true; // default is successful
// go through all splitflaps
for (uint8_t num = 0; num < NUM_FLAPS; ++num) {
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num]));
for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) {
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num]));
if(SF_GetCurrentState(sfHandle) == SF_STATE_MOVING){
done = false;
}
@ -114,7 +112,7 @@ bool MultiSplitFlap_Display(char sentence[]){
bool MultiSplitFlap_SetHardwareIdentifier(SetupIdentifier_t id, HardwareIdentifier_t hwId){
// number too high (not that many split flaps can be added to the combination)
if(id >= NUM_FLAPS){
if(id >= NUM_MAX_AMOUNT_FLAPS){
McuLog_error("MultiSplitFlap_SetHardwareIdentifier failed because splitflap with setup id <%i> cannot exist.", id);
return false;
}
@ -130,7 +128,7 @@ bool MultiSplitFlap_SetHardwareIdentifier(SetupIdentifier_t id, HardwareIdentifi
}
// get handle
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[id]));
SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[id]));
// set hardware identifier
SF_SetHardwareIdentifier(sfHandle, hwId);
// log
@ -146,16 +144,18 @@ uint8_t MultiSplitFlap_GetAmountOfAddedSplitFlaps(void){
/**********************/
/* INTERNAL FUNCTIONS */
/**********************/
/* UNUSED
void initFlapKeys(uint8_t numberOfFlaps){
for (uint8_t i = 0; i < numberOfFlaps; ++i) {
/* get a memory place for the key */
get a memory place for the key
#if SPLITFLAP_CONFIG_USE_FREERTOS_HEAP
flapKeys[i] = pvPortMalloc(sizeof(BYTES_PER_KEY));
#else
if((flapKeys[i] = malloc(BYTES_PER_KEY)) == NULL){
McuLog_error("Reserving memory for flap num. %i failed!:", i);
}
sprintf(flapKeys[i], "%i", i);
#endif
sprintf(flapKeys[i], "%i", i);
}
}
*/

@ -10,11 +10,11 @@
#include "splitflap.h"
#define NUM_FLAPS 2 // Number of flaps that can be added to the combination
#define NUM_MAX_AMOUNT_FLAPS 9 // Number of flaps that can be added to the combination
/* initialize dictionary.
* numFlaps: Amount of flaps to be used*/
void MultiSplitFlap_Init(uint8_t numFlaps);
void MultiSplitFlap_Init();
/* de-initialize: deallocate memory etc. */
void MultiSplitFlap_Deinit(void);

@ -51,7 +51,7 @@ static uint8_t ParseCommand(const uint8_t *cmd, bool *handled, McuShell_ConstStd
cmd += sizeof(SHELL_CMD_IDENTIFY_SF)-1;
if(McuUtility_xatoi(&cmd, &setupId) == ERR_OK){
// validate param
if(setupId > NUM_FLAPS){
if(setupId > NUM_MAX_AMOUNT_FLAPS){
return ERR_FAILED;
}
}else{
@ -77,9 +77,9 @@ static uint8_t ParseCommand(const uint8_t *cmd, bool *handled, McuShell_ConstStd
vQueueShellCmd(shellCmd);
}else if(McuUtility_strncmp((char*)cmd,SHELL_CMD_DISPLAY_STRING_SF,sizeof(SHELL_CMD_DISPLAY_STRING_SF)-1) == 0){
*handled = TRUE;
Shell_cmd_s shellCmd = {.shellCmd = Shell_Display_String_SF, .numberOfParams = NUM_FLAPS, .params = {0}};
Shell_cmd_s shellCmd = {.shellCmd = Shell_Display_String_SF, .numberOfParams = NUM_MAX_AMOUNT_FLAPS, .params = {0}};
cmd += sizeof(SHELL_CMD_DISPLAY_STRING_SF)-1;
if(SHELL_stringToInt32ArrayForSFCMD(&cmd, shellCmd.params, NUM_FLAPS) != ERR_OK){
if(SHELL_stringToInt32ArrayForSFCMD(&cmd, shellCmd.params, NUM_MAX_AMOUNT_FLAPS) != ERR_OK){
return ERR_FAILED;
}
vQueueShellCmd(shellCmd);

@ -29,7 +29,7 @@ typedef enum ShellCmd {
typedef struct ShellCmd_s {
Shell_cmd_t shellCmd;
int32_t numberOfParams;
int32_t params[NUM_FLAPS];
int32_t params[NUM_MAX_AMOUNT_FLAPS];
}Shell_cmd_s;

Loading…
Cancel
Save