mirror of
https://github.com/opentx/opentx.git
synced 2025-07-21 07:15:12 +03:00
Minor changes to be able to wrap everything into a simulation tool inside companion9x
This commit is contained in:
parent
87dddbb773
commit
53d9ddfacd
10 changed files with 72 additions and 39 deletions
|
@ -730,9 +730,6 @@ endif
|
||||||
simu: $(CPPSRC) Makefile simu.cpp $(CPPSRC) simpgmspace.cpp *.h *.lbm eeprom.bin
|
simu: $(CPPSRC) Makefile simu.cpp $(CPPSRC) simpgmspace.cpp *.h *.lbm eeprom.bin
|
||||||
g++ simu.cpp $(CPPFLAGS) $(CPPSRC) simpgmspace.cpp $(ARCH) -MD -DSIMU -o simu $(FOXINC) $(FOXLIB)
|
g++ simu.cpp $(CPPFLAGS) $(CPPSRC) simpgmspace.cpp $(ARCH) -MD -DSIMU -o simu $(FOXINC) $(FOXLIB)
|
||||||
|
|
||||||
gruvin9x.so: $(CPPSRC) Makefile export.cpp $(CPPSRC) simpgmspace.cpp *.h *.lbm
|
|
||||||
g++ export.cpp $(CPPFLAGS) $(CPPSRC) simpgmspace.cpp $(ARCH) -g -MD -DSIMU -shared -fPIC -Wl,-soname,$@ -o $@
|
|
||||||
|
|
||||||
eeprom.bin:
|
eeprom.bin:
|
||||||
dd if=/dev/zero of=$@ bs=1 count=2048
|
dd if=/dev/zero of=$@ bs=1 count=2048
|
||||||
|
|
||||||
|
|
|
@ -185,8 +185,8 @@ bool EeFsOpen()
|
||||||
eeprom_read_block(&eeFs,0,sizeof(eeFs));
|
eeprom_read_block(&eeFs,0,sizeof(eeFs));
|
||||||
|
|
||||||
#ifdef SIMU
|
#ifdef SIMU
|
||||||
if(eeFs.version != EEFS_VERS) printf("bad eeFs.version\n");
|
if(eeFs.version != EEFS_VERS) perror("bad eeFs.version\n");
|
||||||
if(eeFs.mySize != sizeof(eeFs)) printf("bad eeFs.mySize\n");
|
if(eeFs.mySize != sizeof(eeFs)) perror("bad eeFs.mySize\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return eeFs.version == EEFS_VERS && eeFs.mySize == sizeof(eeFs);
|
return eeFs.version == EEFS_VERS && eeFs.mySize == sizeof(eeFs);
|
||||||
|
@ -429,7 +429,7 @@ bool RlcFile::copy(uint8_t i_fileDst, uint8_t i_fileSrc)
|
||||||
while ((len=theFile2.read(buf, 15)))
|
while ((len=theFile2.read(buf, 15)))
|
||||||
{
|
{
|
||||||
write(buf, len);
|
write(buf, len);
|
||||||
if (errno() != 0) {
|
if (write_errno() != 0) {
|
||||||
s_sync_write = false;
|
s_sync_write = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ extern uint8_t s_write_err; // error reasons
|
||||||
extern uint8_t s_sync_write;
|
extern uint8_t s_sync_write;
|
||||||
|
|
||||||
///deliver current errno, this is reset in open
|
///deliver current errno, this is reset in open
|
||||||
inline uint8_t errno() { return s_write_err; }
|
inline uint8_t write_errno() { return s_write_err; }
|
||||||
|
|
||||||
class RlcFile: public EFile
|
class RlcFile: public EFile
|
||||||
{
|
{
|
||||||
|
|
|
@ -59,6 +59,7 @@ MenuFuncP_PROGMEM APM menuTabDiag[] = {
|
||||||
void menuProcSetup(uint8_t event)
|
void menuProcSetup(uint8_t event)
|
||||||
{
|
{
|
||||||
#define COUNT_ITEMS 19
|
#define COUNT_ITEMS 19
|
||||||
|
#undef PARAM_OFS
|
||||||
#define PARAM_OFS 17*FW
|
#define PARAM_OFS 17*FW
|
||||||
|
|
||||||
SIMPLE_MENU("RADIO SETUP", menuTabDiag, e_Setup, COUNT_ITEMS+1);
|
SIMPLE_MENU("RADIO SETUP", menuTabDiag, e_Setup, COUNT_ITEMS+1);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "menus.h"
|
#include "menus.h"
|
||||||
|
|
||||||
|
#undef ALTERNATE
|
||||||
#define ALTERNATE 0x10
|
#define ALTERNATE 0x10
|
||||||
|
|
||||||
enum MainViews {
|
enum MainViews {
|
||||||
|
|
|
@ -382,6 +382,7 @@ void EditName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, boo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef PARAM_OFS
|
||||||
#define PARAM_OFS (9*FW+2)
|
#define PARAM_OFS (9*FW+2)
|
||||||
void menuProcModel(uint8_t event)
|
void menuProcModel(uint8_t event)
|
||||||
{
|
{
|
||||||
|
|
|
@ -284,7 +284,6 @@ void eeLoadModel(uint8_t id)
|
||||||
#ifdef SIMU
|
#ifdef SIMU
|
||||||
if (sz > 0 && sz != sizeof(g_model)) {
|
if (sz > 0 && sz != sizeof(g_model)) {
|
||||||
printf("Model data read=%d bytes vs %d bytes\n", sz, sizeof(ModelData));
|
printf("Model data read=%d bytes vs %d bytes\n", sz, sizeof(ModelData));
|
||||||
fflush(stdout);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,21 @@
|
||||||
|
|
||||||
volatile unsigned char pinb=0, pinc=0xff, pind, pine=0xff, ping=0xff, pinj=0xff, pinl=0;
|
volatile unsigned char pinb=0, pinc=0xff, pind, pine=0xff, ping=0xff, pinj=0xff, pinl=0;
|
||||||
unsigned char portb, dummyport;
|
unsigned char portb, dummyport;
|
||||||
const char *eepromFile = "eeprom.bin";
|
const char *eepromFile;
|
||||||
|
|
||||||
extern uint16_t eeprom_pointer;
|
extern uint16_t eeprom_pointer;
|
||||||
extern const char* eeprom_buffer_data;
|
extern const char* eeprom_buffer_data;
|
||||||
uint8_t eeprom[EESIZE];
|
uint8_t eeprom[EESIZE];
|
||||||
sem_t eeprom_write_sem;
|
sem_t eeprom_write_sem;
|
||||||
pthread_t eeprom_thread_pid = 0;
|
|
||||||
|
|
||||||
|
bool eeprom_thread_running = true;
|
||||||
void *eeprom_write_function(void *)
|
void *eeprom_write_function(void *)
|
||||||
{
|
{
|
||||||
while (!sem_wait(&eeprom_write_sem)) {
|
while (!sem_wait(&eeprom_write_sem)) {
|
||||||
|
|
||||||
|
if (!eeprom_thread_running)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
|
|
||||||
if (eepromFile) {
|
if (eepromFile) {
|
||||||
|
@ -72,19 +75,64 @@ void *eeprom_write_function(void *)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitEepromThread()
|
bool main_thread_running = true;
|
||||||
|
void *main_thread(void *)
|
||||||
{
|
{
|
||||||
|
g_menuStack[0] = menuMainView;
|
||||||
|
g_menuStack[1] = menuProcModelSelect;
|
||||||
|
|
||||||
|
eeReadAll(); //load general setup and selected model
|
||||||
|
doSplash();
|
||||||
|
checkLowEEPROM();
|
||||||
|
checkTHR();
|
||||||
|
checkSwitches();
|
||||||
|
checkAlarm();
|
||||||
|
|
||||||
|
while (main_thread_running) {
|
||||||
|
perMain();
|
||||||
|
usleep(1000);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_t main_thread_pid;
|
||||||
|
void StartMainThread()
|
||||||
|
{
|
||||||
|
main_thread_running = true;
|
||||||
|
pthread_create(&main_thread_pid, NULL, &main_thread, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StopMainThread()
|
||||||
|
{
|
||||||
|
main_thread_running = false;
|
||||||
|
pthread_join(main_thread_pid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_t eeprom_thread_pid;
|
||||||
|
void StartEepromThread(const char *filename)
|
||||||
|
{
|
||||||
|
eepromFile = filename;
|
||||||
sem_init(&eeprom_write_sem, 0, 0);
|
sem_init(&eeprom_write_sem, 0, 0);
|
||||||
|
eeprom_thread_running = true;
|
||||||
assert(!pthread_create(&eeprom_thread_pid, NULL, &eeprom_write_function, NULL));
|
assert(!pthread_create(&eeprom_thread_pid, NULL, &eeprom_write_function, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void StopEepromThread()
|
||||||
|
{
|
||||||
|
eeprom_thread_running = false;
|
||||||
|
sem_post(&eeprom_write_sem);
|
||||||
|
pthread_join(eeprom_thread_pid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void eeprom_read_block (void *pointer_ram,
|
void eeprom_read_block (void *pointer_ram,
|
||||||
const void *pointer_eeprom,
|
const void *pointer_eeprom,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
if (eepromFile) {
|
if (eepromFile) {
|
||||||
FILE *fp=fopen(eepromFile, "r");
|
FILE *fp=fopen(eepromFile, "r");
|
||||||
if(fseek(fp, (long) pointer_eeprom, SEEK_SET)==-1) perror("error in seek");
|
if (!fp) { perror("error in fopen"); return; }
|
||||||
|
if (fseek(fp, (long) pointer_eeprom, SEEK_SET)==-1) perror("error in seek");
|
||||||
if (fread(pointer_ram, size, 1, fp) <= 0) perror("error in read");
|
if (fread(pointer_ram, size, 1, fp) <= 0) perror("error in read");
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
|
|
||||||
|
#undef min
|
||||||
|
#undef max
|
||||||
|
|
||||||
#define APM
|
#define APM
|
||||||
|
|
||||||
typedef unsigned char prog_uchar;
|
typedef unsigned char prog_uchar;
|
||||||
|
@ -91,6 +94,12 @@ extern sem_t eeprom_write_sem;
|
||||||
#define SPIF dummyport
|
#define SPIF dummyport
|
||||||
#define SPCR dummyport
|
#define SPCR dummyport
|
||||||
|
|
||||||
|
#define TIMSK dummyport
|
||||||
|
#define TIMSK1 dummyport
|
||||||
|
|
||||||
|
#define UDR0 dummyport
|
||||||
|
#define OCIE1A dummyport
|
||||||
|
|
||||||
#define OUT_B_LIGHT 7
|
#define OUT_B_LIGHT 7
|
||||||
#define INP_E_ElevDR 2
|
#define INP_E_ElevDR 2
|
||||||
#define INP_E_Trainer 5
|
#define INP_E_Trainer 5
|
||||||
|
@ -118,7 +127,8 @@ extern sem_t eeprom_write_sem;
|
||||||
extern volatile unsigned char pinb,pinc,pind,pine,ping,pinj,pinl;
|
extern volatile unsigned char pinb,pinc,pind,pine,ping,pinj,pinl;
|
||||||
extern unsigned char portb,dummyport;
|
extern unsigned char portb,dummyport;
|
||||||
|
|
||||||
void InitEepromThread();
|
void StartMainThread();
|
||||||
|
void StartEepromThread(const char *filename="eeprom.bin");
|
||||||
|
|
||||||
extern const char *eepromFile;
|
extern const char *eepromFile;
|
||||||
void eeprom_read_block (void *pointer_ram,
|
void eeprom_read_block (void *pointer_ram,
|
||||||
|
|
28
src/simu.cpp
28
src/simu.cpp
|
@ -143,7 +143,6 @@ Gruvin9xSim::Gruvin9xSim(FXApp* a)
|
||||||
bmf = new FXBitmapFrame(this,bmp,0,0,0,0,0,0,0,0,0);
|
bmf = new FXBitmapFrame(this,bmp,0,0,0,0,0,0,0,0,0);
|
||||||
bmf->setOnColor(FXRGB(0,0,0));
|
bmf->setOnColor(FXRGB(0,0,0));
|
||||||
|
|
||||||
//getApp()->addChore(this,1);
|
|
||||||
getApp()->addTimeout(this,2,100);
|
getApp()->addTimeout(this,2,100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +186,6 @@ void Gruvin9xSim::makeSnapshot(const FXDrawable* drawable)
|
||||||
}
|
}
|
||||||
void Gruvin9xSim::doEvents()
|
void Gruvin9xSim::doEvents()
|
||||||
{
|
{
|
||||||
//getApp()->addChore(this,1);
|
|
||||||
getApp()->runOneEvent(false);
|
getApp()->runOneEvent(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,25 +353,6 @@ void Gruvin9xSim::refreshDiplay()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *main_thread(void *)
|
|
||||||
{
|
|
||||||
g_menuStack[0] = menuMainView;
|
|
||||||
g_menuStack[1] = menuProcModelSelect;
|
|
||||||
|
|
||||||
eeReadAll(); //load general setup and selected model
|
|
||||||
doSplash();
|
|
||||||
checkLowEEPROM();
|
|
||||||
checkTHR();
|
|
||||||
checkSwitches();
|
|
||||||
checkAlarm();
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
perMain();
|
|
||||||
usleep(1000);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Gruvin9xSim *th9xSim;
|
Gruvin9xSim *th9xSim;
|
||||||
void doFxEvents()
|
void doFxEvents()
|
||||||
{
|
{
|
||||||
|
@ -387,7 +366,6 @@ int main(int argc,char **argv)
|
||||||
if(argc>=2){
|
if(argc>=2){
|
||||||
eepromFile = argv[1];
|
eepromFile = argv[1];
|
||||||
}
|
}
|
||||||
printf("eeprom = %s\n", eepromFile);
|
|
||||||
|
|
||||||
// Each FOX GUI program needs one, and only one, application object.
|
// Each FOX GUI program needs one, and only one, application object.
|
||||||
// The application objects coordinates some common stuff shared between
|
// The application objects coordinates some common stuff shared between
|
||||||
|
@ -421,10 +399,8 @@ int main(int argc,char **argv)
|
||||||
th9xSim->show(); // Otherwise the main window gets centred across my two monitors, split down the middle.
|
th9xSim->show(); // Otherwise the main window gets centred across my two monitors, split down the middle.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
InitEepromThread();
|
StartEepromThread();
|
||||||
|
StartMainThread();
|
||||||
pthread_t pid;
|
|
||||||
pthread_create(&pid, NULL, &main_thread, NULL);
|
|
||||||
|
|
||||||
return application.run();
|
return application.run();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue